From 699bf09577255522c72fa7512542a6b7b842a958 Mon Sep 17 00:00:00 2001 From: Harvey Zhao Date: Sat, 7 Mar 2026 13:46:44 +0800 Subject: [PATCH] feat: update changelog with Parcel to Vite refactor feat: add danmuku plugin documentation and i18n setup guide - Created a new documentation file for the danmuku plugin with code examples. - Added a comprehensive guide for language settings (i18n) including default languages, importing languages, adding new languages, and modifying existing languages. - Included code snippets for initializing the Artplayer with different language settings. Add internationalization support for multiple languages in Artplayer - Introduced Arabic (ar), Czech (cs), Spanish (es), Persian (fa), French (fr), Indonesian (id), Polish (pl), Russian (ru), Turkish (tr), Vietnamese (vi), and Traditional Chinese (zh-tw) translations. - Created corresponding JavaScript and ES module files for each language containing translated strings for player controls and settings. - Added a new documentation file for language settings in the project. feat: add initial implementation of start option page with interactive code execution buttons feat: add danmuku plugin documentation and i18n setup guide - Created a new documentation file for the danmuku plugin, providing code examples for usage. - Added a comprehensive guide for language settings, including default languages, importing languages, adding new languages, and modifying existing languages. - Included code snippets for initializing the Artplayer with different language settings and importing language files. refactor: update danmuku worker implementation and remove unused i18n files - Changed the way the Danmuku class creates a Web Worker by using a worker loader instead of creating a blob. - Removed Arabic, Czech, Spanish, Persian, French, Indonesian, Polish, Russian, Turkish, Vietnamese, and Traditional Chinese i18n files as they are no longer needed. - Updated the Vite build configuration to disable banners for inline workers and added a plugin to remove worker banners from generated code. feat: add danmuku plugin and i18n setup documentation - Created a new documentation file for the danmuku plugin, providing code examples for usage. - Added a new documentation file for language settings (i18n), detailing how to set default languages, import languages, and add new languages. - Included code snippets for initializing the Artplayer with different language settings and examples for modifying existing languages. feat: add danmuku plugin and i18n setup documentation - Created a new documentation file for the danmuku plugin with code examples. - Added a new documentation file for language settings (i18n) including import instructions and examples for setting default and custom languages. - Updated the i18n documentation to include details on adding and modifying languages. feat: add danmuku plugin and i18n setup documentation - Created a new JavaScript file for the danmuku plugin documentation with multiple code execution buttons. - Added a new JavaScript file for i18n (internationalization) setup documentation, including instructions for language settings, importing languages, and modifying language options. - Included examples for setting default languages and adding new languages in the i18n documentation. Refactor code structure for improved readability and maintainability --- CHANGELOG.md | 2 + docs/compiled/artplayer-plugin-ads.js | 5 +- docs/compiled/artplayer-plugin-ads.legacy.js | 5 +- docs/compiled/artplayer-plugin-ads.mjs | 252 +- docs/compiled/artplayer-plugin-ambilight.js | 5 +- .../artplayer-plugin-ambilight.legacy.js | 5 +- docs/compiled/artplayer-plugin-ambilight.mjs | 105 +- docs/compiled/artplayer-plugin-asr.js | 5 +- docs/compiled/artplayer-plugin-asr.legacy.js | 5 +- docs/compiled/artplayer-plugin-asr.mjs | 253 +- docs/compiled/artplayer-plugin-audio-track.js | 5 +- .../artplayer-plugin-audio-track.legacy.js | 5 +- .../compiled/artplayer-plugin-audio-track.mjs | 93 +- .../artplayer-plugin-auto-thumbnail.js | 5 +- .../artplayer-plugin-auto-thumbnail.legacy.js | 5 +- .../artplayer-plugin-auto-thumbnail.mjs | 64 +- docs/compiled/artplayer-plugin-chapter.js | 5 +- .../artplayer-plugin-chapter.legacy.js | 5 +- docs/compiled/artplayer-plugin-chapter.mjs | 160 +- docs/compiled/artplayer-plugin-chromecast.js | 5 +- .../artplayer-plugin-chromecast.legacy.js | 5 +- docs/compiled/artplayer-plugin-chromecast.mjs | 177 +- .../compiled/artplayer-plugin-danmuku-mask.js | 5 +- .../artplayer-plugin-danmuku-mask.legacy.js | 5 +- .../artplayer-plugin-danmuku-mask.mjs | 62868 +++++++++++++++- docs/compiled/artplayer-plugin-danmuku.js | 5 +- .../artplayer-plugin-danmuku.legacy.js | 5 +- docs/compiled/artplayer-plugin-danmuku.mjs | 1568 +- .../compiled/artplayer-plugin-dash-control.js | 5 +- .../artplayer-plugin-dash-control.legacy.js | 5 +- .../artplayer-plugin-dash-control.mjs | 168 +- .../compiled/artplayer-plugin-document-pip.js | 5 +- .../artplayer-plugin-document-pip.legacy.js | 5 +- .../artplayer-plugin-document-pip.mjs | 195 +- docs/compiled/artplayer-plugin-hls-control.js | 5 +- .../artplayer-plugin-hls-control.legacy.js | 5 +- .../compiled/artplayer-plugin-hls-control.mjs | 144 +- docs/compiled/artplayer-plugin-iframe.js | 5 +- .../artplayer-plugin-iframe.legacy.js | 5 +- docs/compiled/artplayer-plugin-iframe.mjs | 138 +- docs/compiled/artplayer-plugin-jassub.js | 5 +- .../artplayer-plugin-jassub.legacy.js | 5 +- docs/compiled/artplayer-plugin-jassub.mjs | 579 +- .../artplayer-plugin-multiple-subtitles.js | 5 +- ...player-plugin-multiple-subtitles.legacy.js | 5 +- .../artplayer-plugin-multiple-subtitles.mjs | 835 +- docs/compiled/artplayer-plugin-vast.js | 5 +- docs/compiled/artplayer-plugin-vast.legacy.js | 5 +- docs/compiled/artplayer-plugin-vast.mjs | 553 +- .../artplayer-plugin-vtt-thumbnail.js | 5 +- .../artplayer-plugin-vtt-thumbnail.legacy.js | 5 +- .../artplayer-plugin-vtt-thumbnail.mjs | 125 +- docs/compiled/artplayer-plugin-websr.js | 5 +- .../compiled/artplayer-plugin-websr.legacy.js | 5 +- docs/compiled/artplayer-plugin-websr.mjs | 725 +- docs/compiled/artplayer-proxy-canvas.js | 5 +- .../compiled/artplayer-proxy-canvas.legacy.js | 5 +- docs/compiled/artplayer-proxy-canvas.mjs | 125 +- docs/compiled/artplayer-proxy-mediabunny.js | 219 +- .../artplayer-proxy-mediabunny.legacy.js | 219 +- docs/compiled/artplayer-proxy-mediabunny.mjs | 15609 +++- docs/compiled/artplayer-tool-thumbnail.js | 3 +- .../artplayer-tool-thumbnail.legacy.js | 3 +- docs/compiled/artplayer-tool-thumbnail.mjs | 261 +- docs/compiled/artplayer.js | 5 +- docs/compiled/artplayer.legacy.js | 5 +- docs/compiled/artplayer.mjs | 5011 +- docs/compiled/i18n/ar.js | 2 +- docs/compiled/i18n/ar.mjs | 43 +- docs/compiled/i18n/cs.js | 2 +- docs/compiled/i18n/cs.mjs | 43 +- docs/compiled/i18n/es.js | 2 +- docs/compiled/i18n/es.mjs | 43 +- docs/compiled/i18n/fa.js | 2 +- docs/compiled/i18n/fa.mjs | 43 +- docs/compiled/i18n/fr.js | 2 +- docs/compiled/i18n/fr.mjs | 43 +- docs/compiled/i18n/id.js | 2 +- docs/compiled/i18n/id.mjs | 43 +- .../i18n/packages/artplayer/dist/i18n/ar.js | 1 + .../i18n/packages/artplayer/dist/i18n/ar.mjs | 42 + .../i18n/packages/artplayer/dist/i18n/cs.js | 1 + .../i18n/packages/artplayer/dist/i18n/cs.mjs | 42 + .../i18n/packages/artplayer/dist/i18n/es.js | 1 + .../i18n/packages/artplayer/dist/i18n/es.mjs | 42 + .../i18n/packages/artplayer/dist/i18n/fa.js | 1 + .../i18n/packages/artplayer/dist/i18n/fa.mjs | 42 + .../i18n/packages/artplayer/dist/i18n/fr.js | 1 + .../i18n/packages/artplayer/dist/i18n/fr.mjs | 42 + .../i18n/packages/artplayer/dist/i18n/id.js | 1 + .../i18n/packages/artplayer/dist/i18n/id.mjs | 42 + .../i18n/packages/artplayer/dist/i18n/pl.js | 1 + .../i18n/packages/artplayer/dist/i18n/pl.mjs | 42 + .../i18n/packages/artplayer/dist/i18n/ru.js | 1 + .../i18n/packages/artplayer/dist/i18n/ru.mjs | 42 + .../i18n/packages/artplayer/dist/i18n/tr.js | 1 + .../i18n/packages/artplayer/dist/i18n/tr.mjs | 42 + .../i18n/packages/artplayer/dist/i18n/vi.js | 1 + .../i18n/packages/artplayer/dist/i18n/vi.mjs | 42 + .../packages/artplayer/dist/i18n/zh-tw.js | 1 + .../packages/artplayer/dist/i18n/zh-tw.mjs | 42 + docs/compiled/i18n/pl.js | 2 +- docs/compiled/i18n/pl.mjs | 43 +- docs/compiled/i18n/ru.js | 2 +- docs/compiled/i18n/ru.mjs | 43 +- docs/compiled/i18n/tr.js | 2 +- docs/compiled/i18n/tr.mjs | 43 +- docs/compiled/i18n/vi.js | 2 +- docs/compiled/i18n/vi.mjs | 43 +- docs/compiled/i18n/zh-tw.js | 2 +- docs/compiled/i18n/zh-tw.mjs | 43 +- .../dist/artplayer-plugin-ads.js | 7 + .../dist/artplayer-plugin-ads.legacy.js | 7 + .../dist/artplayer-plugin-ads.mjs | 7 + .../dist/artplayer-plugin-ambilight.js | 7 + .../dist/artplayer-plugin-ambilight.legacy.js | 7 + .../dist/artplayer-plugin-ambilight.mjs | 7 + .../dist/artplayer-plugin-asr.js | 7 + .../dist/artplayer-plugin-asr.legacy.js | 7 + .../dist/artplayer-plugin-asr.mjs | 7 + .../dist/artplayer-plugin-audio-track.js | 7 + .../artplayer-plugin-audio-track.legacy.js | 7 + .../dist/artplayer-plugin-audio-track.mjs | 7 + .../dist/artplayer-plugin-auto-thumbnail.js | 7 + .../artplayer-plugin-auto-thumbnail.legacy.js | 7 + .../dist/artplayer-plugin-auto-thumbnail.mjs | 7 + .../dist/artplayer-plugin-chapter.js | 7 + .../dist/artplayer-plugin-chapter.legacy.js | 7 + .../dist/artplayer-plugin-chapter.mjs | 7 + .../dist/artplayer-plugin-chromecast.js | 7 + .../artplayer-plugin-chromecast.legacy.js | 7 + .../dist/artplayer-plugin-chromecast.mjs | 7 + .../dist/artplayer-plugin-danmuku-mask.js | 7 + .../artplayer-plugin-danmuku-mask.legacy.js | 7 + .../dist/artplayer-plugin-danmuku-mask.mjs | 7 + .../dist/artplayer-plugin-danmuku.js | 7 + .../dist/artplayer-plugin-danmuku.legacy.js | 7 + .../dist/artplayer-plugin-danmuku.mjs | 7 + .../dist/artplayer-plugin-dash-control.js | 7 + .../artplayer-plugin-dash-control.legacy.js | 7 + .../dist/artplayer-plugin-dash-control.mjs | 7 + .../dist/artplayer-plugin-document-pip.js | 7 + .../artplayer-plugin-document-pip.legacy.js | 7 + .../dist/artplayer-plugin-document-pip.mjs | 7 + .../dist/artplayer-plugin-hls-control.js | 7 + .../artplayer-plugin-hls-control.legacy.js | 7 + .../dist/artplayer-plugin-hls-control.mjs | 7 + .../dist/artplayer-plugin-iframe.js | 7 + .../dist/artplayer-plugin-iframe.legacy.js | 7 + .../dist/artplayer-plugin-iframe.mjs | 7 + .../dist/artplayer-plugin-jassub.js | 7 + .../dist/artplayer-plugin-jassub.legacy.js | 7 + .../dist/artplayer-plugin-jassub.mjs | 7 + .../artplayer-plugin-multiple-subtitles.js | 7 + ...player-plugin-multiple-subtitles.legacy.js | 7 + .../artplayer-plugin-multiple-subtitles.mjs | 7 + .../dist/artplayer-plugin-vast.js | 7 + .../dist/artplayer-plugin-vast.legacy.js | 7 + .../dist/artplayer-plugin-vast.mjs | 7 + .../dist/artplayer-plugin-vtt-thumbnail.js | 7 + .../artplayer-plugin-vtt-thumbnail.legacy.js | 7 + .../dist/artplayer-plugin-vtt-thumbnail.mjs | 7 + .../dist/artplayer-plugin-websr.js | 7 + .../dist/artplayer-plugin-websr.legacy.js | 7 + .../dist/artplayer-plugin-websr.mjs | 7 + .../dist/artplayer-proxy-canvas.js | 7 + .../dist/artplayer-proxy-canvas.legacy.js | 7 + .../dist/artplayer-proxy-canvas.mjs | 7 + .../dist/artplayer-proxy-mediabunny.js | 7 + .../dist/artplayer-proxy-mediabunny.legacy.js | 7 + .../dist/artplayer-proxy-mediabunny.mjs | 7 + .../dist/artplayer-tool-thumbnail.js | 7 + .../dist/artplayer-tool-thumbnail.legacy.js | 7 + .../dist/artplayer-tool-thumbnail.mjs | 7 + .../packages/artplayer/dist/artplayer.js | 7 + .../artplayer/dist/artplayer.legacy.js | 7 + .../packages/artplayer/dist/artplayer.mjs | 7 + docs/document/404.html | 4 +- docs/document/advanced/built-in.html | 8 +- docs/document/advanced/class.html | 8 +- docs/document/advanced/event.html | 8 +- docs/document/advanced/global.html | 8 +- docs/document/advanced/plugin.html | 8 +- docs/document/advanced/property.html | 8 +- ...8l.js => advanced_built-in.md.DiyRIcIA.js} | 2 +- ... => advanced_built-in.md.DiyRIcIA.lean.js} | 2 +- ...Wp7q6.js => advanced_class.md.Da3aE0pP.js} | 2 +- ....js => advanced_class.md.Da3aE0pP.lean.js} | 2 +- ...gqIU9.js => advanced_event.md.mrsB0MsK.js} | 2 +- ....js => advanced_event.md.mrsB0MsK.lean.js} | 2 +- ...cykV.js => advanced_global.md.Bdw3azKs.js} | 2 +- ...js => advanced_global.md.Bdw3azKs.lean.js} | 2 +- ...Oe2x.js => advanced_plugin.md.B3Pobmcq.js} | 2 +- ...js => advanced_plugin.md.B3Pobmcq.lean.js} | 2 +- ...iE.js => advanced_property.md.CA7GaeI3.js} | 2 +- ... => advanced_property.md.CA7GaeI3.lean.js} | 2 +- .../{app.D4qzugdM.js => app.BhL53TUc.js} | 2 +- .../{theme.DwvAHEyX.js => theme.C-3sZAdL.js} | 2 +- ...SPI.js => virtual_search-data.LxkiP9ls.js} | 922 +- ...s => component_contextmenu.md.ClKmcIKr.js} | 2 +- ...component_contextmenu.md.ClKmcIKr.lean.js} | 2 +- ...Z.js => component_controls.md.Cl62yW1F.js} | 2 +- ...=> component_controls.md.Cl62yW1F.lean.js} | 2 +- ...OkH.js => component_layers.md.Cys52VMi.js} | 2 +- ...s => component_layers.md.Cys52VMi.lean.js} | 2 +- ...NU.js => component_setting.md.BP5674ir.js} | 2 +- ... => component_setting.md.BP5674ir.lean.js} | 2 +- ...js => en_advanced_built-in.md.XdT81JC0.js} | 2 +- ... en_advanced_built-in.md.XdT81JC0.lean.js} | 2 +- ...Dl.js => en_advanced_class.md.BLyA7rxa.js} | 2 +- ... => en_advanced_class.md.BLyA7rxa.lean.js} | 2 +- ...FO.js => en_advanced_event.md.CtQl1IYg.js} | 2 +- ... => en_advanced_event.md.CtQl1IYg.lean.js} | 2 +- ...d.js => en_advanced_global.md.D5Nz8wyo.js} | 2 +- ...=> en_advanced_global.md.D5Nz8wyo.lean.js} | 2 +- ...S.js => en_advanced_plugin.md.BOuMu80J.js} | 2 +- ...=> en_advanced_plugin.md.BOuMu80J.lean.js} | 2 +- ...js => en_advanced_property.md.urRMaqHe.js} | 2 +- ... en_advanced_property.md.urRMaqHe.lean.js} | 2 +- ...> en_component_contextmenu.md.COLfX45a.js} | 2 +- ...component_contextmenu.md.COLfX45a.lean.js} | 2 +- ...s => en_component_controls.md.BbQsn0wJ.js} | 2 +- ...en_component_controls.md.BbQsn0wJ.lean.js} | 2 +- ....js => en_component_layers.md.CX93a7QS.js} | 2 +- ...> en_component_layers.md.CX93a7QS.lean.js} | 2 +- ...js => en_component_setting.md.C6o2AWtX.js} | 2 +- ... en_component_setting.md.C6o2AWtX.lean.js} | 2 +- ...md.DrOcPBwp.js => en_index.md.Adx_P8Ii.js} | 10 +- ...p.lean.js => en_index.md.Adx_P8Ii.lean.js} | 2 +- ...xrpMQL.js => en_start_i18n.md.lFdcbEk9.js} | 4 +- ...n.js => en_start_i18n.md.lFdcbEk9.lean.js} | 2 +- ...IYWk.js => en_start_option.md.Bk4YXvof.js} | 2 +- ...js => en_start_option.md.Bk4YXvof.lean.js} | 2 +- ...ex.md.WcEL7IA5.js => index.md.Bkwg5S8z.js} | 10 +- ...7IA5.lean.js => index.md.Bkwg5S8z.lean.js} | 2 +- ...0Az0s.js => plugin_danmuku.md.DSrWXJHB.js} | 2 +- ....js => plugin_danmuku.md.DSrWXJHB.lean.js} | 2 +- ....C6dAnYSp.js => start_i18n.md.D3eO9wL_.js} | 4 +- ...lean.js => start_i18n.md.D3eO9wL_.lean.js} | 2 +- ...RwrMHeQ.js => start_option.md.D52S8Ynf.js} | 2 +- ...an.js => start_option.md.D52S8Ynf.lean.js} | 2 +- docs/document/component/contextmenu.html | 8 +- docs/document/component/controls.html | 8 +- docs/document/component/layers.html | 8 +- docs/document/component/setting.html | 8 +- docs/document/en/advanced/built-in.html | 8 +- docs/document/en/advanced/class.html | 8 +- docs/document/en/advanced/event.html | 8 +- docs/document/en/advanced/global.html | 8 +- docs/document/en/advanced/plugin.html | 8 +- docs/document/en/advanced/property.html | 8 +- docs/document/en/component/contextmenu.html | 8 +- docs/document/en/component/controls.html | 8 +- docs/document/en/component/layers.html | 8 +- docs/document/en/component/setting.html | 8 +- docs/document/en/index.html | 18 +- docs/document/en/start/i18n.html | 10 +- docs/document/en/start/option.html | 8 +- docs/document/hashmap.json | 2 +- docs/document/index.html | 18 +- docs/document/plugin/danmuku.html | 10 +- docs/document/start/i18n.html | 10 +- docs/document/start/option.html | 8 +- .../artplayer-plugin-danmuku/index.js | 2935 +- .../artplayer-plugin-danmuku/index.js.map | 1 - docs/uncompiled/artplayer/index.js | 9555 ++- docs/uncompiled/artplayer/index.js.map | 1 - package.json | 16 +- .../dist/artplayer-plugin-ads.js | 5 +- .../dist/artplayer-plugin-ads.legacy.js | 5 +- .../dist/artplayer-plugin-ads.mjs | 5 +- packages/artplayer-plugin-ads/package.json | 2 +- packages/artplayer-plugin-ads/src/index.js | 2 +- .../dist/artplayer-plugin-ambilight.js | 5 +- .../dist/artplayer-plugin-ambilight.legacy.js | 5 +- .../dist/artplayer-plugin-ambilight.mjs | 5 +- .../artplayer-plugin-ambilight/package.json | 2 +- .../dist/artplayer-plugin-asr.js | 5 +- .../dist/artplayer-plugin-asr.legacy.js | 5 +- .../dist/artplayer-plugin-asr.mjs | 5 +- packages/artplayer-plugin-asr/package.json | 2 +- packages/artplayer-plugin-asr/src/index.js | 2 +- .../dist/artplayer-plugin-audio-track.js | 5 +- .../artplayer-plugin-audio-track.legacy.js | 5 +- .../dist/artplayer-plugin-audio-track.mjs | 5 +- .../artplayer-plugin-audio-track/package.json | 3 +- .../dist/artplayer-plugin-auto-thumbnail.js | 5 +- .../artplayer-plugin-auto-thumbnail.legacy.js | 5 +- .../dist/artplayer-plugin-auto-thumbnail.mjs | 5 +- .../package.json | 2 +- .../dist/artplayer-plugin-chapter.js | 5 +- .../dist/artplayer-plugin-chapter.legacy.js | 5 +- .../dist/artplayer-plugin-chapter.mjs | 5 +- .../artplayer-plugin-chapter/package.json | 2 +- .../artplayer-plugin-chapter/src/index.js | 2 +- .../dist/artplayer-plugin-chromecast.js | 5 +- .../artplayer-plugin-chromecast.legacy.js | 5 +- .../dist/artplayer-plugin-chromecast.mjs | 5 +- .../artplayer-plugin-chromecast/package.json | 2 +- .../dist/artplayer-plugin-danmuku-mask.js | 5 +- .../artplayer-plugin-danmuku-mask.legacy.js | 5 +- .../dist/artplayer-plugin-danmuku-mask.mjs | 5 +- .../package.json | 2 +- .../dist/artplayer-plugin-danmuku.js | 5 +- .../dist/artplayer-plugin-danmuku.legacy.js | 5 +- .../dist/artplayer-plugin-danmuku.mjs | 5 +- .../artplayer-plugin-danmuku/package.json | 2 +- .../artplayer-plugin-danmuku/src/danmuku.js | 6 +- .../artplayer-plugin-danmuku/src/setting.js | 26 +- .../dist/artplayer-plugin-dash-control.js | 5 +- .../artplayer-plugin-dash-control.legacy.js | 5 +- .../dist/artplayer-plugin-dash-control.mjs | 5 +- .../package.json | 2 +- .../src/index.js | 4 +- .../dist/artplayer-plugin-document-pip.js | 5 +- .../artplayer-plugin-document-pip.legacy.js | 5 +- .../dist/artplayer-plugin-document-pip.mjs | 5 +- .../package.json | 2 +- .../src/index.js | 2 +- .../dist/artplayer-plugin-hls-control.js | 5 +- .../artplayer-plugin-hls-control.legacy.js | 5 +- .../dist/artplayer-plugin-hls-control.mjs | 5 +- .../artplayer-plugin-hls-control/package.json | 2 +- .../artplayer-plugin-hls-control/src/index.js | 4 +- .../dist/artplayer-plugin-iframe.js | 5 +- .../dist/artplayer-plugin-iframe.legacy.js | 5 +- .../dist/artplayer-plugin-iframe.mjs | 5 +- packages/artplayer-plugin-iframe/package.json | 2 +- .../dist/artplayer-plugin-jassub.js | 5 +- .../dist/artplayer-plugin-jassub.legacy.js | 5 +- .../dist/artplayer-plugin-jassub.mjs | 5 +- packages/artplayer-plugin-jassub/package.json | 3 +- .../artplayer-plugin-multiple-subtitles.js | 5 +- ...player-plugin-multiple-subtitles.legacy.js | 5 +- .../artplayer-plugin-multiple-subtitles.mjs | 5 +- .../package.json | 2 +- .../src/parser.js | 13 +- .../dist/artplayer-plugin-vast.js | 5 +- .../dist/artplayer-plugin-vast.legacy.js | 5 +- .../dist/artplayer-plugin-vast.mjs | 5 +- packages/artplayer-plugin-vast/package.json | 2 +- .../dist/artplayer-plugin-vtt-thumbnail.js | 5 +- .../artplayer-plugin-vtt-thumbnail.legacy.js | 5 +- .../dist/artplayer-plugin-vtt-thumbnail.mjs | 5 +- .../package.json | 2 +- .../dist/artplayer-plugin-websr.js | 5 +- .../dist/artplayer-plugin-websr.legacy.js | 5 +- .../dist/artplayer-plugin-websr.mjs | 5 +- packages/artplayer-plugin-websr/package.json | 2 +- .../artplayer-plugin-websr/src/Upscaler.js | 589 +- packages/artplayer-plugin-websr/src/index.js | 445 +- .../types/artplayer-plugin-websr.d.ts | 20 +- .../dist/artplayer-proxy-canvas.js | 5 +- .../dist/artplayer-proxy-canvas.legacy.js | 5 +- .../dist/artplayer-proxy-canvas.mjs | 5 +- packages/artplayer-proxy-canvas/package.json | 2 +- .../dist/artplayer-proxy-mediabunny.js | 5 +- .../dist/artplayer-proxy-mediabunny.legacy.js | 5 +- .../dist/artplayer-proxy-mediabunny.mjs | 5 +- .../artplayer-proxy-mediabunny/package.json | 2 +- .../dist/artplayer-tool-thumbnail.js | 3 +- .../dist/artplayer-tool-thumbnail.legacy.js | 3 +- .../dist/artplayer-tool-thumbnail.mjs | 3 +- packages/artplayer/dist/artplayer.js | 5 +- packages/artplayer/dist/artplayer.legacy.js | 5 +- packages/artplayer/dist/artplayer.mjs | 5 +- packages/artplayer/dist/i18n/ar.js | 2 +- packages/artplayer/dist/i18n/ar.mjs | 43 +- packages/artplayer/dist/i18n/cs.js | 2 +- packages/artplayer/dist/i18n/cs.mjs | 43 +- packages/artplayer/dist/i18n/es.js | 2 +- packages/artplayer/dist/i18n/es.mjs | 43 +- packages/artplayer/dist/i18n/fa.js | 2 +- packages/artplayer/dist/i18n/fa.mjs | 43 +- packages/artplayer/dist/i18n/fr.js | 2 +- packages/artplayer/dist/i18n/fr.mjs | 43 +- packages/artplayer/dist/i18n/id.js | 2 +- packages/artplayer/dist/i18n/id.mjs | 43 +- packages/artplayer/dist/i18n/pl.js | 2 +- packages/artplayer/dist/i18n/pl.mjs | 43 +- packages/artplayer/dist/i18n/ru.js | 2 +- packages/artplayer/dist/i18n/ru.mjs | 43 +- packages/artplayer/dist/i18n/tr.js | 2 +- packages/artplayer/dist/i18n/tr.mjs | 43 +- packages/artplayer/dist/i18n/vi.js | 2 +- packages/artplayer/dist/i18n/vi.mjs | 43 +- packages/artplayer/dist/i18n/zh-tw.js | 2 +- packages/artplayer/dist/i18n/zh-tw.mjs | 43 +- packages/artplayer/package.json | 2 +- packages/artplayer/src/contextmenu/version.js | 14 +- packages/artplayer/src/icons/index.js | 54 +- packages/artplayer/src/index.js | 2 +- scripts/build-i18n.js | 68 +- scripts/build.js | 191 +- scripts/dev.js | 105 +- scripts/plugin/template/src/index.js | 2 +- scripts/utils.js | 106 +- 397 files changed, 99776 insertions(+), 8638 deletions(-) create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/ar.js create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/ar.mjs create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/cs.js create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/cs.mjs create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/es.js create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/es.mjs create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/fa.js create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/fa.mjs create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/fr.js create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/fr.mjs create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/id.js create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/id.mjs create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/pl.js create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/pl.mjs create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/ru.js create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/ru.mjs create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/tr.js create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/tr.mjs create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/vi.js create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/vi.mjs create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/zh-tw.js create mode 100644 docs/compiled/i18n/packages/artplayer/dist/i18n/zh-tw.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-ads/dist/artplayer-plugin-ads.js create mode 100644 docs/compiled/packages/artplayer-plugin-ads/dist/artplayer-plugin-ads.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-ads/dist/artplayer-plugin-ads.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-ambilight/dist/artplayer-plugin-ambilight.js create mode 100644 docs/compiled/packages/artplayer-plugin-ambilight/dist/artplayer-plugin-ambilight.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-ambilight/dist/artplayer-plugin-ambilight.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-asr/dist/artplayer-plugin-asr.js create mode 100644 docs/compiled/packages/artplayer-plugin-asr/dist/artplayer-plugin-asr.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-asr/dist/artplayer-plugin-asr.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.js create mode 100644 docs/compiled/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-audio-track/dist/artplayer-plugin-audio-track.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-auto-thumbnail/dist/artplayer-plugin-auto-thumbnail.js create mode 100644 docs/compiled/packages/artplayer-plugin-auto-thumbnail/dist/artplayer-plugin-auto-thumbnail.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-auto-thumbnail/dist/artplayer-plugin-auto-thumbnail.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-chapter/dist/artplayer-plugin-chapter.js create mode 100644 docs/compiled/packages/artplayer-plugin-chapter/dist/artplayer-plugin-chapter.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-chapter/dist/artplayer-plugin-chapter.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-chromecast/dist/artplayer-plugin-chromecast.js create mode 100644 docs/compiled/packages/artplayer-plugin-chromecast/dist/artplayer-plugin-chromecast.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-chromecast/dist/artplayer-plugin-chromecast.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-danmuku-mask/dist/artplayer-plugin-danmuku-mask.js create mode 100644 docs/compiled/packages/artplayer-plugin-danmuku-mask/dist/artplayer-plugin-danmuku-mask.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-danmuku-mask/dist/artplayer-plugin-danmuku-mask.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.js create mode 100644 docs/compiled/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-dash-control/dist/artplayer-plugin-dash-control.js create mode 100644 docs/compiled/packages/artplayer-plugin-dash-control/dist/artplayer-plugin-dash-control.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-dash-control/dist/artplayer-plugin-dash-control.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-document-pip/dist/artplayer-plugin-document-pip.js create mode 100644 docs/compiled/packages/artplayer-plugin-document-pip/dist/artplayer-plugin-document-pip.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-document-pip/dist/artplayer-plugin-document-pip.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-hls-control/dist/artplayer-plugin-hls-control.js create mode 100644 docs/compiled/packages/artplayer-plugin-hls-control/dist/artplayer-plugin-hls-control.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-hls-control/dist/artplayer-plugin-hls-control.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-iframe/dist/artplayer-plugin-iframe.js create mode 100644 docs/compiled/packages/artplayer-plugin-iframe/dist/artplayer-plugin-iframe.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-iframe/dist/artplayer-plugin-iframe.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.js create mode 100644 docs/compiled/packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-jassub/dist/artplayer-plugin-jassub.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-multiple-subtitles/dist/artplayer-plugin-multiple-subtitles.js create mode 100644 docs/compiled/packages/artplayer-plugin-multiple-subtitles/dist/artplayer-plugin-multiple-subtitles.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-multiple-subtitles/dist/artplayer-plugin-multiple-subtitles.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-vast/dist/artplayer-plugin-vast.js create mode 100644 docs/compiled/packages/artplayer-plugin-vast/dist/artplayer-plugin-vast.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-vast/dist/artplayer-plugin-vast.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-vtt-thumbnail/dist/artplayer-plugin-vtt-thumbnail.js create mode 100644 docs/compiled/packages/artplayer-plugin-vtt-thumbnail/dist/artplayer-plugin-vtt-thumbnail.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-vtt-thumbnail/dist/artplayer-plugin-vtt-thumbnail.mjs create mode 100644 docs/compiled/packages/artplayer-plugin-websr/dist/artplayer-plugin-websr.js create mode 100644 docs/compiled/packages/artplayer-plugin-websr/dist/artplayer-plugin-websr.legacy.js create mode 100644 docs/compiled/packages/artplayer-plugin-websr/dist/artplayer-plugin-websr.mjs create mode 100644 docs/compiled/packages/artplayer-proxy-canvas/dist/artplayer-proxy-canvas.js create mode 100644 docs/compiled/packages/artplayer-proxy-canvas/dist/artplayer-proxy-canvas.legacy.js create mode 100644 docs/compiled/packages/artplayer-proxy-canvas/dist/artplayer-proxy-canvas.mjs create mode 100644 docs/compiled/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.js create mode 100644 docs/compiled/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.legacy.js create mode 100644 docs/compiled/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.mjs create mode 100644 docs/compiled/packages/artplayer-tool-thumbnail/dist/artplayer-tool-thumbnail.js create mode 100644 docs/compiled/packages/artplayer-tool-thumbnail/dist/artplayer-tool-thumbnail.legacy.js create mode 100644 docs/compiled/packages/artplayer-tool-thumbnail/dist/artplayer-tool-thumbnail.mjs create mode 100644 docs/compiled/packages/artplayer/dist/artplayer.js create mode 100644 docs/compiled/packages/artplayer/dist/artplayer.legacy.js create mode 100644 docs/compiled/packages/artplayer/dist/artplayer.mjs rename docs/document/assets/{advanced_built-in.md.DbXkhR8l.js => advanced_built-in.md.DiyRIcIA.js} (99%) rename docs/document/assets/{advanced_built-in.md.DbXkhR8l.lean.js => advanced_built-in.md.DiyRIcIA.lean.js} (91%) rename docs/document/assets/{advanced_class.md.BE9Wp7q6.js => advanced_class.md.Da3aE0pP.js} (99%) rename docs/document/assets/{advanced_class.md.BE9Wp7q6.lean.js => advanced_class.md.Da3aE0pP.lean.js} (88%) rename docs/document/assets/{advanced_event.md.DoIgqIU9.js => advanced_event.md.mrsB0MsK.js} (99%) rename docs/document/assets/{advanced_event.md.DoIgqIU9.lean.js => advanced_event.md.mrsB0MsK.lean.js} (96%) rename docs/document/assets/{advanced_global.md.Db4VcykV.js => advanced_global.md.Bdw3azKs.js} (99%) rename docs/document/assets/{advanced_global.md.Db4VcykV.lean.js => advanced_global.md.Bdw3azKs.lean.js} (94%) rename docs/document/assets/{advanced_plugin.md.CVp3Oe2x.js => advanced_plugin.md.B3Pobmcq.js} (99%) rename docs/document/assets/{advanced_plugin.md.CVp3Oe2x.lean.js => advanced_plugin.md.B3Pobmcq.lean.js} (87%) rename docs/document/assets/{advanced_property.md.C_nOKniE.js => advanced_property.md.CA7GaeI3.js} (99%) rename docs/document/assets/{advanced_property.md.C_nOKniE.lean.js => advanced_property.md.CA7GaeI3.lean.js} (95%) rename docs/document/assets/{app.D4qzugdM.js => app.BhL53TUc.js} (95%) rename docs/document/assets/chunks/{theme.DwvAHEyX.js => theme.C-3sZAdL.js} (99%) rename docs/document/assets/chunks/{virtual_search-data.BBGOhSPI.js => virtual_search-data.LxkiP9ls.js} (83%) rename docs/document/assets/{component_contextmenu.md.lsIURdc3.js => component_contextmenu.md.ClKmcIKr.js} (99%) rename docs/document/assets/{component_contextmenu.md.lsIURdc3.lean.js => component_contextmenu.md.ClKmcIKr.lean.js} (81%) rename docs/document/assets/{component_controls.md.CKAl0l5Z.js => component_controls.md.Cl62yW1F.js} (99%) rename docs/document/assets/{component_controls.md.CKAl0l5Z.lean.js => component_controls.md.Cl62yW1F.lean.js} (81%) rename docs/document/assets/{component_layers.md.D34Y4OkH.js => component_layers.md.Cys52VMi.js} (99%) rename docs/document/assets/{component_layers.md.D34Y4OkH.lean.js => component_layers.md.Cys52VMi.lean.js} (80%) rename docs/document/assets/{component_setting.md.BwCpY3NU.js => component_setting.md.BP5674ir.js} (99%) rename docs/document/assets/{component_setting.md.BwCpY3NU.lean.js => component_setting.md.BP5674ir.lean.js} (86%) rename docs/document/assets/{en_advanced_built-in.md.DWw_qKdn.js => en_advanced_built-in.md.XdT81JC0.js} (99%) rename docs/document/assets/{en_advanced_built-in.md.DWw_qKdn.lean.js => en_advanced_built-in.md.XdT81JC0.lean.js} (91%) rename docs/document/assets/{en_advanced_class.md.bWhe2FDl.js => en_advanced_class.md.BLyA7rxa.js} (99%) rename docs/document/assets/{en_advanced_class.md.bWhe2FDl.lean.js => en_advanced_class.md.BLyA7rxa.lean.js} (88%) rename docs/document/assets/{en_advanced_event.md.igITY2FO.js => en_advanced_event.md.CtQl1IYg.js} (99%) rename docs/document/assets/{en_advanced_event.md.igITY2FO.lean.js => en_advanced_event.md.CtQl1IYg.lean.js} (96%) rename docs/document/assets/{en_advanced_global.md.Bj0Agjzd.js => en_advanced_global.md.D5Nz8wyo.js} (99%) rename docs/document/assets/{en_advanced_global.md.Bj0Agjzd.lean.js => en_advanced_global.md.D5Nz8wyo.lean.js} (94%) rename docs/document/assets/{en_advanced_plugin.md.IXiFhAGS.js => en_advanced_plugin.md.BOuMu80J.js} (99%) rename docs/document/assets/{en_advanced_plugin.md.IXiFhAGS.lean.js => en_advanced_plugin.md.BOuMu80J.lean.js} (88%) rename docs/document/assets/{en_advanced_property.md.DQzShb4B.js => en_advanced_property.md.urRMaqHe.js} (99%) rename docs/document/assets/{en_advanced_property.md.DQzShb4B.lean.js => en_advanced_property.md.urRMaqHe.lean.js} (95%) rename docs/document/assets/{en_component_contextmenu.md.3nvb8CSX.js => en_component_contextmenu.md.COLfX45a.js} (99%) rename docs/document/assets/{en_component_contextmenu.md.3nvb8CSX.lean.js => en_component_contextmenu.md.COLfX45a.lean.js} (81%) rename docs/document/assets/{en_component_controls.md.s1SJ4fZd.js => en_component_controls.md.BbQsn0wJ.js} (99%) rename docs/document/assets/{en_component_controls.md.s1SJ4fZd.lean.js => en_component_controls.md.BbQsn0wJ.lean.js} (81%) rename docs/document/assets/{en_component_layers.md.wLZPKN9j.js => en_component_layers.md.CX93a7QS.js} (99%) rename docs/document/assets/{en_component_layers.md.wLZPKN9j.lean.js => en_component_layers.md.CX93a7QS.lean.js} (81%) rename docs/document/assets/{en_component_setting.md.eqeWyMDt.js => en_component_setting.md.C6o2AWtX.js} (99%) rename docs/document/assets/{en_component_setting.md.eqeWyMDt.lean.js => en_component_setting.md.C6o2AWtX.lean.js} (86%) rename docs/document/assets/{en_index.md.DrOcPBwp.js => en_index.md.Adx_P8Ii.js} (96%) rename docs/document/assets/{en_index.md.DrOcPBwp.lean.js => en_index.md.Adx_P8Ii.lean.js} (69%) rename docs/document/assets/{en_start_i18n.md.DAxrpMQL.js => en_start_i18n.md.lFdcbEk9.js} (97%) rename docs/document/assets/{en_start_i18n.md.DAxrpMQL.lean.js => en_start_i18n.md.lFdcbEk9.lean.js} (70%) rename docs/document/assets/{en_start_option.md.CuY4IYWk.js => en_start_option.md.Bk4YXvof.js} (99%) rename docs/document/assets/{en_start_option.md.CuY4IYWk.lean.js => en_start_option.md.Bk4YXvof.lean.js} (96%) rename docs/document/assets/{index.md.WcEL7IA5.js => index.md.Bkwg5S8z.js} (96%) rename docs/document/assets/{index.md.WcEL7IA5.lean.js => index.md.Bkwg5S8z.lean.js} (68%) rename docs/document/assets/{plugin_danmuku.md.D580Az0s.js => plugin_danmuku.md.DSrWXJHB.js} (99%) rename docs/document/assets/{plugin_danmuku.md.D580Az0s.lean.js => plugin_danmuku.md.DSrWXJHB.lean.js} (93%) rename docs/document/assets/{start_i18n.md.C6dAnYSp.js => start_i18n.md.D3eO9wL_.js} (97%) rename docs/document/assets/{start_i18n.md.C6dAnYSp.lean.js => start_i18n.md.D3eO9wL_.lean.js} (69%) rename docs/document/assets/{start_option.md.DRwrMHeQ.js => start_option.md.D52S8Ynf.js} (99%) rename docs/document/assets/{start_option.md.DRwrMHeQ.lean.js => start_option.md.D52S8Ynf.lean.js} (96%) delete mode 100644 docs/uncompiled/artplayer-plugin-danmuku/index.js.map delete mode 100644 docs/uncompiled/artplayer/index.js.map diff --git a/CHANGELOG.md b/CHANGELOG.md index 10c19bd2e..885a64a20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,10 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ## [Unreleased] +- Refactor `Parcel` to `Vite` - Change `Artplayer.FULLSCREEN_WEB_IN_BODY` defaults to `true` - The `reset` method is used to reset video request - Fix [#1014](https://github.com/zhw2590582/ArtPlayer/issues/1014) - Fix [#1023](https://github.com/zhw2590582/ArtPlayer/issues/1023) +- Fix [#1028](https://github.com/zhw2590582/ArtPlayer/issues/1028) - Add `artplayer-plugin-jassub` plugin - Add `artplayer-proxy-mediabunny` plugin - Add `artplayer-plugin-audio-track` plugin diff --git a/docs/compiled/artplayer-plugin-ads.js b/docs/compiled/artplayer-plugin-ads.js index deabea155..53537f826 100644 --- a/docs/compiled/artplayer-plugin-ads.js +++ b/docs/compiled/artplayer-plugin-ads.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-ads.js v2.0.0 + * artplayer-plugin-ads.js v2.0.1 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t,n,l,i){var r="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},a="function"==typeof r[l]&&r[l],o=a.i||{},d=a.cache||{},u="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function p(t,n){if(!d[t]){if(!e[t]){if(i[t])return i[t];var o="function"==typeof r[l]&&r[l];if(!n&&o)return o(t,!0);if(a)return a(t,!0);if(u&&"string"==typeof t)return u(t);var s=Error("Cannot find module '"+t+"'");throw s.code="MODULE_NOT_FOUND",s}y.resolve=function(n){var l=e[t][1][n];return null!=l?l:n},y.cache={};var c=d[t]=new p.Module(t);e[t][0].call(c.exports,y,c,c.exports,r)}return d[t].exports;function y(e){var t=y.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var n={__esModule:!0};return t.forEach(function(e){var t=e[0],l=e[1],i=e[2]||e[0],r=p(l);"*"===t?Object.keys(r).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:function(){return r[e]}})}):"*"===i?Object.defineProperty(n,t,{enumerable:!0,value:r}):Object.defineProperty(n,t,{enumerable:!0,get:function(){return"default"===i?r.__esModule?r.default:r:r[i]}})}),n}return p(t)}}p.isParcelRequire=!0,p.Module=function(e){this.id=e,this.bundle=p,this.require=u,this.exports={}},p.modules=e,p.cache=d,p.parent=a,p.distDir=void 0,p.publicUrl=void 0,p.devServer=void 0,p.i=o,p.register=function(t,n){e[t]=[function(e,t){t.exports=n},{}]},Object.defineProperty(p,"root",{get:function(){return r[l]}}),r[l]=p;for(var s=0;stypeof module?module.exports=c:"function"==typeof define&&define.amd&&define(function(){return c})}}({ezZng:[function(e,t,n,l){var i=e("@parcel/transformer-js/src/esmodule-helpers.js");i.defineInteropFlag(n),i.export(n,"default",()=>o);var r=e("bundle-text:./style.less"),a=i.interopDefault(r);function o(e){return t=>{!function(e){let{version:t,utils:{errorHandle:n}}=e.constructor,l=t.split(".").map(Number);n(l[0]+l[1]/100>=5,`Artplayer.js@${t} is not compatible the artplayerPluginAds@${o.version}. Please update it to version Artplayer.js@5.x.x`)}(t);let{template:{$player:n},icons:{volume:l,volumeClose:i,fullscreenOn:r,fullscreenOff:a,loading:d},constructor:{validator:u,utils:{query:p,append:s,setStyle:c}}}=t;e=u({html:"",video:"",url:"",playDuration:5,totalDuration:10,muted:!1,i18n:{close:"关闭广告",countdown:"%s秒",detail:"查看详情",canBeClosed:"%s秒后可关闭广告"},...e},{html:"?string",video:"?string",url:"?string",playDuration:"number",totalDuration:"number",muted:"?boolean",i18n:{close:"string",countdown:"string",detail:"string",canBeClosed:"string"}});let y=null,f=null,g=null,m=null,v=null,x=null,h=0,b=null,w=!1,j=!1,D=!1;function P(e,t){return t.replace("%s",e)}function O(){w=!0,t.play(),e.video&&y.pause(),c(t.template.$ads,"display","none"),t.emit("artplayerPluginAds:skip",e)}function k(){w||(b=setTimeout(()=>{h+=1;let t=e.playDuration-h;t>=1?g.innerHTML=P(t,e.i18n.canBeClosed):(g.innerHTML=e.i18n.close,D||(D=!0)),m.innerHTML=P(e.totalDuration-h,e.i18n.countdown),h>=e.totalDuration?O():k()},1e3))}function _(){w||clearTimeout(b)}function $(){j||(j=!0,function(){t.template.$ads=s(n,'
'),y=s(t.template.$ads,e.video?``:`
${e.html}
`),x=s(t.template.$ads,'
'),s(x,d),g=p(".artplayer-plugin-ads-close",f=s(t.template.$ads,`
${e.playDuration<=0?e.i18n.close:P(e.playDuration,e.i18n.canBeClosed)}
${P(e.totalDuration,e.i18n.countdown)}
`)),m=p(".artplayer-plugin-ads-countdown",f),e.playDuration>=e.totalDuration&&c(g,"display","none"),t.proxy(g,"click",()=>{D&&O()});let o=p(".artplayer-plugin-ads-detail",v=s(t.template.$ads,`
${e.i18n.detail}
`)),u=p(".artplayer-plugin-ads-muted",v),h=p(".artplayer-plugin-ads-fullscreen",v);if(e.url?t.proxy(o,"click",()=>{window.open(e.url),t.emit("artplayerPluginAds:click",e)}):c(o,"display","none"),e.video){let n=s(u,l),r=s(u,i);c(r,"display","none"),e.muted&&(y.muted=!0,c(n,"display","none"),c(r,"display","inline-flex")),t.proxy(u,"click",()=>{y.muted=!y.muted,y.muted?(c(n,"display","none"),c(r,"display","inline-flex")):(c(n,"display","inline-flex"),c(r,"display","none"))})}else c(u,"display","none");let b=s(h,r),w=s(h,a);c(w,"display","none"),t.proxy(h,"click",()=>{t.fullscreen=!t.fullscreen,t.fullscreen?(c(b,"display","inline-flex"),c(w,"display","none")):(c(b,"display","none"),c(w,"display","inline-flex"))}),t.proxy(y,"click",()=>{e.url&&window.open(e.url),t.emit("artplayerPluginAds:click",e)})}(),t.pause(),e.video?(t.proxy(y,"error",O),t.proxy(y,"loadedmetadata",()=>{k(),y.play(),c(f,"display","flex"),c(v,"display","flex"),c(x,"display","none")})):(k(),c(f,"display","flex"),c(v,"display","flex"),c(x,"display","none")),t.on("document:visibilitychange",()=>{document.hidden?_():k()}))}return t.on("ready",()=>{t.once("play",$),t.once("video:playing",$)}),{name:"artplayerPluginAds",skip:O,pause:_,play:k}}}if("u">typeof document&&!document.getElementById("artplayer-plugin-ads")){let e=document.createElement("style");e.id="artplayer-plugin-ads",e.textContent=a.default,document.head.appendChild(e)}"u">typeof window&&(window.artplayerPluginAds=o)},{"bundle-text:./style.less":"4TxNB","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"4TxNB":[function(e,t,n,l){t.exports=".artplayer-plugin-ads{z-index:150;color:#fff;background-color:#000;width:100%;height:100%;font-size:13px;line-height:1;position:absolute;inset:0;overflow:hidden}.artplayer-plugin-ads .artplayer-plugin-ads-html{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.artplayer-plugin-ads .artplayer-plugin-ads-video{width:100%;height:100%}.artplayer-plugin-ads .artplayer-plugin-ads-timer{display:none;position:absolute;top:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-timer>div{cursor:pointer;background-color:#00000080;border-radius:15px;align-items:center;margin-left:5px;padding:5px 10px;display:flex}.artplayer-plugin-ads .artplayer-plugin-ads-control{display:none;position:absolute;bottom:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-control>div{cursor:pointer;background-color:#00000080;border-radius:15px;align-items:center;margin-left:5px;padding:5px 10px;display:flex}.artplayer-plugin-ads .artplayer-plugin-ads-control .art-icon svg{width:20px;height:20px}.artplayer-plugin-ads .artplayer-plugin-ads-loading{justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:absolute;inset:0}"},{}],"6ykb1":[function(e,t,n,l){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})}},{}]},["ezZng"],"ezZng","parcelRequire4dc0",{}); \ No newline at end of file +!function(e,l){"object"===typeof exports&&"undefined"!==typeof module?module.exports=l():"function"==typeof define&&define.amd?(t.ArtplayerPluginAds=l(),define(function(){return t.ArtplayerPluginAds})):(e="undefined"!==typeof globalThis?globalThis:e||self).ArtplayerPluginAds=l()}(this,function(){"use strict";function e(l){return n=>{!function(l){const{version:n,utils:{errorHandle:i}}=l.constructor,a=n.split(".").map(Number);i(a[0]+a[1]/100>=5,`Artplayer.js@${n} is not compatible the artplayerPluginAds@${e.version}. Please update it to version Artplayer.js@5.x.x`)}(n);const{template:{$player:i},icons:{volume:a,volumeClose:t,fullscreenOn:r,fullscreenOff:d,loading:o},constructor:{validator:s,utils:{query:p,append:u,setStyle:c}}}=n;l=s({html:"",video:"",url:"",playDuration:5,totalDuration:10,muted:!1,i18n:{close:"\u5173\u95ed\u5e7f\u544a",countdown:"%s\u79d2",detail:"\u67e5\u770b\u8be6\u60c5",canBeClosed:"%s\u79d2\u540e\u53ef\u5173\u95ed\u5e7f\u544a"},...l},{html:"?string",video:"?string",url:"?string",playDuration:"number",totalDuration:"number",muted:"?boolean",i18n:{close:"string",countdown:"string",detail:"string",canBeClosed:"string"}});let y=null,g=null,f=null,m=null,v=null,x=null,h=0,w=null,b=!1,$=!1,k=!1;function D(e,l){return l.replace("%s",e)}function A(){b=!0,n.play(),l.video&&y.pause(),c(n.template.$ads,"display","none"),n.emit("artplayerPluginAds:skip",l)}function P(){b||(w=setTimeout(()=>{h+=1;const e=l.playDuration-h;e>=1?f.innerHTML=D(e,l.i18n.canBeClosed):(f.innerHTML=l.i18n.close,k||(k=!0)),m.innerHTML=D(l.totalDuration-h,l.i18n.countdown),h>=l.totalDuration?A():P()},1e3))}function C(){b||clearTimeout(w)}function T(){$||($=!0,function(){n.template.$ads=u(i,'
'),y=u(n.template.$ads,l.video?``:`
${l.html}
`),x=u(n.template.$ads,'
'),u(x,o),g=u(n.template.$ads,`
\n
${l.playDuration<=0?l.i18n.close:D(l.playDuration,l.i18n.canBeClosed)}
\n
${D(l.totalDuration,l.i18n.countdown)}
\n
`),f=p(".artplayer-plugin-ads-close",g),m=p(".artplayer-plugin-ads-countdown",g),l.playDuration>=l.totalDuration&&c(f,"display","none"),n.proxy(f,"click",()=>{k&&A()}),v=u(n.template.$ads,`
\n
${l.i18n.detail}
\n
\n
\n
`);const e=p(".artplayer-plugin-ads-detail",v),s=p(".artplayer-plugin-ads-muted",v),h=p(".artplayer-plugin-ads-fullscreen",v);if(l.url?n.proxy(e,"click",()=>{window.open(l.url),n.emit("artplayerPluginAds:click",l)}):c(e,"display","none"),l.video){const e=u(s,a),i=u(s,t);c(i,"display","none"),l.muted&&(y.muted=!0,c(e,"display","none"),c(i,"display","inline-flex")),n.proxy(s,"click",()=>{y.muted=!y.muted,y.muted?(c(e,"display","none"),c(i,"display","inline-flex")):(c(e,"display","inline-flex"),c(i,"display","none"))})}else c(s,"display","none");const w=u(h,r),b=u(h,d);c(b,"display","none"),n.proxy(h,"click",()=>{n.fullscreen=!n.fullscreen,n.fullscreen?(c(w,"display","inline-flex"),c(b,"display","none")):(c(w,"display","none"),c(b,"display","inline-flex"))}),n.proxy(y,"click",()=>{l.url&&window.open(l.url),n.emit("artplayerPluginAds:click",l)})}(),n.pause(),l.video?(n.proxy(y,"error",A),n.proxy(y,"loadedmetadata",()=>{P(),y.play(),c(g,"display","flex"),c(v,"display","flex"),c(x,"display","none")})):(P(),c(g,"display","flex"),c(v,"display","flex"),c(x,"display","none")),n.on("document:visibilitychange",()=>{document.hidden?C():P()}))}return n.on("ready",()=>{n.once("play",T),n.once("video:playing",T)}),{name:"artplayerPluginAds",skip:A,pause:C,play:P}}}if("undefined"!==typeof document&&!document.getElementById("artplayer-plugin-ads")){const e=document.createElement("style");e.id="artplayer-plugin-ads",e.textContent=".artplayer-plugin-ads{position:absolute;z-index:150;inset:0;width:100%;height:100%;overflow:hidden;font-size:13px;line-height:1;color:#fff;background-color:#000}.artplayer-plugin-ads .artplayer-plugin-ads-html{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.artplayer-plugin-ads .artplayer-plugin-ads-video{width:100%;height:100%}.artplayer-plugin-ads .artplayer-plugin-ads-timer{display:none;position:absolute;top:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-timer>div{display:flex;align-items:center;background-color:#00000080;border-radius:15px;margin-left:5px;padding:5px 10px;cursor:pointer}.artplayer-plugin-ads .artplayer-plugin-ads-control{display:none;position:absolute;bottom:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-control>div{display:flex;align-items:center;background-color:#00000080;border-radius:15px;margin-left:5px;padding:5px 10px;cursor:pointer}.artplayer-plugin-ads .artplayer-plugin-ads-control .art-icon svg{width:20px;height:20px}.artplayer-plugin-ads .artplayer-plugin-ads-loading{display:flex;align-items:center;justify-content:center;position:absolute;inset:0;width:100%;height:100%}",document.head.appendChild(e)}return"undefined"!==typeof window&&(window.artplayerPluginAds=e),e}); diff --git a/docs/compiled/artplayer-plugin-ads.legacy.js b/docs/compiled/artplayer-plugin-ads.legacy.js index 8a7c6e6b8..486cbab65 100644 --- a/docs/compiled/artplayer-plugin-ads.legacy.js +++ b/docs/compiled/artplayer-plugin-ads.legacy.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-ads.js v2.0.0 + * artplayer-plugin-ads.js v2.0.1 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,n,t,r,l){var i="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},a="function"==typeof i[r]&&i[r],o=a.i||{},u=a.cache||{},s="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function p(n,t){if(!u[n]){if(!e[n]){if(l[n])return l[n];var o="function"==typeof i[r]&&i[r];if(!t&&o)return o(n,!0);if(a)return a(n,!0);if(s&&"string"==typeof n)return s(n);var d=Error("Cannot find module '"+n+"'");throw d.code="MODULE_NOT_FOUND",d}f.resolve=function(t){var r=e[n][1][t];return null!=r?r:t},f.cache={};var c=u[n]=new p.Module(n);e[n][0].call(c.exports,f,c,c.exports,i)}return u[n].exports;function f(e){var n=f.resolve(e);if(!1===n)return{};if(Array.isArray(n)){var t={__esModule:!0};return n.forEach(function(e){var n=e[0],r=e[1],l=e[2]||e[0],i=p(r);"*"===n?Object.keys(i).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:function(){return i[e]}})}):"*"===l?Object.defineProperty(t,n,{enumerable:!0,value:i}):Object.defineProperty(t,n,{enumerable:!0,get:function(){return"default"===l?i.__esModule?i.default:i:i[l]}})}),t}return p(n)}}p.isParcelRequire=!0,p.Module=function(e){this.id=e,this.bundle=p,this.require=s,this.exports={}},p.modules=e,p.cache=u,p.parent=a,p.distDir=void 0,p.publicUrl=void 0,p.devServer=void 0,p.i=o,p.register=function(n,t){e[n]=[function(e,n){n.exports=t},{}]},Object.defineProperty(p,"root",{get:function(){return i[r]}}),i[r]=p;for(var d=0;dtypeof module?module.exports=c:"function"==typeof define&&define.amd&&define(function(){return c})}}({"1qHWP":[function(e,n,t,r){var l=e("@parcel/transformer-js/src/esmodule-helpers.js");l.defineInteropFlag(t),l.export(t,"default",function(){return u});var i=e("@swc/helpers/cjs/_object_spread.cjs"),a=e("bundle-text:./style.less"),o=l.interopDefault(a);function u(e){return function(n){r=(t=n.constructor).version,(0,t.utils.errorHandle)((l=r.split(".").map(Number))[0]+l[1]/100>=5,"Artplayer.js@".concat(r," is not compatible the artplayerPluginAds@").concat(u.version,". Please update it to version Artplayer.js@5.x.x"));var t,r,l,a=n.template.$player,o=n.icons,s=o.volume,p=o.volumeClose,d=o.fullscreenOn,c=o.fullscreenOff,f=o.loading,y=n.constructor,g=y.validator,m=y.utils,v=m.query,b=m.append,h=m.setStyle;e=g((0,i._)({html:"",video:"",url:"",playDuration:5,totalDuration:10,muted:!1,i18n:{close:"关闭广告",countdown:"%s秒",detail:"查看详情",canBeClosed:"%s秒后可关闭广告"}},e),{html:"?string",video:"?string",url:"?string",playDuration:"number",totalDuration:"number",muted:"?boolean",i18n:{close:"string",countdown:"string",detail:"string",canBeClosed:"string"}});var x=null,w=null,j=null,O=null,P=null,_=null,D=0,k=null,M=!1,q=!1,A=!1;function E(e,n){return n.replace("%s",e)}function C(){M=!0,n.play(),e.video&&x.pause(),h(n.template.$ads,"display","none"),n.emit("artplayerPluginAds:skip",e)}function T(){M||(k=setTimeout(function(){D+=1;var n=e.playDuration-D;n>=1?j.innerHTML=E(n,e.i18n.canBeClosed):(j.innerHTML=e.i18n.close,A||(A=!0)),O.innerHTML=E(e.totalDuration-D,e.i18n.countdown),D>=e.totalDuration?C():T()},1e3))}function H(){M||clearTimeout(k)}function $(){q||(q=!0,function(){n.template.$ads=b(a,'
'),x=b(n.template.$ads,e.video?''):'
'.concat(e.html,"
")),_=b(n.template.$ads,'
'),b(_,f),j=v(".artplayer-plugin-ads-close",w=b(n.template.$ads,'
\n
'.concat(e.playDuration<=0?e.i18n.close:E(e.playDuration,e.i18n.canBeClosed),'
\n
').concat(E(e.totalDuration,e.i18n.countdown),"
\n
"))),O=v(".artplayer-plugin-ads-countdown",w),e.playDuration>=e.totalDuration&&h(j,"display","none"),n.proxy(j,"click",function(){A&&C()});var t=v(".artplayer-plugin-ads-detail",P=b(n.template.$ads,'
\n
'.concat(e.i18n.detail,'
\n
\n
\n
'))),r=v(".artplayer-plugin-ads-muted",P),l=v(".artplayer-plugin-ads-fullscreen",P);if(e.url?n.proxy(t,"click",function(){window.open(e.url),n.emit("artplayerPluginAds:click",e)}):h(t,"display","none"),e.video){var i=b(r,s),o=b(r,p);h(o,"display","none"),e.muted&&(x.muted=!0,h(i,"display","none"),h(o,"display","inline-flex")),n.proxy(r,"click",function(){x.muted=!x.muted,x.muted?(h(i,"display","none"),h(o,"display","inline-flex")):(h(i,"display","inline-flex"),h(o,"display","none"))})}else h(r,"display","none");var u=b(l,d),y=b(l,c);h(y,"display","none"),n.proxy(l,"click",function(){n.fullscreen=!n.fullscreen,n.fullscreen?(h(u,"display","inline-flex"),h(y,"display","none")):(h(u,"display","none"),h(y,"display","inline-flex"))}),n.proxy(x,"click",function(){e.url&&window.open(e.url),n.emit("artplayerPluginAds:click",e)})}(),n.pause(),e.video?(n.proxy(x,"error",C),n.proxy(x,"loadedmetadata",function(){T(),x.play(),h(w,"display","flex"),h(P,"display","flex"),h(_,"display","none")})):(T(),h(w,"display","flex"),h(P,"display","flex"),h(_,"display","none")),n.on("document:visibilitychange",function(){document.hidden?H():T()}))}return n.on("ready",function(){n.once("play",$),n.once("video:playing",$)}),{name:"artplayerPluginAds",skip:C,pause:H,play:T}}}if("u">typeof document&&!document.getElementById("artplayer-plugin-ads")){var s=document.createElement("style");s.id="artplayer-plugin-ads",s.textContent=o.default,document.head.appendChild(s)}"u">typeof window&&(window.artplayerPluginAds=u)},{"@swc/helpers/cjs/_object_spread.cjs":"kyoEj","bundle-text:./style.less":"8pNer","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],kyoEj:[function(e,n,t,r){"use strict";var l=e("9f9b8a24218ee51e");t._=function(e){for(var n=1;ndiv{cursor:pointer;background-color:rgba(0,0,0,.5);border-radius:15px;align-items:center;margin-left:5px;padding:5px 10px;display:flex}.artplayer-plugin-ads .artplayer-plugin-ads-control{display:none;position:absolute;bottom:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-control>div{cursor:pointer;background-color:rgba(0,0,0,.5);border-radius:15px;align-items:center;margin-left:5px;padding:5px 10px;display:flex}.artplayer-plugin-ads .artplayer-plugin-ads-control .art-icon svg{width:20px;height:20px}.artplayer-plugin-ads .artplayer-plugin-ads-loading{justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:absolute;top:0;bottom:0;left:0;right:0}"},{}],qpMMf:[function(e,n,t,r){t.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},t.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},t.exportAll=function(e,n){return Object.keys(e).forEach(function(t){"default"===t||"__esModule"===t||Object.prototype.hasOwnProperty.call(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:function(){return e[t]}})}),n},t.export=function(e,n,t){Object.defineProperty(e,n,{enumerable:!0,get:t})}},{}]},["1qHWP"],"1qHWP","parcelRequire4dc0",{}); \ No newline at end of file +!function(e,l){"object"===typeof exports&&"undefined"!==typeof module?module.exports=l():"function"==typeof define&&define.amd?(t.ArtplayerPluginAds=l(),define(function(){return t.ArtplayerPluginAds})):(e="undefined"!==typeof globalThis?globalThis:e||self).ArtplayerPluginAds=l()}(this,function(){"use strict";var e=Object.defineProperty,l=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,a=Object.prototype.propertyIsEnumerable,i=(l,n,a)=>n in l?e(l,n,{enumerable:!0,configurable:!0,writable:!0,value:a}):l[n]=a;function t(e){return r=>{!function(e){const{version:l,utils:{errorHandle:n}}=e.constructor,a=l.split(".").map(Number);n(a[0]+a[1]/100>=5,`Artplayer.js@${l} is not compatible the artplayerPluginAds@${t.version}. Please update it to version Artplayer.js@5.x.x`)}(r);const{template:{$player:o},icons:{volume:d,volumeClose:p,fullscreenOn:s,fullscreenOff:u,loading:c},constructor:{validator:y,utils:{query:g,append:f,setStyle:m}}}=r;e=y(((e,t)=>{for(var r in t||(t={}))n.call(t,r)&&i(e,r,t[r]);if(l)for(var r of l(t))a.call(t,r)&&i(e,r,t[r]);return e})({html:"",video:"",url:"",playDuration:5,totalDuration:10,muted:!1,i18n:{close:"\u5173\u95ed\u5e7f\u544a",countdown:"%s\u79d2",detail:"\u67e5\u770b\u8be6\u60c5",canBeClosed:"%s\u79d2\u540e\u53ef\u5173\u95ed\u5e7f\u544a"}},e),{html:"?string",video:"?string",url:"?string",playDuration:"number",totalDuration:"number",muted:"?boolean",i18n:{close:"string",countdown:"string",detail:"string",canBeClosed:"string"}});let v=null,x=null,h=null,b=null,w=null,$=null,k=0,D=null,P=!1,A=!1,j=!1;function O(e,l){return l.replace("%s",e)}function C(){P=!0,r.play(),e.video&&v.pause(),m(r.template.$ads,"display","none"),r.emit("artplayerPluginAds:skip",e)}function T(){P||(D=setTimeout(()=>{k+=1;const l=e.playDuration-k;l>=1?h.innerHTML=O(l,e.i18n.canBeClosed):(h.innerHTML=e.i18n.close,j||(j=!0)),b.innerHTML=O(e.totalDuration-k,e.i18n.countdown),k>=e.totalDuration?C():T()},1e3))}function B(){P||clearTimeout(D)}function H(){A||(A=!0,function(){r.template.$ads=f(o,'
'),v=f(r.template.$ads,e.video?``:`
${e.html}
`),$=f(r.template.$ads,'
'),f($,c),x=f(r.template.$ads,`
\n
${e.playDuration<=0?e.i18n.close:O(e.playDuration,e.i18n.canBeClosed)}
\n
${O(e.totalDuration,e.i18n.countdown)}
\n
`),h=g(".artplayer-plugin-ads-close",x),b=g(".artplayer-plugin-ads-countdown",x),e.playDuration>=e.totalDuration&&m(h,"display","none"),r.proxy(h,"click",()=>{j&&C()}),w=f(r.template.$ads,`
\n
${e.i18n.detail}
\n
\n
\n
`);const l=g(".artplayer-plugin-ads-detail",w),n=g(".artplayer-plugin-ads-muted",w),a=g(".artplayer-plugin-ads-fullscreen",w);if(e.url?r.proxy(l,"click",()=>{window.open(e.url),r.emit("artplayerPluginAds:click",e)}):m(l,"display","none"),e.video){const l=f(n,d),a=f(n,p);m(a,"display","none"),e.muted&&(v.muted=!0,m(l,"display","none"),m(a,"display","inline-flex")),r.proxy(n,"click",()=>{v.muted=!v.muted,v.muted?(m(l,"display","none"),m(a,"display","inline-flex")):(m(l,"display","inline-flex"),m(a,"display","none"))})}else m(n,"display","none");const i=f(a,s),t=f(a,u);m(t,"display","none"),r.proxy(a,"click",()=>{r.fullscreen=!r.fullscreen,r.fullscreen?(m(i,"display","inline-flex"),m(t,"display","none")):(m(i,"display","none"),m(t,"display","inline-flex"))}),r.proxy(v,"click",()=>{e.url&&window.open(e.url),r.emit("artplayerPluginAds:click",e)})}(),r.pause(),e.video?(r.proxy(v,"error",C),r.proxy(v,"loadedmetadata",()=>{T(),v.play(),m(x,"display","flex"),m(w,"display","flex"),m($,"display","none")})):(T(),m(x,"display","flex"),m(w,"display","flex"),m($,"display","none")),r.on("document:visibilitychange",()=>{document.hidden?B():T()}))}return r.on("ready",()=>{r.once("play",H),r.once("video:playing",H)}),{name:"artplayerPluginAds",skip:C,pause:B,play:T}}}if("undefined"!==typeof document&&!document.getElementById("artplayer-plugin-ads")){const e=document.createElement("style");e.id="artplayer-plugin-ads",e.textContent=".artplayer-plugin-ads{position:absolute;z-index:150;inset:0;width:100%;height:100%;overflow:hidden;font-size:13px;line-height:1;color:#fff;background-color:#000}.artplayer-plugin-ads .artplayer-plugin-ads-html{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.artplayer-plugin-ads .artplayer-plugin-ads-video{width:100%;height:100%}.artplayer-plugin-ads .artplayer-plugin-ads-timer{display:none;position:absolute;top:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-timer>div{display:flex;align-items:center;background-color:#00000080;border-radius:15px;margin-left:5px;padding:5px 10px;cursor:pointer}.artplayer-plugin-ads .artplayer-plugin-ads-control{display:none;position:absolute;bottom:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-control>div{display:flex;align-items:center;background-color:#00000080;border-radius:15px;margin-left:5px;padding:5px 10px;cursor:pointer}.artplayer-plugin-ads .artplayer-plugin-ads-control .art-icon svg{width:20px;height:20px}.artplayer-plugin-ads .artplayer-plugin-ads-loading{display:flex;align-items:center;justify-content:center;position:absolute;inset:0;width:100%;height:100%}",document.head.appendChild(e)}return"undefined"!==typeof window&&(window.artplayerPluginAds=t),t}); diff --git a/docs/compiled/artplayer-plugin-ads.mjs b/docs/compiled/artplayer-plugin-ads.mjs index e6dbf593d..59a19865c 100644 --- a/docs/compiled/artplayer-plugin-ads.mjs +++ b/docs/compiled/artplayer-plugin-ads.mjs @@ -1,8 +1,254 @@ - /*! - * artplayer-plugin-ads.js v2.0.0 + * artplayer-plugin-ads.js v2.0.1 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t,l,n,i){var r="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},a="function"==typeof r[n]&&r[n],o=a.i||{},d=a.cache||{},u="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function p(t,l){if(!d[t]){if(!e[t]){if(i[t])return i[t];var o="function"==typeof r[n]&&r[n];if(!l&&o)return o(t,!0);if(a)return a(t,!0);if(u&&"string"==typeof t)return u(t);var s=Error("Cannot find module '"+t+"'");throw s.code="MODULE_NOT_FOUND",s}y.resolve=function(l){var n=e[t][1][l];return null!=n?n:l},y.cache={};var c=d[t]=new p.Module(t);e[t][0].call(c.exports,y,c,c.exports,r)}return d[t].exports;function y(e){var t=y.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var l={__esModule:!0};return t.forEach(function(e){var t=e[0],n=e[1],i=e[2]||e[0],r=p(n);"*"===t?Object.keys(r).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(l,e)||Object.defineProperty(l,e,{enumerable:!0,get:function(){return r[e]}})}):"*"===i?Object.defineProperty(l,t,{enumerable:!0,value:r}):Object.defineProperty(l,t,{enumerable:!0,get:function(){return"default"===i?r.__esModule?r.default:r:r[i]}})}),l}return p(t)}}p.isParcelRequire=!0,p.Module=function(e){this.id=e,this.bundle=p,this.require=u,this.exports={}},p.modules=e,p.cache=d,p.parent=a,p.distDir=void 0,p.publicUrl=void 0,p.devServer=void 0,p.i=o,p.register=function(t,l){e[t]=[function(e,t){t.exports=l},{}]},Object.defineProperty(p,"root",{get:function(){return r[n]}}),r[n]=p;for(var s=0;stypeof module?module.exports=c:"function"==typeof define&&define.amd&&define(function(){return c})}}({fZ8n3:[function(e,t,l,n){var i=e("@parcel/transformer-js/src/esmodule-helpers.js");i.defineInteropFlag(l),i.export(l,"default",()=>o);var r=e("bundle-text:./style.less"),a=i.interopDefault(r);function o(e){return t=>{!function(e){let{version:t,utils:{errorHandle:l}}=e.constructor,n=t.split(".").map(Number);l(n[0]+n[1]/100>=5,`Artplayer.js@${t} is not compatible the artplayerPluginAds@${o.version}. Please update it to version Artplayer.js@5.x.x`)}(t);let{template:{$player:l},icons:{volume:n,volumeClose:i,fullscreenOn:r,fullscreenOff:a,loading:d},constructor:{validator:u,utils:{query:p,append:s,setStyle:c}}}=t;e=u({html:"",video:"",url:"",playDuration:5,totalDuration:10,muted:!1,i18n:{close:"关闭广告",countdown:"%s秒",detail:"查看详情",canBeClosed:"%s秒后可关闭广告"},...e},{html:"?string",video:"?string",url:"?string",playDuration:"number",totalDuration:"number",muted:"?boolean",i18n:{close:"string",countdown:"string",detail:"string",canBeClosed:"string"}});let y=null,f=null,g=null,m=null,v=null,x=null,h=0,b=null,w=!1,j=!1,D=!1;function P(e,t){return t.replace("%s",e)}function O(){w=!0,t.play(),e.video&&y.pause(),c(t.template.$ads,"display","none"),t.emit("artplayerPluginAds:skip",e)}function _(){w||(b=setTimeout(()=>{h+=1;let t=e.playDuration-h;t>=1?g.innerHTML=P(t,e.i18n.canBeClosed):(g.innerHTML=e.i18n.close,D||(D=!0)),m.innerHTML=P(e.totalDuration-h,e.i18n.countdown),h>=e.totalDuration?O():_()},1e3))}function k(){w||clearTimeout(b)}function $(){j||(j=!0,function(){t.template.$ads=s(l,'
'),y=s(t.template.$ads,e.video?``:`
${e.html}
`),x=s(t.template.$ads,'
'),s(x,d),g=p(".artplayer-plugin-ads-close",f=s(t.template.$ads,`
${e.playDuration<=0?e.i18n.close:P(e.playDuration,e.i18n.canBeClosed)}
${P(e.totalDuration,e.i18n.countdown)}
`)),m=p(".artplayer-plugin-ads-countdown",f),e.playDuration>=e.totalDuration&&c(g,"display","none"),t.proxy(g,"click",()=>{D&&O()});let o=p(".artplayer-plugin-ads-detail",v=s(t.template.$ads,`
${e.i18n.detail}
`)),u=p(".artplayer-plugin-ads-muted",v),h=p(".artplayer-plugin-ads-fullscreen",v);if(e.url?t.proxy(o,"click",()=>{window.open(e.url),t.emit("artplayerPluginAds:click",e)}):c(o,"display","none"),e.video){let l=s(u,n),r=s(u,i);c(r,"display","none"),e.muted&&(y.muted=!0,c(l,"display","none"),c(r,"display","inline-flex")),t.proxy(u,"click",()=>{y.muted=!y.muted,y.muted?(c(l,"display","none"),c(r,"display","inline-flex")):(c(l,"display","inline-flex"),c(r,"display","none"))})}else c(u,"display","none");let b=s(h,r),w=s(h,a);c(w,"display","none"),t.proxy(h,"click",()=>{t.fullscreen=!t.fullscreen,t.fullscreen?(c(b,"display","inline-flex"),c(w,"display","none")):(c(b,"display","none"),c(w,"display","inline-flex"))}),t.proxy(y,"click",()=>{e.url&&window.open(e.url),t.emit("artplayerPluginAds:click",e)})}(),t.pause(),e.video?(t.proxy(y,"error",O),t.proxy(y,"loadedmetadata",()=>{_(),y.play(),c(f,"display","flex"),c(v,"display","flex"),c(x,"display","none")})):(_(),c(f,"display","flex"),c(v,"display","flex"),c(x,"display","none")),t.on("document:visibilitychange",()=>{document.hidden?k():_()}))}return t.on("ready",()=>{t.once("play",$),t.once("video:playing",$)}),{name:"artplayerPluginAds",skip:O,pause:k,play:_}}}if("u">typeof document&&!document.getElementById("artplayer-plugin-ads")){let e=document.createElement("style");e.id="artplayer-plugin-ads",e.textContent=a.default,document.head.appendChild(e)}"u">typeof window&&(window.artplayerPluginAds=o)},{"bundle-text:./style.less":"3vq6I","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"3vq6I":[function(e,t,l,n){t.exports=".artplayer-plugin-ads{z-index:150;color:#fff;background-color:#000;width:100%;height:100%;font-size:13px;line-height:1;position:absolute;inset:0;overflow:hidden}.artplayer-plugin-ads .artplayer-plugin-ads-html{justify-content:center;align-items:center;width:100%;height:100%;display:flex}.artplayer-plugin-ads .artplayer-plugin-ads-video{width:100%;height:100%}.artplayer-plugin-ads .artplayer-plugin-ads-timer{display:none;position:absolute;top:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-timer>div{cursor:pointer;background-color:#00000080;border-radius:15px;align-items:center;margin-left:5px;padding:5px 10px;display:flex}.artplayer-plugin-ads .artplayer-plugin-ads-control{display:none;position:absolute;bottom:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-control>div{cursor:pointer;background-color:#00000080;border-radius:15px;align-items:center;margin-left:5px;padding:5px 10px;display:flex}.artplayer-plugin-ads .artplayer-plugin-ads-control .art-icon svg{width:20px;height:20px}.artplayer-plugin-ads .artplayer-plugin-ads-loading{justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:absolute;inset:0}"},{}],loqXi:[function(e,t,l,n){l.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},l.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},l.exportAll=function(e,t){return Object.keys(e).forEach(function(l){"default"===l||"__esModule"===l||Object.prototype.hasOwnProperty.call(t,l)||Object.defineProperty(t,l,{enumerable:!0,get:function(){return e[l]}})}),t},l.export=function(e,t,l){Object.defineProperty(e,t,{enumerable:!0,get:l})}},{}]},["fZ8n3"],"fZ8n3","parcelRequire4dc0",{});let{default:e}=parcelRequire4dc0("fZ8n3");export{e as default}; \ No newline at end of file +const style = ".artplayer-plugin-ads{position:absolute;z-index:150;inset:0;width:100%;height:100%;overflow:hidden;font-size:13px;line-height:1;color:#fff;background-color:#000}.artplayer-plugin-ads .artplayer-plugin-ads-html{display:flex;align-items:center;justify-content:center;width:100%;height:100%}.artplayer-plugin-ads .artplayer-plugin-ads-video{width:100%;height:100%}.artplayer-plugin-ads .artplayer-plugin-ads-timer{display:none;position:absolute;top:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-timer>div{display:flex;align-items:center;background-color:#00000080;border-radius:15px;margin-left:5px;padding:5px 10px;cursor:pointer}.artplayer-plugin-ads .artplayer-plugin-ads-control{display:none;position:absolute;bottom:10px;right:10px}.artplayer-plugin-ads .artplayer-plugin-ads-control>div{display:flex;align-items:center;background-color:#00000080;border-radius:15px;margin-left:5px;padding:5px 10px;cursor:pointer}.artplayer-plugin-ads .artplayer-plugin-ads-control .art-icon svg{width:20px;height:20px}.artplayer-plugin-ads .artplayer-plugin-ads-loading{display:flex;align-items:center;justify-content:center;position:absolute;inset:0;width:100%;height:100%}"; +function checkVersion(art) { + const { + version, + utils: { errorHandle } + } = art.constructor; + const arr = version.split(".").map(Number); + const major = arr[0]; + const minor = arr[1] / 100; + errorHandle( + major + minor >= 5, + `Artplayer.js@${version} is not compatible the artplayerPluginAds@${artplayerPluginAds.version}. Please update it to version Artplayer.js@5.x.x` + ); +} +function artplayerPluginAds(option) { + return (art) => { + checkVersion(art); + const { + template: { $player }, + icons: { volume, volumeClose, fullscreenOn, fullscreenOff, loading }, + constructor: { + validator, + utils: { query, append, setStyle } + } + } = art; + option = validator( + { + html: "", + video: "", + url: "", + playDuration: 5, + totalDuration: 10, + muted: false, + i18n: { + close: "关闭广告", + countdown: "%s秒", + detail: "查看详情", + canBeClosed: "%s秒后可关闭广告" + }, + ...option + }, + { + html: "?string", + video: "?string", + url: "?string", + playDuration: "number", + totalDuration: "number", + muted: "?boolean", + i18n: { + close: "string", + countdown: "string", + detail: "string", + canBeClosed: "string" + } + } + ); + let $ads = null; + let $timer = null; + let $close = null; + let $countdown = null; + let $control = null; + let $loading = null; + let time = 0; + let timer = null; + let isEnd = false; + let isInit = false; + let isCanClose = false; + function getI18n(val, str) { + return str.replace("%s", val); + } + function skip() { + isEnd = true; + art.play(); + if (option.video) + $ads.pause(); + setStyle(art.template.$ads, "display", "none"); + art.emit("artplayerPluginAds:skip", option); + } + function play() { + if (isEnd) + return; + timer = setTimeout(() => { + time += 1; + const playDuration = option.playDuration - time; + if (playDuration >= 1) { + $close.innerHTML = getI18n(playDuration, option.i18n.canBeClosed); + } else { + $close.innerHTML = option.i18n.close; + if (!isCanClose) { + isCanClose = true; + } + } + $countdown.innerHTML = getI18n(option.totalDuration - time, option.i18n.countdown); + if (time >= option.totalDuration) { + skip(); + } else { + play(); + } + }, 1e3); + } + function pause() { + if (isEnd) + return; + clearTimeout(timer); + } + function show() { + art.template.$ads = append($player, '
'); + $ads = append( + art.template.$ads, + option.video ? `` : `
${option.html}
` + ); + $loading = append(art.template.$ads, '
'); + append($loading, loading); + $timer = append( + art.template.$ads, + `
+
${option.playDuration <= 0 ? option.i18n.close : getI18n(option.playDuration, option.i18n.canBeClosed)}
+
${getI18n( + option.totalDuration, + option.i18n.countdown + )}
+
` + ); + $close = query(".artplayer-plugin-ads-close", $timer); + $countdown = query(".artplayer-plugin-ads-countdown", $timer); + if (option.playDuration >= option.totalDuration) { + setStyle($close, "display", "none"); + } + art.proxy($close, "click", () => { + if (isCanClose) { + skip(); + } + }); + $control = append( + art.template.$ads, + `
+
${option.i18n.detail}
+
+
+
` + ); + const $detail = query(".artplayer-plugin-ads-detail", $control); + const $muted = query(".artplayer-plugin-ads-muted", $control); + const $fullscreen = query(".artplayer-plugin-ads-fullscreen", $control); + if (option.url) { + art.proxy($detail, "click", () => { + window.open(option.url); + art.emit("artplayerPluginAds:click", option); + }); + } else { + setStyle($detail, "display", "none"); + } + if (option.video) { + const $volume = append($muted, volume); + const $volumeClose = append($muted, volumeClose); + setStyle($volumeClose, "display", "none"); + if (option.muted) { + $ads.muted = true; + setStyle($volume, "display", "none"); + setStyle($volumeClose, "display", "inline-flex"); + } + art.proxy($muted, "click", () => { + $ads.muted = !$ads.muted; + if ($ads.muted) { + setStyle($volume, "display", "none"); + setStyle($volumeClose, "display", "inline-flex"); + } else { + setStyle($volume, "display", "inline-flex"); + setStyle($volumeClose, "display", "none"); + } + }); + } else { + setStyle($muted, "display", "none"); + } + const $fullscreenOn = append($fullscreen, fullscreenOn); + const $fullscreenOff = append($fullscreen, fullscreenOff); + setStyle($fullscreenOff, "display", "none"); + art.proxy($fullscreen, "click", () => { + art.fullscreen = !art.fullscreen; + if (art.fullscreen) { + setStyle($fullscreenOn, "display", "inline-flex"); + setStyle($fullscreenOff, "display", "none"); + } else { + setStyle($fullscreenOn, "display", "none"); + setStyle($fullscreenOff, "display", "inline-flex"); + } + }); + art.proxy($ads, "click", () => { + if (option.url) + window.open(option.url); + art.emit("artplayerPluginAds:click", option); + }); + } + function init() { + if (isInit) + return; + isInit = true; + show(); + art.pause(); + if (option.video) { + art.proxy($ads, "error", skip); + art.proxy($ads, "loadedmetadata", () => { + play(); + $ads.play(); + setStyle($timer, "display", "flex"); + setStyle($control, "display", "flex"); + setStyle($loading, "display", "none"); + }); + } else { + play(); + setStyle($timer, "display", "flex"); + setStyle($control, "display", "flex"); + setStyle($loading, "display", "none"); + } + art.on("document:visibilitychange", () => { + if (document.hidden) { + pause(); + } else { + play(); + } + }); + } + art.on("ready", () => { + art.once("play", init); + art.once("video:playing", init); + }); + return { + name: "artplayerPluginAds", + skip, + pause, + play + }; + }; +} +if (typeof document !== "undefined") { + if (!document.getElementById("artplayer-plugin-ads")) { + const $style = document.createElement("style"); + $style.id = "artplayer-plugin-ads"; + $style.textContent = style; + document.head.appendChild($style); + } +} +if (typeof window !== "undefined") { + window.artplayerPluginAds = artplayerPluginAds; +} +export { + artplayerPluginAds as default +}; diff --git a/docs/compiled/artplayer-plugin-ambilight.js b/docs/compiled/artplayer-plugin-ambilight.js index 9c686175d..d833e38f6 100644 --- a/docs/compiled/artplayer-plugin-ambilight.js +++ b/docs/compiled/artplayer-plugin-ambilight.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-ambilight.js v1.0.0 + * artplayer-plugin-ambilight.js v1.0.1 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,r,t,n,o){var i="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},u="function"==typeof i[n]&&i[n],l=u.i||{},a=u.cache||{},f="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(r,t){if(!a[r]){if(!e[r]){if(o[r])return o[r];var l="function"==typeof i[n]&&i[n];if(!t&&l)return l(r,!0);if(u)return u(r,!0);if(f&&"string"==typeof r)return f(r);var d=Error("Cannot find module '"+r+"'");throw d.code="MODULE_NOT_FOUND",d}p.resolve=function(t){var n=e[r][1][t];return null!=n?n:t},p.cache={};var s=a[r]=new c.Module(r);e[r][0].call(s.exports,p,s,s.exports,i)}return a[r].exports;function p(e){var r=p.resolve(e);if(!1===r)return{};if(Array.isArray(r)){var t={__esModule:!0};return r.forEach(function(e){var r=e[0],n=e[1],o=e[2]||e[0],i=c(n);"*"===r?Object.keys(i).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:function(){return i[e]}})}):"*"===o?Object.defineProperty(t,r,{enumerable:!0,value:i}):Object.defineProperty(t,r,{enumerable:!0,get:function(){return"default"===o?i.__esModule?i.default:i:i[o]}})}),t}return c(r)}}c.isParcelRequire=!0,c.Module=function(e){this.id=e,this.bundle=c,this.require=f,this.exports={}},c.modules=e,c.cache=a,c.parent=u,c.distDir=void 0,c.publicUrl=void 0,c.devServer=void 0,c.i=l,c.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]},Object.defineProperty(c,"root",{get:function(){return i[n]}}),i[n]=c;for(var d=0;dtypeof module?module.exports=s:"function"==typeof define&&define.amd&&define(function(){return s})}}({"2PWBI":[function(e,r,t,n){var o=e("@parcel/transformer-js/src/esmodule-helpers.js");function i(e={}){return r=>{var t,n,o,i,u,l,a,f,c,d;let s,p,y,{$video:m}=r.template,{createElement:b,addClass:g,setStyles:h}=r.constructor.utils,{blur:v="50px",opacity:j=.5,frequency:w=10,duration:O=.3}=e,P=b("div"),_=((t=P).innerHTML=Array.from({length:9}).fill("
").join(""),Array.from(t.children));n=P,o=m,g(n,"artplayer-plugin-ambilight"),o.parentNode.insertBefore(n,o),h(n,{position:"absolute",top:0,left:0,zIndex:9,inset:0,display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gridTemplateRows:"1fr 1fr 1fr"}),i=_,u=v,l=j,a=O,i.forEach(e=>{h(e,{opacity:l,filter:`blur(${u})`,transition:`background-color ${a}s ease`})});let x=(f=m,c=_,d=w,p=(s=b("canvas")).getContext("2d"),s.width=3,s.height=3,y=0,function e(){let t=performance.now();if(t-y<1e3/d||!r.playing){A=requestAnimationFrame(e);return}y=t;let n=f.videoWidth/3,o=f.videoHeight/3,i=[[0,0],[n,0],[2*n,0],[0,o],[n,o],[2*n,o],[0,2*o],[n,2*o],[2*n,2*o]].map(([e,r])=>(function(e,r,t,n){p.drawImage(f,e,r,t,n,0,0,1,1);let[o,i,u]=p.getImageData(0,0,1,1).data;return`rgb(${o}, ${i}, ${u})`})(e,r,n,o));c.forEach((e,r)=>{e.style.backgroundColor=i[r]}),A=requestAnimationFrame(e)}),A=null;function M(){A||x()}function I(){A&&(cancelAnimationFrame(A),A=null)}return r.on("ready",M),r.on("destroy",I),{name:"artplayerPluginAmbilight",start:M,stop:I}}}o.defineInteropFlag(t),o.export(t,"default",()=>i),"u">typeof window&&(window.artplayerPluginAmbilight=i)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"6ykb1":[function(e,r,t,n){t.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},t.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},t.exportAll=function(e,r){return Object.keys(e).forEach(function(t){"default"===t||"__esModule"===t||Object.prototype.hasOwnProperty.call(r,t)||Object.defineProperty(r,t,{enumerable:!0,get:function(){return e[t]}})}),r},t.export=function(e,r,t){Object.defineProperty(e,r,{enumerable:!0,get:t})}},{}]},["2PWBI"],"2PWBI","parcelRequire4dc0",{}); \ No newline at end of file +!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(t.ArtplayerPluginAmbilight=t(),define(function(){return t.ArtplayerPluginAmbilight})):(e="undefined"!==typeof globalThis?globalThis:e||self).ArtplayerPluginAmbilight=t()}(this,function(){"use strict";function e(e={}){return t=>{const{$video:n}=t.template,{createElement:i,addClass:r,setStyles:o}=t.constructor.utils,{blur:a="50px",opacity:l=.5,frequency:d=10,duration:u=.3}=e,f=i("div"),s=((c=f).innerHTML=Array.from({length:9}).fill("
").join(""),Array.from(c.children));var c,p,m,g;!function(e,t){r(e,"artplayer-plugin-ambilight"),t.parentNode.insertBefore(e,t),o(e,{position:"absolute",top:0,left:0,zIndex:9,inset:0,display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gridTemplateRows:"1fr 1fr 1fr"})}(f,n),p=a,m=l,g=u,s.forEach(e=>{o(e,{opacity:m,filter:`blur(${p})`,transition:`background-color ${g}s ease`})});const y=function(e,n,r){const o=i("canvas"),a=o.getContext("2d");o.width=3,o.height=3;let l=0;return function i(){const o=performance.now();if(o-l<1e3/r||!t.playing)return void(h=requestAnimationFrame(i));l=o;const d=e.videoWidth/3,u=e.videoHeight/3,f=[[0,0],[d,0],[2*d,0],[0,u],[d,u],[2*d,u],[0,2*u],[d,2*u],[2*d,2*u]].map(([t,n])=>function(t,n,i,r){a.drawImage(e,t,n,i,r,0,0,1,1);const[o,l,d]=a.getImageData(0,0,1,1).data;return`rgb(${o}, ${l}, ${d})`}(t,n,d,u));n.forEach((e,t)=>{e.style.backgroundColor=f[t]}),h=requestAnimationFrame(i)}}(n,s,d);let h=null;function b(){h||y()}function v(){h&&(cancelAnimationFrame(h),h=null)}return t.on("ready",b),t.on("destroy",v),{name:"artplayerPluginAmbilight",start:b,stop:v}}}return"undefined"!==typeof window&&(window.artplayerPluginAmbilight=e),e}); diff --git a/docs/compiled/artplayer-plugin-ambilight.legacy.js b/docs/compiled/artplayer-plugin-ambilight.legacy.js index 9a1c30732..d833e38f6 100644 --- a/docs/compiled/artplayer-plugin-ambilight.legacy.js +++ b/docs/compiled/artplayer-plugin-ambilight.legacy.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-ambilight.js v1.0.0 + * artplayer-plugin-ambilight.js v1.0.1 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,r,t,n,o){var i="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},a="function"==typeof i[n]&&i[n],u=a.i||{},c=a.cache||{},f="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function l(r,t){if(!c[r]){if(!e[r]){if(o[r])return o[r];var u="function"==typeof i[n]&&i[n];if(!t&&u)return u(r,!0);if(a)return a(r,!0);if(f&&"string"==typeof r)return f(r);var d=Error("Cannot find module '"+r+"'");throw d.code="MODULE_NOT_FOUND",d}p.resolve=function(t){var n=e[r][1][t];return null!=n?n:t},p.cache={};var s=c[r]=new l.Module(r);e[r][0].call(s.exports,p,s,s.exports,i)}return c[r].exports;function p(e){var r=p.resolve(e);if(!1===r)return{};if(Array.isArray(r)){var t={__esModule:!0};return r.forEach(function(e){var r=e[0],n=e[1],o=e[2]||e[0],i=l(n);"*"===r?Object.keys(i).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:function(){return i[e]}})}):"*"===o?Object.defineProperty(t,r,{enumerable:!0,value:i}):Object.defineProperty(t,r,{enumerable:!0,get:function(){return"default"===o?i.__esModule?i.default:i:i[o]}})}),t}return l(r)}}l.isParcelRequire=!0,l.Module=function(e){this.id=e,this.bundle=l,this.require=f,this.exports={}},l.modules=e,l.cache=c,l.parent=a,l.distDir=void 0,l.publicUrl=void 0,l.devServer=void 0,l.i=u,l.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]},Object.defineProperty(l,"root",{get:function(){return i[n]}}),i[n]=l;for(var d=0;dtypeof module?module.exports=s:"function"==typeof define&&define.amd&&define(function(){return s})}}({"8Uro8":[function(e,r,t,n){var o=e("@parcel/transformer-js/src/esmodule-helpers.js");o.defineInteropFlag(t),o.export(t,"default",function(){return a});var i=e("@swc/helpers/cjs/_sliced_to_array.cjs");function a(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function(r){var t,n,o,a,u,c,f,l,d,s,p,y,m,b=r.template.$video,v=r.constructor.utils,h=v.createElement,g=v.addClass,_=v.setStyles,j=e.blur,w=e.opacity,O=e.frequency,A=e.duration,x=h("div"),M=((t=x).innerHTML=Array.from({length:9}).fill("
").join(""),Array.from(t.children));n=x,o=b,g(n,"artplayer-plugin-ambilight"),o.parentNode.insertBefore(n,o),_(n,{position:"absolute",top:0,left:0,zIndex:9,inset:0,display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gridTemplateRows:"1fr 1fr 1fr"}),a=M,u=void 0===j?"50px":j,c=void 0===w?.5:w,f=void 0===A?.3:A,a.forEach(function(e){_(e,{opacity:c,filter:"blur(".concat(u,")"),transition:"background-color ".concat(f,"s ease")})});var S=(l=b,d=M,s=void 0===O?10:O,y=(p=h("canvas")).getContext("2d"),p.width=3,p.height=3,m=0,function e(){var t=performance.now();if(t-m<1e3/s||!r.playing){P=requestAnimationFrame(e);return}m=t;var n=l.videoWidth/3,o=l.videoHeight/3,a=[[0,0],[n,0],[2*n,0],[0,o],[n,o],[2*n,o],[0,2*o],[n,2*o],[2*n,2*o]].map(function(e){var r,t,a,u,c=(0,i._)(e,2),f=c[0],d=c[1];return y.drawImage(l,f,d,n,o,0,0,1,1),t=(r=(0,i._)(y.getImageData(0,0,1,1).data,3))[0],a=r[1],u=r[2],"rgb(".concat(t,", ").concat(a,", ").concat(u,")")});d.forEach(function(e,r){e.style.backgroundColor=a[r]}),P=requestAnimationFrame(e)}),P=null;function q(){P||S()}function I(){P&&(cancelAnimationFrame(P),P=null)}return r.on("ready",q),r.on("destroy",I),{name:"artplayerPluginAmbilight",start:q,stop:I}}}"u">typeof window&&(window.artplayerPluginAmbilight=a)},{"@swc/helpers/cjs/_sliced_to_array.cjs":"gIQTH","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],gIQTH:[function(e,r,t,n){"use strict";var o=e("d7c30a5ae0c1ab2"),i=e("3aacfce52f67defd"),a=e("f0dae09a1a08b16a"),u=e("83f3648e614d0830");t._=function(e,r){return o._(e)||i._(e,r)||u._(e,r)||a._()}},{d7c30a5ae0c1ab2:"3QSPl","3aacfce52f67defd":"5SSeo",f0dae09a1a08b16a:"heYSj","83f3648e614d0830":"fh7mx"}],"3QSPl":[function(e,r,t,n){"use strict";t._=function(e){if(Array.isArray(e))return e}},{}],"5SSeo":[function(e,r,t,n){"use strict";t._=function(e,r){var t,n,o=null==e?null:"u">typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=o){var i=[],a=!0,u=!1;try{for(o=o.call(e);!(a=(t=o.next()).done)&&(i.push(t.value),!r||i.length!==r);a=!0);}catch(e){u=!0,n=e}finally{try{a||null==o.return||o.return()}finally{if(u)throw n}}return i}}},{}],heYSj:[function(e,r,t,n){"use strict";t._=function(){throw TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}},{}],fh7mx:[function(e,r,t,n){"use strict";var o=e("3ee51b7dc02d0c44");t._=function(e,r){if(e){if("string"==typeof e)return o._(e,r);var t=Object.prototype.toString.call(e).slice(8,-1);if("Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t)return Array.from(t);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return o._(e,r)}}},{"3ee51b7dc02d0c44":"1WOAB"}],"1WOAB":[function(e,r,t,n){"use strict";t._=function(e,r){(null==r||r>e.length)&&(r=e.length);for(var t=0,n=Array(r);t{const{$video:n}=t.template,{createElement:i,addClass:r,setStyles:o}=t.constructor.utils,{blur:a="50px",opacity:l=.5,frequency:d=10,duration:u=.3}=e,f=i("div"),s=((c=f).innerHTML=Array.from({length:9}).fill("
").join(""),Array.from(c.children));var c,p,m,g;!function(e,t){r(e,"artplayer-plugin-ambilight"),t.parentNode.insertBefore(e,t),o(e,{position:"absolute",top:0,left:0,zIndex:9,inset:0,display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gridTemplateRows:"1fr 1fr 1fr"})}(f,n),p=a,m=l,g=u,s.forEach(e=>{o(e,{opacity:m,filter:`blur(${p})`,transition:`background-color ${g}s ease`})});const y=function(e,n,r){const o=i("canvas"),a=o.getContext("2d");o.width=3,o.height=3;let l=0;return function i(){const o=performance.now();if(o-l<1e3/r||!t.playing)return void(h=requestAnimationFrame(i));l=o;const d=e.videoWidth/3,u=e.videoHeight/3,f=[[0,0],[d,0],[2*d,0],[0,u],[d,u],[2*d,u],[0,2*u],[d,2*u],[2*d,2*u]].map(([t,n])=>function(t,n,i,r){a.drawImage(e,t,n,i,r,0,0,1,1);const[o,l,d]=a.getImageData(0,0,1,1).data;return`rgb(${o}, ${l}, ${d})`}(t,n,d,u));n.forEach((e,t)=>{e.style.backgroundColor=f[t]}),h=requestAnimationFrame(i)}}(n,s,d);let h=null;function b(){h||y()}function v(){h&&(cancelAnimationFrame(h),h=null)}return t.on("ready",b),t.on("destroy",v),{name:"artplayerPluginAmbilight",start:b,stop:v}}}return"undefined"!==typeof window&&(window.artplayerPluginAmbilight=e),e}); diff --git a/docs/compiled/artplayer-plugin-ambilight.mjs b/docs/compiled/artplayer-plugin-ambilight.mjs index 299b37bd1..28ed518fc 100644 --- a/docs/compiled/artplayer-plugin-ambilight.mjs +++ b/docs/compiled/artplayer-plugin-ambilight.mjs @@ -1,8 +1,107 @@ - /*! - * artplayer-plugin-ambilight.js v1.0.0 + * artplayer-plugin-ambilight.js v1.0.1 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,r,t,n,o){var i="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},u="function"==typeof i[n]&&i[n],l=u.i||{},a=u.cache||{},f="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(r,t){if(!a[r]){if(!e[r]){if(o[r])return o[r];var l="function"==typeof i[n]&&i[n];if(!t&&l)return l(r,!0);if(u)return u(r,!0);if(f&&"string"==typeof r)return f(r);var d=Error("Cannot find module '"+r+"'");throw d.code="MODULE_NOT_FOUND",d}s.resolve=function(t){var n=e[r][1][t];return null!=n?n:t},s.cache={};var p=a[r]=new c.Module(r);e[r][0].call(p.exports,s,p,p.exports,i)}return a[r].exports;function s(e){var r=s.resolve(e);if(!1===r)return{};if(Array.isArray(r)){var t={__esModule:!0};return r.forEach(function(e){var r=e[0],n=e[1],o=e[2]||e[0],i=c(n);"*"===r?Object.keys(i).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:function(){return i[e]}})}):"*"===o?Object.defineProperty(t,r,{enumerable:!0,value:i}):Object.defineProperty(t,r,{enumerable:!0,get:function(){return"default"===o?i.__esModule?i.default:i:i[o]}})}),t}return c(r)}}c.isParcelRequire=!0,c.Module=function(e){this.id=e,this.bundle=c,this.require=f,this.exports={}},c.modules=e,c.cache=a,c.parent=u,c.distDir=void 0,c.publicUrl=void 0,c.devServer=void 0,c.i=l,c.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]},Object.defineProperty(c,"root",{get:function(){return i[n]}}),i[n]=c;for(var d=0;dtypeof module?module.exports=p:"function"==typeof define&&define.amd&&define(function(){return p})}}({"4BFTD":[function(e,r,t,n){var o=e("@parcel/transformer-js/src/esmodule-helpers.js");function i(e={}){return r=>{var t,n,o,i,u,l,a,f,c,d;let p,s,m,{$video:y}=r.template,{createElement:g,addClass:b,setStyles:h}=r.constructor.utils,{blur:v="50px",opacity:j=.5,frequency:w=10,duration:O=.3}=e,_=g("div"),x=((t=_).innerHTML=Array.from({length:9}).fill("
").join(""),Array.from(t.children));n=_,o=y,b(n,"artplayer-plugin-ambilight"),o.parentNode.insertBefore(n,o),h(n,{position:"absolute",top:0,left:0,zIndex:9,inset:0,display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gridTemplateRows:"1fr 1fr 1fr"}),i=x,u=v,l=j,a=O,i.forEach(e=>{h(e,{opacity:l,filter:`blur(${u})`,transition:`background-color ${a}s ease`})});let P=(f=y,c=x,d=w,s=(p=g("canvas")).getContext("2d"),p.width=3,p.height=3,m=0,function e(){let t=performance.now();if(t-m<1e3/d||!r.playing){q=requestAnimationFrame(e);return}m=t;let n=f.videoWidth/3,o=f.videoHeight/3,i=[[0,0],[n,0],[2*n,0],[0,o],[n,o],[2*n,o],[0,2*o],[n,2*o],[2*n,2*o]].map(([e,r])=>(function(e,r,t,n){s.drawImage(f,e,r,t,n,0,0,1,1);let[o,i,u]=s.getImageData(0,0,1,1).data;return`rgb(${o}, ${i}, ${u})`})(e,r,n,o));c.forEach((e,r)=>{e.style.backgroundColor=i[r]}),q=requestAnimationFrame(e)}),q=null;function A(){q||P()}function F(){q&&(cancelAnimationFrame(q),q=null)}return r.on("ready",A),r.on("destroy",F),{name:"artplayerPluginAmbilight",start:A,stop:F}}}o.defineInteropFlag(t),o.export(t,"default",()=>i),"u">typeof window&&(window.artplayerPluginAmbilight=i)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],loqXi:[function(e,r,t,n){t.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},t.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},t.exportAll=function(e,r){return Object.keys(e).forEach(function(t){"default"===t||"__esModule"===t||Object.prototype.hasOwnProperty.call(r,t)||Object.defineProperty(r,t,{enumerable:!0,get:function(){return e[t]}})}),r},t.export=function(e,r,t){Object.defineProperty(e,r,{enumerable:!0,get:t})}},{}]},["4BFTD"],"4BFTD","parcelRequire4dc0",{});let{default:e}=parcelRequire4dc0("4BFTD");export{e as default}; \ No newline at end of file +function artplayerPluginAmbilight(option = {}) { + return (art) => { + const { $video } = art.template; + const { createElement, addClass, setStyles } = art.constructor.utils; + const { blur = "50px", opacity = 0.5, frequency = 10, duration = 0.3 } = option; + const $ambilight = createElement("div"); + const gridItems = createGridItems($ambilight); + setupAmbilight($ambilight, $video); + setupGridItems(gridItems, blur, opacity, duration); + const updateColors = createColorUpdater($video, gridItems, frequency); + let animationFrameId = null; + function start() { + if (!animationFrameId) { + updateColors(); + } + } + function stop() { + if (animationFrameId) { + cancelAnimationFrame(animationFrameId); + animationFrameId = null; + } + } + art.on("ready", start); + art.on("destroy", stop); + return { + name: "artplayerPluginAmbilight", + start, + stop + }; + function createGridItems($ambilight2) { + $ambilight2.innerHTML = Array.from({ length: 9 }).fill("
").join(""); + return Array.from($ambilight2.children); + } + function setupAmbilight($ambilight2, $video2) { + addClass($ambilight2, "artplayer-plugin-ambilight"); + $video2.parentNode.insertBefore($ambilight2, $video2); + setStyles($ambilight2, { + position: "absolute", + top: 0, + left: 0, + zIndex: 9, + inset: 0, + display: "grid", + gridTemplateColumns: "1fr 1fr 1fr", + gridTemplateRows: "1fr 1fr 1fr" + }); + } + function setupGridItems(gridItems2, blur2, opacity2, duration2) { + gridItems2.forEach(($item) => { + setStyles($item, { + opacity: opacity2, + filter: `blur(${blur2})`, + transition: `background-color ${duration2}s ease` + }); + }); + } + function createColorUpdater($video2, gridItems2, frequency2) { + const canvas = createElement("canvas"); + const ctx = canvas.getContext("2d"); + canvas.width = 3; + canvas.height = 3; + function getAverageColor(x, y, w, h) { + ctx.drawImage($video2, x, y, w, h, 0, 0, 1, 1); + const [r, g, b] = ctx.getImageData(0, 0, 1, 1).data; + return `rgb(${r}, ${g}, ${b})`; + } + let lastUpdateTime = 0; + return function updateColors2() { + const now = performance.now(); + if (now - lastUpdateTime < 1e3 / frequency2 || !art.playing) { + animationFrameId = requestAnimationFrame(updateColors2); + return; + } + lastUpdateTime = now; + const w = $video2.videoWidth / 3; + const h = $video2.videoHeight / 3; + const colors = [ + [0, 0], + [w, 0], + [2 * w, 0], + [0, h], + [w, h], + [2 * w, h], + [0, 2 * h], + [w, 2 * h], + [2 * w, 2 * h] + ].map(([x, y]) => getAverageColor(x, y, w, h)); + gridItems2.forEach(($item, index) => { + $item.style.backgroundColor = colors[index]; + }); + animationFrameId = requestAnimationFrame(updateColors2); + }; + } + }; +} +if (typeof window !== "undefined") { + window.artplayerPluginAmbilight = artplayerPluginAmbilight; +} +export { + artplayerPluginAmbilight as default +}; diff --git a/docs/compiled/artplayer-plugin-asr.js b/docs/compiled/artplayer-plugin-asr.js index 088091312..e41c13bfc 100644 --- a/docs/compiled/artplayer-plugin-asr.js +++ b/docs/compiled/artplayer-plugin-asr.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-asr.js v2.0.0 + * artplayer-plugin-asr.js v2.0.1 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t,r,n,o){var a="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},i="function"==typeof a[n]&&a[n],l=i.i||{},u=i.cache||{},s="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(t,r){if(!u[t]){if(!e[t]){if(o[t])return o[t];var l="function"==typeof a[n]&&a[n];if(!r&&l)return l(t,!0);if(i)return i(t,!0);if(s&&"string"==typeof t)return s(t);var d=Error("Cannot find module '"+t+"'");throw d.code="MODULE_NOT_FOUND",d}f.resolve=function(r){var n=e[t][1][r];return null!=n?n:r},f.cache={};var p=u[t]=new c.Module(t);e[t][0].call(p.exports,f,p,p.exports,a)}return u[t].exports;function f(e){var t=f.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var r={__esModule:!0};return t.forEach(function(e){var t=e[0],n=e[1],o=e[2]||e[0],a=c(n);"*"===t?Object.keys(a).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:function(){return a[e]}})}):"*"===o?Object.defineProperty(r,t,{enumerable:!0,value:a}):Object.defineProperty(r,t,{enumerable:!0,get:function(){return"default"===o?a.__esModule?a.default:a:a[o]}})}),r}return c(t)}}c.isParcelRequire=!0,c.Module=function(e){this.id=e,this.bundle=c,this.require=s,this.exports={}},c.modules=e,c.cache=u,c.parent=i,c.distDir=void 0,c.publicUrl=void 0,c.devServer=void 0,c.i=l,c.register=function(t,r){e[t]=[function(e,t){t.exports=r},{}]},Object.defineProperty(c,"root",{get:function(){return a[n]}}),a[n]=c;for(var d=0;dtypeof module?module.exports=p:"function"==typeof define&&define.amd&&define(function(){return p})}}({"1gnQM":[function(e,t,r,n){var o=e("@parcel/transformer-js/src/esmodule-helpers.js");o.defineInteropFlag(r),o.export(r,"default",()=>l);var a=e("bundle-text:./style.less"),i=o.interopDefault(a);function l(e={}){let{length:t=3,interval:r=100,sampleRate:n=16e3,autoHideTimeout:o=1e4,onAudioChunk:a=()=>null}=e;return e=>{let i=!1,l=null,u=null,s=null,c=null,d=[],p=null,f=!1,y=null,b=null,m=null,g=e.layers.add({name:"asr",html:""});function v(){g.style.display="none"}function h(e){"string"==typeof e&&(clearTimeout(y),y=setTimeout(v,o),g.style.display="",g.innerHTML=e.split(/(?<=[、。!?!?.])\s*/u).map(e=>e.trim()).filter(Boolean).slice(-t).map(e=>`
${e}
`).join(""))}let w=` class RecorderProcessor extends AudioWorkletProcessor { process(inputs) { const input = inputs[0]; if (input && input[0]) { this.port.postMessage(input[0]); } return true; } } registerProcessor('recorder-processor', RecorderProcessor); `;async function x(){return l||"suspended"===(l=new(window.AudioContext||window.webkitAudioContext)({sampleRate:n})).state&&await l.resume(),l}async function A(){if(!u&&e.video)try{return u=l.createMediaElementSource(e.video)}catch(e){console.warn("[artplayerPluginAsr] Direct connection failed:",e)}try{if(b||(b=await j(e.video)),b)return m=l.createMediaStreamSource(b)}catch(e){console.warn("[artplayerPluginAsr] MediaStream fallback failed:",e)}return null}async function j(e){try{if(e.captureStream)return e.captureStream();if(e.mozCaptureStream)return e.mozCaptureStream();return console.warn("[artplayerPluginAsr] captureStream not supported"),null}catch(e){return console.warn("[artplayerPluginAsr] Error capturing stream:",e),null}}async function P(){if(!i)try{await x();let e=await A();if(!e)throw Error("Could not establish audio source");if(!f){let e,t=(e=new Blob([w],{type:"application/javascript"}),URL.createObjectURL(e));await l.audioWorklet.addModule(t),URL.revokeObjectURL(t),f=!0}(c=l.createGain()).gain.value=1,(s=new AudioWorkletNode(l,"recorder-processor")).port.onmessage=e=>{d.push(new Float32Array(e.data))},e.connect(s),e.connect(c),c.connect(l.destination);let t=r/1e3*n;p=setInterval(async()=>{let e,r,o,i;if(0===d.length)return;let l=new Float32Array(0);for(;l.length{for(let r=0;re.stop()),b=null),l&&(await l.close(),l=null),f=!1}return e.on("video:volumechange",()=>{c&&(c.gain.value=e.volume)}),e.on("play",P),e.on("pause",M),e.on("destroy",U),{name:"artplayerPluginAsr",stop:U,hide:v,append:h}}}if("u">typeof document&&!document.getElementById("artplayer-plugin-asr")){let e=document.createElement("style");e.id="artplayer-plugin-asr",e.textContent=i.default,document.head.appendChild(e)}"u">typeof window&&(window.artplayerPluginAsr=l)},{"bundle-text:./style.less":"gfAut","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],gfAut:[function(e,t,r,n){t.exports=".art-video-player .art-layer-asr{z-index:150;justify-content:end;gap:var(--art-subtitle-gap);padding:0 2%;padding-bottom:var(--art-subtitle-bottom);transition:padding-bottom var(--art-transition-duration) ease;text-shadow:var(--art-subtitle-border) 1px 0 1px, var(--art-subtitle-border) 0 1px 1px, var(--art-subtitle-border) -1px 0 1px, var(--art-subtitle-border) 0 -1px 1px, var(--art-subtitle-border) 1px 1px 1px, var(--art-subtitle-border) -1px -1px 1px, var(--art-subtitle-border) 1px -1px 1px, var(--art-subtitle-border) -1px 1px 1px;flex-direction:column;font-size:1rem;display:flex;position:absolute;inset:0;pointer-events:none!important}.art-video-player.art-control-show .art-layer-asr{padding-bottom:calc(var(--art-control-height) + var(--art-subtitle-bottom))}"},{}],"6ykb1":[function(e,t,r,n){r.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},r.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.exportAll=function(e,t){return Object.keys(e).forEach(function(r){"default"===r||"__esModule"===r||Object.prototype.hasOwnProperty.call(t,r)||Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[r]}})}),t},r.export=function(e,t,r){Object.defineProperty(e,t,{enumerable:!0,get:r})}},{}]},["1gnQM"],"1gnQM","parcelRequire4dc0",{}); \ No newline at end of file +!function(t,e){"object"===typeof exports&&"undefined"!==typeof module?module.exports=e():"function"==typeof define&&define.amd?(t.ArtplayerPluginAsr=e(),define(function(){return t.ArtplayerPluginAsr})):(t="undefined"!==typeof globalThis?globalThis:t||self).ArtplayerPluginAsr=e()}(this,function(){"use strict";function t(t={}){const{length:e=3,interval:n=100,sampleRate:r=16e3,autoHideTimeout:a=1e4,onAudioChunk:o=()=>null}=t;return t=>{let i=!1,l=null,s=null,u=null,c=null,d=[],p=null,f=!1,y=null,m=null,g=null;const w=t.layers.add({name:"asr",html:""});function h(){w.style.display="none"}function b(t){var n;"string"===typeof t&&(clearTimeout(y),y=setTimeout(h,a),w.style.display="",w.innerHTML=(n=t,n.split(/(?<=[\u3001\u3002\uff01\uff1f!?.])\s*/u).map(t=>t.trim()).filter(Boolean).slice(-e)).map(t=>`
${t}
`).join(""))}async function v(){if(!s&&t.video)try{return s=l.createMediaElementSource(t.video),s}catch(e){console.warn("[artplayerPluginAsr] Direct connection failed:",e)}try{if(m||(m=await async function(t){try{return t.captureStream?t.captureStream():t.mozCaptureStream?t.mozCaptureStream():(console.warn("[artplayerPluginAsr] captureStream not supported"),null)}catch(e){return console.warn("[artplayerPluginAsr] Error capturing stream:",e),null}}(t.video)),m)return g=l.createMediaStreamSource(m),g}catch(e){console.warn("[artplayerPluginAsr] MediaStream fallback failed:",e)}return null}async function x(){i&&(i=!1,clearInterval(p),p=null,u&&(u.disconnect(),u.port.onmessage=null,u=null),c&&(c.disconnect(),c=null),d=[])}async function A(){await x(),g&&(g.disconnect(),g=null),s&&(s.disconnect(),s=null),m&&(m.getTracks().forEach(t=>t.stop()),m=null),l&&(await l.close(),l=null),f=!1}return t.on("video:volumechange",()=>{c&&(c.gain.value=t.volume)}),t.on("play",async function(){if(!i)try{await async function(){return l||(l=new(window.AudioContext||window.webkitAudioContext)({sampleRate:r}),"suspended"===l.state&&await l.resume(),l)}();const t=await v();if(!t)throw new Error("Could not establish audio source");if(!f){const t=(()=>{const t=new Blob(["\n class RecorderProcessor extends AudioWorkletProcessor {\n process(inputs) {\n const input = inputs[0];\n if (input && input[0]) {\n this.port.postMessage(input[0]);\n }\n return true;\n }\n }\n registerProcessor('recorder-processor', RecorderProcessor);\n "],{type:"application/javascript"});return URL.createObjectURL(t)})();await l.audioWorklet.addModule(t),URL.revokeObjectURL(t),f=!0}c=l.createGain(),c.gain.value=1,u=new AudioWorkletNode(l,"recorder-processor"),u.port.onmessage=t=>{d.push(new Float32Array(t.data))},t.connect(u),t.connect(c),c.connect(l.destination);const e=r*(n/1e3);p=setInterval(async()=>{if(0===d.length)return;let t=new Float32Array(0);for(;t.length{for(let n=0;ntypeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},u="function"==typeof a[n]&&a[n],i=u.i||{},l=u.cache||{},s="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(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(u)return u(t,!0);if(s&&"string"==typeof t)return s(t);var f=Error("Cannot find module '"+t+"'");throw f.code="MODULE_NOT_FOUND",f}d.resolve=function(r){var n=e[t][1][r];return null!=n?n:r},d.cache={};var p=l[t]=new c.Module(t);e[t][0].call(p.exports,d,p,p.exports,a)}return l[t].exports;function d(e){var t=d.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var r={__esModule:!0};return t.forEach(function(e){var t=e[0],n=e[1],o=e[2]||e[0],a=c(n);"*"===t?Object.keys(a).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:function(){return a[e]}})}):"*"===o?Object.defineProperty(r,t,{enumerable:!0,value:a}):Object.defineProperty(r,t,{enumerable:!0,get:function(){return"default"===o?a.__esModule?a.default:a:a[o]}})}),r}return c(t)}}c.isParcelRequire=!0,c.Module=function(e){this.id=e,this.bundle=c,this.require=s,this.exports={}},c.modules=e,c.cache=l,c.parent=u,c.distDir=void 0,c.publicUrl=void 0,c.devServer=void 0,c.i=i,c.register=function(t,r){e[t]=[function(e,t){t.exports=r},{}]},Object.defineProperty(c,"root",{get:function(){return a[n]}}),a[n]=c;for(var f=0;ftypeof module?module.exports=p:"function"==typeof define&&define.amd&&define(function(){return p})}}({"98QZN":[function(e,t,r,n){var o=e("@parcel/transformer-js/src/esmodule-helpers.js");o.defineInteropFlag(r),o.export(r,"default",function(){return s});var a=e("@swc/helpers/cjs/_async_to_generator.cjs"),u=e("@swc/helpers/cjs/_ts_generator.cjs"),i=e("bundle-text:./style.less"),l=o.interopDefault(i);function s(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.length,r=void 0===t?3:t,n=e.interval,o=void 0===n?100:n,i=e.sampleRate,l=void 0===i?16e3:i,s=e.autoHideTimeout,c=void 0===s?1e4:s,f=e.onAudioChunk,p=void 0===f?function(){return null}:f;return function(e){var t=!1,n=null,i=null,s=null,f=null,d=[],b=null,h=!1,v=null,y=null,m=null,g=e.layers.add({name:"asr",html:""});function w(){g.style.display="none"}function x(e){"string"==typeof e&&(clearTimeout(v),v=setTimeout(w,c),g.style.display="",g.innerHTML=e.split(RegExp("(?<=[、。!?!?.])\\s*","u")).map(function(e){return e.trim()}).filter(Boolean).slice(-r).map(function(e){return'
'.concat(e,"
")}).join(""))}var _=function(){var e=new Blob(["\n class RecorderProcessor extends AudioWorkletProcessor {\n process(inputs) {\n const input = inputs[0];\n if (input && input[0]) {\n this.port.postMessage(input[0]);\n }\n return true;\n }\n }\n registerProcessor('recorder-processor', RecorderProcessor);\n "],{type:"application/javascript"});return URL.createObjectURL(e)};function j(){return(0,a._)(function(){return(0,u._)(this,function(e){return t&&(t=!1,clearInterval(b),b=null,s&&(s.disconnect(),s.port.onmessage=null,s=null),f&&(f.disconnect(),f=null),d=[]),[2]})})()}function A(){return(0,a._)(function(){return(0,u._)(this,function(e){switch(e.label){case 0:return[4,j()];case 1:if(e.sent(),m&&(m.disconnect(),m=null),i&&(i.disconnect(),i=null),y&&(y.getTracks().forEach(function(e){return e.stop()}),y=null),!n)return[3,3];return[4,n.close()];case 2:e.sent(),n=null,e.label=3;case 3:return h=!1,[2]}})})()}return e.on("video:volumechange",function(){f&&(f.gain.value=e.volume)}),e.on("play",function(){return(0,a._)(function(){var r,c,v;return(0,u._)(this,function(g){switch(g.label){case 0:if(t)return[2];g.label=1;case 1:return g.trys.push([1,6,,8]),[4,(0,a._)(function(){return(0,u._)(this,function(e){switch(e.label){case 0:if(n)return[2,n];if("suspended"!==(n=new(window.AudioContext||window.webkitAudioContext)({sampleRate:l})).state)return[3,2];return[4,n.resume()];case 1:e.sent(),e.label=2;case 2:return[2,n]}})})()];case 2:return g.sent(),[4,(0,a._)(function(){return(0,u._)(this,function(t){switch(t.label){case 0:if(!i&&e.video)try{return i=n.createMediaElementSource(e.video),[2,i]}catch(e){console.warn("[artplayerPluginAsr] Direct connection failed:",e)}t.label=1;case 1:var r;if(t.trys.push([1,4,,5]),y)return[3,3];return[4,(r=e.video,(0,a._)(function(){return(0,u._)(this,function(e){try{if(r.captureStream)return[2,r.captureStream()];if(r.mozCaptureStream)return[2,r.mozCaptureStream()];return console.warn("[artplayerPluginAsr] captureStream not supported"),[2,null]}catch(e){return console.warn("[artplayerPluginAsr] Error capturing stream:",e),[2,null]}})})())];case 2:y=t.sent(),t.label=3;case 3:if(y)return[2,m=n.createMediaStreamSource(y)];return[3,5];case 4:return console.warn("[artplayerPluginAsr] MediaStream fallback failed:",t.sent()),[3,5];case 5:return[2,null]}})})()];case 3:if(!(r=g.sent()))throw Error("Could not establish audio source");if(h)return[3,5];return c=_(),[4,n.audioWorklet.addModule(c)];case 4:g.sent(),URL.revokeObjectURL(c),h=!0,g.label=5;case 5:return(f=n.createGain()).gain.value=1,(s=new AudioWorkletNode(n,"recorder-processor")).port.onmessage=function(e){d.push(new Float32Array(e.data))},r.connect(s),r.connect(f),f.connect(n.destination),v=o/1e3*l,b=setInterval(function(){return(0,a._)(function(){var e,t,r,n;return(0,u._)(this,function(o){switch(o.label){case 0:var a,u,i,s,c;if(0===d.length)return[2];for(e=new Float32Array(0);e.lengthtypeof document&&!document.getElementById("artplayer-plugin-asr")){var c=document.createElement("style");c.id="artplayer-plugin-asr",c.textContent=l.default,document.head.appendChild(c)}"u">typeof window&&(window.artplayerPluginAsr=s)},{"@swc/helpers/cjs/_async_to_generator.cjs":"cZn0e","@swc/helpers/cjs/_ts_generator.cjs":"eltGh","bundle-text:./style.less":"gKjNi","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],cZn0e:[function(e,t,r,n){"use strict";function o(e,t,r,n,o,a,u){try{var i=e[a](u),l=i.value}catch(e){r(e);return}i.done?t(l):Promise.resolve(l).then(n,o)}r._=function(e){return function(){var t=this,r=arguments;return new Promise(function(n,a){var u=e.apply(t,r);function i(e){o(u,n,a,i,l,"next",e)}function l(e){o(u,n,a,i,l,"throw",e)}i(void 0)})}}},{}],eltGh:[function(e,t,r,n){"use strict";r._=function(e,t){var r,n,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},u=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(u,"next",{value:l(0)}),i(u,"throw",{value:l(1)}),i(u,"return",{value:l(2)}),"function"==typeof Symbol&&i(u,Symbol.iterator,{value:function(){return this}}),u;function l(i){return function(l){var s=[i,l];if(r)throw TypeError("Generator is already executing.");for(;u&&(u=0,s[0]&&(a=0)),a;)try{if(r=1,n&&(o=2&s[0]?n.return:s[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,s[1])).done)return o;switch(n=0,o&&(s=[2&s[0],o.value]),s[0]){case 0:case 1:o=s;break;case 4:return a.label++,{value:s[1],done:!1};case 5:a.label++,n=s[1],s=[0];continue;case 7:s=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===s[0]||2===s[0])){a=0;continue}if(3===s[0]&&(!o||s[1]>o[0]&&s[1]new Promise((r,o)=>{var a=t=>{try{l(n.next(t))}catch(e){o(e)}},i=t=>{try{l(n.throw(t))}catch(e){o(e)}},l=t=>t.done?r(t.value):Promise.resolve(t.value).then(a,i);l((n=n.apply(t,e)).next())});function e(e={}){const{length:n=3,interval:r=100,sampleRate:o=16e3,autoHideTimeout:a=1e4,onAudioChunk:i=()=>null}=e;return e=>{let l=!1,s=null,u=null,c=null,d=null,p=[],f=null,y=!1,m=null,h=null,g=null;const v=e.layers.add({name:"asr",html:""});function b(){v.style.display="none"}function w(t){var e;"string"===typeof t&&(clearTimeout(m),m=setTimeout(b,a),v.style.display="",v.innerHTML=(e=t,e.split(new RegExp("(?<=[\u3001\u3002\uff01\uff1f!?.])\\s*","u")).map(t=>t.trim()).filter(Boolean).slice(-n)).map(t=>`
${t}
`).join(""))}function x(){return t(this,null,function*(){if(!u&&e.video)try{return u=s.createMediaElementSource(e.video),u}catch(n){console.warn("[artplayerPluginAsr] Direct connection failed:",n)}try{if(h||(h=yield function(e){return t(this,null,function*(){try{return e.captureStream?e.captureStream():e.mozCaptureStream?e.mozCaptureStream():(console.warn("[artplayerPluginAsr] captureStream not supported"),null)}catch(n){return console.warn("[artplayerPluginAsr] Error capturing stream:",n),null}})}(e.video)),h)return g=s.createMediaStreamSource(h),g}catch(n){console.warn("[artplayerPluginAsr] MediaStream fallback failed:",n)}return null})}function A(){return t(this,null,function*(){l&&(l=!1,clearInterval(f),f=null,c&&(c.disconnect(),c.port.onmessage=null,c=null),d&&(d.disconnect(),d=null),p=[])})}function U(){return t(this,null,function*(){yield A(),g&&(g.disconnect(),g=null),u&&(u.disconnect(),u=null),h&&(h.getTracks().forEach(t=>t.stop()),h=null),s&&(yield s.close(),s=null),y=!1})}return e.on("video:volumechange",()=>{d&&(d.gain.value=e.volume)}),e.on("play",function(){return t(this,null,function*(){if(!l)try{yield function(){return t(this,null,function*(){return s||(s=new(window.AudioContext||window.webkitAudioContext)({sampleRate:o}),"suspended"===s.state&&(yield s.resume()),s)})}();const e=yield x();if(!e)throw new Error("Could not establish audio source");if(!y){const t=(()=>{const t=new Blob(["\n class RecorderProcessor extends AudioWorkletProcessor {\n process(inputs) {\n const input = inputs[0];\n if (input && input[0]) {\n this.port.postMessage(input[0]);\n }\n return true;\n }\n }\n registerProcessor('recorder-processor', RecorderProcessor);\n "],{type:"application/javascript"});return URL.createObjectURL(t)})();yield s.audioWorklet.addModule(t),URL.revokeObjectURL(t),y=!0}d=s.createGain(),d.gain.value=1,c=new AudioWorkletNode(s,"recorder-processor"),c.port.onmessage=t=>{p.push(new Float32Array(t.data))},e.connect(c),e.connect(d),d.connect(s.destination);const n=o*(r/1e3);f=setInterval(()=>t(null,null,function*(){if(0===p.length)return;let t=new Float32Array(0);for(;t.length{for(let n=0;ntypeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},l="function"==typeof a[n]&&a[n],i=l.i||{},u=l.cache||{},s="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(t,r){if(!u[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(l)return l(t,!0);if(s&&"string"==typeof t)return s(t);var d=Error("Cannot find module '"+t+"'");throw d.code="MODULE_NOT_FOUND",d}f.resolve=function(r){var n=e[t][1][r];return null!=n?n:r},f.cache={};var p=u[t]=new c.Module(t);e[t][0].call(p.exports,f,p,p.exports,a)}return u[t].exports;function f(e){var t=f.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var r={__esModule:!0};return t.forEach(function(e){var t=e[0],n=e[1],o=e[2]||e[0],a=c(n);"*"===t?Object.keys(a).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:function(){return a[e]}})}):"*"===o?Object.defineProperty(r,t,{enumerable:!0,value:a}):Object.defineProperty(r,t,{enumerable:!0,get:function(){return"default"===o?a.__esModule?a.default:a:a[o]}})}),r}return c(t)}}c.isParcelRequire=!0,c.Module=function(e){this.id=e,this.bundle=c,this.require=s,this.exports={}},c.modules=e,c.cache=u,c.parent=l,c.distDir=void 0,c.publicUrl=void 0,c.devServer=void 0,c.i=i,c.register=function(t,r){e[t]=[function(e,t){t.exports=r},{}]},Object.defineProperty(c,"root",{get:function(){return a[n]}}),a[n]=c;for(var d=0;dtypeof module?module.exports=p:"function"==typeof define&&define.amd&&define(function(){return p})}}({ejGkt:[function(e,t,r,n){var o=e("@parcel/transformer-js/src/esmodule-helpers.js");o.defineInteropFlag(r),o.export(r,"default",()=>i);var a=e("bundle-text:./style.less"),l=o.interopDefault(a);function i(e={}){let{length:t=3,interval:r=100,sampleRate:n=16e3,autoHideTimeout:o=1e4,onAudioChunk:a=()=>null}=e;return e=>{let l=!1,i=null,u=null,s=null,c=null,d=[],p=null,f=!1,y=null,m=null,b=null,g=e.layers.add({name:"asr",html:""});function v(){g.style.display="none"}function h(e){"string"==typeof e&&(clearTimeout(y),y=setTimeout(v,o),g.style.display="",g.innerHTML=e.split(/(?<=[、。!?!?.])\s*/u).map(e=>e.trim()).filter(Boolean).slice(-t).map(e=>`
${e}
`).join(""))}let w=` class RecorderProcessor extends AudioWorkletProcessor { process(inputs) { const input = inputs[0]; if (input && input[0]) { this.port.postMessage(input[0]); } return true; } } registerProcessor('recorder-processor', RecorderProcessor); `;async function x(){return i||"suspended"===(i=new(window.AudioContext||window.webkitAudioContext)({sampleRate:n})).state&&await i.resume(),i}async function j(){if(!u&&e.video)try{return u=i.createMediaElementSource(e.video)}catch(e){console.warn("[artplayerPluginAsr] Direct connection failed:",e)}try{if(m||(m=await A(e.video)),m)return b=i.createMediaStreamSource(m)}catch(e){console.warn("[artplayerPluginAsr] MediaStream fallback failed:",e)}return null}async function A(e){try{if(e.captureStream)return e.captureStream();if(e.mozCaptureStream)return e.mozCaptureStream();return console.warn("[artplayerPluginAsr] captureStream not supported"),null}catch(e){return console.warn("[artplayerPluginAsr] Error capturing stream:",e),null}}async function P(){if(!l)try{await x();let e=await j();if(!e)throw Error("Could not establish audio source");if(!f){let e,t=(e=new Blob([w],{type:"application/javascript"}),URL.createObjectURL(e));await i.audioWorklet.addModule(t),URL.revokeObjectURL(t),f=!0}(c=i.createGain()).gain.value=1,(s=new AudioWorkletNode(i,"recorder-processor")).port.onmessage=e=>{d.push(new Float32Array(e.data))},e.connect(s),e.connect(c),c.connect(i.destination);let t=r/1e3*n;p=setInterval(async()=>{let e,r,o,l;if(0===d.length)return;let i=new Float32Array(0);for(;i.length{for(let r=0;re.stop()),m=null),i&&(await i.close(),i=null),f=!1}return e.on("video:volumechange",()=>{c&&(c.gain.value=e.volume)}),e.on("play",P),e.on("pause",U),e.on("destroy",O),{name:"artplayerPluginAsr",stop:O,hide:v,append:h}}}if("u">typeof document&&!document.getElementById("artplayer-plugin-asr")){let e=document.createElement("style");e.id="artplayer-plugin-asr",e.textContent=l.default,document.head.appendChild(e)}"u">typeof window&&(window.artplayerPluginAsr=i)},{"bundle-text:./style.less":"27Ck2","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"27Ck2":[function(e,t,r,n){t.exports=".art-video-player .art-layer-asr{z-index:150;justify-content:end;gap:var(--art-subtitle-gap);padding:0 2%;padding-bottom:var(--art-subtitle-bottom);transition:padding-bottom var(--art-transition-duration) ease;text-shadow:var(--art-subtitle-border) 1px 0 1px, var(--art-subtitle-border) 0 1px 1px, var(--art-subtitle-border) -1px 0 1px, var(--art-subtitle-border) 0 -1px 1px, var(--art-subtitle-border) 1px 1px 1px, var(--art-subtitle-border) -1px -1px 1px, var(--art-subtitle-border) 1px -1px 1px, var(--art-subtitle-border) -1px 1px 1px;flex-direction:column;font-size:1rem;display:flex;position:absolute;inset:0;pointer-events:none!important}.art-video-player.art-control-show .art-layer-asr{padding-bottom:calc(var(--art-control-height) + var(--art-subtitle-bottom))}"},{}],loqXi:[function(e,t,r,n){r.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},r.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.exportAll=function(e,t){return Object.keys(e).forEach(function(r){"default"===r||"__esModule"===r||Object.prototype.hasOwnProperty.call(t,r)||Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[r]}})}),t},r.export=function(e,t,r){Object.defineProperty(e,t,{enumerable:!0,get:r})}},{}]},["ejGkt"],"ejGkt","parcelRequire4dc0",{});let{default:e}=parcelRequire4dc0("ejGkt");export{e as default}; \ No newline at end of file +const style = ".art-video-player .art-layer-asr{pointer-events:none!important;position:absolute;z-index:150;inset:0;display:flex;flex-direction:column;justify-content:end;padding:0 2%;font-size:1rem;gap:var(--art-subtitle-gap);padding-bottom:var(--art-subtitle-bottom);transition:padding-bottom var(--art-transition-duration) ease;text-shadow:var(--art-subtitle-border) 1px 0 1px,var(--art-subtitle-border) 0 1px 1px,var(--art-subtitle-border) -1px 0 1px,var(--art-subtitle-border) 0 -1px 1px,var(--art-subtitle-border) 1px 1px 1px,var(--art-subtitle-border) -1px -1px 1px,var(--art-subtitle-border) 1px -1px 1px,var(--art-subtitle-border) -1px 1px 1px}.art-video-player.art-control-show .art-layer-asr{padding-bottom:calc(var(--art-control-height) + var(--art-subtitle-bottom))}"; +function artplayerPluginAsr(option = {}) { + const { + length = 3, + interval = 100, + sampleRate = 16e3, + autoHideTimeout = 1e4, + onAudioChunk = () => null + } = option; + return (art) => { + let started = false; + let audioCtx = null; + let sourceNode = null; + let recorderNode = null; + let gainNode = null; + let bufferChunks = []; + let timer = null; + let workletLoaded = false; + let hideTimer = null; + let mediaStream = null; + let mediaStreamSource = null; + const $asr = art.layers.add({ + name: "asr", + html: "" + }); + function splitByPunctuation(text) { + return text.split(/(?<=[、。!?!?.])\s*/u).map((s) => s.trim()).filter(Boolean).slice(-length); + } + function hide() { + $asr.style.display = "none"; + } + function append(subtitle) { + if (typeof subtitle !== "string") + return; + clearTimeout(hideTimer); + hideTimer = setTimeout(hide, autoHideTimeout); + $asr.style.display = ""; + $asr.innerHTML = splitByPunctuation(subtitle).map((line) => `
${line}
`).join(""); + } + const recorderProcessorCode = ` + class RecorderProcessor extends AudioWorkletProcessor { + process(inputs) { + const input = inputs[0]; + if (input && input[0]) { + this.port.postMessage(input[0]); + } + return true; + } + } + registerProcessor('recorder-processor', RecorderProcessor); + `; + const createWorkletBlobUrl = () => { + const blob = new Blob([recorderProcessorCode], { type: "application/javascript" }); + return URL.createObjectURL(blob); + }; + function floatTo16BitPCM(float32Array) { + const len = float32Array.length; + const buffer = new ArrayBuffer(len * 2); + const view = new DataView(buffer); + for (let i = 0; i < len; i++) { + const s = Math.max(-1, Math.min(1, float32Array[i])); + view.setInt16(i * 2, s < 0 ? s * 32768 : s * 32767, true); + } + return buffer; + } + function pcmToWav(pcmBuffer, sampleRate2) { + const pcmLength = pcmBuffer.byteLength; + const wavBuffer = new ArrayBuffer(44 + pcmLength); + const view = new DataView(wavBuffer); + const writeString = (offset, str) => { + for (let i = 0; i < str.length; i++) { + view.setUint8(offset + i, str.charCodeAt(i)); + } + }; + writeString(0, "RIFF"); + view.setUint32(4, 36 + pcmLength, true); + writeString(8, "WAVE"); + writeString(12, "fmt "); + view.setUint32(16, 16, true); + view.setUint16(20, 1, true); + view.setUint16(22, 1, true); + view.setUint32(24, sampleRate2, true); + view.setUint32(28, sampleRate2 * 2, true); + view.setUint16(32, 2, true); + view.setUint16(34, 16, true); + writeString(36, "data"); + view.setUint32(40, pcmLength, true); + new Uint8Array(wavBuffer).set(new Uint8Array(pcmBuffer), 44); + return wavBuffer; + } + async function setupAudioContext() { + if (audioCtx) + return audioCtx; + audioCtx = new (window.AudioContext || window.webkitAudioContext)({ sampleRate }); + if (audioCtx.state === "suspended") + await audioCtx.resume(); + return audioCtx; + } + async function setupAudioSource() { + if (!sourceNode && art.video) { + try { + sourceNode = audioCtx.createMediaElementSource(art.video); + return sourceNode; + } catch (err) { + console.warn("[artplayerPluginAsr] Direct connection failed:", err); + } + } + try { + if (!mediaStream) { + mediaStream = await captureAudioFromVideo(art.video); + } + if (mediaStream) { + mediaStreamSource = audioCtx.createMediaStreamSource(mediaStream); + return mediaStreamSource; + } + } catch (err) { + console.warn("[artplayerPluginAsr] MediaStream fallback failed:", err); + } + return null; + } + async function captureAudioFromVideo(videoElement) { + try { + if (videoElement.captureStream) + return videoElement.captureStream(); + if (videoElement.mozCaptureStream) + return videoElement.mozCaptureStream(); + console.warn("[artplayerPluginAsr] captureStream not supported"); + return null; + } catch (err) { + console.warn("[artplayerPluginAsr] Error capturing stream:", err); + return null; + } + } + async function startCapture() { + if (started) + return; + try { + await setupAudioContext(); + const audioSource = await setupAudioSource(); + if (!audioSource) + throw new Error("Could not establish audio source"); + if (!workletLoaded) { + const blobUrl = createWorkletBlobUrl(); + await audioCtx.audioWorklet.addModule(blobUrl); + URL.revokeObjectURL(blobUrl); + workletLoaded = true; + } + gainNode = audioCtx.createGain(); + gainNode.gain.value = 1; + recorderNode = new AudioWorkletNode(audioCtx, "recorder-processor"); + recorderNode.port.onmessage = (event) => { + bufferChunks.push(new Float32Array(event.data)); + }; + audioSource.connect(recorderNode); + audioSource.connect(gainNode); + gainNode.connect(audioCtx.destination); + const CHUNK_SAMPLES = sampleRate * (interval / 1e3); + timer = setInterval(async () => { + if (bufferChunks.length === 0) + return; + let accumulated = new Float32Array(0); + while (accumulated.length < CHUNK_SAMPLES && bufferChunks.length) { + const next = bufferChunks.shift(); + const tmp = new Float32Array(accumulated.length + next.length); + tmp.set(accumulated, 0); + tmp.set(next, accumulated.length); + accumulated = tmp; + } + if (accumulated.length < CHUNK_SAMPLES) + return; + const chunkToSend = accumulated.slice(0, CHUNK_SAMPLES); + const pcm = floatTo16BitPCM(chunkToSend); + const wav = pcmToWav(pcm, sampleRate); + const subtitle = await onAudioChunk({ pcm, wav }); + append(subtitle); + }, interval); + started = true; + } catch (err) { + console.error("[artplayerPluginAsr] Initialization failed:", err); + await stopCapture(); + } + } + async function stopCapture() { + if (!started) + return; + started = false; + clearInterval(timer); + timer = null; + if (recorderNode) { + recorderNode.disconnect(); + recorderNode.port.onmessage = null; + recorderNode = null; + } + if (gainNode) { + gainNode.disconnect(); + gainNode = null; + } + bufferChunks = []; + } + async function destroy() { + await stopCapture(); + if (mediaStreamSource) { + mediaStreamSource.disconnect(); + mediaStreamSource = null; + } + if (sourceNode) { + sourceNode.disconnect(); + sourceNode = null; + } + if (mediaStream) { + mediaStream.getTracks().forEach((track) => track.stop()); + mediaStream = null; + } + if (audioCtx) { + await audioCtx.close(); + audioCtx = null; + } + workletLoaded = false; + } + art.on("video:volumechange", () => { + if (gainNode) { + gainNode.gain.value = art.volume; + } + }); + art.on("play", startCapture); + art.on("pause", stopCapture); + art.on("destroy", destroy); + return { + name: "artplayerPluginAsr", + stop: destroy, + hide, + append + }; + }; +} +if (typeof document !== "undefined") { + if (!document.getElementById("artplayer-plugin-asr")) { + const $style = document.createElement("style"); + $style.id = "artplayer-plugin-asr"; + $style.textContent = style; + document.head.appendChild($style); + } +} +if (typeof window !== "undefined") { + window.artplayerPluginAsr = artplayerPluginAsr; +} +export { + artplayerPluginAsr as default +}; diff --git a/docs/compiled/artplayer-plugin-audio-track.js b/docs/compiled/artplayer-plugin-audio-track.js index 8364e5381..a6cb7cc8f 100644 --- a/docs/compiled/artplayer-plugin-audio-track.js +++ b/docs/compiled/artplayer-plugin-audio-track.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-audio-track.js v1.0.1 + * artplayer-plugin-audio-track.js v1.0.2 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,r,t,o,n){var u="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},i="function"==typeof u[o]&&u[o],a=i.i||{},l=i.cache||{},c="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function f(r,t){if(!l[r]){if(!e[r]){if(n[r])return n[r];var a="function"==typeof u[o]&&u[o];if(!t&&a)return a(r,!0);if(i)return i(r,!0);if(c&&"string"==typeof r)return c(r);var d=Error("Cannot find module '"+r+"'");throw d.code="MODULE_NOT_FOUND",d}s.resolve=function(t){var o=e[r][1][t];return null!=o?o:t},s.cache={};var p=l[r]=new f.Module(r);e[r][0].call(p.exports,s,p,p.exports,u)}return l[r].exports;function s(e){var r=s.resolve(e);if(!1===r)return{};if(Array.isArray(r)){var t={__esModule:!0};return r.forEach(function(e){var r=e[0],o=e[1],n=e[2]||e[0],u=f(o);"*"===r?Object.keys(u).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:function(){return u[e]}})}):"*"===n?Object.defineProperty(t,r,{enumerable:!0,value:u}):Object.defineProperty(t,r,{enumerable:!0,get:function(){return"default"===n?u.__esModule?u.default:u:u[n]}})}),t}return f(r)}}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=i,f.distDir=void 0,f.publicUrl=void 0,f.devServer=void 0,f.i=a,f.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]},Object.defineProperty(f,"root",{get:function(){return u[o]}}),u[o]=f;for(var d=0;dtypeof module?module.exports=p:"function"==typeof define&&define.amd&&define(function(){return p})}}({b4T6O:[function(e,r,t,o){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");function u(e){return r=>{let{url:t,offset:o=0,sync:n=.3}=e,u=new Audio;function i(){if(!r.video||!t)return;let e=r.currentTime+o;Math.abs(u.currentTime-e)>n&&(u.currentTime=e)}return u.preload="auto",t&&(u.src=t),r.on("play",()=>{t&&(i(),u.play().catch(e=>{console.warn(e)}))}),r.on("pause",()=>{u.pause()}),r.on("seek",()=>{i()}),r.on("video:timeupdate",()=>{r.playing&&i()}),r.on("video:ratechange",()=>{u.playbackRate=r.video.playbackRate}),r.on("video:volumechange",()=>{u.volume=r.volume,u.muted=r.muted}),r.on("video:waiting",()=>{u.pause()}),r.on("video:playing",()=>{t&&r.playing&&u.play().catch(e=>{console.warn(e)})}),r.on("destroy",()=>{u.pause(),u.src="",u.load()}),u.volume=r.volume,u.muted=r.muted,u.playbackRate=r.video?.playbackRate||1,{name:"artplayerPluginAudioTrack",audio:u,update:function(e){e.url&&e.url!==t&&(u.src=t=e.url,r.playing&&u.play().catch(e=>console.warn(e))),void 0!==e.offset&&(o=e.offset),void 0!==e.sync&&(n=e.sync)}}}}n.defineInteropFlag(t),n.export(t,"default",()=>u),"u">typeof window&&(window.artplayerPluginAudioTrack=u)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"6ykb1":[function(e,r,t,o){t.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},t.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},t.exportAll=function(e,r){return Object.keys(e).forEach(function(t){"default"===t||"__esModule"===t||Object.prototype.hasOwnProperty.call(r,t)||Object.defineProperty(r,t,{enumerable:!0,get:function(){return e[t]}})}),r},t.export=function(e,r,t){Object.defineProperty(e,r,{enumerable:!0,get:t})}},{}]},["b4T6O"],"b4T6O","parcelRequire4dc0",{}); \ No newline at end of file +!function(e,o){"object"===typeof exports&&"undefined"!==typeof module?module.exports=o():"function"==typeof define&&define.amd?(t.ArtplayerPluginAudioTrack=o(),define(function(){return t.ArtplayerPluginAudioTrack})):(e="undefined"!==typeof globalThis?globalThis:e||self).ArtplayerPluginAudioTrack=o()}(this,function(){"use strict";function e(e){return o=>{let{url:n,offset:a=0,sync:t=.3}=e;const i=new Audio;function u(){if(!o.video||!n)return;const e=o.currentTime+a;Math.abs(i.currentTime-e)>t&&(i.currentTime=e)}return i.preload="auto",n&&(i.src=n),o.on("play",()=>{n&&(u(),i.play().catch(e=>{console.warn(e)}))}),o.on("pause",()=>{i.pause()}),o.on("seek",()=>{u()}),o.on("video:timeupdate",()=>{o.playing&&u()}),o.on("video:ratechange",()=>{i.playbackRate=o.video.playbackRate}),o.on("video:volumechange",()=>{i.volume=o.volume,i.muted=o.muted}),o.on("video:waiting",()=>{i.pause()}),o.on("video:playing",()=>{n&&o.playing&&i.play().catch(e=>{console.warn(e)})}),o.on("destroy",()=>{i.pause(),i.src="",i.load()}),i.volume=o.volume,i.muted=o.muted,i.playbackRate=o.video?.playbackRate||1,{name:"artplayerPluginAudioTrack",audio:i,update:function(e){e.url&&e.url!==n&&(n=e.url,i.src=n,o.playing&&i.play().catch(e=>console.warn(e))),void 0!==e.offset&&(a=e.offset),void 0!==e.sync&&(t=e.sync)}}}}return"undefined"!==typeof window&&(window.artplayerPluginAudioTrack=e),e}); diff --git a/docs/compiled/artplayer-plugin-audio-track.legacy.js b/docs/compiled/artplayer-plugin-audio-track.legacy.js index 47ef07a6c..492b2e3a6 100644 --- a/docs/compiled/artplayer-plugin-audio-track.legacy.js +++ b/docs/compiled/artplayer-plugin-audio-track.legacy.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-audio-track.js v1.0.1 + * artplayer-plugin-audio-track.js v1.0.2 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,n,o,t,r){var u="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},i="function"==typeof u[t]&&u[t],a=i.i||{},c=i.cache||{},f="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function l(n,o){if(!c[n]){if(!e[n]){if(r[n])return r[n];var a="function"==typeof u[t]&&u[t];if(!o&&a)return a(n,!0);if(i)return i(n,!0);if(f&&"string"==typeof n)return f(n);var d=Error("Cannot find module '"+n+"'");throw d.code="MODULE_NOT_FOUND",d}s.resolve=function(o){var t=e[n][1][o];return null!=t?t:o},s.cache={};var p=c[n]=new l.Module(n);e[n][0].call(p.exports,s,p,p.exports,u)}return c[n].exports;function s(e){var n=s.resolve(e);if(!1===n)return{};if(Array.isArray(n)){var o={__esModule:!0};return n.forEach(function(e){var n=e[0],t=e[1],r=e[2]||e[0],u=l(t);"*"===n?Object.keys(u).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(o,e)||Object.defineProperty(o,e,{enumerable:!0,get:function(){return u[e]}})}):"*"===r?Object.defineProperty(o,n,{enumerable:!0,value:u}):Object.defineProperty(o,n,{enumerable:!0,get:function(){return"default"===r?u.__esModule?u.default:u:u[r]}})}),o}return l(n)}}l.isParcelRequire=!0,l.Module=function(e){this.id=e,this.bundle=l,this.require=f,this.exports={}},l.modules=e,l.cache=c,l.parent=i,l.distDir=void 0,l.publicUrl=void 0,l.devServer=void 0,l.i=a,l.register=function(n,o){e[n]=[function(e,n){n.exports=o},{}]},Object.defineProperty(l,"root",{get:function(){return u[t]}}),u[t]=l;for(var d=0;dtypeof module?module.exports=p:"function"==typeof define&&define.amd&&define(function(){return p})}}({"8tkGC":[function(e,n,o,t){var r=e("@parcel/transformer-js/src/esmodule-helpers.js");function u(e){return function(n){var o,t=e.url,r=e.offset,u=void 0===r?0:r,i=e.sync,a=void 0===i?.3:i,c=new Audio;function f(){if(n.video&&t){var e=n.currentTime+u;Math.abs(c.currentTime-e)>a&&(c.currentTime=e)}}return c.preload="auto",t&&(c.src=t),n.on("play",function(){t&&(f(),c.play().catch(function(e){console.warn(e)}))}),n.on("pause",function(){c.pause()}),n.on("seek",function(){f()}),n.on("video:timeupdate",function(){n.playing&&f()}),n.on("video:ratechange",function(){c.playbackRate=n.video.playbackRate}),n.on("video:volumechange",function(){c.volume=n.volume,c.muted=n.muted}),n.on("video:waiting",function(){c.pause()}),n.on("video:playing",function(){t&&n.playing&&c.play().catch(function(e){console.warn(e)})}),n.on("destroy",function(){c.pause(),c.src="",c.load()}),c.volume=n.volume,c.muted=n.muted,c.playbackRate=(null==(o=n.video)?void 0:o.playbackRate)||1,{name:"artplayerPluginAudioTrack",audio:c,update:function(e){e.url&&e.url!==t&&(c.src=t=e.url,n.playing&&c.play().catch(function(e){return console.warn(e)})),void 0!==e.offset&&(u=e.offset),void 0!==e.sync&&(a=e.sync)}}}}r.defineInteropFlag(o),r.export(o,"default",function(){return u}),"u">typeof window&&(window.artplayerPluginAudioTrack=u)},{"@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],qpMMf:[function(e,n,o,t){o.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},o.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},o.exportAll=function(e,n){return Object.keys(e).forEach(function(o){"default"===o||"__esModule"===o||Object.prototype.hasOwnProperty.call(n,o)||Object.defineProperty(n,o,{enumerable:!0,get:function(){return e[o]}})}),n},o.export=function(e,n,o){Object.defineProperty(e,n,{enumerable:!0,get:o})}},{}]},["8tkGC"],"8tkGC","parcelRequire4dc0",{}); \ No newline at end of file +!function(e,o){"object"===typeof exports&&"undefined"!==typeof module?module.exports=o():"function"==typeof define&&define.amd?(t.ArtplayerPluginAudioTrack=o(),define(function(){return t.ArtplayerPluginAudioTrack})):(e="undefined"!==typeof globalThis?globalThis:e||self).ArtplayerPluginAudioTrack=o()}(this,function(){"use strict";function e(e){return o=>{var n;let{url:a,offset:t=0,sync:i=.3}=e;const u=new Audio;function l(){if(!o.video||!a)return;const e=o.currentTime+t;Math.abs(u.currentTime-e)>i&&(u.currentTime=e)}return u.preload="auto",a&&(u.src=a),o.on("play",()=>{a&&(l(),u.play().catch(e=>{console.warn(e)}))}),o.on("pause",()=>{u.pause()}),o.on("seek",()=>{l()}),o.on("video:timeupdate",()=>{o.playing&&l()}),o.on("video:ratechange",()=>{u.playbackRate=o.video.playbackRate}),o.on("video:volumechange",()=>{u.volume=o.volume,u.muted=o.muted}),o.on("video:waiting",()=>{u.pause()}),o.on("video:playing",()=>{a&&o.playing&&u.play().catch(e=>{console.warn(e)})}),o.on("destroy",()=>{u.pause(),u.src="",u.load()}),u.volume=o.volume,u.muted=o.muted,u.playbackRate=(null==(n=o.video)?void 0:n.playbackRate)||1,{name:"artplayerPluginAudioTrack",audio:u,update:function(e){e.url&&e.url!==a&&(a=e.url,u.src=a,o.playing&&u.play().catch(e=>console.warn(e))),void 0!==e.offset&&(t=e.offset),void 0!==e.sync&&(i=e.sync)}}}}return"undefined"!==typeof window&&(window.artplayerPluginAudioTrack=e),e}); diff --git a/docs/compiled/artplayer-plugin-audio-track.mjs b/docs/compiled/artplayer-plugin-audio-track.mjs index 6ed13ba5d..07680cef5 100644 --- a/docs/compiled/artplayer-plugin-audio-track.mjs +++ b/docs/compiled/artplayer-plugin-audio-track.mjs @@ -1,8 +1,95 @@ - /*! - * artplayer-plugin-audio-track.js v1.0.1 + * artplayer-plugin-audio-track.js v1.0.2 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,r,t,o,n){var u="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},i="function"==typeof u[o]&&u[o],a=i.i||{},l=i.cache||{},f="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(r,t){if(!l[r]){if(!e[r]){if(n[r])return n[r];var a="function"==typeof u[o]&&u[o];if(!t&&a)return a(r,!0);if(i)return i(r,!0);if(f&&"string"==typeof r)return f(r);var d=Error("Cannot find module '"+r+"'");throw d.code="MODULE_NOT_FOUND",d}s.resolve=function(t){var o=e[r][1][t];return null!=o?o:t},s.cache={};var p=l[r]=new c.Module(r);e[r][0].call(p.exports,s,p,p.exports,u)}return l[r].exports;function s(e){var r=s.resolve(e);if(!1===r)return{};if(Array.isArray(r)){var t={__esModule:!0};return r.forEach(function(e){var r=e[0],o=e[1],n=e[2]||e[0],u=c(o);"*"===r?Object.keys(u).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:function(){return u[e]}})}):"*"===n?Object.defineProperty(t,r,{enumerable:!0,value:u}):Object.defineProperty(t,r,{enumerable:!0,get:function(){return"default"===n?u.__esModule?u.default:u:u[n]}})}),t}return c(r)}}c.isParcelRequire=!0,c.Module=function(e){this.id=e,this.bundle=c,this.require=f,this.exports={}},c.modules=e,c.cache=l,c.parent=i,c.distDir=void 0,c.publicUrl=void 0,c.devServer=void 0,c.i=a,c.register=function(r,t){e[r]=[function(e,r){r.exports=t},{}]},Object.defineProperty(c,"root",{get:function(){return u[o]}}),u[o]=c;for(var d=0;dtypeof module?module.exports=p:"function"==typeof define&&define.amd&&define(function(){return p})}}({fHO26:[function(e,r,t,o){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");function u(e){return r=>{let{url:t,offset:o=0,sync:n=.3}=e,u=new Audio;function i(){if(!r.video||!t)return;let e=r.currentTime+o;Math.abs(u.currentTime-e)>n&&(u.currentTime=e)}return u.preload="auto",t&&(u.src=t),r.on("play",()=>{t&&(i(),u.play().catch(e=>{console.warn(e)}))}),r.on("pause",()=>{u.pause()}),r.on("seek",()=>{i()}),r.on("video:timeupdate",()=>{r.playing&&i()}),r.on("video:ratechange",()=>{u.playbackRate=r.video.playbackRate}),r.on("video:volumechange",()=>{u.volume=r.volume,u.muted=r.muted}),r.on("video:waiting",()=>{u.pause()}),r.on("video:playing",()=>{t&&r.playing&&u.play().catch(e=>{console.warn(e)})}),r.on("destroy",()=>{u.pause(),u.src="",u.load()}),u.volume=r.volume,u.muted=r.muted,u.playbackRate=r.video?.playbackRate||1,{name:"artplayerPluginAudioTrack",audio:u,update:function(e){e.url&&e.url!==t&&(u.src=t=e.url,r.playing&&u.play().catch(e=>console.warn(e))),void 0!==e.offset&&(o=e.offset),void 0!==e.sync&&(n=e.sync)}}}}n.defineInteropFlag(t),n.export(t,"default",()=>u),"u">typeof window&&(window.artplayerPluginAudioTrack=u)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],loqXi:[function(e,r,t,o){t.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},t.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},t.exportAll=function(e,r){return Object.keys(e).forEach(function(t){"default"===t||"__esModule"===t||Object.prototype.hasOwnProperty.call(r,t)||Object.defineProperty(r,t,{enumerable:!0,get:function(){return e[t]}})}),r},t.export=function(e,r,t){Object.defineProperty(e,r,{enumerable:!0,get:t})}},{}]},["fHO26"],"fHO26","parcelRequire4dc0",{});let{default:e}=parcelRequire4dc0("fHO26");export{e as default}; \ No newline at end of file +function artplayerPluginAudioTrack(option) { + return (art) => { + let { url, offset = 0, sync = 0.3 } = option; + const audio = new Audio(); + audio.preload = "auto"; + if (url) { + audio.src = url; + } + function syncAudio() { + if (!art.video || !url) + return; + const videoTime = art.currentTime; + const targetTime = videoTime + offset; + if (Math.abs(audio.currentTime - targetTime) > sync) { + audio.currentTime = targetTime; + } + } + art.on("play", () => { + if (!url) + return; + syncAudio(); + audio.play().catch((err) => { + console.warn(err); + }); + }); + art.on("pause", () => { + audio.pause(); + }); + art.on("seek", () => { + syncAudio(); + }); + art.on("video:timeupdate", () => { + if (art.playing) { + syncAudio(); + } + }); + art.on("video:ratechange", () => { + audio.playbackRate = art.video.playbackRate; + }); + art.on("video:volumechange", () => { + audio.volume = art.volume; + audio.muted = art.muted; + }); + art.on("video:waiting", () => { + audio.pause(); + }); + art.on("video:playing", () => { + if (url && art.playing) { + audio.play().catch((err) => { + console.warn(err); + }); + } + }); + art.on("destroy", () => { + audio.pause(); + audio.src = ""; + audio.load(); + }); + function update(newOption) { + if (newOption.url && newOption.url !== url) { + url = newOption.url; + audio.src = url; + if (art.playing) { + audio.play().catch((err) => console.warn(err)); + } + } + if (newOption.offset !== void 0) { + offset = newOption.offset; + } + if (newOption.sync !== void 0) { + sync = newOption.sync; + } + } + audio.volume = art.volume; + audio.muted = art.muted; + audio.playbackRate = art.video?.playbackRate || 1; + return { + name: "artplayerPluginAudioTrack", + audio, + update + }; + }; +} +if (typeof window !== "undefined") { + window.artplayerPluginAudioTrack = artplayerPluginAudioTrack; +} +export { + artplayerPluginAudioTrack as default +}; diff --git a/docs/compiled/artplayer-plugin-auto-thumbnail.js b/docs/compiled/artplayer-plugin-auto-thumbnail.js index f5f67b917..8dae0f1e6 100644 --- a/docs/compiled/artplayer-plugin-auto-thumbnail.js +++ b/docs/compiled/artplayer-plugin-auto-thumbnail.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-auto-thumbnail.js v1.0.1 + * artplayer-plugin-auto-thumbnail.js v1.0.2 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t,r,o,n){var u="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},i="function"==typeof u[o]&&u[o],l=i.i||{},a=i.cache||{},f="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(t,r){if(!a[t]){if(!e[t]){if(n[t])return n[t];var l="function"==typeof u[o]&&u[o];if(!r&&l)return l(t,!0);if(i)return i(t,!0);if(f&&"string"==typeof t)return f(t);var d=Error("Cannot find module '"+t+"'");throw d.code="MODULE_NOT_FOUND",d}p.resolve=function(r){var o=e[t][1][r];return null!=o?o:r},p.cache={};var s=a[t]=new c.Module(t);e[t][0].call(s.exports,p,s,s.exports,u)}return a[t].exports;function p(e){var t=p.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var r={__esModule:!0};return t.forEach(function(e){var t=e[0],o=e[1],n=e[2]||e[0],u=c(o);"*"===t?Object.keys(u).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:function(){return u[e]}})}):"*"===n?Object.defineProperty(r,t,{enumerable:!0,value:u}):Object.defineProperty(r,t,{enumerable:!0,get:function(){return"default"===n?u.__esModule?u.default:u:u[n]}})}),r}return c(t)}}c.isParcelRequire=!0,c.Module=function(e){this.id=e,this.bundle=c,this.require=f,this.exports={}},c.modules=e,c.cache=a,c.parent=i,c.distDir=void 0,c.publicUrl=void 0,c.devServer=void 0,c.i=l,c.register=function(t,r){e[t]=[function(e,t){t.exports=r},{}]},Object.defineProperty(c,"root",{get:function(){return u[o]}}),u[o]=c;for(var d=0;dtypeof module?module.exports=s:"function"==typeof define&&define.amd&&define(function(){return s})}}({"6MsoC":[function(e,t,r,o){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");function u(e){return async t=>(t.on("video:loadedmetadata",()=>{let r=e.url||t.option.url,o=e.width||160,n=e.number||100,u=e.scale||1;!function({url:e,width:t,number:r},o){let n=document.createElement("video");n.crossOrigin="anonymous",n.src=e,n.onloadedmetadata=()=>{let e=n.duration,u=document.createElement("canvas"),i=u.getContext("2d"),l=Math.floor(t*n.videoHeight/n.videoWidth);u.width=10*t,u.height=l*Math.ceil(r/10);let a=null;!function f(c){u.toBlob(e=>{URL.revokeObjectURL(a),o({url:a=URL.createObjectURL(e),height:l})},"image/jpeg"),c>=r||(n.currentTime=e*c/r,n.onseeked=()=>{i.drawImage(n,c%10*t,Math.floor(c/10)*l,t,l),f(c+1)})}(0)}}({url:r,width:o,number:n},e=>{t.thumbnails={...e,column:10,number:n,width:o,scale:u}})}),{name:"artplayerPluginAutoThumbnail"})}n.defineInteropFlag(r),n.export(r,"default",()=>u),"u">typeof window&&(window.artplayerPluginAutoThumbnail=u)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"6ykb1":[function(e,t,r,o){r.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},r.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.exportAll=function(e,t){return Object.keys(e).forEach(function(r){"default"===r||"__esModule"===r||Object.prototype.hasOwnProperty.call(t,r)||Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[r]}})}),t},r.export=function(e,t,r){Object.defineProperty(e,t,{enumerable:!0,get:r})}},{}]},["6MsoC"],"6MsoC","parcelRequire4dc0",{}); \ No newline at end of file +!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(t.ArtplayerPluginAutoThumbnail=t(),define(function(){return t.ArtplayerPluginAutoThumbnail})):(e="undefined"!==typeof globalThis?globalThis:e||self).ArtplayerPluginAutoThumbnail=t()}(this,function(){"use strict";function e(e){return async t=>(t.on("video:loadedmetadata",()=>{const n=e.url||t.option.url,o=e.width||160,i=e.number||100,u=e.scale||1;!function({url:e,width:t,number:n},o){const i=document.createElement("video");i.crossOrigin="anonymous",i.src=e,i.onloadedmetadata=()=>{const e=i.duration,u=document.createElement("canvas"),a=u.getContext("2d"),d=Math.floor(t*i.videoHeight/i.videoWidth);u.width=10*t,u.height=d*Math.ceil(n/10);let l=null;!function r(c){u.toBlob(e=>{URL.revokeObjectURL(l),l=URL.createObjectURL(e),o({url:l,height:d})},"image/jpeg"),c>=n||(i.currentTime=e*c/n,i.onseeked=()=>{a.drawImage(i,c%10*t,Math.floor(c/10)*d,t,d),r(c+1)})}(0)}}({url:n,width:o,number:i},e=>{t.thumbnails={...e,column:10,number:i,width:o,scale:u}})}),{name:"artplayerPluginAutoThumbnail"})}return"undefined"!==typeof window&&(window.artplayerPluginAutoThumbnail=e),e}); diff --git a/docs/compiled/artplayer-plugin-auto-thumbnail.legacy.js b/docs/compiled/artplayer-plugin-auto-thumbnail.legacy.js index a9361ec77..3756f6b4d 100644 --- a/docs/compiled/artplayer-plugin-auto-thumbnail.legacy.js +++ b/docs/compiled/artplayer-plugin-auto-thumbnail.legacy.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-auto-thumbnail.js v1.0.1 + * artplayer-plugin-auto-thumbnail.js v1.0.2 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t,r,n,o){var u="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},c="function"==typeof u[n]&&u[n],i=c.i||{},a=c.cache||{},l="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function s(t,r){if(!a[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(c)return c(t,!0);if(l&&"string"==typeof t)return l(t);var f=Error("Cannot find module '"+t+"'");throw f.code="MODULE_NOT_FOUND",f}d.resolve=function(r){var n=e[t][1][r];return null!=n?n:r},d.cache={};var p=a[t]=new s.Module(t);e[t][0].call(p.exports,d,p,p.exports,u)}return a[t].exports;function d(e){var t=d.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var r={__esModule:!0};return t.forEach(function(e){var t=e[0],n=e[1],o=e[2]||e[0],u=s(n);"*"===t?Object.keys(u).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:function(){return u[e]}})}):"*"===o?Object.defineProperty(r,t,{enumerable:!0,value:u}):Object.defineProperty(r,t,{enumerable:!0,get:function(){return"default"===o?u.__esModule?u.default:u:u[o]}})}),r}return s(t)}}s.isParcelRequire=!0,s.Module=function(e){this.id=e,this.bundle=s,this.require=l,this.exports={}},s.modules=e,s.cache=a,s.parent=c,s.distDir=void 0,s.publicUrl=void 0,s.devServer=void 0,s.i=i,s.register=function(t,r){e[t]=[function(e,t){t.exports=r},{}]},Object.defineProperty(s,"root",{get:function(){return u[n]}}),u[n]=s;for(var f=0;ftypeof module?module.exports=p:"function"==typeof define&&define.amd&&define(function(){return p})}}({"9JZgh":[function(e,t,r,n){var o=e("@parcel/transformer-js/src/esmodule-helpers.js");o.defineInteropFlag(r),o.export(r,"default",function(){return l});var u=e("@swc/helpers/cjs/_async_to_generator.cjs"),c=e("@swc/helpers/cjs/_object_spread.cjs"),i=e("@swc/helpers/cjs/_object_spread_props.cjs"),a=e("@swc/helpers/cjs/_ts_generator.cjs");function l(e){return function(t){return(0,u._)(function(){return(0,a._)(this,function(r){return t.on("video:loadedmetadata",function(){var r,n,o,u,a,l,s=e.url||t.option.url,f=e.width||160,p=e.number||100,d=e.scale||1;r={url:s,width:f,number:p},n=function(e){t.thumbnails=(0,i._)((0,c._)({},e),{column:10,number:p,width:f,scale:d})},o=r.url,u=r.width,a=r.number,(l=document.createElement("video")).crossOrigin="anonymous",l.src=o,l.onloadedmetadata=function(){var e=l.duration,t=document.createElement("canvas"),r=t.getContext("2d"),o=Math.floor(u*l.videoHeight/l.videoWidth);t.width=10*u,t.height=o*Math.ceil(a/10);var c=null;!function i(s){t.toBlob(function(e){URL.revokeObjectURL(c),n({url:c=URL.createObjectURL(e),height:o})},"image/jpeg"),s>=a||(l.currentTime=e*s/a,l.onseeked=function(){r.drawImage(l,s%10*u,Math.floor(s/10)*o,u,o),i(s+1)})}(0)}}),[2,{name:"artplayerPluginAutoThumbnail"}]})})()}}"u">typeof window&&(window.artplayerPluginAutoThumbnail=l)},{"@swc/helpers/cjs/_async_to_generator.cjs":"cZn0e","@swc/helpers/cjs/_object_spread.cjs":"kyoEj","@swc/helpers/cjs/_object_spread_props.cjs":"3G1wX","@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,u,c){try{var i=e[u](c),a=i.value}catch(e){r(e);return}i.done?t(a):Promise.resolve(a).then(n,o)}r._=function(e){return function(){var t=this,r=arguments;return new Promise(function(n,u){var c=e.apply(t,r);function i(e){o(c,n,u,i,a,"next",e)}function a(e){o(c,n,u,i,a,"throw",e)}i(void 0)})}}},{}],kyoEj:[function(e,t,r,n){"use strict";var o=e("9f9b8a24218ee51e");r._=function(e){for(var t=1;t0&&o[o.length-1])&&(6===l[0]||2===l[0])){u=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]n in t?e(t,n,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[n]=r;function l(e){return l=>{return u=null,c=null,d=function*(){return l.on("video:loadedmetadata",()=>{const u=e.url||l.option.url,c=e.width||160,d=e.number||100,s=e.scale||1;!function({url:e,width:t,number:n},r){const o=document.createElement("video");o.crossOrigin="anonymous",o.src=e,o.onloadedmetadata=()=>{const e=o.duration,i=document.createElement("canvas"),a=i.getContext("2d"),l=Math.floor(t*o.videoHeight/o.videoWidth);i.width=10*t,i.height=l*Math.ceil(n/10);let u=null;!function c(d){i.toBlob(e=>{URL.revokeObjectURL(u),u=URL.createObjectURL(e),r({url:u,height:l})},"image/jpeg"),d>=n||(o.currentTime=e*d/n,o.onseeked=()=>{a.drawImage(o,d%10*t,Math.floor(d/10)*l,t,l),c(d+1)})}(0)}}({url:u,width:c,number:d},e=>{var u;l.thumbnails=(u=((e,t)=>{for(var n in t||(t={}))o.call(t,n)&&a(e,n,t[n]);if(r)for(var n of r(t))i.call(t,n)&&a(e,n,t[n]);return e})({},e),t(u,n({column:10,number:d,width:c,scale:s})))})}),{name:"artplayerPluginAutoThumbnail"}},new Promise((e,t)=>{var n=e=>{try{o(d.next(e))}catch(n){t(n)}},r=e=>{try{o(d.throw(e))}catch(n){t(n)}},o=t=>t.done?e(t.value):Promise.resolve(t.value).then(n,r);o((d=d.apply(u,c)).next())});var u,c,d}}return"undefined"!==typeof window&&(window.artplayerPluginAutoThumbnail=l),l}); diff --git a/docs/compiled/artplayer-plugin-auto-thumbnail.mjs b/docs/compiled/artplayer-plugin-auto-thumbnail.mjs index 15b008476..920b8918c 100644 --- a/docs/compiled/artplayer-plugin-auto-thumbnail.mjs +++ b/docs/compiled/artplayer-plugin-auto-thumbnail.mjs @@ -1,8 +1,66 @@ - /*! - * artplayer-plugin-auto-thumbnail.js v1.0.1 + * artplayer-plugin-auto-thumbnail.js v1.0.2 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t,r,o,n){var u="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},i="function"==typeof u[o]&&u[o],l=i.i||{},a=i.cache||{},f="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function c(t,r){if(!a[t]){if(!e[t]){if(n[t])return n[t];var l="function"==typeof u[o]&&u[o];if(!r&&l)return l(t,!0);if(i)return i(t,!0);if(f&&"string"==typeof t)return f(t);var d=Error("Cannot find module '"+t+"'");throw d.code="MODULE_NOT_FOUND",d}p.resolve=function(r){var o=e[t][1][r];return null!=o?o:r},p.cache={};var s=a[t]=new c.Module(t);e[t][0].call(s.exports,p,s,s.exports,u)}return a[t].exports;function p(e){var t=p.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var r={__esModule:!0};return t.forEach(function(e){var t=e[0],o=e[1],n=e[2]||e[0],u=c(o);"*"===t?Object.keys(u).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:function(){return u[e]}})}):"*"===n?Object.defineProperty(r,t,{enumerable:!0,value:u}):Object.defineProperty(r,t,{enumerable:!0,get:function(){return"default"===n?u.__esModule?u.default:u:u[n]}})}),r}return c(t)}}c.isParcelRequire=!0,c.Module=function(e){this.id=e,this.bundle=c,this.require=f,this.exports={}},c.modules=e,c.cache=a,c.parent=i,c.distDir=void 0,c.publicUrl=void 0,c.devServer=void 0,c.i=l,c.register=function(t,r){e[t]=[function(e,t){t.exports=r},{}]},Object.defineProperty(c,"root",{get:function(){return u[o]}}),u[o]=c;for(var d=0;dtypeof module?module.exports=s:"function"==typeof define&&define.amd&&define(function(){return s})}}({lry5Y:[function(e,t,r,o){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");function u(e){return async t=>(t.on("video:loadedmetadata",()=>{let r=e.url||t.option.url,o=e.width||160,n=e.number||100,u=e.scale||1;!function({url:e,width:t,number:r},o){let n=document.createElement("video");n.crossOrigin="anonymous",n.src=e,n.onloadedmetadata=()=>{let e=n.duration,u=document.createElement("canvas"),i=u.getContext("2d"),l=Math.floor(t*n.videoHeight/n.videoWidth);u.width=10*t,u.height=l*Math.ceil(r/10);let a=null;!function f(c){u.toBlob(e=>{URL.revokeObjectURL(a),o({url:a=URL.createObjectURL(e),height:l})},"image/jpeg"),c>=r||(n.currentTime=e*c/r,n.onseeked=()=>{i.drawImage(n,c%10*t,Math.floor(c/10)*l,t,l),f(c+1)})}(0)}}({url:r,width:o,number:n},e=>{t.thumbnails={...e,column:10,number:n,width:o,scale:u}})}),{name:"artplayerPluginAutoThumbnail"})}n.defineInteropFlag(r),n.export(r,"default",()=>u),"u">typeof window&&(window.artplayerPluginAutoThumbnail=u)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],loqXi:[function(e,t,r,o){r.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},r.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.exportAll=function(e,t){return Object.keys(e).forEach(function(r){"default"===r||"__esModule"===r||Object.prototype.hasOwnProperty.call(t,r)||Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[r]}})}),t},r.export=function(e,t,r){Object.defineProperty(e,t,{enumerable:!0,get:r})}},{}]},["lry5Y"],"lry5Y","parcelRequire4dc0",{});let{default:e}=parcelRequire4dc0("lry5Y");export{e as default}; \ No newline at end of file +function create({ url, width, number }, callback) { + const video = document.createElement("video"); + video.crossOrigin = "anonymous"; + video.src = url; + video.onloadedmetadata = () => { + const duration = video.duration; + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + const height = Math.floor(width * video.videoHeight / video.videoWidth); + canvas.width = width * 10; + canvas.height = height * Math.ceil(number / 10); + let blobUrl = null; + function seekAndDraw(index) { + canvas.toBlob((blob) => { + URL.revokeObjectURL(blobUrl); + blobUrl = URL.createObjectURL(blob); + callback({ + url: blobUrl, + height + }); + }, "image/jpeg"); + if (index >= number) + return; + video.currentTime = duration * index / number; + video.onseeked = () => { + ctx.drawImage(video, index % 10 * width, Math.floor(index / 10) * height, width, height); + seekAndDraw(index + 1); + }; + } + seekAndDraw(0); + }; +} +function artplayerPluginAutoThumbnail(option) { + return async (art) => { + art.on("video:loadedmetadata", () => { + const url = option.url || art.option.url; + const width = option.width || 160; + const number = option.number || 100; + const scale = option.scale || 1; + create({ url, width, number }, (config) => { + art.thumbnails = { + ...config, + column: 10, + number, + width, + scale + }; + }); + }); + return { + name: "artplayerPluginAutoThumbnail" + }; + }; +} +if (typeof window !== "undefined") { + window.artplayerPluginAutoThumbnail = artplayerPluginAutoThumbnail; +} +export { + artplayerPluginAutoThumbnail as default +}; diff --git a/docs/compiled/artplayer-plugin-chapter.js b/docs/compiled/artplayer-plugin-chapter.js index ca6b43a41..3bcf9e0c4 100644 --- a/docs/compiled/artplayer-plugin-chapter.js +++ b/docs/compiled/artplayer-plugin-chapter.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-chapter.js v1.0.2 + * artplayer-plugin-chapter.js v1.0.3 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(t,e,r,a,n){var o="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},i="function"==typeof o[a]&&o[a],l=i.i||{},d=i.cache||{},p="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function s(e,r){if(!d[e]){if(!t[e]){if(n[e])return n[e];var l="function"==typeof o[a]&&o[a];if(!r&&l)return l(e,!0);if(i)return i(e,!0);if(p&&"string"==typeof e)return p(e);var u=Error("Cannot find module '"+e+"'");throw u.code="MODULE_NOT_FOUND",u}f.resolve=function(r){var a=t[e][1][r];return null!=a?a:r},f.cache={};var c=d[e]=new s.Module(e);t[e][0].call(c.exports,f,c,c.exports,o)}return d[e].exports;function f(t){var e=f.resolve(t);if(!1===e)return{};if(Array.isArray(e)){var r={__esModule:!0};return e.forEach(function(t){var e=t[0],a=t[1],n=t[2]||t[0],o=s(a);"*"===e?Object.keys(o).forEach(function(t){"default"===t||"__esModule"===t||Object.prototype.hasOwnProperty.call(r,t)||Object.defineProperty(r,t,{enumerable:!0,get:function(){return o[t]}})}):"*"===n?Object.defineProperty(r,e,{enumerable:!0,value:o}):Object.defineProperty(r,e,{enumerable:!0,get:function(){return"default"===n?o.__esModule?o.default:o:o[n]}})}),r}return s(e)}}s.isParcelRequire=!0,s.Module=function(t){this.id=t,this.bundle=s,this.require=p,this.exports={}},s.modules=t,s.cache=d,s.parent=i,s.distDir=void 0,s.publicUrl=void 0,s.devServer=void 0,s.i=l,s.register=function(e,r){t[e]=[function(t,e){e.exports=r},{}]},Object.defineProperty(s,"root",{get:function(){return o[a]}}),o[a]=s;for(var u=0;utypeof module?module.exports=c:"function"==typeof define&&define.amd&&define(function(){return c})}}({"3VfEb":[function(t,e,r,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"default",()=>l);var o=t("bundle-text:./style.less"),i=n.interopDefault(o);function l(t={}){return e=>{let{$player:r}=e.template,{setStyle:a,append:n,clamp:o,query:i,addClass:l,removeClass:d}=e.constructor.utils,p=`
`,s=[],u=e.query(".art-control-progress-inner"),c=n(u,'
'),f=n(u,'
');function h(t=[]){if((s=[],c.textContent="",d(r,"artplayer-plugin-chapter"),Array.isArray(t)&&t.length)&&e.duration){t=t.sort((t,e)=>t.start-e.start);for(let r=0;re.duration||a.start>=a.end||n&&a.end>n.start)throw Error("Illegal chapter time point")}t[0].start>0&&t.unshift({start:0,end:t[0].start,title:""}),t[t.length-1].end{let r=n(c,p),a=o(t.start,0,e.duration),l=o(t.end,0,e.duration),d=l-a,s=d/e.duration;return r.dataset.start=a,r.dataset.end=l,r.dataset.duration=d,r.dataset.title=t.title.trim(),r.style.width=`${100*s}%`,{$chapter:r,$hover:i(".art-progress-hover",r),$loaded:i(".art-progress-loaded",r),$played:i(".art-progress-played",r)}}),l(r,"artplayer-plugin-chapter"),e.emit("setBar","loaded",e.loaded||0)}}return e.on("setBar",(t,r)=>{if(s.length)for(let n=0;nv&&a(p,"width","100%"),g>=m&&g<=v){let e=(g-m)/y;a(p,"width",`${100*e}%`),"hover"===t&&h>0&&function({$chapter:t,width:e}){let r=t.dataset.title.trim();if(r){f.textContent=r;let t=f.clientWidth;e<=t/2?a(f,"left",0):e>u.clientWidth-t/2?a(f,"left",`${u.clientWidth-t}px`):a(f,"left",`${e-t/2}px`)}}({$chapter:o,width:h})}}}),e.once("video:loadedmetadata",()=>h(t.chapters)),{name:"artplayerPluginChapter",update:({chapters:t})=>h(t)}}}if("u">typeof document){let t="artplayer-plugin-chapter",e=document.getElementById(t);e||((e=document.createElement("style")).id=t,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)}):(document.head||document.documentElement).appendChild(e)),e.textContent=i.default}"u">typeof window&&(window.artplayerPluginChapter=l)},{"bundle-text:./style.less":"4RPBI","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"4RPBI":[function(t,e,r,a){e.exports=".artplayer-plugin-chapter .art-control-progress-inner{background-color:#0000!important;height:100%!important}.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-hover,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-loaded,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-played{display:none!important}.artplayer-plugin-chapter .art-control-thumbnails{bottom:calc(var(--art-bottom-gap) + 64px)!important}.artplayer-plugin-chapter .art-chapters{z-index:0;align-items:center;gap:4px;height:100%;display:flex;position:absolute;inset:0;transform:scaleY(1.25)}.artplayer-plugin-chapter .art-chapters .art-chapter{align-items:center;height:100%;display:flex}.artplayer-plugin-chapter .art-chapters .art-chapter .art-chapter-inner{cursor:pointer;width:100%;height:50%;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color);border-radius:10px;position:relative;overflow:hidden}.artplayer-plugin-chapter .art-chapters .art-chapter:hover .art-chapter-inner{height:100%}.artplayer-plugin-chapter .art-chapter-title{transform-origin:bottom;opacity:0;z-index:70;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease, opacity var(--art-transition-duration) ease;padding:3px 5px;font-size:14px;line-height:1;position:absolute;top:-50px;left:0;transform:scale(.5)}.artplayer-plugin-chapter.art-progress-hover .art-chapter-title{opacity:1;transform:scale(1)}"},{}],"6ykb1":[function(t,e,r,a){r.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},r.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},r.exportAll=function(t,e){return Object.keys(t).forEach(function(r){"default"===r||"__esModule"===r||Object.prototype.hasOwnProperty.call(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[r]}})}),e},r.export=function(t,e,r){Object.defineProperty(t,e,{enumerable:!0,get:r})}},{}]},["3VfEb"],"3VfEb","parcelRequire4dc0",{}); \ No newline at end of file +!function(t,e){"object"===typeof exports&&"undefined"!==typeof module?module.exports=e():"function"==typeof define&&define.amd?(t.ArtplayerPluginChapter=e(),define(function(){return t.ArtplayerPluginChapter})):(t="undefined"!==typeof globalThis?globalThis:t||self).ArtplayerPluginChapter=e()}(this,function(){"use strict";function t(t={}){return e=>{const{$player:r}=e.template,{setStyle:a,append:n,clamp:o,query:i,addClass:p,removeClass:d}=e.constructor.utils;let s=[];const l=e.query(".art-control-progress-inner"),c=n(l,'
'),h=n(l,'
');function u({$chapter:t,width:e}){const r=t.dataset.title.trim();if(r){h.textContent=r;const t=h.clientWidth;e<=t/2?a(h,"left",0):e>l.clientWidth-t/2?a(h,"left",l.clientWidth-t+"px"):a(h,"left",e-t/2+"px")}}function g(t=[]){if(s=[],c.textContent="",d(r,"artplayer-plugin-chapter"),Array.isArray(t)&&t.length&&e.duration){t=t.sort((t,e)=>t.start-e.start);for(let r=0;re.duration||a.start>=a.end)throw new Error("Illegal chapter time point");if(n&&a.end>n.start)throw new Error("Illegal chapter time point")}t[0].start>0&&t.unshift({start:0,end:t[0].start,title:""}),t[t.length-1].end{const r=n(c,'\n
\n
\n
\n
\n
\n
\n
\n '),a=o(t.start,0,e.duration),p=o(t.end,0,e.duration),d=p-a,s=d/e.duration;return r.dataset.start=a,r.dataset.end=p,r.dataset.duration=d,r.dataset.title=t.title.trim(),r.style.width=100*s+"%",{$chapter:r,$hover:i(".art-progress-hover",r),$loaded:i(".art-progress-loaded",r),$played:i(".art-progress-played",r)}}),p(r,"artplayer-plugin-chapter"),e.emit("setBar","loaded",e.loaded||0)}}return e.on("setBar",(t,r)=>{if(s.length)for(let n=0;nm&&a(l,"width","100%"),g>=f&&g<=m){a(l,"width",100*((g-f)/y)+"%"),"hover"===t&&h>0&&u({$chapter:o,width:h})}}}),e.once("video:loadedmetadata",()=>g(t.chapters)),{name:"artplayerPluginChapter",update:({chapters:t})=>g(t)}}}if("undefined"!==typeof document){const t="artplayer-plugin-chapter";let e=document.getElementById(t);e||(e=document.createElement("style"),e.id=t,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)}):(document.head||document.documentElement).appendChild(e)),e.textContent=".artplayer-plugin-chapter .art-control-progress-inner{height:100%!important;background-color:transparent!important}.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-hover,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-loaded,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-played{display:none!important}.artplayer-plugin-chapter .art-control-thumbnails{bottom:calc(var(--art-bottom-gap) + 64px)!important}.artplayer-plugin-chapter .art-chapters{position:absolute;z-index:0;inset:0;display:flex;align-items:center;gap:4px;height:100%;transform:scaleY(1.25)}.artplayer-plugin-chapter .art-chapters .art-chapter{display:flex;align-items:center;height:100%}.artplayer-plugin-chapter .art-chapters .art-chapter .art-chapter-inner{position:relative;cursor:pointer;width:100%;height:50%;border-radius:10px;overflow:hidden;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color)}.artplayer-plugin-chapter .art-chapters .art-chapter:hover .art-chapter-inner{height:100%}.artplayer-plugin-chapter .art-chapter-title{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;z-index:70;top:-50px;left:0;padding:3px 5px;line-height:1;font-size:14px;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease}.artplayer-plugin-chapter.art-progress-hover .art-chapter-title{transform:scale(1);opacity:1}"}return"undefined"!==typeof window&&(window.artplayerPluginChapter=t),t}); diff --git a/docs/compiled/artplayer-plugin-chapter.legacy.js b/docs/compiled/artplayer-plugin-chapter.legacy.js index 28789d9a0..3bcf9e0c4 100644 --- a/docs/compiled/artplayer-plugin-chapter.legacy.js +++ b/docs/compiled/artplayer-plugin-chapter.legacy.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-chapter.js v1.0.2 + * artplayer-plugin-chapter.js v1.0.3 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(t,e,r,a,n){var o="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},i="function"==typeof o[a]&&o[a],l=i.i||{},p=i.cache||{},d="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function s(e,r){if(!p[e]){if(!t[e]){if(n[e])return n[e];var l="function"==typeof o[a]&&o[a];if(!r&&l)return l(e,!0);if(i)return i(e,!0);if(d&&"string"==typeof e)return d(e);var u=Error("Cannot find module '"+e+"'");throw u.code="MODULE_NOT_FOUND",u}f.resolve=function(r){var a=t[e][1][r];return null!=a?a:r},f.cache={};var c=p[e]=new s.Module(e);t[e][0].call(c.exports,f,c,c.exports,o)}return p[e].exports;function f(t){var e=f.resolve(t);if(!1===e)return{};if(Array.isArray(e)){var r={__esModule:!0};return e.forEach(function(t){var e=t[0],a=t[1],n=t[2]||t[0],o=s(a);"*"===e?Object.keys(o).forEach(function(t){"default"===t||"__esModule"===t||Object.prototype.hasOwnProperty.call(r,t)||Object.defineProperty(r,t,{enumerable:!0,get:function(){return o[t]}})}):"*"===n?Object.defineProperty(r,e,{enumerable:!0,value:o}):Object.defineProperty(r,e,{enumerable:!0,get:function(){return"default"===n?o.__esModule?o.default:o:o[n]}})}),r}return s(e)}}s.isParcelRequire=!0,s.Module=function(t){this.id=t,this.bundle=s,this.require=d,this.exports={}},s.modules=t,s.cache=p,s.parent=i,s.distDir=void 0,s.publicUrl=void 0,s.devServer=void 0,s.i=l,s.register=function(e,r){t[e]=[function(t,e){e.exports=r},{}]},Object.defineProperty(s,"root",{get:function(){return o[a]}}),o[a]=s;for(var u=0;utypeof module?module.exports=c:"function"==typeof define&&define.amd&&define(function(){return c})}}({"7hySu":[function(t,e,r,a){var n=t("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"default",function(){return l});var o=t("bundle-text:./style.less"),i=n.interopDefault(o);function l(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};return function(e){var r=e.template.$player,a=e.constructor.utils,n=a.setStyle,o=a.append,i=a.clamp,l=a.query,p=a.addClass,d=a.removeClass,s=[],u=e.query(".art-control-progress-inner"),c=o(u,'
'),f=o(u,'
');function h(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];if((s=[],c.textContent="",d(r,"artplayer-plugin-chapter"),Array.isArray(t)&&t.length)&&e.duration){t=t.sort(function(t,e){return t.start-e.start});for(var a=0;ae.duration||n.start>=n.end||u&&n.end>u.start)throw Error("Illegal chapter time point")}t[0].start>0&&t.unshift({start:0,end:t[0].start,title:""}),t[t.length-1].end\n
\n
\n
\n
\n
\n\n '),a=i(t.start,0,e.duration),n=i(t.end,0,e.duration),p=n-a,d=p/e.duration;return r.dataset.start=a,r.dataset.end=n,r.dataset.duration=p,r.dataset.title=t.title.trim(),r.style.width="".concat(100*d,"%"),{$chapter:r,$hover:l(".art-progress-hover",r),$loaded:l(".art-progress-loaded",r),$played:l(".art-progress-played",r)}}),p(r,"artplayer-plugin-chapter"),e.emit("setBar","loaded",e.loaded||0)}}return e.on("setBar",function(t,r){if(s.length)for(var a=0;am&&n(d,"width","100%"),g>=v&&g<=m){var b=(g-v)/y;n(d,"width","".concat(100*b,"%")),"hover"===t&&h>0&&function(t){var e=t.$chapter,r=t.width,a=e.dataset.title.trim();if(a){f.textContent=a;var o=f.clientWidth;r<=o/2?n(f,"left",0):r>u.clientWidth-o/2?n(f,"left","".concat(u.clientWidth-o,"px")):n(f,"left","".concat(r-o/2,"px"))}}({$chapter:i,width:h})}}}),e.once("video:loadedmetadata",function(){return h(t.chapters)}),{name:"artplayerPluginChapter",update:function(t){return h(t.chapters)}}}}if("u">typeof document){var p="artplayer-plugin-chapter",d=document.getElementById(p);d||((d=document.createElement("style")).id=p,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",function(){document.head.appendChild(d)}):(document.head||document.documentElement).appendChild(d)),d.textContent=i.default}"u">typeof window&&(window.artplayerPluginChapter=l)},{"bundle-text:./style.less":"35ZxU","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],"35ZxU":[function(t,e,r,a){e.exports=".artplayer-plugin-chapter .art-control-progress-inner{background-color:transparent!important;height:100%!important}.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-hover,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-loaded,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-played{display:none!important}.artplayer-plugin-chapter .art-control-thumbnails{bottom:calc(var(--art-bottom-gap) + 64px)!important}.artplayer-plugin-chapter .art-chapters{z-index:0;align-items:center;gap:4px;height:100%;display:flex;position:absolute;top:0;bottom:0;left:0;right:0;transform:scaleY(1.25)}.artplayer-plugin-chapter .art-chapters .art-chapter{align-items:center;height:100%;display:flex}.artplayer-plugin-chapter .art-chapters .art-chapter .art-chapter-inner{cursor:pointer;width:100%;height:50%;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color);border-radius:10px;position:relative;overflow:hidden}.artplayer-plugin-chapter .art-chapters .art-chapter:hover .art-chapter-inner{height:100%}.artplayer-plugin-chapter .art-chapter-title{transform-origin:bottom;opacity:0;z-index:70;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease, opacity var(--art-transition-duration) ease;padding:3px 5px;font-size:14px;line-height:1;position:absolute;top:-50px;left:0;transform:scale(.5)}.artplayer-plugin-chapter.art-progress-hover .art-chapter-title{opacity:1;transform:scale(1)}"},{}],qpMMf:[function(t,e,r,a){r.interopDefault=function(t){return t&&t.__esModule?t:{default:t}},r.defineInteropFlag=function(t){Object.defineProperty(t,"__esModule",{value:!0})},r.exportAll=function(t,e){return Object.keys(t).forEach(function(r){"default"===r||"__esModule"===r||Object.prototype.hasOwnProperty.call(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[r]}})}),e},r.export=function(t,e,r){Object.defineProperty(t,e,{enumerable:!0,get:r})}},{}]},["7hySu"],"7hySu","parcelRequire4dc0",{}); \ No newline at end of file +!function(t,e){"object"===typeof exports&&"undefined"!==typeof module?module.exports=e():"function"==typeof define&&define.amd?(t.ArtplayerPluginChapter=e(),define(function(){return t.ArtplayerPluginChapter})):(t="undefined"!==typeof globalThis?globalThis:t||self).ArtplayerPluginChapter=e()}(this,function(){"use strict";function t(t={}){return e=>{const{$player:r}=e.template,{setStyle:a,append:n,clamp:o,query:i,addClass:p,removeClass:d}=e.constructor.utils;let s=[];const l=e.query(".art-control-progress-inner"),c=n(l,'
'),h=n(l,'
');function u({$chapter:t,width:e}){const r=t.dataset.title.trim();if(r){h.textContent=r;const t=h.clientWidth;e<=t/2?a(h,"left",0):e>l.clientWidth-t/2?a(h,"left",l.clientWidth-t+"px"):a(h,"left",e-t/2+"px")}}function g(t=[]){if(s=[],c.textContent="",d(r,"artplayer-plugin-chapter"),Array.isArray(t)&&t.length&&e.duration){t=t.sort((t,e)=>t.start-e.start);for(let r=0;re.duration||a.start>=a.end)throw new Error("Illegal chapter time point");if(n&&a.end>n.start)throw new Error("Illegal chapter time point")}t[0].start>0&&t.unshift({start:0,end:t[0].start,title:""}),t[t.length-1].end{const r=n(c,'\n
\n
\n
\n
\n
\n
\n
\n '),a=o(t.start,0,e.duration),p=o(t.end,0,e.duration),d=p-a,s=d/e.duration;return r.dataset.start=a,r.dataset.end=p,r.dataset.duration=d,r.dataset.title=t.title.trim(),r.style.width=100*s+"%",{$chapter:r,$hover:i(".art-progress-hover",r),$loaded:i(".art-progress-loaded",r),$played:i(".art-progress-played",r)}}),p(r,"artplayer-plugin-chapter"),e.emit("setBar","loaded",e.loaded||0)}}return e.on("setBar",(t,r)=>{if(s.length)for(let n=0;nm&&a(l,"width","100%"),g>=f&&g<=m){a(l,"width",100*((g-f)/y)+"%"),"hover"===t&&h>0&&u({$chapter:o,width:h})}}}),e.once("video:loadedmetadata",()=>g(t.chapters)),{name:"artplayerPluginChapter",update:({chapters:t})=>g(t)}}}if("undefined"!==typeof document){const t="artplayer-plugin-chapter";let e=document.getElementById(t);e||(e=document.createElement("style"),e.id=t,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(e)}):(document.head||document.documentElement).appendChild(e)),e.textContent=".artplayer-plugin-chapter .art-control-progress-inner{height:100%!important;background-color:transparent!important}.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-hover,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-loaded,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-played{display:none!important}.artplayer-plugin-chapter .art-control-thumbnails{bottom:calc(var(--art-bottom-gap) + 64px)!important}.artplayer-plugin-chapter .art-chapters{position:absolute;z-index:0;inset:0;display:flex;align-items:center;gap:4px;height:100%;transform:scaleY(1.25)}.artplayer-plugin-chapter .art-chapters .art-chapter{display:flex;align-items:center;height:100%}.artplayer-plugin-chapter .art-chapters .art-chapter .art-chapter-inner{position:relative;cursor:pointer;width:100%;height:50%;border-radius:10px;overflow:hidden;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color)}.artplayer-plugin-chapter .art-chapters .art-chapter:hover .art-chapter-inner{height:100%}.artplayer-plugin-chapter .art-chapter-title{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;z-index:70;top:-50px;left:0;padding:3px 5px;line-height:1;font-size:14px;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease}.artplayer-plugin-chapter.art-progress-hover .art-chapter-title{transform:scale(1);opacity:1}"}return"undefined"!==typeof window&&(window.artplayerPluginChapter=t),t}); diff --git a/docs/compiled/artplayer-plugin-chapter.mjs b/docs/compiled/artplayer-plugin-chapter.mjs index a83562179..46d60db75 100644 --- a/docs/compiled/artplayer-plugin-chapter.mjs +++ b/docs/compiled/artplayer-plugin-chapter.mjs @@ -1,8 +1,162 @@ - /*! - * artplayer-plugin-chapter.js v1.0.2 + * artplayer-plugin-chapter.js v1.0.3 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t,r,a,n){var o="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},i="function"==typeof o[a]&&o[a],l=i.i||{},d=i.cache||{},p="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function s(t,r){if(!d[t]){if(!e[t]){if(n[t])return n[t];var l="function"==typeof o[a]&&o[a];if(!r&&l)return l(t,!0);if(i)return i(t,!0);if(p&&"string"==typeof t)return p(t);var u=Error("Cannot find module '"+t+"'");throw u.code="MODULE_NOT_FOUND",u}f.resolve=function(r){var a=e[t][1][r];return null!=a?a:r},f.cache={};var c=d[t]=new s.Module(t);e[t][0].call(c.exports,f,c,c.exports,o)}return d[t].exports;function f(e){var t=f.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var r={__esModule:!0};return t.forEach(function(e){var t=e[0],a=e[1],n=e[2]||e[0],o=s(a);"*"===t?Object.keys(o).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:function(){return o[e]}})}):"*"===n?Object.defineProperty(r,t,{enumerable:!0,value:o}):Object.defineProperty(r,t,{enumerable:!0,get:function(){return"default"===n?o.__esModule?o.default:o:o[n]}})}),r}return s(t)}}s.isParcelRequire=!0,s.Module=function(e){this.id=e,this.bundle=s,this.require=p,this.exports={}},s.modules=e,s.cache=d,s.parent=i,s.distDir=void 0,s.publicUrl=void 0,s.devServer=void 0,s.i=l,s.register=function(t,r){e[t]=[function(e,t){t.exports=r},{}]},Object.defineProperty(s,"root",{get:function(){return o[a]}}),o[a]=s;for(var u=0;utypeof module?module.exports=c:"function"==typeof define&&define.amd&&define(function(){return c})}}({fwWaD:[function(e,t,r,a){var n=e("@parcel/transformer-js/src/esmodule-helpers.js");n.defineInteropFlag(r),n.export(r,"default",()=>l);var o=e("bundle-text:./style.less"),i=n.interopDefault(o);function l(e={}){return t=>{let{$player:r}=t.template,{setStyle:a,append:n,clamp:o,query:i,addClass:l,removeClass:d}=t.constructor.utils,p=`
`,s=[],u=t.query(".art-control-progress-inner"),c=n(u,'
'),f=n(u,'
');function h(e=[]){if((s=[],c.textContent="",d(r,"artplayer-plugin-chapter"),Array.isArray(e)&&e.length)&&t.duration){e=e.sort((e,t)=>e.start-t.start);for(let r=0;rt.duration||a.start>=a.end||n&&a.end>n.start)throw Error("Illegal chapter time point")}e[0].start>0&&e.unshift({start:0,end:e[0].start,title:""}),e[e.length-1].end{let r=n(c,p),a=o(e.start,0,t.duration),l=o(e.end,0,t.duration),d=l-a,s=d/t.duration;return r.dataset.start=a,r.dataset.end=l,r.dataset.duration=d,r.dataset.title=e.title.trim(),r.style.width=`${100*s}%`,{$chapter:r,$hover:i(".art-progress-hover",r),$loaded:i(".art-progress-loaded",r),$played:i(".art-progress-played",r)}}),l(r,"artplayer-plugin-chapter"),t.emit("setBar","loaded",t.loaded||0)}}return t.on("setBar",(e,r)=>{if(s.length)for(let n=0;nv&&a(p,"width","100%"),g>=m&&g<=v){let t=(g-m)/y;a(p,"width",`${100*t}%`),"hover"===e&&h>0&&function({$chapter:e,width:t}){let r=e.dataset.title.trim();if(r){f.textContent=r;let e=f.clientWidth;t<=e/2?a(f,"left",0):t>u.clientWidth-e/2?a(f,"left",`${u.clientWidth-e}px`):a(f,"left",`${t-e/2}px`)}}({$chapter:o,width:h})}}}),t.once("video:loadedmetadata",()=>h(e.chapters)),{name:"artplayerPluginChapter",update:({chapters:e})=>h(e)}}}if("u">typeof document){let e="artplayer-plugin-chapter",t=document.getElementById(e);t||((t=document.createElement("style")).id=e,"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{document.head.appendChild(t)}):(document.head||document.documentElement).appendChild(t)),t.textContent=i.default}"u">typeof window&&(window.artplayerPluginChapter=l)},{"bundle-text:./style.less":"3lhZb","@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],"3lhZb":[function(e,t,r,a){t.exports=".artplayer-plugin-chapter .art-control-progress-inner{background-color:#0000!important;height:100%!important}.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-hover,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-loaded,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-played{display:none!important}.artplayer-plugin-chapter .art-control-thumbnails{bottom:calc(var(--art-bottom-gap) + 64px)!important}.artplayer-plugin-chapter .art-chapters{z-index:0;align-items:center;gap:4px;height:100%;display:flex;position:absolute;inset:0;transform:scaleY(1.25)}.artplayer-plugin-chapter .art-chapters .art-chapter{align-items:center;height:100%;display:flex}.artplayer-plugin-chapter .art-chapters .art-chapter .art-chapter-inner{cursor:pointer;width:100%;height:50%;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color);border-radius:10px;position:relative;overflow:hidden}.artplayer-plugin-chapter .art-chapters .art-chapter:hover .art-chapter-inner{height:100%}.artplayer-plugin-chapter .art-chapter-title{transform-origin:bottom;opacity:0;z-index:70;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease, opacity var(--art-transition-duration) ease;padding:3px 5px;font-size:14px;line-height:1;position:absolute;top:-50px;left:0;transform:scale(.5)}.artplayer-plugin-chapter.art-progress-hover .art-chapter-title{opacity:1;transform:scale(1)}"},{}],loqXi:[function(e,t,r,a){r.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},r.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},r.exportAll=function(e,t){return Object.keys(e).forEach(function(r){"default"===r||"__esModule"===r||Object.prototype.hasOwnProperty.call(t,r)||Object.defineProperty(t,r,{enumerable:!0,get:function(){return e[r]}})}),t},r.export=function(e,t,r){Object.defineProperty(e,t,{enumerable:!0,get:r})}},{}]},["fwWaD"],"fwWaD","parcelRequire4dc0",{});let{default:e}=parcelRequire4dc0("fwWaD");export{e as default}; \ No newline at end of file +const style = ".artplayer-plugin-chapter .art-control-progress-inner{height:100%!important;background-color:transparent!important}.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-hover,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-loaded,.artplayer-plugin-chapter .art-control-progress-inner>.art-progress-played{display:none!important}.artplayer-plugin-chapter .art-control-thumbnails{bottom:calc(var(--art-bottom-gap) + 64px)!important}.artplayer-plugin-chapter .art-chapters{position:absolute;z-index:0;inset:0;display:flex;align-items:center;gap:4px;height:100%;transform:scaleY(1.25)}.artplayer-plugin-chapter .art-chapters .art-chapter{display:flex;align-items:center;height:100%}.artplayer-plugin-chapter .art-chapters .art-chapter .art-chapter-inner{position:relative;cursor:pointer;width:100%;height:50%;border-radius:10px;overflow:hidden;transition:height var(--art-transition-duration) ease;background-color:var(--art-progress-color)}.artplayer-plugin-chapter .art-chapters .art-chapter:hover .art-chapter-inner{height:100%}.artplayer-plugin-chapter .art-chapter-title{transform-origin:bottom center;transform:scale(.5);opacity:0;position:absolute;z-index:70;top:-50px;left:0;padding:3px 5px;line-height:1;font-size:14px;border-radius:var(--art-border-radius);white-space:nowrap;background-color:var(--art-tip-background);transition:transform var(--art-transition-duration) ease,opacity var(--art-transition-duration) ease}.artplayer-plugin-chapter.art-progress-hover .art-chapter-title{transform:scale(1);opacity:1}"; +function artplayerPluginChapter(option = {}) { + return (art) => { + const { $player } = art.template; + const { setStyle, append, clamp, query, addClass, removeClass } = art.constructor.utils; + const html = ` +
+
+
+
+
+
+
+ `; + let $chapters = []; + const $inner = art.query(".art-control-progress-inner"); + const $control = append($inner, '
'); + const $title = append($inner, '
'); + function showTitle({ $chapter, width }) { + const title = $chapter.dataset.title.trim(); + if (title) { + $title.textContent = title; + const titleWidth = $title.clientWidth; + if (width <= titleWidth / 2) { + setStyle($title, "left", 0); + } else if (width > $inner.clientWidth - titleWidth / 2) { + setStyle($title, "left", `${$inner.clientWidth - titleWidth}px`); + } else { + setStyle($title, "left", `${width - titleWidth / 2}px`); + } + } + } + function update(chapters = []) { + $chapters = []; + $control.textContent = ""; + removeClass($player, "artplayer-plugin-chapter"); + if (!Array.isArray(chapters)) + return; + if (!chapters.length) + return; + if (!art.duration) + return; + chapters = chapters.sort((a, b) => a.start - b.start); + for (let i = 0; i < chapters.length; i++) { + const chapter = chapters[i]; + const nextChapter = chapters[i + 1]; + if (chapter.end === Infinity) { + chapter.end = art.duration; + } + if (typeof chapter.start !== "number" || typeof chapter.end !== "number" || typeof chapter.title !== "string") { + throw new TypeError("Illegal chapter data type"); + } + if (chapter.start < 0 || chapter.end > art.duration || chapter.start >= chapter.end) { + throw new Error("Illegal chapter time point"); + } + if (nextChapter && chapter.end > nextChapter.start) { + throw new Error("Illegal chapter time point"); + } + } + if (chapters[0].start > 0) { + chapters.unshift({ start: 0, end: chapters[0].start, title: "" }); + } + if (chapters[chapters.length - 1].end < art.duration) { + chapters.push({ start: chapters[chapters.length - 1].end, end: art.duration, title: "" }); + } + for (let i = 0; i < chapters.length - 1; i++) { + if (chapters[i].end !== chapters[i + 1].start) { + chapters.splice(i + 1, 0, { + start: chapters[i].end, + end: chapters[i + 1].start, + title: "" + }); + } + } + $chapters = chapters.map((chapter) => { + const $chapter = append($control, html); + const start = clamp(chapter.start, 0, art.duration); + const end = clamp(chapter.end, 0, art.duration); + const duration = end - start; + const percentage = duration / art.duration; + $chapter.dataset.start = start; + $chapter.dataset.end = end; + $chapter.dataset.duration = duration; + $chapter.dataset.title = chapter.title.trim(); + $chapter.style.width = `${percentage * 100}%`; + return { + $chapter, + $hover: query(".art-progress-hover", $chapter), + $loaded: query(".art-progress-loaded", $chapter), + $played: query(".art-progress-played", $chapter) + }; + }); + addClass($player, "artplayer-plugin-chapter"); + art.emit("setBar", "loaded", art.loaded || 0); + } + art.on("setBar", (type, percentage) => { + if (!$chapters.length) + return; + for (let i = 0; i < $chapters.length; i++) { + const { $chapter, $loaded, $played, $hover } = $chapters[i]; + const $target = { + hover: $hover, + loaded: $loaded, + played: $played + }[type]; + if (!$target) + return; + const width = $control.clientWidth * percentage; + const currentTime = art.duration * percentage; + const duration = Number.parseFloat($chapter.dataset.duration); + const start = Number.parseFloat($chapter.dataset.start); + const end = Number.parseFloat($chapter.dataset.end); + if (currentTime < start) { + setStyle($target, "width", 0); + } + if (currentTime > end) { + setStyle($target, "width", "100%"); + } + if (currentTime >= start && currentTime <= end) { + const percentage2 = (currentTime - start) / duration; + setStyle($target, "width", `${percentage2 * 100}%`); + if (type === "hover" && width > 0) { + showTitle({ $chapter, width }); + } + } + } + }); + art.once("video:loadedmetadata", () => update(option.chapters)); + return { + name: "artplayerPluginChapter", + update: ({ chapters }) => update(chapters) + }; + }; +} +if (typeof document !== "undefined") { + const id = "artplayer-plugin-chapter"; + let $style = document.getElementById(id); + if (!$style) { + $style = document.createElement("style"); + $style.id = id; + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", () => { + document.head.appendChild($style); + }); + } else { + (document.head || document.documentElement).appendChild($style); + } + } + $style.textContent = style; +} +if (typeof window !== "undefined") { + window.artplayerPluginChapter = artplayerPluginChapter; +} +export { + artplayerPluginChapter as default +}; diff --git a/docs/compiled/artplayer-plugin-chromecast.js b/docs/compiled/artplayer-plugin-chromecast.js index e4db36f25..29fc39ada 100644 --- a/docs/compiled/artplayer-plugin-chromecast.js +++ b/docs/compiled/artplayer-plugin-chromecast.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-chromecast.js v1.0.1 + * artplayer-plugin-chromecast.js v1.0.2 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t,o,n,r){var a="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},i="function"==typeof a[n]&&a[n],c=i.i||{},s=i.cache||{},l="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function d(t,o){if(!s[t]){if(!e[t]){if(r[t])return r[t];var c="function"==typeof a[n]&&a[n];if(!o&&c)return c(t,!0);if(i)return i(t,!0);if(l&&"string"==typeof t)return l(t);var u=Error("Cannot find module '"+t+"'");throw u.code="MODULE_NOT_FOUND",u}p.resolve=function(o){var n=e[t][1][o];return null!=n?n:o},p.cache={};var f=s[t]=new d.Module(t);e[t][0].call(f.exports,p,f,f.exports,a)}return s[t].exports;function p(e){var t=p.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var o={__esModule:!0};return t.forEach(function(e){var t=e[0],n=e[1],r=e[2]||e[0],a=d(n);"*"===t?Object.keys(a).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(o,e)||Object.defineProperty(o,e,{enumerable:!0,get:function(){return a[e]}})}):"*"===r?Object.defineProperty(o,t,{enumerable:!0,value:a}):Object.defineProperty(o,t,{enumerable:!0,get:function(){return"default"===r?a.__esModule?a.default:a:a[r]}})}),o}return d(t)}}d.isParcelRequire=!0,d.Module=function(e){this.id=e,this.bundle=d,this.require=l,this.exports={}},d.modules=e,d.cache=s,d.parent=i,d.distDir=void 0,d.publicUrl=void 0,d.devServer=void 0,d.i=c,d.register=function(t,o){e[t]=[function(e,t){t.exports=o},{}]},Object.defineProperty(d,"root",{get:function(){return a[n]}}),a[n]=d;for(var u=0;utypeof module?module.exports=f:"function"==typeof define&&define.amd&&define(function(){return f})}}({"18Aaf":[function(e,t,o,n){var r=e("@parcel/transformer-js/src/esmodule-helpers.js");function a(e){let t=!1,o=null,n=null,r=e=>{let t=document.querySelector(".art-icon-cast");if(t)switch(e){case"connected":t.style.color="red";break;case"connecting":case"disconnecting":t.style.color="orange";break;default:t.style.color="white"}},a=(t,o)=>{let n=e.url||t.option.url,r=new window.chrome.cast.media.MediaInfo(n,e.mimeType||({mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",ogv:"video/ogg",mp3:"audio/mp3",wav:"audio/wav",flv:"video/x-flv",mov:"video/quicktime",avi:"video/x-msvideo",wmv:"video/x-ms-wmv",mpd:"application/dash+xml",m3u8:"application/x-mpegURL"})[n.split("?")[0].split("#")[0].split(".").pop().toLowerCase()]||"application/octet-stream"),a=new window.chrome.cast.media.LoadRequest(r);o.loadMedia(a).then(()=>{t.notice.show="Casting started",e.onCastStart?.()}).catch(o=>{throw t.notice.show="Error casting media",e.onError?.(o),o})};return async i=>(i.controls.add({name:"chromecast",position:"right",tooltip:"Chromecast",html:`${e.icon||''}`,click:async()=>{if(!t)try{await new Promise((a,i)=>{var c;window.__onGCastApiAvailable=c=>{if(c){let i=window.cast.framework.CastContext.getInstance();i.setOptions({receiverApplicationId:window.chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,autoJoinPolicy:window.chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}),i.addEventListener(window.cast.framework.CastContextEventType.SESSION_STATE_CHANGED,t=>{let a=window.cast.framework.SessionState;switch(n=t.sessionState,o=t.session,t.sessionState){case a.NO_SESSION:e.onStateChange?.("disconnected"),r("disconnected");break;case a.SESSION_STARTING:e.onStateChange?.("connecting"),r("connecting");break;case a.SESSION_STARTED:e.onStateChange?.("connected"),r("connected");break;case a.SESSION_ENDING:e.onStateChange?.("disconnecting"),r("disconnecting");break;case a.SESSION_RESUMED:e.onStateChange?.("connected"),r("connected")}}),i.addEventListener(window.cast.framework.CastContextEventType.CAST_STATE_CHANGED,t=>{let o=window.cast.framework.CastState;switch(t.castState){case o.NO_DEVICES_AVAILABLE:e.onCastAvailable?.(!1);break;case o.NOT_CONNECTED:case o.CONNECTING:case o.CONNECTED:e.onCastAvailable?.(!0)}}),t=!0,a()}else i(Error("Cast API is not available"))},window.chrome&&window.chrome.cast||(c=e.sdk||"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1",new Promise((e,t)=>{let o=document.createElement("script");o.src=c,o.onload=e,o.onerror=t,document.body.appendChild(o)})).catch(i)})}catch(t){throw i.notice.show="Failed to initialize Cast API",e.onError?.(t),t}let c=window.cast.framework.CastContext.getInstance();if(o)a(i,o);else try{let e=await c.requestSession();a(i,e)}catch(t){throw i.notice.show="Error connecting to cast session",e.onError?.(t),t}}}),{name:"artplayerPluginChromecast",getCastState:()=>n,isCasting:()=>null!==o})}r.defineInteropFlag(o),r.export(o,"default",()=>a),"u">typeof window&&(window.artplayerPluginChromecast=a)},{"@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"6ykb1":[function(e,t,o,n){o.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},o.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},o.exportAll=function(e,t){return Object.keys(e).forEach(function(o){"default"===o||"__esModule"===o||Object.prototype.hasOwnProperty.call(t,o)||Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[o]}})}),t},o.export=function(e,t,o){Object.defineProperty(e,t,{enumerable:!0,get:o})}},{}]},["18Aaf"],"18Aaf","parcelRequire4dc0",{}); \ No newline at end of file +!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(t.ArtplayerPluginChromecast=t(),define(function(){return t.ArtplayerPluginChromecast})):(e="undefined"!==typeof globalThis?globalThis:e||self).ArtplayerPluginChromecast=t()}(this,function(){"use strict";function e(e){let t=!1,o=null,n=null;const a=e=>{const t=document.querySelector(".art-icon-cast");if(t)switch(e){case"connected":t.style.color="red";break;case"connecting":case"disconnecting":t.style.color="orange";break;default:t.style.color="white"}},c=()=>new Promise((c,s)=>{var i;window.__onGCastApiAvailable=i=>{if(i){const s=window.cast.framework.CastContext.getInstance();s.setOptions({receiverApplicationId:window.chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,autoJoinPolicy:window.chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}),s.addEventListener(window.cast.framework.CastContextEventType.SESSION_STATE_CHANGED,t=>{const c=window.cast.framework.SessionState;switch(n=t.sessionState,o=t.session,t.sessionState){case c.NO_SESSION:e.onStateChange?.("disconnected"),a("disconnected");break;case c.SESSION_STARTING:e.onStateChange?.("connecting"),a("connecting");break;case c.SESSION_STARTED:e.onStateChange?.("connected"),a("connected");break;case c.SESSION_ENDING:e.onStateChange?.("disconnecting"),a("disconnecting");break;case c.SESSION_RESUMED:e.onStateChange?.("connected"),a("connected")}}),s.addEventListener(window.cast.framework.CastContextEventType.CAST_STATE_CHANGED,t=>{const o=window.cast.framework.CastState;switch(t.castState){case o.NO_DEVICES_AVAILABLE:e.onCastAvailable?.(!1);break;case o.NOT_CONNECTED:case o.CONNECTING:case o.CONNECTED:e.onCastAvailable?.(!0)}}),t=!0,c()}else s(new Error("Cast API is not available"))},window.chrome&&window.chrome.cast||(i=e.sdk||"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1",new Promise((e,t)=>{const o=document.createElement("script");o.src=i,o.onload=e,o.onerror=t,document.body.appendChild(o)})).catch(s)}),s=(t,o)=>{const n=e.url||t.option.url,a=new window.chrome.cast.media.MediaInfo(n,e.mimeType||function(e){return{mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",ogv:"video/ogg",mp3:"audio/mp3",wav:"audio/wav",flv:"video/x-flv",mov:"video/quicktime",avi:"video/x-msvideo",wmv:"video/x-ms-wmv",mpd:"application/dash+xml",m3u8:"application/x-mpegURL"}[e.split("?")[0].split("#")[0].split(".").pop().toLowerCase()]||"application/octet-stream"}(n)),c=new window.chrome.cast.media.LoadRequest(a);o.loadMedia(c).then(()=>{t.notice.show="Casting started",e.onCastStart?.()}).catch(o=>{throw t.notice.show="Error casting media",e.onError?.(o),o})};return async a=>(a.controls.add({name:"chromecast",position:"right",tooltip:"Chromecast",html:`${e.icon||''}`,click:async()=>{if(!t)try{await c()}catch(i){throw a.notice.show="Failed to initialize Cast API",e.onError?.(i),i}const n=window.cast.framework.CastContext.getInstance();if(o)s(a,o);else try{const e=await n.requestSession();s(a,e)}catch(i){throw a.notice.show="Error connecting to cast session",e.onError?.(i),i}}}),{name:"artplayerPluginChromecast",getCastState:()=>n,isCasting:()=>null!==o})}return"undefined"!==typeof window&&(window.artplayerPluginChromecast=e),e}); diff --git a/docs/compiled/artplayer-plugin-chromecast.legacy.js b/docs/compiled/artplayer-plugin-chromecast.legacy.js index 0255780ba..54b35ddfb 100644 --- a/docs/compiled/artplayer-plugin-chromecast.legacy.js +++ b/docs/compiled/artplayer-plugin-chromecast.legacy.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-chromecast.js v1.0.1 + * artplayer-plugin-chromecast.js v1.0.2 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t,n,r,o){var a="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},c="function"==typeof a[r]&&a[r],i=c.i||{},s=c.cache||{},l="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function u(t,n){if(!s[t]){if(!e[t]){if(o[t])return o[t];var i="function"==typeof a[r]&&a[r];if(!n&&i)return i(t,!0);if(c)return c(t,!0);if(l&&"string"==typeof t)return l(t);var f=Error("Cannot find module '"+t+"'");throw f.code="MODULE_NOT_FOUND",f}p.resolve=function(n){var r=e[t][1][n];return null!=r?r:n},p.cache={};var d=s[t]=new u.Module(t);e[t][0].call(d.exports,p,d,d.exports,a)}return s[t].exports;function p(e){var t=p.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var n={__esModule:!0};return t.forEach(function(e){var t=e[0],r=e[1],o=e[2]||e[0],a=u(r);"*"===t?Object.keys(a).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(n,e)||Object.defineProperty(n,e,{enumerable:!0,get:function(){return a[e]}})}):"*"===o?Object.defineProperty(n,t,{enumerable:!0,value:a}):Object.defineProperty(n,t,{enumerable:!0,get:function(){return"default"===o?a.__esModule?a.default:a:a[o]}})}),n}return u(t)}}u.isParcelRequire=!0,u.Module=function(e){this.id=e,this.bundle=u,this.require=l,this.exports={}},u.modules=e,u.cache=s,u.parent=c,u.distDir=void 0,u.publicUrl=void 0,u.devServer=void 0,u.i=i,u.register=function(t,n){e[t]=[function(e,t){t.exports=n},{}]},Object.defineProperty(u,"root",{get:function(){return a[r]}}),a[r]=u;for(var f=0;ftypeof module?module.exports=d:"function"==typeof define&&define.amd&&define(function(){return d})}}({"1xnGs":[function(e,t,n,r){var o=e("@parcel/transformer-js/src/esmodule-helpers.js");o.defineInteropFlag(n),o.export(n,"default",function(){return i});var a=e("@swc/helpers/cjs/_async_to_generator.cjs"),c=e("@swc/helpers/cjs/_ts_generator.cjs");function i(e){var t=!1,n=null,r=null,o=function(e){var t=document.querySelector(".art-icon-cast");if(t)switch(e){case"connected":t.style.color="red";break;case"connecting":case"disconnecting":t.style.color="orange";break;default:t.style.color="white"}},i=function(t,n){var r=e.url||t.option.url,o=new window.chrome.cast.media.MediaInfo(r,e.mimeType||({mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",ogv:"video/ogg",mp3:"audio/mp3",wav:"audio/wav",flv:"video/x-flv",mov:"video/quicktime",avi:"video/x-msvideo",wmv:"video/x-ms-wmv",mpd:"application/dash+xml",m3u8:"application/x-mpegURL"})[r.split("?")[0].split("#")[0].split(".").pop().toLowerCase()]||"application/octet-stream"),a=new window.chrome.cast.media.LoadRequest(o);n.loadMedia(a).then(function(){var n;t.notice.show="Casting started",null==(n=e.onCastStart)||n.call(e)}).catch(function(n){var r;throw t.notice.show="Error casting media",null==(r=e.onError)||r.call(e,n),n})};return function(s){return(0,a._)(function(){return(0,c._)(this,function(l){return s.controls.add({name:"chromecast",position:"right",tooltip:"Chromecast",html:''.concat(e.icon||'',""),click:function(){return(0,a._)(function(){var a,l,u,f,d;return(0,c._)(this,function(c){switch(c.label){case 0:if(t)return[3,4];c.label=1;case 1:return c.trys.push([1,3,,4]),[4,new Promise(function(a,c){var i;window.__onGCastApiAvailable=function(i){if(i){var s=window.cast.framework.CastContext.getInstance();s.setOptions({receiverApplicationId:window.chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,autoJoinPolicy:window.chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}),s.addEventListener(window.cast.framework.CastContextEventType.SESSION_STATE_CHANGED,function(t){var a,c,i,s,l,u=window.cast.framework.SessionState;switch(r=t.sessionState,n=t.session,t.sessionState){case u.NO_SESSION:null==(a=e.onStateChange)||a.call(e,"disconnected"),o("disconnected");break;case u.SESSION_STARTING:null==(c=e.onStateChange)||c.call(e,"connecting"),o("connecting");break;case u.SESSION_STARTED:null==(i=e.onStateChange)||i.call(e,"connected"),o("connected");break;case u.SESSION_ENDING:null==(s=e.onStateChange)||s.call(e,"disconnecting"),o("disconnecting");break;case u.SESSION_RESUMED:null==(l=e.onStateChange)||l.call(e,"connected"),o("connected")}}),s.addEventListener(window.cast.framework.CastContextEventType.CAST_STATE_CHANGED,function(t){var n,r,o,a=window.cast.framework.CastState;switch(t.castState){case a.NO_DEVICES_AVAILABLE:null==(n=e.onCastAvailable)||n.call(e,!1);break;case a.NOT_CONNECTED:null==(r=e.onCastAvailable)||r.call(e,!0);break;case a.CONNECTING:case a.CONNECTED:null==(o=e.onCastAvailable)||o.call(e,!0)}}),t=!0,a()}else c(Error("Cast API is not available"))},window.chrome&&window.chrome.cast||(i=e.sdk||"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1",new Promise(function(e,t){var n=document.createElement("script");n.src=i,n.onload=e,n.onerror=t,document.body.appendChild(n)})).catch(c)})];case 2:return c.sent(),[3,4];case 3:throw a=c.sent(),s.notice.show="Failed to initialize Cast API",null==(l=e.onError)||l.call(e,a),a;case 4:if(u=window.cast.framework.CastContext.getInstance(),!n)return[3,5];return i(s,n),[3,8];case 5:return c.trys.push([5,7,,8]),[4,u.requestSession()];case 6:return i(s,c.sent()),[3,8];case 7:throw f=c.sent(),s.notice.show="Error connecting to cast session",null==(d=e.onError)||d.call(e,f),f;case 8:return[2]}})})()}}),[2,{name:"artplayerPluginChromecast",getCastState:function(){return r},isCasting:function(){return null!==n}}]})})()}}"u">typeof window&&(window.artplayerPluginChromecast=i)},{"@swc/helpers/cjs/_async_to_generator.cjs":"cZn0e","@swc/helpers/cjs/_ts_generator.cjs":"eltGh","@parcel/transformer-js/src/esmodule-helpers.js":"qpMMf"}],cZn0e:[function(e,t,n,r){"use strict";function o(e,t,n,r,o,a,c){try{var i=e[a](c),s=i.value}catch(e){n(e);return}i.done?t(s):Promise.resolve(s).then(r,o)}n._=function(e){return function(){var t=this,n=arguments;return new Promise(function(r,a){var c=e.apply(t,n);function i(e){o(c,r,a,i,s,"next",e)}function s(e){o(c,r,a,i,s,"throw",e)}i(void 0)})}}},{}],eltGh:[function(e,t,n,r){"use strict";n._=function(e,t){var n,r,o,a={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]},c=Object.create(("function"==typeof Iterator?Iterator:Object).prototype),i=Object.defineProperty;return i(c,"next",{value:s(0)}),i(c,"throw",{value:s(1)}),i(c,"return",{value:s(2)}),"function"==typeof Symbol&&i(c,Symbol.iterator,{value:function(){return this}}),c;function s(i){return function(s){var l=[i,s];if(n)throw TypeError("Generator is already executing.");for(;c&&(c=0,l[0]&&(a=0)),a;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return a.label++,{value:l[1],done:!1};case 5:a.label++,r=l[1],l=[0];continue;case 7:l=a.ops.pop(),a.trys.pop();continue;default:if(!(o=(o=a.trys).length>0&&o[o.length-1])&&(6===l[0]||2===l[0])){a=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]new Promise((o,a)=>{var c=e=>{try{s(n.next(e))}catch(t){a(t)}},i=e=>{try{s(n.throw(e))}catch(t){a(t)}},s=e=>e.done?o(e.value):Promise.resolve(e.value).then(c,i);s((n=n.apply(e,t)).next())});function t(t){let n=!1,o=null,a=null;const c=e=>{const t=document.querySelector(".art-icon-cast");if(t)switch(e){case"connected":t.style.color="red";break;case"connecting":case"disconnecting":t.style.color="orange";break;default:t.style.color="white"}},i=()=>new Promise((e,i)=>{var s;window.__onGCastApiAvailable=s=>{if(s){const i=window.cast.framework.CastContext.getInstance();i.setOptions({receiverApplicationId:window.chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,autoJoinPolicy:window.chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}),i.addEventListener(window.cast.framework.CastContextEventType.SESSION_STATE_CHANGED,e=>{var n,i,s,l,r;const d=window.cast.framework.SessionState;switch(a=e.sessionState,o=e.session,e.sessionState){case d.NO_SESSION:null==(n=t.onStateChange)||n.call(t,"disconnected"),c("disconnected");break;case d.SESSION_STARTING:null==(i=t.onStateChange)||i.call(t,"connecting"),c("connecting");break;case d.SESSION_STARTED:null==(s=t.onStateChange)||s.call(t,"connected"),c("connected");break;case d.SESSION_ENDING:null==(l=t.onStateChange)||l.call(t,"disconnecting"),c("disconnecting");break;case d.SESSION_RESUMED:null==(r=t.onStateChange)||r.call(t,"connected"),c("connected")}}),i.addEventListener(window.cast.framework.CastContextEventType.CAST_STATE_CHANGED,e=>{var n,o,a;const c=window.cast.framework.CastState;switch(e.castState){case c.NO_DEVICES_AVAILABLE:null==(n=t.onCastAvailable)||n.call(t,!1);break;case c.NOT_CONNECTED:null==(o=t.onCastAvailable)||o.call(t,!0);break;case c.CONNECTING:case c.CONNECTED:null==(a=t.onCastAvailable)||a.call(t,!0)}}),n=!0,e()}else i(new Error("Cast API is not available"))},window.chrome&&window.chrome.cast||(s=t.sdk||"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1",new Promise((e,t)=>{const n=document.createElement("script");n.src=s,n.onload=e,n.onerror=t,document.body.appendChild(n)})).catch(i)}),s=(e,n)=>{const o=t.url||e.option.url,a=new window.chrome.cast.media.MediaInfo(o,t.mimeType||function(e){return{mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",ogv:"video/ogg",mp3:"audio/mp3",wav:"audio/wav",flv:"video/x-flv",mov:"video/quicktime",avi:"video/x-msvideo",wmv:"video/x-ms-wmv",mpd:"application/dash+xml",m3u8:"application/x-mpegURL"}[e.split("?")[0].split("#")[0].split(".").pop().toLowerCase()]||"application/octet-stream"}(o)),c=new window.chrome.cast.media.LoadRequest(a);n.loadMedia(c).then(()=>{var n;e.notice.show="Casting started",null==(n=t.onCastStart)||n.call(t)}).catch(n=>{var o;throw e.notice.show="Error casting media",null==(o=t.onError)||o.call(t,n),n})};return c=>e(null,null,function*(){return c.controls.add({name:"chromecast",position:"right",tooltip:"Chromecast",html:`${t.icon||''}`,click:()=>e(null,null,function*(){var e,a;if(!n)try{yield i()}catch(r){throw c.notice.show="Failed to initialize Cast API",null==(e=t.onError)||e.call(t,r),r}const l=window.cast.framework.CastContext.getInstance();if(o)s(c,o);else try{const e=yield l.requestSession();s(c,e)}catch(r){throw c.notice.show="Error connecting to cast session",null==(a=t.onError)||a.call(t,r),r}})}),{name:"artplayerPluginChromecast",getCastState:()=>a,isCasting:()=>null!==o}})}return"undefined"!==typeof window&&(window.artplayerPluginChromecast=t),t}); diff --git a/docs/compiled/artplayer-plugin-chromecast.mjs b/docs/compiled/artplayer-plugin-chromecast.mjs index 611c60a70..234f0d2f8 100644 --- a/docs/compiled/artplayer-plugin-chromecast.mjs +++ b/docs/compiled/artplayer-plugin-chromecast.mjs @@ -1,8 +1,179 @@ - /*! - * artplayer-plugin-chromecast.js v1.0.1 + * artplayer-plugin-chromecast.js v1.0.2 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t,o,n,r){var a="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},i="function"==typeof a[n]&&a[n],c=i.i||{},s=i.cache||{},l="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function d(t,o){if(!s[t]){if(!e[t]){if(r[t])return r[t];var c="function"==typeof a[n]&&a[n];if(!o&&c)return c(t,!0);if(i)return i(t,!0);if(l&&"string"==typeof t)return l(t);var u=Error("Cannot find module '"+t+"'");throw u.code="MODULE_NOT_FOUND",u}p.resolve=function(o){var n=e[t][1][o];return null!=n?n:o},p.cache={};var f=s[t]=new d.Module(t);e[t][0].call(f.exports,p,f,f.exports,a)}return s[t].exports;function p(e){var t=p.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var o={__esModule:!0};return t.forEach(function(e){var t=e[0],n=e[1],r=e[2]||e[0],a=d(n);"*"===t?Object.keys(a).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(o,e)||Object.defineProperty(o,e,{enumerable:!0,get:function(){return a[e]}})}):"*"===r?Object.defineProperty(o,t,{enumerable:!0,value:a}):Object.defineProperty(o,t,{enumerable:!0,get:function(){return"default"===r?a.__esModule?a.default:a:a[r]}})}),o}return d(t)}}d.isParcelRequire=!0,d.Module=function(e){this.id=e,this.bundle=d,this.require=l,this.exports={}},d.modules=e,d.cache=s,d.parent=i,d.distDir=void 0,d.publicUrl=void 0,d.devServer=void 0,d.i=c,d.register=function(t,o){e[t]=[function(e,t){t.exports=o},{}]},Object.defineProperty(d,"root",{get:function(){return a[n]}}),a[n]=d;for(var u=0;utypeof module?module.exports=f:"function"==typeof define&&define.amd&&define(function(){return f})}}({"2IQmJ":[function(e,t,o,n){var r=e("@parcel/transformer-js/src/esmodule-helpers.js");function a(e){let t=!1,o=null,n=null,r=e=>{let t=document.querySelector(".art-icon-cast");if(t)switch(e){case"connected":t.style.color="red";break;case"connecting":case"disconnecting":t.style.color="orange";break;default:t.style.color="white"}},a=(t,o)=>{let n=e.url||t.option.url,r=new window.chrome.cast.media.MediaInfo(n,e.mimeType||({mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",ogv:"video/ogg",mp3:"audio/mp3",wav:"audio/wav",flv:"video/x-flv",mov:"video/quicktime",avi:"video/x-msvideo",wmv:"video/x-ms-wmv",mpd:"application/dash+xml",m3u8:"application/x-mpegURL"})[n.split("?")[0].split("#")[0].split(".").pop().toLowerCase()]||"application/octet-stream"),a=new window.chrome.cast.media.LoadRequest(r);o.loadMedia(a).then(()=>{t.notice.show="Casting started",e.onCastStart?.()}).catch(o=>{throw t.notice.show="Error casting media",e.onError?.(o),o})};return async i=>(i.controls.add({name:"chromecast",position:"right",tooltip:"Chromecast",html:`${e.icon||''}`,click:async()=>{if(!t)try{await new Promise((a,i)=>{var c;window.__onGCastApiAvailable=c=>{if(c){let i=window.cast.framework.CastContext.getInstance();i.setOptions({receiverApplicationId:window.chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID,autoJoinPolicy:window.chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED}),i.addEventListener(window.cast.framework.CastContextEventType.SESSION_STATE_CHANGED,t=>{let a=window.cast.framework.SessionState;switch(n=t.sessionState,o=t.session,t.sessionState){case a.NO_SESSION:e.onStateChange?.("disconnected"),r("disconnected");break;case a.SESSION_STARTING:e.onStateChange?.("connecting"),r("connecting");break;case a.SESSION_STARTED:e.onStateChange?.("connected"),r("connected");break;case a.SESSION_ENDING:e.onStateChange?.("disconnecting"),r("disconnecting");break;case a.SESSION_RESUMED:e.onStateChange?.("connected"),r("connected")}}),i.addEventListener(window.cast.framework.CastContextEventType.CAST_STATE_CHANGED,t=>{let o=window.cast.framework.CastState;switch(t.castState){case o.NO_DEVICES_AVAILABLE:e.onCastAvailable?.(!1);break;case o.NOT_CONNECTED:case o.CONNECTING:case o.CONNECTED:e.onCastAvailable?.(!0)}}),t=!0,a()}else i(Error("Cast API is not available"))},window.chrome&&window.chrome.cast||(c=e.sdk||"https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1",new Promise((e,t)=>{let o=document.createElement("script");o.src=c,o.onload=e,o.onerror=t,document.body.appendChild(o)})).catch(i)})}catch(t){throw i.notice.show="Failed to initialize Cast API",e.onError?.(t),t}let c=window.cast.framework.CastContext.getInstance();if(o)a(i,o);else try{let e=await c.requestSession();a(i,e)}catch(t){throw i.notice.show="Error connecting to cast session",e.onError?.(t),t}}}),{name:"artplayerPluginChromecast",getCastState:()=>n,isCasting:()=>null!==o})}r.defineInteropFlag(o),r.export(o,"default",()=>a),"u">typeof window&&(window.artplayerPluginChromecast=a)},{"@parcel/transformer-js/src/esmodule-helpers.js":"loqXi"}],loqXi:[function(e,t,o,n){o.interopDefault=function(e){return e&&e.__esModule?e:{default:e}},o.defineInteropFlag=function(e){Object.defineProperty(e,"__esModule",{value:!0})},o.exportAll=function(e,t){return Object.keys(e).forEach(function(o){"default"===o||"__esModule"===o||Object.prototype.hasOwnProperty.call(t,o)||Object.defineProperty(t,o,{enumerable:!0,get:function(){return e[o]}})}),t},o.export=function(e,t,o){Object.defineProperty(e,t,{enumerable:!0,get:o})}},{}]},["2IQmJ"],"2IQmJ","parcelRequire4dc0",{});let{default:e}=parcelRequire4dc0("2IQmJ");export{e as default}; \ No newline at end of file +function loadScript(src) { + return new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.src = src; + script.onload = resolve; + script.onerror = reject; + document.body.appendChild(script); + }); +} +function getMimeType(url) { + const extension = url.split("?")[0].split("#")[0].split(".").pop().toLowerCase(); + const mimeTypes = { + mp4: "video/mp4", + webm: "video/webm", + ogg: "video/ogg", + ogv: "video/ogg", + mp3: "audio/mp3", + wav: "audio/wav", + flv: "video/x-flv", + mov: "video/quicktime", + avi: "video/x-msvideo", + wmv: "video/x-ms-wmv", + mpd: "application/dash+xml", + m3u8: "application/x-mpegURL" + }; + return mimeTypes[extension] || "application/octet-stream"; +} +function artplayerPluginChromecast(option) { + const DEFAULT_ICON = ``; + const DEFAULT_SDK = "https://www.gstatic.com/cv/js/sender/v1/cast_sender.js?loadCastFramework=1"; + let isCastInitialized = false; + let castSession = null; + let castState = null; + const updateCastButton = (state) => { + const button = document.querySelector(".art-icon-cast"); + if (button) { + switch (state) { + case "connected": + button.style.color = "red"; + break; + case "connecting": + case "disconnecting": + button.style.color = "orange"; + break; + case "disconnected": + default: + button.style.color = "white"; + break; + } + } + }; + const initializeCastApi = () => { + return new Promise((resolve, reject) => { + window.__onGCastApiAvailable = (isAvailable) => { + if (isAvailable) { + const context = window.cast.framework.CastContext.getInstance(); + context.setOptions({ + receiverApplicationId: window.chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID, + autoJoinPolicy: window.chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED + }); + context.addEventListener( + window.cast.framework.CastContextEventType.SESSION_STATE_CHANGED, + (event) => { + const SessionState = window.cast.framework.SessionState; + castState = event.sessionState; + castSession = event.session; + switch (event.sessionState) { + case SessionState.NO_SESSION: + option.onStateChange?.("disconnected"); + updateCastButton("disconnected"); + break; + case SessionState.SESSION_STARTING: + option.onStateChange?.("connecting"); + updateCastButton("connecting"); + break; + case SessionState.SESSION_STARTED: + option.onStateChange?.("connected"); + updateCastButton("connected"); + break; + case SessionState.SESSION_ENDING: + option.onStateChange?.("disconnecting"); + updateCastButton("disconnecting"); + break; + case SessionState.SESSION_RESUMED: + option.onStateChange?.("connected"); + updateCastButton("connected"); + break; + } + } + ); + context.addEventListener(window.cast.framework.CastContextEventType.CAST_STATE_CHANGED, (event) => { + const CastState = window.cast.framework.CastState; + switch (event.castState) { + case CastState.NO_DEVICES_AVAILABLE: + option.onCastAvailable?.(false); + break; + case CastState.NOT_CONNECTED: + option.onCastAvailable?.(true); + break; + case CastState.CONNECTING: + case CastState.CONNECTED: + option.onCastAvailable?.(true); + break; + } + }); + isCastInitialized = true; + resolve(); + } else { + reject(new Error("Cast API is not available")); + } + }; + if (!window.chrome || !window.chrome.cast) { + loadScript(option.sdk || DEFAULT_SDK).catch(reject); + } + }); + }; + const castVideo = (art, session) => { + const url = option.url || art.option.url; + const mediaInfo = new window.chrome.cast.media.MediaInfo(url, option.mimeType || getMimeType(url)); + const request = new window.chrome.cast.media.LoadRequest(mediaInfo); + session.loadMedia(request).then(() => { + art.notice.show = "Casting started"; + option.onCastStart?.(); + }).catch((error) => { + art.notice.show = "Error casting media"; + option.onError?.(error); + throw error; + }); + }; + return async (art) => { + art.controls.add({ + name: "chromecast", + position: "right", + tooltip: "Chromecast", + html: `${option.icon || DEFAULT_ICON}`, + click: async () => { + if (!isCastInitialized) { + try { + await initializeCastApi(); + } catch (error) { + art.notice.show = "Failed to initialize Cast API"; + option.onError?.(error); + throw error; + } + } + const context = window.cast.framework.CastContext.getInstance(); + if (castSession) { + castVideo(art, castSession); + } else { + try { + const session = await context.requestSession(); + castVideo(art, session); + } catch (error) { + art.notice.show = "Error connecting to cast session"; + option.onError?.(error); + throw error; + } + } + } + }); + return { + name: "artplayerPluginChromecast", + getCastState: () => castState, + isCasting: () => castSession !== null + }; + }; +} +if (typeof window !== "undefined") { + window.artplayerPluginChromecast = artplayerPluginChromecast; +} +export { + artplayerPluginChromecast as default +}; diff --git a/docs/compiled/artplayer-plugin-danmuku-mask.js b/docs/compiled/artplayer-plugin-danmuku-mask.js index a0ee820d5..d1d1556bc 100644 --- a/docs/compiled/artplayer-plugin-danmuku-mask.js +++ b/docs/compiled/artplayer-plugin-danmuku-mask.js @@ -1,8 +1,7 @@ - /*! - * artplayer-plugin-danmuku-mask.js v1.0.0 + * artplayer-plugin-danmuku-mask.js v1.0.1 * Github: https://github.com/zhw2590582/ArtPlayer * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t,r,n,s){var a="u">typeof globalThis?globalThis:"u">typeof self?self:"u">typeof window?window:"u">typeof global?global:{},o="function"==typeof a[n]&&a[n],l=o.i||{},i=o.cache||{},p="u">typeof module&&"function"==typeof module.require&&module.require.bind(module);function u(t,r){if(!i[t]){if(!e[t]){if(s[t])return s[t];var l="function"==typeof a[n]&&a[n];if(!r&&l)return l(t,!0);if(o)return o(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 d=i[t]=new u.Module(t);e[t][0].call(d.exports,f,d,d.exports,a)}return i[t].exports;function f(e){var t=f.resolve(e);if(!1===t)return{};if(Array.isArray(t)){var r={__esModule:!0};return t.forEach(function(e){var t=e[0],n=e[1],s=e[2]||e[0],a=u(n);"*"===t?Object.keys(a).forEach(function(e){"default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(r,e)||Object.defineProperty(r,e,{enumerable:!0,get:function(){return a[e]}})}):"*"===s?Object.defineProperty(r,t,{enumerable:!0,value:a}):Object.defineProperty(r,t,{enumerable:!0,get:function(){return"default"===s?a.__esModule?a.default:a:a[s]}})}),r}return u(t)}}u.isParcelRequire=!0,u.Module=function(e){this.id=e,this.bundle=u,this.require=p,this.exports={}},u.modules=e,u.cache=i,u.parent=o,u.distDir=void 0,u.publicUrl=void 0,u.devServer=void 0,u.i=l,u.register=function(t,r){e[t]=[function(e,t){t.exports=r},{}]},Object.defineProperty(u,"root",{get:function(){return a[n]}}),a[n]=u;for(var c=0;ctypeof module?module.exports=d:"function"==typeof define&&define.amd&&define(function(){return d})}}({ecCzQ:[function(e,t,r,n){var s=e("@parcel/transformer-js/src/esmodule-helpers.js");s.defineInteropFlag(r),s.export(r,"default",()=>l);var a=e("@tensorflow-models/body-segmentation"),o=e("@tensorflow/tfjs-core");function l(e={}){return t=>{let{template:{$video:r,$danmuku:n}}=t,s=null,l=null,i=null,p=null,u=!1,c={solutionPath:e.solutionPath||"https://cdn.jsdelivr.net/npm/@mediapipe/selfie_segmentation",modelSelection:e.modelSelection||1,smoothSegmentation:void 0===e.smoothSegmentation||e.smoothSegmentation,minDetectionConfidence:e.minDetectionConfidence||.5,minTrackingConfidence:e.minTrackingConfidence||.5,selfieMode:e.selfieMode||!1,drawContour:e.drawContour||!1,foregroundThreshold:e.foregroundThreshold||.5,opacity:e.opacity||1,maskBlurAmount:e.maskBlurAmount||3};async function d(){try{await o.setBackend("webgl")}catch(e){console.warn("WebGL backend not available, falling back to CPU",e.message),await o.setBackend("cpu")}}async function f(){await d();let e=a.SupportedModels.MediaPipeSelfieSegmentation,t={runtime:"mediapipe",modelType:"general",solutionPath:c.solutionPath,modelSelection:c.modelSelection,smoothSegmentation:c.smoothSegmentation,minDetectionConfidence:c.minDetectionConfidence,minTrackingConfidence:c.minTrackingConfidence,selfieMode:c.selfieMode};try{s=await a.createSegmenter(e,t),u=!0}catch(e){console.error("Error initializing segmenter:",e),u=!1}}async function m(){if(!u||r.paused||r.ended){p=requestAnimationFrame(m);return}try{l.width=r.videoWidth,l.height=r.videoHeight;let e=await s.segmentPeople(r);if(!e||0===e.length){p=requestAnimationFrame(m);return}let t=await a.toBinaryMask(e,{r:255,g:255,b:255,a:255},{r:0,g:0,b:0,a:255},c.drawContour,c.foregroundThreshold);await a.drawMask(l,r,t,c.opacity,c.maskBlurAmount);let o=i.getImageData(0,0,l.width,l.height);i.putImageData(function(e){let t=e.data;for(let e=0;e250&&t[e+1]>250&&t[e+2]>250&&(t[e+3]=0);return e}(o),0,0),n.style.maskImage=`url(${l.toDataURL()})`}catch(e){console.error("Error in segmentBody:",e)}p=requestAnimationFrame(m)}async function h(){u||await f(),l||(i=(l=document.createElement("canvas")).getContext("2d")),Object.assign(n.style,{maskMode:"alpha",maskSize:"contain",maskRepeat:"no-repeat",backgroundSize:"contain",backgroundRepeat:"no-repeat"}),m()}function g(){n.style.maskImage="none",p&&(cancelAnimationFrame(p),p=null)}return t.on("ready",h),t.on("destroy",g),{name:"artplayerPluginDanmukuMask",start:h,stop:g}}}e("@tensorflow/tfjs-backend-webgl"),e("@tensorflow/tfjs-backend-cpu"),"u">typeof window&&(window.artplayerPluginDanmukuMask=l)},{"@tensorflow-models/body-segmentation":"5Otso","@tensorflow/tfjs-core":"2Gtps","@tensorflow/tfjs-backend-webgl":"2ZcDF","@tensorflow/tfjs-backend-cpu":"b4yJT","@parcel/transformer-js/src/esmodule-helpers.js":"6ykb1"}],"5Otso":[function(e,t,r,n){var s,a=e("@parcel/transformer-js/src/esmodule-helpers.js");a.defineInteropFlag(r),a.export(r,"SupportedModels",()=>eR),a.export(r,"blurBodyPart",()=>eJ),a.export(r,"bodyPixMaskValueToRainbowColor",()=>b),a.export(r,"createSegmenter",()=>e$),a.export(r,"drawBokehEffect",()=>eQ),a.export(r,"drawMask",()=>eZ),a.export(r,"drawPixelatedMask",()=>eY),a.export(r,"toBinaryMask",()=>eK),a.export(r,"toColoredMask",()=>eX);var o=e("@tensorflow/tfjs-core"),l=e("@tensorflow/tfjs-converter"),i=e("@mediapipe/selfie_segmentation"),p=function(e,t){return(p=Object.setPrototypeOf||({__proto__:[]})instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(e,t)};function u(e,t){function r(){this.constructor=e}p(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}var c=function(){return(c=Object.assign||function(e){for(var t,r=1,n=arguments.length;r0&&s[s.length-1])&&(6===i[0]||2===i[0])){o=0;continue}if(3===i[0]&&(!s||i[1]>s[0]&&i[1]=256)throw Error("Mask value must be in range [0, 255] but got "+e);if(!Number.isInteger(e))throw Error("Mask value must be an integer but got "+e)}var v=[[110,64,170],[143,61,178],[178,60,178],[210,62,167],[238,67,149],[255,78,125],[255,94,99],[255,115,75],[255,140,56],[239,167,47],[217,194,49],[194,219,64],[175,240,91],[135,245,87],[96,247,96],[64,243,115],[40,234,141],[28,219,169],[26,199,194],[33,176,213],[47,150,224],[65,125,224],[84,101,214],[99,81,195]];function b(e){if(y(e),er&&(s+=1,n+=Math.pow(e[a].x-t.keypoints[a].position.x,2)+Math.pow(e[a].y-t.keypoints[a].position.y,2));return 0===s?n=1/0:n/=s,n}(g,r[_]);I"+u+") {\n numKpt = numKpt + 1;\n curDistSum = curDistSum + dist(x, y, poseX, poseY);\n }\n }\n if (numKpt > 0 && curDistSum / float(numKpt)< minDist) {\n minDist = curDistSum / float(numKpt);\n iMin = i;\n }\n }\n return iMin;\n }\n\n void main() {\n ivec2 coords = getOutputCoords();\n int nearestPose = findNearestPose(coords[0], coords[1]);\n setOutput(float(nearestPose));\n }\n "};return(0,o.backend)().compileAndRun(O,[e,b,R])}function $(){return"webgl"===(0,o.getBackend)()}function O(e){return Math.floor(e/2)}[["leftHip","leftShoulder"],["leftElbow","leftShoulder"],["leftElbow","leftWrist"],["leftHip","leftKnee"],["leftKnee","leftAnkle"],["rightHip","rightShoulder"],["rightElbow","rightShoulder"],["rightElbow","rightWrist"],["rightHip","rightKnee"],["rightKnee","rightAnkle"],["leftShoulder","rightShoulder"],["leftHip","rightHip"]].map(function(e){var t=e[0],r=e[1];return[S[t],S[r]]});var D=function(){function e(e,t){this.priorityQueue=Array(e),this.numberOfElements=-1,this.getElementValue=t}return e.prototype.enqueue=function(e){this.priorityQueue[++this.numberOfElements]=e,this.swim(this.numberOfElements)},e.prototype.dequeue=function(){var e=this.priorityQueue[0];return this.exchange(0,this.numberOfElements--),this.sink(0),this.priorityQueue[this.numberOfElements+1]=null,e},e.prototype.empty=function(){return -1===this.numberOfElements},e.prototype.size=function(){return this.numberOfElements+1},e.prototype.all=function(){return this.priorityQueue.slice(0,this.numberOfElements+1)},e.prototype.max=function(){return this.priorityQueue[0]},e.prototype.swim=function(e){for(;e>0&&this.less(O(e),e);)this.exchange(e,O(e)),e=O(e)},e.prototype.sink=function(e){for(;2*e<=this.numberOfElements;){var t=2*e;if(ta?a:s),x:(o=Math.round(e.x/t),l=n-1,o<0?0:o>l?l:o)}}function L(e,t,r,n,s,a,o,l){void 0===l&&(l=2);for(var i,p,u=n.shape,c=u[0],d=u[1],f=(i=V(t.position,a,c,d),p=o.shape[2]/2,{y:o.get(i.y,i.x,e),x:o.get(i.y,i.x,p+e)}),m=F(t.position,f),h=0;ht){i=!1;break}if(!i)break}return i}(p,u,l,i,t)&&o.enqueue({score:u,part:{heatmapY:l,heatmapX:i,id:p}})}return o}(o,e),u=l*l;i.length=0;--d){var f=B[d],m=G[d];i[f]&&!i[m]&&(i[m]=L(d,i[f],m,t,r,n,a))}for(d=0;dtypeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"u">typeof OffscreenCanvas&&e instanceof OffscreenCanvas||"u">typeof HTMLImageElement&&e instanceof HTMLImageElement){if("offsetHeight"in e&&0!==e.offsetHeight&&"offsetWidth"in e&&0!==e.offsetWidth)return[e.offsetHeight,e.offsetWidth];if(null!=e.height&&null!=e.width)return[e.height,e.width];throw Error("HTMLImageElement must have height and width attributes set.")}if("u">typeof ImageData&&e instanceof ImageData)return[e.height,e.width];if("u">typeof HTMLVideoElement&&e instanceof HTMLVideoElement)return e.hasAttribute("height")&&e.hasAttribute("width")?[e.height,e.width]:[e.videoHeight,e.videoWidth];if(e instanceof o.Tensor)return[e.shape[0],e.shape[1]];throw Error("error: Unknown input type: "+e+".")}function Y(e,t){return(e-1)%t==0?e:Math.floor(e/t)*t+1}var Q={low:"low",medium:"medium",high:"high",full:"full"},J=((W={})[Q.low]=.25,W[Q.medium]=.5,W[Q.high]=.75,W[Q.full]=1,W);function ee(e,t,r){var n=r[0],s=r[1],a=function(e){if("string"==typeof e){var t=J[e];return o.util.assert("number"==typeof t,function(){return"string value of inputResolution must be one of "+Object.values(Q).join(",")+" but was "+e+"."}),t}return o.util.assert("number"==typeof e&&e<=2&&e>=.1,function(){return"inputResolution must be a string or number between 0.1 and 2, but was "+e}),e}(e);return[Y(n*a,t),Y(s*a,t)]}function et(e,t,r,n,s){var a=t[0],l=t[1],i=r[0],p=r[1],u=n[0],c=u[0],d=u[1],f=n[1],m=f[0],h=f[1];return void 0===s&&(s=!1),(0,o.tidy)(function(){var t,r,n,u,f,g,x,y,v,b,k,_=o.image.resizeBilinear(e,[i,p],!0);return s&&(_=(0,o.sigmoid)(_)),t=_,r=[a,l],n=[[c,d],[m,h]],u=r[0],f=r[1],x=(g=n[0])[0],y=g[1],b=(v=n[1])[0],k=v[1],(0,o.tidy)(function(){var e=(0,o.expandDims)(t);return(0,o.squeeze)(o.image.cropAndResize(e,[[x/(u+x+y-1),b/(f+b+k-1),(x+u-1)/(u+x+y-1),(b+f-1)/(f+b+k-1)]],[0],[u,f]),[0])})})}function er(e,t){var r=t[0],n=t[1],s=Z(e),a=s[0],l=s[1],i=n/r,p=0,u=0,c=0,d=0;return l/a1)throw Error("segmentationThreshold "+t+". Should be in range [0.0, 1.0]");if(r<=0)throw Error("Invalid maxDetections "+r+". Should be >0");if(n<0||n>1)throw Error("Invalid scoreThreshold "+n+". Should be in range [0.0, 1.0]");if(s<=0)throw Error("Invalid nmsRadius "+s+".")}function ef(e){var t=e.segmentationThreshold,r=e.maxDetections,n=e.scoreThreshold,s=e.nmsRadius,a=e.minKeypointScore,o=e.refineSteps;if(t<0||t>1)throw Error("segmentationThreshold "+t+". Should be in range [0.0, 1.0]");if(r<=0)throw Error("Invalid maxDetections "+r+". Should be >0");if(n<0||n>1)throw Error("Invalid scoreThreshold "+n+". Should be in range [0.0, 1.0]");if(s<=0)throw Error("Invalid nmsRadius "+s+".");if(a<0||a>1)throw Error("Invalid minKeypointScore "+a+".Should be in range [0.0, 1.0]");if(o<=0||o>20)throw Error("Invalid refineSteps "+o+".Should be in range [1, 20]")}var em=function(){function e(e){this.baseModel=e}return e.prototype.predictForPersonSegmentation=function(e){var t=this.baseModel.predict(e);return{segmentLogits:t.segmentation,heatmapScores:t.heatmapScores,offsets:t.offsets,displacementFwd:t.displacementFwd,displacementBwd:t.displacementBwd}},e.prototype.predictForPersonSegmentationAndPart=function(e){var t=this.baseModel.predict(e);return{segmentLogits:t.segmentation,partHeatmapLogits:t.partHeatmaps,heatmapScores:t.heatmapScores,offsets:t.offsets,displacementFwd:t.displacementFwd,displacementBwd:t.displacementBwd}},e.prototype.predictForMultiPersonInstanceSegmentationAndPart=function(e){var t=this.baseModel.predict(e);return{segmentLogits:t.segmentation,longOffsets:t.longOffsets,heatmapScores:t.heatmapScores,offsets:t.offsets,displacementFwd:t.displacementFwd,displacementBwd:t.displacementBwd,partHeatmaps:t.partHeatmaps}},e.prototype.segmentPersonActivation=function(e,t,r){var n=this;void 0===r&&(r=.5);var s=Z(e),a=s[0],l=s[1],i=ee(t,this.baseModel.outputStride,[a,l]),p=er(e,i),u=p.resized,c=p.padding,d=(0,o.tidy)(function(){var e=n.predictForPersonSegmentation(u),t=e.segmentLogits,s=e.heatmapScores,i=e.offsets,p=e.displacementFwd,d=e.displacementBwd,f=u.shape,m=et(t,[a,l],[f[0],f[1]],[[c.top,c.bottom],[c.left,c.right]],!0);return{segmentation:_((0,o.squeeze)(m),r),heatmapScores:s,offsets:i,displacementFwd:p,displacementBwd:d}}),f=d.segmentation,m=d.heatmapScores,h=d.offsets,g=d.displacementFwd,x=d.displacementBwd;return u.dispose(),{segmentation:f,heatmapScores:m,offsets:h,displacementFwd:g,displacementBwd:x,padding:c,internalResolutionHeightAndWidth:i}},e.prototype.segmentPerson=function(e,t){return void 0===t&&(t=eu),d(this,void 0,void 0,function(){var r,n,s,a,o,l,i,p,u,d,m,h,g,x,y,v;return f(this,function(f){switch(f.label){case 0:return ed(t=c(c({},eu),t)),n=(r=this.segmentPersonActivation(e,t.internalResolution,t.segmentationThreshold)).segmentation,s=r.heatmapScores,a=r.offsets,o=r.displacementFwd,l=r.displacementBwd,i=r.padding,p=r.internalResolutionHeightAndWidth,d=(u=n.shape)[0],m=u[1],[4,n.data()];case 1:return h=f.sent(),n.dispose(),[4,en([s,a,o,l])];case 2:return x=(g=f.sent())[0],y=g[1],v=es(v=U(x,y,g[2],g[3],this.baseModel.outputStride,t.maxDetections,t.scoreThreshold,t.nmsRadius),[d,m],p,i,!1),s.dispose(),a.dispose(),o.dispose(),l.dispose(),[2,{height:d,width:m,data:h,allPoses:v}]}})})},e.prototype.segmentMultiPerson=function(e,t){return void 0===t&&(t=ec),d(this,void 0,void 0,function(){var r,n,s,a,l,i,p,u,m,h,g,x,y,v,b,k,I,j,w,T=this;return f(this,function(S){switch(S.label){case 0:return ef(t=c(c({},ec),t)),n=(r=Z(e))[0],s=r[1],i=(l=er(e,a=ee(t.internalResolution,this.baseModel.outputStride,[n,s]))).resized,p=l.padding,m=(u=(0,o.tidy)(function(){var e=T.predictForMultiPersonInstanceSegmentationAndPart(i),r=e.segmentLogits,l=e.longOffsets,u=e.heatmapScores,c=e.offsets,d=e.displacementFwd,f=e.displacementBwd,m=et(r,[n,s],a,[[p.top,p.bottom],[p.left,p.right]],!0);return{segmentation:_((0,o.squeeze)(m),t.segmentationThreshold),longOffsets:l,heatmapScoresRaw:u,offsetsRaw:c,displacementFwdRaw:d,displacementBwdRaw:f}})).segmentation,h=u.longOffsets,g=u.heatmapScoresRaw,x=u.offsetsRaw,y=u.displacementFwdRaw,v=u.displacementBwdRaw,[4,en([g,x,y,v])];case 1:return k=(b=S.sent())[0],I=b[1],j=es(j=U(k,I,b[2],b[3],this.baseModel.outputStride,t.maxDetections,t.scoreThreshold,t.nmsRadius),[n,s],a,p,!1),[4,function(e,t,r,n,s,a,l,i,p,u,c,m){var h=l[0],g=l[1];return void 0===p&&(p=.2),void 0===u&&(u=8),void 0===c&&(c=.3),void 0===m&&(m=10),d(this,void 0,void 0,function(){var l,d,x,y,v;return f(this,function(f){switch(f.label){case 0:return l=r.filter(function(e){return e.score>=p}),$()?[4,Promise.all((x=(0,o.tidy)(function(){var r=P(e,t,l,n,s,a,[h,g],i,u,c,m),p=(0,o.engine)().makeTensorFromDataId(r.dataId,r.shape,r.dtype);return l.map(function(e,t){return(0,o.tidy)(function(){return(0,o.cast)((0,o.equal)(p,(0,o.scalar)(t)),"int32")})})})).map(function(e){return e.data()}))]:[3,2];case 1:return d=f.sent(),x.forEach(function(e){return e.dispose()}),[3,5];case 2:return[4,e.data()];case 3:return y=f.sent(),[4,t.data()];case 4:v=f.sent(),d=function(e,t,r,n,s,a,o,l,i,p){var u=o[0],c=o[1];void 0===p&&(p=5);for(var d=r.map(function(e){return new Uint8Array(n*s).fill(0)}),f=l.top,m=l.left,h=C([n,s],[u,c],l),g=h[0],x=h[1],y=R([u,c],a)[0],v=0;v=0&&(d[_][k]=1)}}return d}(y,v,l,n,s,a,[h,g],i,u),f.label=5;case 5:return[2,d.map(function(e,t){return{data:e,pose:l[t],width:s,height:n}})]}})})}(m,h,j,n,s,this.baseModel.outputStride,a,p,t.scoreThreshold,t.refineSteps,t.minKeypointScore,t.maxDetections)];case 2:return w=S.sent(),i.dispose(),m.dispose(),h.dispose(),g.dispose(),x.dispose(),y.dispose(),v.dispose(),[2,w]}})})},e.prototype.segmentPersonPartsActivation=function(e,t,r){var n=this;void 0===r&&(r=.5);var s=Z(e),a=s[0],l=s[1],i=ee(t,this.baseModel.outputStride,[a,l]),p=er(e,i),u=p.resized,c=p.padding,d=(0,o.tidy)(function(){var e,t,s,i,p,d=n.predictForPersonSegmentationAndPart(u),f=d.segmentLogits,m=d.partHeatmapLogits,h=d.heatmapScores,g=d.offsets,x=d.displacementFwd,y=d.displacementBwd,v=u.shape,b=v[0],I=v[1],j=et(f,[a,l],[b,I],[[c.top,c.bottom],[c.left,c.right]],!0),w=et(m,[a,l],[b,I],[[c.top,c.bottom],[c.left,c.right]],!0);return{partSegmentation:(e=_((0,o.squeeze)(j),r),s=(t=w.shape)[0],i=t[1],p=t[2],(0,o.tidy)(function(){var t=k(w),r=(0,o.expandDims)((0,o.range)(0,p,1,"int32"),1),n=(0,o.cast)((0,o.matMul)(t,r),"int32"),a=(0,o.reshape)(n,[s,i]),l=(0,o.add)(a,(0,o.scalar)(1,"int32"));return(0,o.sub)((0,o.mul)(l,e),(0,o.scalar)(1,"int32"))})),heatmapScores:h,offsets:g,displacementFwd:x,displacementBwd:y}}),f=d.partSegmentation,m=d.heatmapScores,h=d.offsets,g=d.displacementFwd,x=d.displacementBwd;return u.dispose(),{partSegmentation:f,heatmapScores:m,offsets:h,displacementFwd:g,displacementBwd:x,padding:c,internalResolutionHeightAndWidth:i}},e.prototype.segmentPersonParts=function(e,t){return void 0===t&&(t=eu),d(this,void 0,void 0,function(){var r,n,s,a,o,l,i,p,u,d,m,h,g,x,y,v;return f(this,function(f){switch(f.label){case 0:return ed(t=c(c({},eu),t)),n=(r=this.segmentPersonPartsActivation(e,t.internalResolution,t.segmentationThreshold)).partSegmentation,s=r.heatmapScores,a=r.offsets,o=r.displacementFwd,l=r.displacementBwd,i=r.padding,p=r.internalResolutionHeightAndWidth,d=(u=n.shape)[0],m=u[1],[4,n.data()];case 1:return h=f.sent(),n.dispose(),[4,en([s,a,o,l])];case 2:return x=(g=f.sent())[0],y=g[1],v=es(v=U(x,y,g[2],g[3],this.baseModel.outputStride,t.maxDetections,t.scoreThreshold,t.nmsRadius),[d,m],p,i,!1),s.dispose(),a.dispose(),o.dispose(),l.dispose(),[2,{height:d,width:m,data:h,allPoses:v}]}})})},e.prototype.segmentMultiPersonParts=function(e,t){return void 0===t&&(t=ec),d(this,void 0,void 0,function(){var r,n,s,a,l,i,p,u,m,h,g,x,y,v,b,I,j,w,T,S,N=this;return f(this,function(E){switch(E.label){case 0:return ef(t=c(c({},ec),t)),n=(r=Z(e))[0],s=r[1],i=(l=er(e,a=ee(t.internalResolution,this.baseModel.outputStride,[n,s]))).resized,p=l.padding,m=(u=(0,o.tidy)(function(){var e,r,l,u,c=N.predictForMultiPersonInstanceSegmentationAndPart(i),d=c.segmentLogits,f=c.longOffsets,m=c.heatmapScores,h=c.offsets,g=c.displacementFwd,x=c.displacementBwd,y=c.partHeatmaps,v=et(d,[n,s],a,[[p.top,p.bottom],[p.left,p.right]],!0),b=et(y,[n,s],a,[[p.top,p.bottom],[p.left,p.right]],!0);return{segmentation:_((0,o.squeeze)(v),t.segmentationThreshold),longOffsets:f,heatmapScoresRaw:m,offsetsRaw:h,displacementFwdRaw:g,displacementBwdRaw:x,partSegmentation:(r=(e=b.shape)[0],l=e[1],u=e[2],(0,o.tidy)(function(){var e=k(b),t=(0,o.expandDims)((0,o.range)(0,u,1,"int32"),1),n=(0,o.cast)((0,o.matMul)(e,t),"int32");return(0,o.reshape)(n,[r,l])}))}})).segmentation,h=u.longOffsets,g=u.heatmapScoresRaw,x=u.offsetsRaw,y=u.displacementFwdRaw,v=u.displacementBwdRaw,b=u.partSegmentation,[4,en([g,x,y,v])];case 1:return j=(I=E.sent())[0],w=I[1],T=es(T=U(j,w,I[2],I[3],this.baseModel.outputStride,t.maxDetections,t.scoreThreshold,t.nmsRadius),[n,s],a,p,!1),[4,function(e,t,r,n,s,a,l,i,p,u,c,m,h){var g=i[0],x=i[1];return void 0===u&&(u=.2),void 0===c&&(c=8),void 0===m&&(m=.3),void 0===h&&(h=10),d(this,void 0,void 0,function(){var i,d,y,v,b,k;return f(this,function(f){switch(f.label){case 0:return i=n.filter(function(e){return e.score>=u}),$()?[4,Promise.all((y=(0,o.tidy)(function(){var n=P(e,t,i,s,a,l,[g,x],p,c,m,h),u=(0,o.engine)().makeTensorFromDataId(n.dataId,n.shape,n.dtype);return i.map(function(e,t){return(0,o.tidy)(function(){return(0,o.sub)((0,o.mul)((0,o.cast)((0,o.equal)(u,(0,o.scalar)(t)),"int32"),(0,o.add)(r,1)),1)})})})).map(function(e){return e.data()}))]:[3,2];case 1:return d=f.sent(),y.forEach(function(e){return e.dispose()}),[3,6];case 2:return[4,e.data()];case 3:return v=f.sent(),[4,t.data()];case 4:return b=f.sent(),[4,r.data()];case 5:k=f.sent(),d=function(e,t,r,n,s,a,o,l,i,p,u){var c=l[0],d=l[1];void 0===u&&(u=5);for(var f=n.map(function(e){return new Int32Array(s*a).fill(-1)}),m=i.top,h=i.left,g=C([s,a],[c,d],i),x=g[0],y=g[1],v=R([c,d],o)[0],b=0;b=0&&(f[I][_]=r[_])}}return f}(v,b,k,i,s,a,l,[g,x],p,c),f.label=6;case 6:return[2,d.map(function(e,t){return{pose:i[t],data:e,height:s,width:a}})]}})})}(m,h,b,T,n,s,this.baseModel.outputStride,a,p,t.scoreThreshold,t.refineSteps,t.minKeypointScore,t.maxDetections)];case 2:return S=E.sent(),i.dispose(),m.dispose(),h.dispose(),g.dispose(),x.dispose(),y.dispose(),v.dispose(),b.dispose(),[2,S]}})})},e.prototype.dispose=function(){this.baseModel.dispose()},e}(),eh=["left_face","right_face","left_upper_arm_front","left_upper_arm_back","right_upper_arm_front","right_upper_arm_back","left_lower_arm_front","left_lower_arm_back","right_lower_arm_front","right_lower_arm_back","left_hand","right_hand","torso_front","torso_back","left_upper_leg_front","left_upper_leg_back","right_upper_leg_front","right_upper_leg_back","left_lower_leg_front","left_lower_leg_back","right_lower_leg_front","right_lower_leg_back","left_feet","right_feet"],eg=function(){function e(e){this.mask=e}return e.prototype.toCanvasImageSource=function(){return d(this,void 0,void 0,function(){return f(this,function(e){return[2,h(this.mask)]})})},e.prototype.toImageData=function(){return d(this,void 0,void 0,function(){return f(this,function(e){return[2,this.mask]})})},e.prototype.toTensor=function(){return d(this,void 0,void 0,function(){return f(this,function(e){return[2,x(this.mask)]})})},e.prototype.getUnderlyingType=function(){return"imagedata"},e}();function ex(e){if(y(e),255!==e)throw Error("Foreground id must be 255 but got "+e);return"person"}function ey(e){if(y(e),e>=eh.length)throw Error("Invalid body part value "+e);return eh[e]}var ev=function(){function e(e){this.bodyPixModel=e}return e.prototype.segmentPeople=function(e,t){return d(this,void 0,void 0,function(){var r,n,s,a;return f(this,function(o){switch(o.label){case 0:return e instanceof ImageBitmap&&((r=document.createElement("canvas")).getContext("2d").drawImage(e,0,0),e=r),t.segmentBodyParts?t.multiSegmentation?[4,this.bodyPixModel.segmentMultiPersonParts(e,t)]:[3,2]:[3,5];case 1:return s=o.sent(),[3,4];case 2:return[4,this.bodyPixModel.segmentPersonParts(e,t)];case 3:s=[o.sent()],o.label=4;case 4:return n=s.map(function(e){var t=e.data,r=e.width,n=e.height,s=new Uint8ClampedArray(r*n*4).fill(0);return t.forEach(function(e,t){-1===e?(s[4*t]=eh.length,s[4*t+3]=0):(s[4*t]=e,s[4*t+3]=255)}),{maskValueToLabel:ey,mask:new eg(new ImageData(s,r,n))}}),[3,10];case 5:return t.multiSegmentation?[4,this.bodyPixModel.segmentMultiPerson(e,t)]:[3,7];case 6:return a=o.sent(),[3,9];case 7:return[4,this.bodyPixModel.segmentPerson(e,t)];case 8:a=[o.sent()],o.label=9;case 9:n=a.map(function(e){var t=e.data,r=e.width,n=e.height,s=new Uint8ClampedArray(r*n*4).fill(0);return t.forEach(function(e,t){0===e?(s[4*t]=0,s[4*t+3]=0):(s[4*t]=255,s[4*t+3]=255)}),{maskValueToLabel:ex,mask:new eg(new ImageData(s,r,n))}}),o.label=10;case 10:return[2,n]}})})},e.prototype.dispose=function(){this.bodyPixModel.dispose()},e.prototype.reset=function(){},e}(),eb={runtime:"mediapipe",modelType:"general"},ek=function(){function e(e){this.mask=e}return e.prototype.toCanvasImageSource=function(){return d(this,void 0,void 0,function(){return f(this,function(e){return[2,this.mask]})})},e.prototype.toImageData=function(){return d(this,void 0,void 0,function(){return f(this,function(e){return[2,g(this.mask)]})})},e.prototype.toTensor=function(){return d(this,void 0,void 0,function(){return f(this,function(e){return[2,x(this.mask)]})})},e.prototype.getUnderlyingType=function(){return"canvasimagesource"},e}();function e_(e){return y(e),"person"}var eI=function(){function e(e){var t,r,n=this;this.selfieMode=!1,t=+(this.selfieSegmentationSolution=new(0,i.SelfieSegmentation)({locateFile:null!=(r=e.locateFile)?r:function(t,r){return e.solutionPath?e.solutionPath.replace(/\/+$/,"")+"/"+t:r+"/"+t}}),"landscape"===e.modelType),this.selfieSegmentationSolution.setOptions({modelSelection:t,selfieMode:this.selfieMode}),this.selfieSegmentationSolution.onResults(function(e){n.segmentation=[{maskValueToLabel:e_,mask:new ek(e.segmentationMask)}]})}return e.prototype.segmentPeople=function(e,t){return d(this,void 0,void 0,function(){var r,n;return f(this,function(s){switch(s.label){case 0:return t&&t.flipHorizontal&&t.flipHorizontal!==this.selfieMode&&(this.selfieMode=t.flipHorizontal,this.selfieSegmentationSolution.setOptions({selfieMode:this.selfieMode})),e instanceof o.Tensor?(n=ImageData.bind,[4,o.browser.toPixels(e)]):[3,2];case 1:return r=new(n.apply(ImageData,[void 0,s.sent(),e.shape[1],e.shape[0]])),[3,3];case 2:r=e,s.label=3;case 3:return e=r,[4,this.selfieSegmentationSolution.send({image:e})];case 4:return s.sent(),[2,this.segmentation]}})})},e.prototype.dispose=function(){this.selfieSegmentationSolution.close()},e.prototype.reset=function(){this.selfieSegmentationSolution.reset(),this.segmentation=null,this.selfieMode=!1},e.prototype.initialize=function(){return this.selfieSegmentationSolution.initialize()},e}();function ej(e){return e instanceof o.Tensor?{height:e.shape[0],width:e.shape[1]}:{height:e.height,width:e.width}}function ew(e,t){o.util.assert(0!==e.width,function(){return t+" width cannot be 0."}),o.util.assert(0!==e.height,function(){return t+" height cannot be 0."})}var eT={runtime:"tfjs",modelType:"general",modelUrl:"https://tfhub.dev/mediapipe/tfjs-model/selfie_segmentation/general/1"},eS={flipHorizontal:!1},eC={outputTensorSize:{width:256,height:256},keepAspectRatio:!1,borderMode:"zero",outputTensorFloatRange:[0,1]},eN={outputTensorSize:{width:256,height:144},keepAspectRatio:!1,borderMode:"zero",outputTensorFloatRange:[0,1]},eE={activation:"none"},eF=function(){function e(e){this.mask=e}return e.prototype.toCanvasImageSource=function(){return d(this,void 0,void 0,function(){return f(this,function(e){return[2,h(this.mask)]})})},e.prototype.toImageData=function(){return d(this,void 0,void 0,function(){return f(this,function(e){return[2,g(this.mask)]})})},e.prototype.toTensor=function(){return d(this,void 0,void 0,function(){return f(this,function(e){return[2,this.mask]})})},e.prototype.getUnderlyingType=function(){return"tensor"},e}();function eA(e){return y(e),"person"}var eR,eP=function(){function e(e,t){this.modelType=e,this.model=t}return e.prototype.segmentPeople=function(e,t){return d(this,void 0,void 0,function(){var r=this;return f(this,function(n){return t=function(e){if(null==e)return c({},eS);var t=c({},e);return null==t.flipHorizontal&&(t.flipHorizontal=eS.flipHorizontal),t}(t),null==e?(this.reset(),[2,[]]):[2,[{maskValueToLabel:eA,mask:new eF((0,o.tidy)(function(){var t,n,s,a,l,i,p,u,c,d,f,m,h,g,x,y,v,b,k,_,I,j,w=(x=(t="general"===r.modelType?eC:eN).outputTensorSize,y=t.keepAspectRatio,v=t.borderMode,b=t.outputTensorFloatRange,I=function(e,t,r){if(void 0===r&&(r=!1),!r)return{top:0,left:0,right:0,bottom:0};var n=t.height,s=t.width;ew(t,"targetSize"),ew(e,"roi");var a,o,l=n/s,i=e.height/e.width,p=0,u=0;return l>i?(a=e.width,o=e.width*l,u=(1-i/l)/2):(a=e.height/l,o=e.height,p=(1-l/i)/2),e.width=a,e.height=o,{top:u,left:p,right:p,bottom:u}}((n=k=ej(e),_={xCenter:.5*n.width,yCenter:.5*n.height,width:n.width,height:n.height,rotation:0}),x,y),s=k.width,a=k.height,l=_.width,i=_.height,p=1,u=Math.cos(_.rotation),c=Math.sin(_.rotation),d=_.xCenter,f=_.yCenter,m=1/s,h=1/a,(g=Array(16))[0]=l*u*p*m,g[1]=-i*c*m,g[2]=0,g[3]=(-.5*l*u*p+.5*i*c+d)*m,g[4]=l*c*p*h,g[5]=i*u*h,g[6]=0,g[7]=(-.5*i*u-.5*l*c*p+f)*h,g[8]=0,g[9]=0,g[10]=l*m,g[11]=0,g[12]=0,g[13]=0,g[14]=0,g[15]=1,j=function(e){if(16!==e.length)throw Error("Array length must be 16 but got "+e.length);return[[e[0],e[1],e[2],e[3]],[e[4],e[5],e[6],e[7]],[e[8],e[9],e[10],e[11]],[e[12],e[13],e[14],e[15]]]}(g),{imageTensor:(0,o.tidy)(function(){var t,r=e instanceof o.Tensor?e:o.browser.fromPixels(e),n=(0,o.tensor2d)((ew(x,"inputResolution"),[1/x.width*j[0][0]*k.width,1/x.height*j[0][1]*k.width,j[0][3]*k.width,1/x.width*j[1][0]*k.height,1/x.height*j[1][1]*k.height,j[1][3]*k.height,0,0]),[1,8]),s=o.image.transform((0,o.expandDims)((0,o.cast)(r,"float32")),n,"bilinear","zero"===v?"constant":"nearest",0,[x.height,x.width]);return null!=b?(t=function(e,t){!1;var r=(t-e)/255;return{scale:r,offset:e-0*r}}(b[0],b[1]),(0,o.tidy)(function(){return(0,o.add)((0,o.mul)(s,t.scale),t.offset)})):s}),padding:I,transformationMatrix:j}).imageTensor,T=(0,o.slice)(r.model.predict(w),[0,0,0,1],-1),S=ej(e),C=(0,o.tidy)(function(){var e=(0,o.squeeze)(T,[0]),t=e.shape[2];if(1===t){var r=e;switch(eE.activation){case"none":break;case"sigmoid":r=(0,o.sigmoid)(r);break;case"softmax":throw Error("Softmax activation requires two channels.");default:throw Error("Activation not supported ("+eE.activation+")")}var n=S?o.image.resizeBilinear(r,[S.height,S.width]):r;return(0,o.squeeze)(n,[2])}throw Error("Unsupported number of tensor channels "+t)}),N=(0,o.expandDims)(C,2),E=(0,o.pad)(N,[[0,0],[0,0],[0,1]]);return(0,o.mirrorPad)(E,[[0,0],[0,0],[0,2]],"symmetric")}))}]]})})},e.prototype.dispose=function(){this.model.dispose()},e.prototype.reset=function(){},e}();function e$(e,t){return d(this,void 0,void 0,function(){var r,n;return f(this,function(s){switch(e){case eR.MediaPipeSelfieSegmentation:if(r=void 0,null!=(n=t)){if("tfjs"===n.runtime)return[2,function(e){return d(this,void 0,void 0,function(){var t,r,n;return f(this,function(s){switch(s.label){case 0:return r="string"==typeof(t=function(e){if(null==e)return c({},eT);var t=c({},e);if(t.runtime="tfjs",null==t.modelType&&(t.modelType=eT.modelType),"general"!==t.modelType&&"landscape"!==t.modelType)throw Error("Model type must be one of general or landscape, but got "+t.modelType);return null==t.modelUrl&&("general"===t.modelType?t.modelUrl="https://tfhub.dev/mediapipe/tfjs-model/selfie_segmentation/general/1":t.modelUrl="https://tfhub.dev/mediapipe/tfjs-model/selfie_segmentation/landscape/1"),t}(e)).modelUrl&&t.modelUrl.indexOf("https://tfhub.dev")>-1,[4,(0,l.loadGraphModel)(t.modelUrl,{fromTFHub:r})];case 1:return n=s.sent(),[2,new eP(t.modelType,n)]}})})}(n)];if("mediapipe"===n.runtime)return[2,function(e){return d(this,void 0,void 0,function(){var t;return f(this,function(r){switch(r.label){case 0:return[4,(t=new eI(function(e){if(null==e)return c({},eb);var t=c({},e);return t.runtime="mediapipe",null==t.modelType&&(t.modelType=eb.modelType),t}(e))).initialize()];case 1:return r.sent(),[2,t]}})})}(n)];r=n.runtime}throw Error("Expect modelConfig.runtime to be either 'tfjs' or 'mediapipe', but got "+r);case eR.BodyPix:return[2,function(e){return d(this,void 0,void 0,function(){return f(this,function(t){return[2,(function(e){return void 0===e&&(e=ea),d(this,void 0,void 0,function(){return f(this,function(t){return"ResNet50"===(e=function(e){if(null==(e=e||ea).architecture&&(e.architecture="MobileNetV1"),0>eo.indexOf(e.architecture))throw Error("Invalid architecture "+e.architecture+". Should be one of "+eo);if(null==e.outputStride&&(e.outputStride=16),0>el[e.architecture].indexOf(e.outputStride))throw Error("Invalid outputStride "+e.outputStride+". Should be one of "+el[e.architecture]+" for architecture "+e.architecture+".");if(null==e.multiplier&&(e.multiplier=1),0>ei[e.architecture].indexOf(e.multiplier))throw Error("Invalid multiplier "+e.multiplier+". Should be one of "+ei[e.architecture]+" for architecture "+e.architecture+".");if(null==e.quantBytes&&(e.quantBytes=4),0>ep.indexOf(e.quantBytes))throw Error("Invalid quantBytes "+e.quantBytes+". Should be one of "+ep+" for architecture "+e.architecture+".");return e}(e)).architecture?[2,function(e){return d(this,void 0,void 0,function(){var t,r,n;return f(this,function(s){switch(s.label){case 0:var a;if(t=e.outputStride,r=e.quantBytes,null==o)throw Error("Cannot find TensorFlow.js. If you are using a + @@ -21,7 +21,7 @@
- + \ No newline at end of file diff --git a/docs/document/advanced/built-in.html b/docs/document/advanced/built-in.html index 11168a4a2..38b5139cb 100644 --- a/docs/document/advanced/built-in.html +++ b/docs/document/advanced/built-in.html @@ -9,11 +9,11 @@ - + - + - + @@ -217,7 +217,7 @@ art.on('ready', () => { art.plugins.add(myPlugin); }); - + \ No newline at end of file diff --git a/docs/document/advanced/class.html b/docs/document/advanced/class.html index 92ed51b41..f8c0f9bcc 100644 --- a/docs/document/advanced/class.html +++ b/docs/document/advanced/class.html @@ -9,11 +9,11 @@ - + - + - + @@ -31,7 +31,7 @@ }); console.info([...Artplayer.instances]);

version ​

返回播放器的版本信息

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

env ​

返回播放器的环境变量

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

build ​

返回播放器的打包时间

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

config ​

返回视频的默认配置

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

utils ​

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

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

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

artplayer/types/utils.d.ts

scheme ​

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

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

Emitter ​

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

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

validator ​

返回选项的校验函数

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

kindOf ​

返回类型检测的函数工具

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

html ​

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

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

option ​

返回播放器的默认选项

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

video:canplay ​

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

video:canplaythrough ​

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

video:complete ​

OfflineAudioContext 渲染完成

video:durationchange ​

duration 属性的值改变时触发

video:emptied ​

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

video:ended ​

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

video:error ​

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

video:loadeddata ​

media 中的首帧已经完成加载

video:loadedmetadata ​

已加载元数据

video:pause ​

播放已暂停

video:play ​

播放已开始

video:playing ​

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

video:progress ​

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

video:ratechange ​

播放速率发生变化

video:seeked ​

跳帧(seek)操作完成

video:seeking ​

跳帧(seek)操作开始

video:stalled ​

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

video:suspend ​

媒体数据加载已暂停

video:timeupdate ​

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

video:volumechange ​

音量发生变化

video:waiting ​

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

- + \ No newline at end of file diff --git a/docs/document/advanced/global.html b/docs/document/advanced/global.html index 8c2cede95..8e7763d8e 100644 --- a/docs/document/advanced/global.html +++ b/docs/document/advanced/global.html @@ -9,11 +9,11 @@ - + - + - + @@ -248,7 +248,7 @@ // 只销毁界面,不主动清空 src art.destroy(); - + \ No newline at end of file diff --git a/docs/document/advanced/plugin.html b/docs/document/advanced/plugin.html index 8380baac2..833fa0d9b 100644 --- a/docs/document/advanced/plugin.html +++ b/docs/document/advanced/plugin.html @@ -9,11 +9,11 @@ - + - + - + @@ -122,7 +122,7 @@ }) ], }); - + \ No newline at end of file diff --git a/docs/document/advanced/property.html b/docs/document/advanced/property.html index d4d44b10f..da1dab3ee 100644 --- a/docs/document/advanced/property.html +++ b/docs/document/advanced/property.html @@ -9,11 +9,11 @@ - + - + - + @@ -457,7 +457,7 @@ art.on('ready', () => { art.subtitleOffset = 1; }); - + \ No newline at end of file diff --git a/docs/document/assets/advanced_built-in.md.DbXkhR8l.js b/docs/document/assets/advanced_built-in.md.DiyRIcIA.js similarity index 99% rename from docs/document/assets/advanced_built-in.md.DbXkhR8l.js rename to docs/document/assets/advanced_built-in.md.DiyRIcIA.js index 987b03ffd..9f4bc302e 100644 --- a/docs/document/assets/advanced_built-in.md.DbXkhR8l.js +++ b/docs/document/assets/advanced_built-in.md.DiyRIcIA.js @@ -1,4 +1,4 @@ -import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"高级属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/built-in.md","filePath":"advanced/built-in.md","lastUpdated":1764425558000}'),e={name:"advanced/built-in.md"};function h(t,a,k,r,E,d){return l(),p("div",null,a[0]||(a[0]=[s('

高级属性 ​

这里的 高级属性 是指挂载在 实例 的 二级属性,比较少用

option ​

播放器的选项

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"高级属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/built-in.md","filePath":"advanced/built-in.md","lastUpdated":1764425558000}'),e={name:"advanced/built-in.md"};function h(t,a,k,r,E,d){return p(),l("div",null,a[0]||(a[0]=[s('

高级属性 ​

这里的 高级属性 是指挂载在 实例 的 二级属性,比较少用

option ​

播放器的选项

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
 });
diff --git a/docs/document/assets/advanced_built-in.md.DbXkhR8l.lean.js b/docs/document/assets/advanced_built-in.md.DiyRIcIA.lean.js
similarity index 91%
rename from docs/document/assets/advanced_built-in.md.DbXkhR8l.lean.js
rename to docs/document/assets/advanced_built-in.md.DiyRIcIA.lean.js
index e7f31da83..f3fd8d4d9 100644
--- a/docs/document/assets/advanced_built-in.md.DbXkhR8l.lean.js
+++ b/docs/document/assets/advanced_built-in.md.DiyRIcIA.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"高级属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/built-in.md","filePath":"advanced/built-in.md","lastUpdated":1764425558000}'),e={name:"advanced/built-in.md"};function h(t,a,k,r,E,d){return l(),p("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const o=n(e,[["render",h]]);export{g as __pageData,o as default};
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"高级属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/built-in.md","filePath":"advanced/built-in.md","lastUpdated":1764425558000}'),e={name:"advanced/built-in.md"};function h(t,a,k,r,E,d){return p(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const o=n(e,[["render",h]]);export{g as __pageData,o as default};
diff --git a/docs/document/assets/advanced_class.md.BE9Wp7q6.js b/docs/document/assets/advanced_class.md.Da3aE0pP.js
similarity index 99%
rename from docs/document/assets/advanced_class.md.BE9Wp7q6.js
rename to docs/document/assets/advanced_class.md.Da3aE0pP.js
index eacfd9e36..31f02f34c 100644
--- a/docs/document/assets/advanced_class.md.BE9Wp7q6.js
+++ b/docs/document/assets/advanced_class.md.Da3aE0pP.js
@@ -1,4 +1,4 @@
-import{_ as e,o as n,c as l,ak as s,j as a}from"./chunks/framework.xxfEszSJ.js";const u=JSON.parse('{"title":"静态属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/class.md","filePath":"advanced/class.md","lastUpdated":1682233868000}'),t={name:"advanced/class.md"};function p(d,i,r,h,o,c){return n(),l("div",null,i[0]||(i[0]=[s('

静态属性 ​

这里的 静态属性 是指挂载在 构造函数 的 一级属性,非常少使用

instances ​

返回全部播放器实例的数组,假如你想同时管理多个播放器的时候,可以用到该属性

',4),a("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
console.info([...Artplayer.instances]);
+import{_ as e,c as n,o as l,ak as s,j as a}from"./chunks/framework.xxfEszSJ.js";const u=JSON.parse('{"title":"静态属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/class.md","filePath":"advanced/class.md","lastUpdated":1682233868000}'),t={name:"advanced/class.md"};function p(d,i,r,h,o,c){return l(),n("div",null,i[0]||(i[0]=[s('

静态属性 ​

这里的 静态属性 是指挂载在 构造函数 的 一级属性,非常少使用

instances ​

返回全部播放器实例的数组,假如你想同时管理多个播放器的时候,可以用到该属性

',4),a("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
console.info([...Artplayer.instances]);
 
 var art = new Artplayer({
     container: '.artplayer-app',
diff --git a/docs/document/assets/advanced_class.md.BE9Wp7q6.lean.js b/docs/document/assets/advanced_class.md.Da3aE0pP.lean.js
similarity index 88%
rename from docs/document/assets/advanced_class.md.BE9Wp7q6.lean.js
rename to docs/document/assets/advanced_class.md.Da3aE0pP.lean.js
index 734d607ff..52c2f08e3 100644
--- a/docs/document/assets/advanced_class.md.BE9Wp7q6.lean.js
+++ b/docs/document/assets/advanced_class.md.Da3aE0pP.lean.js
@@ -1 +1 @@
-import{_ as e,o as n,c as l,ak as s,j as a}from"./chunks/framework.xxfEszSJ.js";const u=JSON.parse('{"title":"静态属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/class.md","filePath":"advanced/class.md","lastUpdated":1682233868000}'),t={name:"advanced/class.md"};function p(d,i,r,h,o,c){return n(),l("div",null,i[0]||(i[0]=[s("",4),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",4),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const _=e(t,[["render",p]]);export{u as __pageData,_ as default};
+import{_ as e,c as n,o as l,ak as s,j as a}from"./chunks/framework.xxfEszSJ.js";const u=JSON.parse('{"title":"静态属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/class.md","filePath":"advanced/class.md","lastUpdated":1682233868000}'),t={name:"advanced/class.md"};function p(d,i,r,h,o,c){return l(),n("div",null,i[0]||(i[0]=[s("",4),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",4),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const _=e(t,[["render",p]]);export{u as __pageData,_ as default};
diff --git a/docs/document/assets/advanced_event.md.DoIgqIU9.js b/docs/document/assets/advanced_event.md.mrsB0MsK.js
similarity index 99%
rename from docs/document/assets/advanced_event.md.DoIgqIU9.js
rename to docs/document/assets/advanced_event.md.mrsB0MsK.js
index 7af2740fa..cdee69356 100644
--- a/docs/document/assets/advanced_event.md.DoIgqIU9.js
+++ b/docs/document/assets/advanced_event.md.mrsB0MsK.js
@@ -1,4 +1,4 @@
-import{_ as l,o as p,c as e,j as s,a,ak as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"实例事件","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/event.md","filePath":"advanced/event.md","lastUpdated":1729412494000}'),h={name:"advanced/event.md"};function t(k,n,r,E,d,g){return p(),e("div",null,n[0]||(n[0]=[s("h1",{id:"实例事件",tabindex:"-1"},[a("实例事件 "),s("a",{class:"header-anchor",href:"#实例事件","aria-label":'Permalink to "实例事件"'},"​")],-1),s("p",null,[a("播放器的事件分为两种,一种视频的 "),s("code",null,"原生事件"),a(" (前缀 "),s("code",null,"video:"),a("),另外一种是 "),s("code",null,"自定义事件")],-1),s("p",null,"监听事件:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),i(`
js
var art = new Artplayer({
+import{_ as l,c as p,o as e,j as s,ak as i,a}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"实例事件","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/event.md","filePath":"advanced/event.md","lastUpdated":1729412494000}'),h={name:"advanced/event.md"};function t(k,n,r,E,d,g){return e(),p("div",null,n[0]||(n[0]=[s("h1",{id:"实例事件",tabindex:"-1"},[a("实例事件 "),s("a",{class:"header-anchor",href:"#实例事件","aria-label":'Permalink to "实例事件"'},"​")],-1),s("p",null,[a("播放器的事件分为两种,一种视频的 "),s("code",null,"原生事件"),a(" (前缀 "),s("code",null,"video:"),a("),另外一种是 "),s("code",null,"自定义事件")],-1),s("p",null,"监听事件:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),i(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
 });
diff --git a/docs/document/assets/advanced_event.md.DoIgqIU9.lean.js b/docs/document/assets/advanced_event.md.mrsB0MsK.lean.js
similarity index 96%
rename from docs/document/assets/advanced_event.md.DoIgqIU9.lean.js
rename to docs/document/assets/advanced_event.md.mrsB0MsK.lean.js
index 7b7e5b16d..b862bcb03 100644
--- a/docs/document/assets/advanced_event.md.DoIgqIU9.lean.js
+++ b/docs/document/assets/advanced_event.md.mrsB0MsK.lean.js
@@ -1 +1 @@
-import{_ as l,o as p,c as e,j as s,a,ak as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"实例事件","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/event.md","filePath":"advanced/event.md","lastUpdated":1729412494000}'),h={name:"advanced/event.md"};function t(k,n,r,E,d,g){return p(),e("div",null,n[0]||(n[0]=[s("h1",{id:"实例事件",tabindex:"-1"},[a("实例事件 "),s("a",{class:"header-anchor",href:"#实例事件","aria-label":'Permalink to "实例事件"'},"​")],-1),s("p",null,[a("播放器的事件分为两种,一种视频的 "),s("code",null,"原生事件"),a(" (前缀 "),s("code",null,"video:"),a("),另外一种是 "),s("code",null,"自定义事件")],-1),s("p",null,"监听事件:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",4),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",43)]))}const o=l(h,[["render",t]]);export{y as __pageData,o as default};
+import{_ as l,c as p,o as e,j as s,ak as i,a}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"实例事件","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/event.md","filePath":"advanced/event.md","lastUpdated":1729412494000}'),h={name:"advanced/event.md"};function t(k,n,r,E,d,g){return e(),p("div",null,n[0]||(n[0]=[s("h1",{id:"实例事件",tabindex:"-1"},[a("实例事件 "),s("a",{class:"header-anchor",href:"#实例事件","aria-label":'Permalink to "实例事件"'},"​")],-1),s("p",null,[a("播放器的事件分为两种,一种视频的 "),s("code",null,"原生事件"),a(" (前缀 "),s("code",null,"video:"),a("),另外一种是 "),s("code",null,"自定义事件")],-1),s("p",null,"监听事件:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",4),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",43)]))}const o=l(h,[["render",t]]);export{y as __pageData,o as default};
diff --git a/docs/document/assets/advanced_global.md.Db4VcykV.js b/docs/document/assets/advanced_global.md.Bdw3azKs.js
similarity index 99%
rename from docs/document/assets/advanced_global.md.Db4VcykV.js
rename to docs/document/assets/advanced_global.md.Bdw3azKs.js
index cf933ddc6..ea1408703 100644
--- a/docs/document/assets/advanced_global.md.Db4VcykV.js
+++ b/docs/document/assets/advanced_global.md.Bdw3azKs.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"全局属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/global.md","filePath":"advanced/global.md","lastUpdated":1764425558000}'),e={name:"advanced/global.md"};function h(t,a,k,r,E,d){return l(),p("div",null,a[0]||(a[0]=[s('

全局属性 ​

这里的 全局属性 也是指挂载在 构造函数 的 一级属性,属性名字全部都是大写的形式,未来容易发生变动,基本上用不到

DEBUG ​

是否开始 debug 模式,可以打印出视频全部的内置事件,默认关闭

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
Artplayer.DEBUG = true;
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"全局属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/global.md","filePath":"advanced/global.md","lastUpdated":1764425558000}'),e={name:"advanced/global.md"};function h(t,a,k,r,E,d){return p(),l("div",null,a[0]||(a[0]=[s('

全局属性 ​

这里的 全局属性 也是指挂载在 构造函数 的 一级属性,属性名字全部都是大写的形式,未来容易发生变动,基本上用不到

DEBUG ​

是否开始 debug 模式,可以打印出视频全部的内置事件,默认关闭

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
Artplayer.DEBUG = true;
 
 var art = new Artplayer({
     container: '.artplayer-app',
diff --git a/docs/document/assets/advanced_global.md.Db4VcykV.lean.js b/docs/document/assets/advanced_global.md.Bdw3azKs.lean.js
similarity index 94%
rename from docs/document/assets/advanced_global.md.Db4VcykV.lean.js
rename to docs/document/assets/advanced_global.md.Bdw3azKs.lean.js
index 7a80425f0..01e266f7b 100644
--- a/docs/document/assets/advanced_global.md.Db4VcykV.lean.js
+++ b/docs/document/assets/advanced_global.md.Bdw3azKs.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"全局属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/global.md","filePath":"advanced/global.md","lastUpdated":1764425558000}'),e={name:"advanced/global.md"};function h(t,a,k,r,E,d){return l(),p("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(e,[["render",h]]);export{g as __pageData,y as default};
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"全局属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/global.md","filePath":"advanced/global.md","lastUpdated":1764425558000}'),e={name:"advanced/global.md"};function h(t,a,k,r,E,d){return p(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(e,[["render",h]]);export{g as __pageData,y as default};
diff --git a/docs/document/assets/advanced_plugin.md.CVp3Oe2x.js b/docs/document/assets/advanced_plugin.md.B3Pobmcq.js
similarity index 99%
rename from docs/document/assets/advanced_plugin.md.CVp3Oe2x.js
rename to docs/document/assets/advanced_plugin.md.B3Pobmcq.js
index 1711c5f64..e0fbcba3d 100644
--- a/docs/document/assets/advanced_plugin.md.CVp3Oe2x.js
+++ b/docs/document/assets/advanced_plugin.md.B3Pobmcq.js
@@ -1,4 +1,4 @@
-import{_ as l,o as p,c as h,j as s,a as i,ak as a}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"编写插件","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/plugin.md","filePath":"advanced/plugin.md","lastUpdated":1673441101000}'),k={name:"advanced/plugin.md"};function e(t,n,E,r,d,g){return p(),h("div",null,n[0]||(n[0]=[s("h1",{id:"编写插件",tabindex:"-1"},[i("编写插件 "),s("a",{class:"header-anchor",href:"#编写插件","aria-label":'Permalink to "编写插件"'},"​")],-1),s("p",null,[i("但你已经知道播放器的"),s("code",null,"属性"),i(", "),s("code",null,"方法"),i("和"),s("code",null,"事件"),i("后,再编写插件是非常简单的事")],-1),s("p",null,"可以在实例化的时候加载插件的函数",-1),s("div",{className:"run-code"},"▶ Run Code",-1),a(`
js
function myPlugin(art) {
+import{_ as l,c as p,o as h,j as s,ak as a,a as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"编写插件","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/plugin.md","filePath":"advanced/plugin.md","lastUpdated":1673441101000}'),k={name:"advanced/plugin.md"};function e(t,n,E,r,d,g){return h(),p("div",null,n[0]||(n[0]=[s("h1",{id:"编写插件",tabindex:"-1"},[i("编写插件 "),s("a",{class:"header-anchor",href:"#编写插件","aria-label":'Permalink to "编写插件"'},"​")],-1),s("p",null,[i("但你已经知道播放器的"),s("code",null,"属性"),i(", "),s("code",null,"方法"),i("和"),s("code",null,"事件"),i("后,再编写插件是非常简单的事")],-1),s("p",null,"可以在实例化的时候加载插件的函数",-1),s("div",{className:"run-code"},"▶ Run Code",-1),a(`
js
function myPlugin(art) {
     console.info(art);
     return {
         name: 'myPlugin',
diff --git a/docs/document/assets/advanced_plugin.md.CVp3Oe2x.lean.js b/docs/document/assets/advanced_plugin.md.B3Pobmcq.lean.js
similarity index 87%
rename from docs/document/assets/advanced_plugin.md.CVp3Oe2x.lean.js
rename to docs/document/assets/advanced_plugin.md.B3Pobmcq.lean.js
index 15e678ec5..f410510a4 100644
--- a/docs/document/assets/advanced_plugin.md.CVp3Oe2x.lean.js
+++ b/docs/document/assets/advanced_plugin.md.B3Pobmcq.lean.js
@@ -1 +1 @@
-import{_ as l,o as p,c as h,j as s,a as i,ak as a}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"编写插件","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/plugin.md","filePath":"advanced/plugin.md","lastUpdated":1673441101000}'),k={name:"advanced/plugin.md"};function e(t,n,E,r,d,g){return p(),h("div",null,n[0]||(n[0]=[s("h1",{id:"编写插件",tabindex:"-1"},[i("编写插件 "),s("a",{class:"header-anchor",href:"#编写插件","aria-label":'Permalink to "编写插件"'},"​")],-1),s("p",null,[i("但你已经知道播放器的"),s("code",null,"属性"),i(", "),s("code",null,"方法"),i("和"),s("code",null,"事件"),i("后,再编写插件是非常简单的事")],-1),s("p",null,"可以在实例化的时候加载插件的函数",-1),s("div",{className:"run-code"},"▶ Run Code",-1),a("",2),s("div",{className:"run-code"},"▶ Run Code",-1),a("",2),s("div",{className:"run-code"},"▶ Run Code",-1),a("",1)]))}const b=l(k,[["render",e]]);export{y as __pageData,b as default};
+import{_ as l,c as p,o as h,j as s,ak as a,a as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"编写插件","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/plugin.md","filePath":"advanced/plugin.md","lastUpdated":1673441101000}'),k={name:"advanced/plugin.md"};function e(t,n,E,r,d,g){return h(),p("div",null,n[0]||(n[0]=[s("h1",{id:"编写插件",tabindex:"-1"},[i("编写插件 "),s("a",{class:"header-anchor",href:"#编写插件","aria-label":'Permalink to "编写插件"'},"​")],-1),s("p",null,[i("但你已经知道播放器的"),s("code",null,"属性"),i(", "),s("code",null,"方法"),i("和"),s("code",null,"事件"),i("后,再编写插件是非常简单的事")],-1),s("p",null,"可以在实例化的时候加载插件的函数",-1),s("div",{className:"run-code"},"▶ Run Code",-1),a("",2),s("div",{className:"run-code"},"▶ Run Code",-1),a("",2),s("div",{className:"run-code"},"▶ Run Code",-1),a("",1)]))}const b=l(k,[["render",e]]);export{y as __pageData,b as default};
diff --git a/docs/document/assets/advanced_property.md.C_nOKniE.js b/docs/document/assets/advanced_property.md.CA7GaeI3.js
similarity index 99%
rename from docs/document/assets/advanced_property.md.C_nOKniE.js
rename to docs/document/assets/advanced_property.md.CA7GaeI3.js
index ade83d52b..4c7b42d77 100644
--- a/docs/document/assets/advanced_property.md.C_nOKniE.js
+++ b/docs/document/assets/advanced_property.md.CA7GaeI3.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"实例属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/property.md","filePath":"advanced/property.md","lastUpdated":1764425558000}'),e={name:"advanced/property.md"};function h(t,a,k,r,E,d){return l(),p("div",null,a[0]||(a[0]=[s('

实例属性 ​

这里的 实例属性 是指挂载在 实例 的 一级属性,比较常用

play ​

  • Type: Function

播放视频

',5),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"实例属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/property.md","filePath":"advanced/property.md","lastUpdated":1764425558000}'),e={name:"advanced/property.md"};function h(t,a,k,r,E,d){return p(),l("div",null,a[0]||(a[0]=[s('

实例属性 ​

这里的 实例属性 是指挂载在 实例 的 一级属性,比较常用

play ​

  • Type: Function

播放视频

',5),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
     muted: true,
diff --git a/docs/document/assets/advanced_property.md.C_nOKniE.lean.js b/docs/document/assets/advanced_property.md.CA7GaeI3.lean.js
similarity index 95%
rename from docs/document/assets/advanced_property.md.C_nOKniE.lean.js
rename to docs/document/assets/advanced_property.md.CA7GaeI3.lean.js
index 9c774cea0..c084d7154 100644
--- a/docs/document/assets/advanced_property.md.C_nOKniE.lean.js
+++ b/docs/document/assets/advanced_property.md.CA7GaeI3.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"实例属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/property.md","filePath":"advanced/property.md","lastUpdated":1764425558000}'),e={name:"advanced/property.md"};function h(t,a,k,r,E,d){return l(),p("div",null,a[0]||(a[0]=[s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(e,[["render",h]]);export{g as __pageData,y as default};
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"实例属性","description":"","frontmatter":{},"headers":[],"relativePath":"advanced/property.md","filePath":"advanced/property.md","lastUpdated":1764425558000}'),e={name:"advanced/property.md"};function h(t,a,k,r,E,d){return p(),l("div",null,a[0]||(a[0]=[s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(e,[["render",h]]);export{g as __pageData,y as default};
diff --git a/docs/document/assets/app.D4qzugdM.js b/docs/document/assets/app.BhL53TUc.js
similarity index 95%
rename from docs/document/assets/app.D4qzugdM.js
rename to docs/document/assets/app.BhL53TUc.js
index 8496841c4..6f6743eef 100644
--- a/docs/document/assets/app.D4qzugdM.js
+++ b/docs/document/assets/app.BhL53TUc.js
@@ -1 +1 @@
-import{t as p}from"./chunks/theme.DwvAHEyX.js";import{R as s,a6 as i,a7 as u,a8 as c,a9 as l,aa as f,ab as d,ac as m,ad as h,ae as g,af as A,d as v,u as y,v as C,s as P,ag as b,ah as w,ai as R,aj as E}from"./chunks/framework.xxfEszSJ.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=j();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return A(S)}function D(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
+import{t as p}from"./chunks/theme.C-3sZAdL.js";import{R as s,a6 as i,a7 as u,a8 as c,a9 as l,aa as f,ab as d,ac as m,ad as h,ae as g,af as A,d as v,u as y,v as C,s as P,ag as b,ah as w,ai as R,aj as E}from"./chunks/framework.xxfEszSJ.js";function r(e){if(e.extends){const a=r(e.extends);return{...a,...e,async enhanceApp(t){a.enhanceApp&&await a.enhanceApp(t),e.enhanceApp&&await e.enhanceApp(t)}}}return e}const n=r(p),S=v({name:"VitePressApp",setup(){const{site:e,lang:a,dir:t}=y();return C(()=>{P(()=>{document.documentElement.lang=a.value,document.documentElement.dir=t.value})}),e.value.router.prefetchLinks&&b(),w(),R(),n.setup&&n.setup(),()=>E(n.Layout)}});async function T(){globalThis.__VITEPRESS__=!0;const e=D(),a=j();a.provide(u,e);const t=c(e.route);return a.provide(l,t),a.component("Content",f),a.component("ClientOnly",d),Object.defineProperties(a.config.globalProperties,{$frontmatter:{get(){return t.frontmatter.value}},$params:{get(){return t.page.value.params}}}),n.enhanceApp&&await n.enhanceApp({app:a,router:e,siteData:m}),{app:a,router:e,data:t}}function j(){return A(S)}function D(){let e=s;return h(a=>{let t=g(a),o=null;return t&&(e&&(t=t.replace(/\.js$/,".lean.js")),o=import(t)),s&&(e=!1),o},n.NotFound)}s&&T().then(({app:e,router:a,data:t})=>{a.go().then(()=>{i(a.route,t.site),e.mount("#app")})});export{T as createApp};
diff --git a/docs/document/assets/chunks/theme.DwvAHEyX.js b/docs/document/assets/chunks/theme.C-3sZAdL.js
similarity index 99%
rename from docs/document/assets/chunks/theme.DwvAHEyX.js
rename to docs/document/assets/chunks/theme.C-3sZAdL.js
index 55e55abaa..61021ef08 100644
--- a/docs/document/assets/chunks/theme.DwvAHEyX.js
+++ b/docs/document/assets/chunks/theme.C-3sZAdL.js
@@ -1 +1 @@
-import{d as k,c as h,r as p,n as A,o as i,a as ee,t as C,b as P,w as f,T as we,e as g,_ as V,u as Re,i as it,f as lt,g as he,h as S,j as d,k as c,l as te,m as Pe,p as T,q as J,s as fe,v as Q,x as Me,y as Ne,z as ct,A as ut,F as H,B as z,C as Z,D as We,E as ve,G as y,H as W,I as Ke,J as me,K as Y,L as _e,M as dt,N as Je,O as pt,P as Ie,Q as xe,R as ge,S as ht,U as ft,V as vt,W as Fe,X as mt,Y as Xe,Z as _t,$ as gt,a0 as Ye,a1 as Qe,a2 as kt,a3 as bt,a4 as $t,a5 as yt}from"./framework.xxfEszSJ.js";const Pt=k({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(n){return(e,t)=>(i(),h("span",{class:A(["VPBadge",e.type])},[p(e.$slots,"default",{},()=>[ee(C(e.text),1)])],2))}}),Lt={key:0,class:"VPBackdrop"},Vt=k({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(n){return(e,t)=>(i(),P(we,{name:"fade"},{default:f(()=>[e.show?(i(),h("div",Lt)):g("",!0)]),_:1}))}}),St=V(Vt,[["__scopeId","data-v-b2600058"]]),M=Re;function Tt(n,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(n,e):(n(),(s=!0)&&setTimeout(()=>s=!1,e))}}function Le(n){return n.startsWith("/")?n:`/${n}`}function Ce(n){const{pathname:e,search:t,hash:s,protocol:o}=new URL(n,"http://a.com");if(it(n)||n.startsWith("#")||!o.startsWith("http")||!lt(e))return n;const{site:a}=M(),r=e.endsWith("/")||e.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,a.value.cleanUrls?"":".html")}${t}${s}`);return he(r)}function ae({correspondingLink:n=!1}={}){const{site:e,localeIndex:t,page:s,theme:o,hash:a}=M(),r=S(()=>{var u,v;return{label:(u=e.value.locales[t.value])==null?void 0:u.label,link:((v=e.value.locales[t.value])==null?void 0:v.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:S(()=>Object.entries(e.value.locales).flatMap(([u,v])=>r.value.label===v.label?[]:{text:v.label,link:wt(v.link||(u==="root"?"/":`/${u}/`),o.value.i18nRouting!==!1&&n,s.value.relativePath.slice(r.value.link.length-1),!e.value.cleanUrls)+a.value})),currentLang:r}}function wt(n,e,t,s){return e?n.replace(/\/$/,"")+Le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):n}const Mt={class:"NotFound"},Nt={class:"code"},It={class:"title"},Ct={class:"quote"},At={class:"action"},Ht=["href","aria-label"],Bt=k({__name:"NotFound",setup(n){const{theme:e}=M(),{currentLang:t}=ae();return(s,o)=>{var a,r,l,u,v;return i(),h("div",Mt,[d("p",Nt,C(((a=c(e).notFound)==null?void 0:a.code)??"404"),1),d("h1",It,C(((r=c(e).notFound)==null?void 0:r.title)??"PAGE NOT FOUND"),1),o[0]||(o[0]=d("div",{class:"divider"},null,-1)),d("blockquote",Ct,C(((l=c(e).notFound)==null?void 0:l.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",At,[d("a",{class:"link",href:c(he)(c(t).link),"aria-label":((u=c(e).notFound)==null?void 0:u.linkLabel)??"go to home"},C(((v=c(e).notFound)==null?void 0:v.linkText)??"Take me home"),9,Ht)])])}}}),Et=V(Bt,[["__scopeId","data-v-93fd8736"]]);function Ze(n,e){if(Array.isArray(n))return le(n);if(n==null)return[];e=Le(e);const t=Object.keys(n).sort((o,a)=>a.split("/").length-o.split("/").length).find(o=>e.startsWith(Le(o))),s=t?n[t]:[];return Array.isArray(s)?le(s):le(s.items,s.base)}function Ot(n){const e=[];let t=0;for(const s in n){const o=n[s];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function Dt(n){const e=[];function t(s){for(const o of s)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(n),e}function Ve(n,e){return Array.isArray(e)?e.some(t=>Ve(n,t)):te(n,e.link)?!0:e.items?Ve(n,e.items):!1}function le(n,e){return[...n].map(t=>{const s={...t},o=s.base||e;return o&&s.link&&(s.link=o+s.link),s.items&&(s.items=le(s.items,o)),s})}function x(){const{frontmatter:n,page:e,theme:t}=M(),s=Pe("(min-width: 960px)"),o=T(!1),a=S(()=>{const N=t.value.sidebar,w=e.value.relativePath;return N?Ze(N,w):[]}),r=T(a.value);J(a,(N,w)=>{JSON.stringify(N)!==JSON.stringify(w)&&(r.value=a.value)});const l=S(()=>n.value.sidebar!==!1&&r.value.length>0&&n.value.layout!=="home"),u=S(()=>v?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),v=S(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),_=S(()=>l.value&&s.value),m=S(()=>l.value?Ot(r.value):[]);function L(){o.value=!0}function b(){o.value=!1}function $(){o.value?b():L()}return{isOpen:o,sidebar:r,sidebarGroups:m,hasSidebar:l,hasAside:v,leftAside:u,isSidebarEnabled:_,open:L,close:b,toggle:$}}function Ft(n,e){let t;fe(()=>{t=n.value?document.activeElement:void 0}),Q(()=>{window.addEventListener("keyup",s)}),Me(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}function zt(n){const{page:e,hash:t}=M(),s=T(!1),o=S(()=>n.value.collapsed!=null),a=S(()=>!!n.value.link),r=T(!1),l=()=>{r.value=te(e.value.relativePath,n.value.link)};J([e,n,t],l),Q(l);const u=S(()=>r.value?!0:n.value.items?Ve(e.value.relativePath,n.value.items):!1),v=S(()=>!!(n.value.items&&n.value.items.length));fe(()=>{s.value=!!(o.value&&n.value.collapsed)}),Ne(()=>{(r.value||u.value)&&(s.value=!1)});function _(){o.value&&(s.value=!s.value)}return{collapsed:s,collapsible:o,isLink:a,isActiveLink:r,hasActiveLink:u,hasChildren:v,toggle:_}}function jt(){const{hasSidebar:n}=x(),e=Pe("(min-width: 960px)"),t=Pe("(min-width: 1280px)");return{isAsideEnabled:S(()=>!t.value&&!e.value?!1:n.value?t.value:e.value)}}const Ut=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,Se=[];function et(n){return typeof n.outline=="object"&&!Array.isArray(n.outline)&&n.outline.label||n.outlineTitle||"On this page"}function Ae(n){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:qt(t),link:"#"+t.id,level:s}});return Gt(e,n)}function qt(n){let e="";for(const t of n.childNodes)if(t.nodeType===1){if(Ut.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Gt(n,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return Kt(n,s,o)}function Rt(n,e){const{isAsideEnabled:t}=jt(),s=Tt(a,100);let o=null;Q(()=>{requestAnimationFrame(a),window.addEventListener("scroll",s)}),ct(()=>{r(location.hash)}),Me(()=>{window.removeEventListener("scroll",s)});function a(){if(!t.value)return;const l=window.scrollY,u=window.innerHeight,v=document.body.offsetHeight,_=Math.abs(l+u-v)<1,m=Se.map(({element:b,link:$})=>({link:$,top:Wt(b)})).filter(({top:b})=>!Number.isNaN(b)).sort((b,$)=>b.top-$.top);if(!m.length){r(null);return}if(l<1){r(null);return}if(_){r(m[m.length-1].link);return}let L=null;for(const{link:b,top:$}of m){if($>l+ut()+4)break;L=b}r(L)}function r(l){o&&o.classList.remove("active"),l==null?o=null:o=n.value.querySelector(`a[href="${decodeURIComponent(l)}"]`);const u=o;u?(u.classList.add("active"),e.value.style.top=u.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Wt(n){let e=0;for(;n!==document.body;){if(n===null)return NaN;e+=n.offsetTop,n=n.offsetParent}return e}function Kt(n,e,t){Se.length=0;const s=[],o=[];return n.forEach(a=>{const r={...a,children:[]};let l=o[o.length-1];for(;l&&l.level>=r.level;)o.pop(),l=o[o.length-1];if(r.element.classList.contains("ignore-header")||l&&"shouldIgnore"in l){o.push({level:r.level,shouldIgnore:!0});return}r.level>t||r.level{const o=Z("VPDocOutlineItem",!0);return i(),h("ul",{class:A(["VPDocOutlineItem",t.root?"root":"nested"])},[(i(!0),h(H,null,z(t.headers,({children:a,link:r,title:l})=>(i(),h("li",null,[d("a",{class:"outline-link",href:r,onClick:e,title:l},C(l),9,Jt),a!=null&&a.length?(i(),P(o,{key:0,headers:a},null,8,["headers"])):g("",!0)]))),256))],2)}}}),tt=V(xt,[["__scopeId","data-v-da421f78"]]),Xt={class:"content"},Yt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Qt=k({__name:"VPDocAsideOutline",setup(n){const{frontmatter:e,theme:t}=M(),s=We([]);ve(()=>{s.value=Ae(e.value.outline??t.value.outline)});const o=T(),a=T();return Rt(o,a),(r,l)=>(i(),h("nav",{"aria-labelledby":"doc-outline-aria-label",class:A(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:o},[d("div",Xt,[d("div",{class:"outline-marker",ref_key:"marker",ref:a},null,512),d("div",Yt,C(c(et)(c(t))),1),y(tt,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Zt=V(Qt,[["__scopeId","data-v-dfbd9fb8"]]),en={class:"VPDocAsideCarbonAds"},tn=k({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(n){const e=()=>null;return(t,s)=>(i(),h("div",en,[y(c(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),nn={class:"VPDocAside"},sn=k({__name:"VPDocAside",setup(n){const{theme:e}=M();return(t,s)=>(i(),h("div",nn,[p(t.$slots,"aside-top",{},void 0,!0),p(t.$slots,"aside-outline-before",{},void 0,!0),y(Zt),p(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=d("div",{class:"spacer"},null,-1)),p(t.$slots,"aside-ads-before",{},void 0,!0),c(e).carbonAds?(i(),P(tn,{key:0,"carbon-ads":c(e).carbonAds},null,8,["carbon-ads"])):g("",!0),p(t.$slots,"aside-ads-after",{},void 0,!0),p(t.$slots,"aside-bottom",{},void 0,!0)]))}}),on=V(sn,[["__scopeId","data-v-79cae1a0"]]);function an(){const{theme:n,page:e}=M();return S(()=>{const{text:t="Edit this page",pattern:s=""}=n.value.editLink||{};let o;return typeof s=="function"?o=s(e.value):o=s.replace(/:path/g,e.value.filePath),{url:o,text:t}})}function rn(){const{page:n,theme:e,frontmatter:t}=M();return S(()=>{var v,_,m,L,b,$,N,w;const s=Ze(e.value.sidebar,n.value.relativePath),o=Dt(s),a=ln(o,O=>O.link.replace(/[?#].*$/,"")),r=a.findIndex(O=>te(n.value.relativePath,O.link)),l=((v=e.value.docFooter)==null?void 0:v.prev)===!1&&!t.value.prev||t.value.prev===!1,u=((_=e.value.docFooter)==null?void 0:_.next)===!1&&!t.value.next||t.value.next===!1;return{prev:l?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((m=a[r-1])==null?void 0:m.docFooterText)??((L=a[r-1])==null?void 0:L.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((b=a[r-1])==null?void 0:b.link)},next:u?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??(($=a[r+1])==null?void 0:$.docFooterText)??((N=a[r+1])==null?void 0:N.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((w=a[r+1])==null?void 0:w.link)}}})}function ln(n,e){const t=new Set;return n.filter(s=>{const o=e(s);return t.has(o)?!1:t.add(o)})}const K=k({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(n){const e=n,t=S(()=>e.tag??(e.href?"a":"span")),s=S(()=>e.href&&Ke.test(e.href)||e.target==="_blank");return(o,a)=>(i(),P(W(t.value),{class:A(["VPLink",{link:o.href,"vp-external-link-icon":s.value,"no-icon":o.noIcon}]),href:o.href?c(Ce)(o.href):void 0,target:o.target??(s.value?"_blank":void 0),rel:o.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[p(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),cn={class:"VPLastUpdated"},un=["datetime"],dn=k({__name:"VPDocFooterLastUpdated",setup(n){const{theme:e,page:t,lang:s}=M(),o=S(()=>new Date(t.value.lastUpdated)),a=S(()=>o.value.toISOString()),r=T("");return Q(()=>{fe(()=>{var l,u,v;r.value=new Intl.DateTimeFormat((u=(l=e.value.lastUpdated)==null?void 0:l.formatOptions)!=null&&u.forceLocale?s.value:void 0,((v=e.value.lastUpdated)==null?void 0:v.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(l,u)=>{var v;return i(),h("p",cn,[ee(C(((v=c(e).lastUpdated)==null?void 0:v.text)||c(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:a.value},C(r.value),9,un)])}}}),pn=V(dn,[["__scopeId","data-v-e95db471"]]),hn={key:0,class:"VPDocFooter"},fn={key:0,class:"edit-info"},vn={key:0,class:"edit-link"},mn={key:1,class:"last-updated"},_n={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},gn={class:"pager"},kn=["innerHTML"],bn=["innerHTML"],$n={class:"pager"},yn=["innerHTML"],Pn=["innerHTML"],Ln=k({__name:"VPDocFooter",setup(n){const{theme:e,page:t,frontmatter:s}=M(),o=an(),a=rn(),r=S(()=>e.value.editLink&&s.value.editLink!==!1),l=S(()=>t.value.lastUpdated),u=S(()=>r.value||l.value||a.value.prev||a.value.next);return(v,_)=>{var m,L,b,$;return u.value?(i(),h("footer",hn,[p(v.$slots,"doc-footer-before",{},void 0,!0),r.value||l.value?(i(),h("div",fn,[r.value?(i(),h("div",vn,[y(K,{class:"edit-link-button",href:c(o).url,"no-icon":!0},{default:f(()=>[_[0]||(_[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),ee(" "+C(c(o).text),1)]),_:1},8,["href"])])):g("",!0),l.value?(i(),h("div",mn,[y(pn)])):g("",!0)])):g("",!0),(m=c(a).prev)!=null&&m.link||(L=c(a).next)!=null&&L.link?(i(),h("nav",_n,[_[1]||(_[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",gn,[(b=c(a).prev)!=null&&b.link?(i(),P(K,{key:0,class:"pager-link prev",href:c(a).prev.link},{default:f(()=>{var N;return[d("span",{class:"desc",innerHTML:((N=c(e).docFooter)==null?void 0:N.prev)||"Previous page"},null,8,kn),d("span",{class:"title",innerHTML:c(a).prev.text},null,8,bn)]}),_:1},8,["href"])):g("",!0)]),d("div",$n,[($=c(a).next)!=null&&$.link?(i(),P(K,{key:0,class:"pager-link next",href:c(a).next.link},{default:f(()=>{var N;return[d("span",{class:"desc",innerHTML:((N=c(e).docFooter)==null?void 0:N.next)||"Next page"},null,8,yn),d("span",{class:"title",innerHTML:c(a).next.text},null,8,Pn)]}),_:1},8,["href"])):g("",!0)])])):g("",!0)])):g("",!0)}}}),Vn=V(Ln,[["__scopeId","data-v-07d71ff1"]]),Sn={class:"container"},Tn={class:"aside-container"},wn={class:"aside-content"},Mn={class:"content"},Nn={class:"content-container"},In={class:"main"},Cn=k({__name:"VPDoc",setup(n){const{theme:e}=M(),t=me(),{hasSidebar:s,hasAside:o,leftAside:a}=x(),r=S(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(l,u)=>{const v=Z("Content");return i(),h("div",{class:A(["VPDoc",{"has-sidebar":c(s),"has-aside":c(o)}])},[p(l.$slots,"doc-top",{},void 0,!0),d("div",Sn,[c(o)?(i(),h("div",{key:0,class:A(["aside",{"left-aside":c(a)}])},[u[0]||(u[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Tn,[d("div",wn,[y(on,null,{"aside-top":f(()=>[p(l.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[p(l.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[p(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(l.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):g("",!0),d("div",Mn,[d("div",Nn,[p(l.$slots,"doc-before",{},void 0,!0),d("main",In,[y(v,{class:A(["vp-doc",[r.value,c(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),y(Vn,null,{"doc-footer-before":f(()=>[p(l.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),p(l.$slots,"doc-after",{},void 0,!0)])])]),p(l.$slots,"doc-bottom",{},void 0,!0)],2)}}}),An=V(Cn,[["__scopeId","data-v-ef3a4dda"]]),Hn=k({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(n){const e=n,t=S(()=>e.href&&Ke.test(e.href)),s=S(()=>e.tag||(e.href?"a":"button"));return(o,a)=>(i(),P(W(s.value),{class:A(["VPButton",[o.size,o.theme]]),href:o.href?c(Ce)(o.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[ee(C(o.text),1)]),_:1},8,["class","href","target","rel"]))}}),Bn=V(Hn,[["__scopeId","data-v-b20c43c2"]]),En=["src","alt"],On=k({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(n){return(e,t)=>{const s=Z("VPImage",!0);return e.image?(i(),h(H,{key:0},[typeof e.image=="string"||"src"in e.image?(i(),h("img",Y({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:c(he)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,En)):(i(),h(H,{key:1},[y(s,Y({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),y(s,Y({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):g("",!0)}}}),ue=V(On,[["__scopeId","data-v-4d414b82"]]),Dn={class:"container"},Fn={class:"main"},zn={class:"heading"},jn=["innerHTML"],Un=["innerHTML"],qn=["innerHTML"],Gn={key:0,class:"actions"},Rn={key:0,class:"image"},Wn={class:"image-container"},Kn=k({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(n){const e=_e("hero-image-slot-exists");return(t,s)=>(i(),h("div",{class:A(["VPHero",{"has-image":t.image||c(e)}])},[d("div",Dn,[d("div",Fn,[p(t.$slots,"home-hero-info-before",{},void 0,!0),p(t.$slots,"home-hero-info",{},()=>[d("h1",zn,[t.name?(i(),h("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,jn)):g("",!0),t.text?(i(),h("span",{key:1,innerHTML:t.text,class:"text"},null,8,Un)):g("",!0)]),t.tagline?(i(),h("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,qn)):g("",!0)],!0),p(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(i(),h("div",Gn,[(i(!0),h(H,null,z(t.actions,o=>(i(),h("div",{key:o.link,class:"action"},[y(Bn,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):g("",!0),p(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||c(e)?(i(),h("div",Rn,[d("div",Wn,[s[0]||(s[0]=d("div",{class:"image-bg"},null,-1)),p(t.$slots,"home-hero-image",{},()=>[t.image?(i(),P(ue,{key:0,class:"image-src",image:t.image},null,8,["image"])):g("",!0)],!0)])])):g("",!0)])],2))}}),Jn=V(Kn,[["__scopeId","data-v-d266baba"]]),xn=k({__name:"VPHomeHero",setup(n){const{frontmatter:e}=M();return(t,s)=>c(e).hero?(i(),P(Jn,{key:0,class:"VPHomeHero",name:c(e).hero.name,text:c(e).hero.text,tagline:c(e).hero.tagline,image:c(e).hero.image,actions:c(e).hero.actions},{"home-hero-info-before":f(()=>[p(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[p(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[p(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[p(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[p(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):g("",!0)}}),Xn={class:"box"},Yn={key:0,class:"icon"},Qn=["innerHTML"],Zn=["innerHTML"],es=["innerHTML"],ts={key:4,class:"link-text"},ns={class:"link-text-value"},ss=k({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(n){return(e,t)=>(i(),P(K,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[d("article",Xn,[typeof e.icon=="object"&&e.icon.wrap?(i(),h("div",Yn,[y(ue,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(i(),P(ue,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(i(),h("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Qn)):g("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Zn),e.details?(i(),h("p",{key:3,class:"details",innerHTML:e.details},null,8,es)):g("",!0),e.linkText?(i(),h("div",ts,[d("p",ns,[ee(C(e.linkText)+" ",1),t[0]||(t[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):g("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),os=V(ss,[["__scopeId","data-v-95001937"]]),as={key:0,class:"VPFeatures"},rs={class:"container"},is={class:"items"},ls=k({__name:"VPFeatures",props:{features:{}},setup(n){const e=n,t=S(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,o)=>s.features?(i(),h("div",as,[d("div",rs,[d("div",is,[(i(!0),h(H,null,z(s.features,a=>(i(),h("div",{key:a.title,class:A(["item",[t.value]])},[y(os,{icon:a.icon,title:a.title,details:a.details,link:a.link,"link-text":a.linkText,rel:a.rel,target:a.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):g("",!0)}}),cs=V(ls,[["__scopeId","data-v-1da4ff3d"]]),us=k({__name:"VPHomeFeatures",setup(n){const{frontmatter:e}=M();return(t,s)=>c(e).features?(i(),P(cs,{key:0,class:"VPHomeFeatures",features:c(e).features},null,8,["features"])):g("",!0)}}),ds=k({__name:"VPHomeContent",setup(n){const{width:e}=dt({initialWidth:0,includeScrollbar:!1});return(t,s)=>(i(),h("div",{class:"vp-doc container",style:Je(c(e)?{"--vp-offset":`calc(50% - ${c(e)/2}px)`}:{})},[p(t.$slots,"default",{},void 0,!0)],4))}}),ps=V(ds,[["__scopeId","data-v-2498cc33"]]),hs=k({__name:"VPHome",setup(n){const{frontmatter:e,theme:t}=M();return(s,o)=>{const a=Z("Content");return i(),h("div",{class:A(["VPHome",{"external-link-icon-enabled":c(t).externalLinkIcon}])},[p(s.$slots,"home-hero-before",{},void 0,!0),y(xn,null,{"home-hero-info-before":f(()=>[p(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(s.$slots,"home-hero-image",{},void 0,!0)]),_:3}),p(s.$slots,"home-hero-after",{},void 0,!0),p(s.$slots,"home-features-before",{},void 0,!0),y(us),p(s.$slots,"home-features-after",{},void 0,!0),c(e).markdownStyles!==!1?(i(),P(ps,{key:0},{default:f(()=>[y(a)]),_:1})):(i(),P(a,{key:1}))],2)}}}),fs=V(hs,[["__scopeId","data-v-8b59c434"]]),vs={},ms={class:"VPPage"};function _s(n,e){const t=Z("Content");return i(),h("div",ms,[p(n.$slots,"page-top"),y(t),p(n.$slots,"page-bottom")])}const gs=V(vs,[["render",_s]]),ks=k({__name:"VPContent",setup(n){const{page:e,frontmatter:t}=M(),{hasSidebar:s}=x();return(o,a)=>(i(),h("div",{class:A(["VPContent",{"has-sidebar":c(s),"is-home":c(t).layout==="home"}]),id:"VPContent"},[c(e).isNotFound?p(o.$slots,"not-found",{key:0},()=>[y(Et)],!0):c(t).layout==="page"?(i(),P(gs,{key:1},{"page-top":f(()=>[p(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[p(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):c(t).layout==="home"?(i(),P(fs,{key:2},{"home-hero-before":f(()=>[p(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[p(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[p(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[p(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[p(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):c(t).layout&&c(t).layout!=="doc"?(i(),P(W(c(t).layout),{key:3})):(i(),P(An,{key:4},{"doc-top":f(()=>[p(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[p(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[p(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[p(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[p(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[p(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[p(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[p(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),bs=V(ks,[["__scopeId","data-v-d2aef184"]]),$s={class:"container"},ys=["innerHTML"],Ps=["innerHTML"],Ls=k({__name:"VPFooter",setup(n){const{theme:e,frontmatter:t}=M(),{hasSidebar:s}=x();return(o,a)=>c(e).footer&&c(t).footer!==!1?(i(),h("footer",{key:0,class:A(["VPFooter",{"has-sidebar":c(s)}])},[d("div",$s,[c(e).footer.message?(i(),h("p",{key:0,class:"message",innerHTML:c(e).footer.message},null,8,ys)):g("",!0),c(e).footer.copyright?(i(),h("p",{key:1,class:"copyright",innerHTML:c(e).footer.copyright},null,8,Ps)):g("",!0)])],2)):g("",!0)}}),Vs=V(Ls,[["__scopeId","data-v-e3157d6d"]]);function Ss(){const{theme:n,frontmatter:e}=M(),t=We([]),s=S(()=>t.value.length>0);return ve(()=>{t.value=Ae(e.value.outline??n.value.outline)}),{headers:t,hasLocalNav:s}}const Ts={class:"menu-text"},ws={class:"header"},Ms={class:"outline"},Ns=k({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(n){const e=n,{theme:t}=M(),s=T(!1),o=T(0),a=T(),r=T();function l(m){var L;(L=a.value)!=null&&L.contains(m.target)||(s.value=!1)}J(s,m=>{if(m){document.addEventListener("click",l);return}document.removeEventListener("click",l)}),pt("Escape",()=>{s.value=!1}),ve(()=>{s.value=!1});function u(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function v(m){m.target.classList.contains("outline-link")&&(r.value&&(r.value.style.transition="none"),Ie(()=>{s.value=!1}))}function _(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(m,L)=>(i(),h("div",{class:"VPLocalNavOutlineDropdown",style:Je({"--vp-vh":o.value+"px"}),ref_key:"main",ref:a},[m.headers.length>0?(i(),h("button",{key:0,onClick:u,class:A({open:s.value})},[d("span",Ts,C(c(et)(c(t))),1),L[0]||(L[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(i(),h("button",{key:1,onClick:_},C(c(t).returnToTopLabel||"Return to top"),1)),y(we,{name:"flyout"},{default:f(()=>[s.value?(i(),h("div",{key:0,ref_key:"items",ref:r,class:"items",onClick:v},[d("div",ws,[d("a",{class:"top-link",href:"#",onClick:_},C(c(t).returnToTopLabel||"Return to top"),1)]),d("div",Ms,[y(tt,{headers:m.headers},null,8,["headers"])])],512)):g("",!0)]),_:1})],4))}}),Is=V(Ns,[["__scopeId","data-v-d61422fe"]]),Cs={class:"container"},As=["aria-expanded"],Hs={class:"menu-text"},Bs=k({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(n){const{theme:e,frontmatter:t}=M(),{hasSidebar:s}=x(),{headers:o}=Ss(),{y:a}=xe(),r=T(0);Q(()=>{r.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ve(()=>{o.value=Ae(t.value.outline??e.value.outline)});const l=S(()=>o.value.length===0),u=S(()=>l.value&&!s.value),v=S(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:l.value,fixed:u.value}));return(_,m)=>c(t).layout!=="home"&&(!u.value||c(a)>=r.value)?(i(),h("div",{key:0,class:A(v.value)},[d("div",Cs,[c(s)?(i(),h("button",{key:0,class:"menu","aria-expanded":_.open,"aria-controls":"VPSidebarNav",onClick:m[0]||(m[0]=L=>_.$emit("open-menu"))},[m[1]||(m[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",Hs,C(c(e).sidebarMenuLabel||"Menu"),1)],8,As)):g("",!0),y(Is,{headers:c(o),navHeight:r.value},null,8,["headers","navHeight"])])],2)):g("",!0)}}),Es=V(Bs,[["__scopeId","data-v-9d8129cc"]]);function Os(){const n=T(!1);function e(){n.value=!0,window.addEventListener("resize",o)}function t(){n.value=!1,window.removeEventListener("resize",o)}function s(){n.value?t():e()}function o(){window.outerWidth>=768&&t()}const a=me();return J(()=>a.path,t),{isScreenOpen:n,openScreen:e,closeScreen:t,toggleScreen:s}}const Ds={},Fs={class:"VPSwitch",type:"button",role:"switch"},zs={class:"check"},js={key:0,class:"icon"};function Us(n,e){return i(),h("button",Fs,[d("span",zs,[n.$slots.default?(i(),h("span",js,[p(n.$slots,"default",{},void 0,!0)])):g("",!0)])])}const qs=V(Ds,[["render",Us],["__scopeId","data-v-7012e5dd"]]),Gs=k({__name:"VPSwitchAppearance",setup(n){const{isDark:e,theme:t}=M(),s=_e("toggle-appearance",()=>{e.value=!e.value}),o=T("");return Ne(()=>{o.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(a,r)=>(i(),P(qs,{title:o.value,class:"VPSwitchAppearance","aria-checked":c(e),onClick:c(s)},{default:f(()=>r[0]||(r[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),He=V(Gs,[["__scopeId","data-v-fa1daf57"]]),Rs={key:0,class:"VPNavBarAppearance"},Ws=k({__name:"VPNavBarAppearance",setup(n){const{site:e}=M();return(t,s)=>c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",Rs,[y(He)])):g("",!0)}}),Ks=V(Ws,[["__scopeId","data-v-123fcb2f"]]),Be=T();let nt=!1,be=0;function Js(n){const e=T(!1);if(ge){!nt&&xs(),be++;const t=J(Be,s=>{var o,a,r;s===n.el.value||(o=n.el.value)!=null&&o.contains(s)?(e.value=!0,(a=n.onFocus)==null||a.call(n)):(e.value=!1,(r=n.onBlur)==null||r.call(n))});Me(()=>{t(),be--,be||Xs()})}return ht(e)}function xs(){document.addEventListener("focusin",st),nt=!0,Be.value=document.activeElement}function Xs(){document.removeEventListener("focusin",st)}function st(){Be.value=document.activeElement}const Ys={class:"VPMenuLink"},Qs=["innerHTML"],Zs=k({__name:"VPMenuLink",props:{item:{}},setup(n){const{page:e}=M();return(t,s)=>(i(),h("div",Ys,[y(K,{class:A({active:c(te)(c(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Qs)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),ke=V(Zs,[["__scopeId","data-v-65e4a6b1"]]),eo={class:"VPMenuGroup"},to={key:0,class:"title"},no=k({__name:"VPMenuGroup",props:{text:{},items:{}},setup(n){return(e,t)=>(i(),h("div",eo,[e.text?(i(),h("p",to,C(e.text),1)):g("",!0),(i(!0),h(H,null,z(e.items,s=>(i(),h(H,null,["link"in s?(i(),P(ke,{key:0,item:s},null,8,["item"])):g("",!0)],64))),256))]))}}),so=V(no,[["__scopeId","data-v-2bec9359"]]),oo={class:"VPMenu"},ao={key:0,class:"items"},ro=k({__name:"VPMenu",props:{items:{}},setup(n){return(e,t)=>(i(),h("div",oo,[e.items?(i(),h("div",ao,[(i(!0),h(H,null,z(e.items,s=>(i(),h(H,{key:JSON.stringify(s)},["link"in s?(i(),P(ke,{key:0,item:s},null,8,["item"])):"component"in s?(i(),P(W(s.component),Y({key:1,ref_for:!0},s.props),null,16)):(i(),P(so,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):g("",!0),p(e.$slots,"default",{},void 0,!0)]))}}),io=V(ro,[["__scopeId","data-v-39eca401"]]),lo=["aria-expanded","aria-label"],co={key:0,class:"text"},uo=["innerHTML"],po={key:1,class:"vpi-more-horizontal icon"},ho={class:"menu"},fo=k({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(n){const e=T(!1),t=T();Js({el:t,onBlur:s});function s(){e.value=!1}return(o,a)=>(i(),h("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:a[1]||(a[1]=r=>e.value=!0),onMouseleave:a[2]||(a[2]=r=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:a[0]||(a[0]=r=>e.value=!e.value)},[o.button||o.icon?(i(),h("span",co,[o.icon?(i(),h("span",{key:0,class:A([o.icon,"option-icon"])},null,2)):g("",!0),o.button?(i(),h("span",{key:1,innerHTML:o.button},null,8,uo)):g("",!0),a[3]||(a[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(i(),h("span",po))],8,lo),d("div",ho,[y(io,{items:o.items},{default:f(()=>[p(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Ee=V(fo,[["__scopeId","data-v-40e55da0"]]),vo=["href","aria-label","innerHTML"],mo=k({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(n){const e=n,t=T();Q(async()=>{var a;await Ie();const o=(a=t.value)==null?void 0:a.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const s=S(()=>typeof e.icon=="object"?e.icon.svg:``);return(o,a)=>(i(),h("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:s.value},null,8,vo))}}),_o=V(mo,[["__scopeId","data-v-fbf39218"]]),go={class:"VPSocialLinks"},ko=k({__name:"VPSocialLinks",props:{links:{}},setup(n){return(e,t)=>(i(),h("div",go,[(i(!0),h(H,null,z(e.links,({link:s,icon:o,ariaLabel:a})=>(i(),P(_o,{key:s,icon:o,link:s,ariaLabel:a},null,8,["icon","link","ariaLabel"]))),128))]))}}),Oe=V(ko,[["__scopeId","data-v-f2234a39"]]),bo={key:0,class:"group translations"},$o={class:"trans-title"},yo={key:1,class:"group"},Po={class:"item appearance"},Lo={class:"label"},Vo={class:"appearance-action"},So={key:2,class:"group"},To={class:"item social-links"},wo=k({__name:"VPNavBarExtra",setup(n){const{site:e,theme:t}=M(),{localeLinks:s,currentLang:o}=ae({correspondingLink:!0}),a=S(()=>s.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(r,l)=>a.value?(i(),P(Ee,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[c(s).length&&c(o).label?(i(),h("div",bo,[d("p",$o,C(c(o).label),1),(i(!0),h(H,null,z(c(s),u=>(i(),P(ke,{key:u.link,item:u},null,8,["item"]))),128))])):g("",!0),c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",yo,[d("div",Po,[d("p",Lo,C(c(t).darkModeSwitchLabel||"Appearance"),1),d("div",Vo,[y(He)])])])):g("",!0),c(t).socialLinks?(i(),h("div",So,[d("div",To,[y(Oe,{class:"social-links-list",links:c(t).socialLinks},null,8,["links"])])])):g("",!0)]),_:1})):g("",!0)}}),Mo=V(wo,[["__scopeId","data-v-0c845e5d"]]),No=["aria-expanded"],Io=k({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(n){return(e,t)=>(i(),h("button",{type:"button",class:A(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},t[1]||(t[1]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)]),10,No))}}),Co=V(Io,[["__scopeId","data-v-670493dd"]]),Ao=["innerHTML"],Ho=k({__name:"VPNavBarMenuLink",props:{item:{}},setup(n){const{page:e}=M();return(t,s)=>(i(),P(K,{class:A({VPNavBarMenuLink:!0,active:c(te)(c(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Ao)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Bo=V(Ho,[["__scopeId","data-v-8dbce4d0"]]),Eo=k({__name:"VPNavBarMenuGroup",props:{item:{}},setup(n){const e=n,{page:t}=M(),s=a=>"component"in a?!1:"link"in a?te(t.value.relativePath,a.link,!!e.item.activeMatch):a.items.some(s),o=S(()=>s(e.item));return(a,r)=>(i(),P(Ee,{class:A({VPNavBarMenuGroup:!0,active:c(te)(c(t).relativePath,a.item.activeMatch,!!a.item.activeMatch)||o.value}),button:a.item.text,items:a.item.items},null,8,["class","button","items"]))}}),Oo={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Do=k({__name:"VPNavBarMenu",setup(n){const{theme:e}=M();return(t,s)=>c(e).nav?(i(),h("nav",Oo,[s[0]||(s[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(i(!0),h(H,null,z(c(e).nav,o=>(i(),h(H,{key:JSON.stringify(o)},["link"in o?(i(),P(Bo,{key:0,item:o},null,8,["item"])):"component"in o?(i(),P(W(o.component),Y({key:1,ref_for:!0},o.props),null,16)):(i(),P(Eo,{key:2,item:o},null,8,["item"]))],64))),128))])):g("",!0)}}),Fo=V(Do,[["__scopeId","data-v-5bacfe89"]]),zo="/document/assets/flex-logo.BJA2J7hW.svg";function $e(n,e){return typeof n>"u"?e:n}function ze(n){const e=Array(n);for(let t=0;t=this.minlength&&(l||!r[_])){let L=ie(u,o,v),b="";switch(this.tokenize){case"full":if(3$;N--)if(N-$>=this.minlength){const w=ie(u,o,v,m,$);b=_.substring($,N),this.push_index(r,b,w,n,t)}break}case"reverse":if(2=this.minlength){const N=ie(u,o,v,m,$);this.push_index(r,b,N,n,t)}b=""}case"forward":if(1=this.minlength&&this.push_index(r,b,L,n,t);break}default:if(this.boost&&(L=Math.min(0|L/this.boost(e,_,v),u-1)),this.push_index(r,_,L,n,t),l&&1=this.minlength&&!$[_]){$[_]=1;const R=ie(N+(o/2>N?0:1),o,v,O-1,F-1),X=this.bidirectional&&_>w;this.push_index(a,X?w:_,R,n,t,X?_:w)}}}}}this.fastupdate||(this.register[n]=1)}}return this};function ie(n,e,t,s,o){return t&&1=this.minlength&&!m[b]){if(!this.optimize&&!a&&!this.map[b])return r;L[N++]=b,m[b]=1}n=L,s=n.length}if(!s)return r;e||(e=100);let u,v=this.depth&&1=t)))));b++);if(v)return o?qe(l,t,0):void(n[n.length]=l)}return!e&&l};function qe(n,e,t){return n=n.length===1?n[0]:Uo(n),t||n.length>e?n.slice(t,t+e):n}function Ge(n,e,t,s){if(t){const o=s&&e>t;n=n[o?e:t],n=n&&n[o?t:e]}else n=n[e];return n}q.prototype.contain=function(n){return!!this.register[n]},q.prototype.update=function(n,e){return this.remove(n).add(n,e)},q.prototype.remove=function(n,e){const t=this.register[n];if(t){if(this.fastupdate)for(let s,o=0;o{if(a.value){for(var B=m.value.search(a.value,{enrich:!0}),I=[],j=0;j!B||!B.length?[]:B.reduce((j,E)=>(j[I(E)]||(j[I(E)]=[]),j[I(E)].push(E),j),{}),R=()=>{setTimeout(()=>{l.value&&l.value.focus()},100),De(),o.value=!0};Q(async()=>{var E,D;const B=await vt(()=>import("./virtual_search-data.BBGOhSPI.js"),[]);u.value=B.default.INDEX_DATA,v.value=B.default.PREVIEW_LOOKUP,_.value=B.default.Options,r.value=window.location.origin+he(t.value==="root"?"/":t.value),L.value=((E=_.value)==null?void 0:E.buttonLabel)||L.value,b.value=((D=_.value)==null?void 0:D.placeholder)||b.value;var I=new q(_.value);I.import("reg",u.value.reg),I.import("cfg",u.value.cfg),I.import("map",u.value.map),I.import("ctx",u.value.ctx),m.value=I,s.value.innerHTML=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"⌘":"Ctrl";const j=U=>{var se;U.key==="k"&&(U.ctrlKey||U.metaKey)&&(U.preventDefault(),R()),U.key==="Escape"&&((se=a.value)==null?void 0:se.length)==0&&o.value&&(o.value=!1)};window.addEventListener("keydown",j)});const X=S(()=>F(O.value,B=>B.link.split("/").slice(0,-1).join("-"))),ne=S(()=>Object.values(X.value).flat().map(B=>B.id));function De(){o.value=!1,a.value=""}const at=B=>{var I,j;if(document.getElementsByClassName("search-group")[0]){if(B.key=="ArrowUp"||B.key=="ArrowDown"){const E=ne.value.indexOf($.value);if(B.key=="ArrowUp"){const D=E==0?ne.value.length-1:E-1;$.value=ne.value[D]}if(B.key=="ArrowDown"){const D=E>ne.value.length-2?0:E+1;$.value=ne.value[D]}if(E<5){const D=N.value.getElementsByClassName("VPPluginSearch-search-group")[0];D==null||D.scrollIntoView(!0)}else(I=document.getElementById(ne.value[$.value]))==null||I.scrollIntoView(!0);Ie()}B.key=="Enter"&&w.go(e.site.value.base+((j=N.value.getElementsByClassName("link-focused")[0].getAttribute("href"))==null?void 0:j.replace(r.value,"")))}};return(B,I)=>{const j=Z("ClientOnly");return i(),h("div",la,[y(j,null,{default:f(()=>[(i(),P(gt,{to:"body"},[Fe(d("div",{class:"VPPluginSearch-modal-back",onClick:I[2]||(I[2]=E=>o.value=!1),onKeydown:at},[d("div",{class:"VPPluginSearch-modal",onClick:I[1]||(I[1]=Xe(()=>{},["stop"])),ref_key:"modal",ref:N},[d("form",ca,[I[4]||(I[4]=d("label",{class:"DocSearch-MagnifierLabel",for:"docsearch-input",id:"docsearch-label"},[d("svg",{width:"20",height:"20",class:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},[d("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),Fe(d("input",{class:"DocSearch-Input","aria-autocomplete":"both","aria-labelledby":"docsearch-label",id:"docsearch-input",autocomplete:"off",autocorrect:"off",autocapitalize:"off",enterkeyhint:"search",spellcheck:"false",autofocus:"true","onUpdate:modelValue":I[0]||(I[0]=E=>a.value=E),placeholder:b.value,maxlength:"64",type:"search",ref_key:"input",ref:l},null,8,ua),[[_t,a.value]])]),d("div",da,[(i(!0),h(H,null,z(X.value,(E,D)=>(i(),h("div",{class:"search-group",key:D},[d("span",pa,C(D?D.toString()[0].toUpperCase()+D.toString().slice(1):"Home"),1),(i(!0),h(H,null,z(E,(U,se)=>(i(),h("a",{href:r.value+U.link,key:U.id,onClick:De,onMouseenter:re=>$.value=U.id,class:A({"link-focused":$.value==U.id}),id:se.toString()},[d("div",fa,[d("span",va,C(U.link.includes("#")?"#":"▤"),1),d("div",ma,[d("h3",null,C(U.title),1),d("p",null,[d("div",{innerHTML:U.preview},null,8,_a)])]),I[5]||(I[5]=d("span",{class:"VPPluginSearch-search-item-icon"},"↪",-1))])],42,ha))),128))]))),128))]),I[6]||(I[6]=d("img",{class:"VPPluginSearch-flex-logo",src:zo,alt:"flex logo"},null,-1))],512)],544),[[mt,o.value]])]))]),_:1}),d("div",{id:"docsearch",onClick:I[3]||(I[3]=E=>R())},[d("button",ga,[d("span",ka,[I[7]||(I[7]=d("svg",{width:"20",height:"20",class:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},[d("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1)),d("span",ba,C(L.value),1)]),d("span",$a,[d("span",{class:"DocSearch-Button-Key",ref_key:"metaKey",ref:s},"Meta",512),I[8]||(I[8]=d("span",{class:"DocSearch-Button-Key"},"K",-1))])])])])}}}),Pa=k({__name:"VPNavBarSocialLinks",setup(n){const{theme:e}=M();return(t,s)=>c(e).socialLinks?(i(),P(Oe,{key:0,class:"VPNavBarSocialLinks",links:c(e).socialLinks},null,8,["links"])):g("",!0)}}),La=V(Pa,[["__scopeId","data-v-08b35e6f"]]),Va=["href","rel","target"],Sa=["innerHTML"],Ta={key:2},wa=k({__name:"VPNavBarTitle",setup(n){const{site:e,theme:t}=M(),{hasSidebar:s}=x(),{currentLang:o}=ae(),a=S(()=>{var u;return typeof t.value.logoLink=="string"?t.value.logoLink:(u=t.value.logoLink)==null?void 0:u.link}),r=S(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.rel}),l=S(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.target});return(u,v)=>(i(),h("div",{class:A(["VPNavBarTitle",{"has-sidebar":c(s)}])},[d("a",{class:"title",href:a.value??c(Ce)(c(o).link),rel:r.value,target:l.value},[p(u.$slots,"nav-bar-title-before",{},void 0,!0),c(t).logo?(i(),P(ue,{key:0,class:"logo",image:c(t).logo},null,8,["image"])):g("",!0),c(t).siteTitle?(i(),h("span",{key:1,innerHTML:c(t).siteTitle},null,8,Sa)):c(t).siteTitle===void 0?(i(),h("span",Ta,C(c(e).title),1)):g("",!0),p(u.$slots,"nav-bar-title-after",{},void 0,!0)],8,Va)],2))}}),Ma=V(wa,[["__scopeId","data-v-5622a072"]]),Na={class:"items"},Ia={class:"title"},Ca=k({__name:"VPNavBarTranslations",setup(n){const{theme:e}=M(),{localeLinks:t,currentLang:s}=ae({correspondingLink:!0});return(o,a)=>c(t).length&&c(s).label?(i(),P(Ee,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:c(e).langMenuLabel||"Change language"},{default:f(()=>[d("div",Na,[d("p",Ia,C(c(s).label),1),(i(!0),h(H,null,z(c(t),r=>(i(),P(ke,{key:r.link,item:r},null,8,["item"]))),128))])]),_:1},8,["label"])):g("",!0)}}),Aa=V(Ca,[["__scopeId","data-v-dac637f3"]]),Ha={class:"wrapper"},Ba={class:"container"},Ea={class:"title"},Oa={class:"content"},Da={class:"content-body"},Fa=k({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(n){const e=n,{y:t}=xe(),{hasSidebar:s}=x(),{frontmatter:o}=M(),a=T({});return Ne(()=>{a.value={"has-sidebar":s.value,home:o.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(r,l)=>(i(),h("div",{class:A(["VPNavBar",a.value])},[d("div",Ha,[d("div",Ba,[d("div",Ea,[y(Ma,null,{"nav-bar-title-before":f(()=>[p(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Oa,[d("div",Da,[p(r.$slots,"nav-bar-content-before",{},void 0,!0),y(ya,{class:"search"}),y(Fo,{class:"menu"}),y(Aa,{class:"translations"}),y(Ks,{class:"appearance"}),y(La,{class:"social-links"}),y(Mo,{class:"extra"}),p(r.$slots,"nav-bar-content-after",{},void 0,!0),y(Co,{class:"hamburger",active:r.isScreenOpen,onClick:l[0]||(l[0]=u=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),l[1]||(l[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),za=V(Fa,[["__scopeId","data-v-bb7529ee"]]),ja={key:0,class:"VPNavScreenAppearance"},Ua={class:"text"},qa=k({__name:"VPNavScreenAppearance",setup(n){const{site:e,theme:t}=M();return(s,o)=>c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",ja,[d("p",Ua,C(c(t).darkModeSwitchLabel||"Appearance"),1),y(He)])):g("",!0)}}),Ga=V(qa,[["__scopeId","data-v-774971f8"]]),Ra=["innerHTML"],Wa=k({__name:"VPNavScreenMenuLink",props:{item:{}},setup(n){const e=_e("close-screen");return(t,s)=>(i(),P(K,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:c(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Ra)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ka=V(Wa,[["__scopeId","data-v-29871565"]]),Ja=["innerHTML"],xa=k({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(n){const e=_e("close-screen");return(t,s)=>(i(),P(K,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:c(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Ja)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),ot=V(xa,[["__scopeId","data-v-581896e9"]]),Xa={class:"VPNavScreenMenuGroupSection"},Ya={key:0,class:"title"},Qa=k({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(n){return(e,t)=>(i(),h("div",Xa,[e.text?(i(),h("p",Ya,C(e.text),1)):g("",!0),(i(!0),h(H,null,z(e.items,s=>(i(),P(ot,{key:s.text,item:s},null,8,["item"]))),128))]))}}),Za=V(Qa,[["__scopeId","data-v-836cddb8"]]),er=["aria-controls","aria-expanded"],tr=["innerHTML"],nr=["id"],sr={key:0,class:"item"},or={key:1,class:"item"},ar={key:2,class:"group"},rr=k({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(n){const e=n,t=T(!1),s=S(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(a,r)=>(i(),h("div",{class:A(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:o},[d("span",{class:"button-text",innerHTML:a.text},null,8,tr),r[0]||(r[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,er),d("div",{id:s.value,class:"items"},[(i(!0),h(H,null,z(a.items,l=>(i(),h(H,{key:JSON.stringify(l)},["link"in l?(i(),h("div",sr,[y(ot,{item:l},null,8,["item"])])):"component"in l?(i(),h("div",or,[(i(),P(W(l.component),Y({ref_for:!0},l.props,{"screen-menu":""}),null,16))])):(i(),h("div",ar,[y(Za,{text:l.text,items:l.items},null,8,["text","items"])]))],64))),128))],8,nr)],2))}}),ir=V(rr,[["__scopeId","data-v-a8d3502a"]]),lr={key:0,class:"VPNavScreenMenu"},cr=k({__name:"VPNavScreenMenu",setup(n){const{theme:e}=M();return(t,s)=>c(e).nav?(i(),h("nav",lr,[(i(!0),h(H,null,z(c(e).nav,o=>(i(),h(H,{key:JSON.stringify(o)},["link"in o?(i(),P(Ka,{key:0,item:o},null,8,["item"])):"component"in o?(i(),P(W(o.component),Y({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(i(),P(ir,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):g("",!0)}}),ur=k({__name:"VPNavScreenSocialLinks",setup(n){const{theme:e}=M();return(t,s)=>c(e).socialLinks?(i(),P(Oe,{key:0,class:"VPNavScreenSocialLinks",links:c(e).socialLinks},null,8,["links"])):g("",!0)}}),dr={class:"list"},pr=k({__name:"VPNavScreenTranslations",setup(n){const{localeLinks:e,currentLang:t}=ae({correspondingLink:!0}),s=T(!1);function o(){s.value=!s.value}return(a,r)=>c(e).length&&c(t).label?(i(),h("div",{key:0,class:A(["VPNavScreenTranslations",{open:s.value}])},[d("button",{class:"title",onClick:o},[r[0]||(r[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),ee(" "+C(c(t).label)+" ",1),r[1]||(r[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",dr,[(i(!0),h(H,null,z(c(e),l=>(i(),h("li",{key:l.link,class:"item"},[y(K,{class:"link",href:l.link},{default:f(()=>[ee(C(l.text),1)]),_:2},1032,["href"])]))),128))])],2)):g("",!0)}}),hr=V(pr,[["__scopeId","data-v-0d43316b"]]),fr={class:"container"},vr=k({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(n){const e=T(null),t=Ye(ge?document.body:null);return(s,o)=>(i(),P(we,{name:"fade",onEnter:o[0]||(o[0]=a=>t.value=!0),onAfterLeave:o[1]||(o[1]=a=>t.value=!1)},{default:f(()=>[s.open?(i(),h("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",fr,[p(s.$slots,"nav-screen-content-before",{},void 0,!0),y(cr,{class:"menu"}),y(hr,{class:"translations"}),y(Ga,{class:"appearance"}),y(ur,{class:"social-links"}),p(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):g("",!0)]),_:3}))}}),mr=V(vr,[["__scopeId","data-v-34fa79a7"]]),_r={key:0,class:"VPNav"},gr=k({__name:"VPNav",setup(n){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=Os(),{frontmatter:o}=M(),a=S(()=>o.value.navbar!==!1);return Qe("close-screen",t),fe(()=>{ge&&document.documentElement.classList.toggle("hide-nav",!a.value)}),(r,l)=>a.value?(i(),h("header",_r,[y(za,{"is-screen-open":c(e),onToggleScreen:c(s)},{"nav-bar-title-before":f(()=>[p(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(r.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[p(r.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[p(r.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),y(mr,{open:c(e)},{"nav-screen-content-before":f(()=>[p(r.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[p(r.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):g("",!0)}}),kr=V(gr,[["__scopeId","data-v-a46e73f0"]]),br=["role","tabindex"],$r={key:1,class:"items"},yr=k({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(n){const e=n,{collapsed:t,collapsible:s,isLink:o,isActiveLink:a,hasActiveLink:r,hasChildren:l,toggle:u}=zt(S(()=>e.item)),v=S(()=>l.value?"section":"div"),_=S(()=>o.value?"a":"div"),m=S(()=>l.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),L=S(()=>o.value?void 0:"button"),b=S(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":o.value},{"is-active":a.value},{"has-active":r.value}]);function $(w){"key"in w&&w.key!=="Enter"||!e.item.link&&u()}function N(){e.item.link&&u()}return(w,O)=>{const F=Z("VPSidebarItem",!0);return i(),P(W(v.value),{class:A(["VPSidebarItem",b.value])},{default:f(()=>[w.item.text?(i(),h("div",Y({key:0,class:"item",role:L.value},kt(w.item.items?{click:$,keydown:$}:{},!0),{tabindex:w.item.items&&0}),[O[1]||(O[1]=d("div",{class:"indicator"},null,-1)),w.item.link?(i(),P(K,{key:0,tag:_.value,class:"link",href:w.item.link,rel:w.item.rel,target:w.item.target},{default:f(()=>[(i(),P(W(m.value),{class:"text",innerHTML:w.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(i(),P(W(m.value),{key:1,class:"text",innerHTML:w.item.text},null,8,["innerHTML"])),w.item.collapsed!=null&&w.item.items&&w.item.items.length?(i(),h("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:N,onKeydown:bt(N,["enter"]),tabindex:"0"},O[0]||(O[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):g("",!0)],16,br)):g("",!0),w.item.items&&w.item.items.length?(i(),h("div",$r,[w.depth<5?(i(!0),h(H,{key:0},z(w.item.items,R=>(i(),P(F,{key:R.text,item:R,depth:w.depth+1},null,8,["item","depth"]))),128)):g("",!0)])):g("",!0)]),_:1},8,["class"])}}}),Pr=V(yr,[["__scopeId","data-v-2e0476bc"]]),Lr=k({__name:"VPSidebarGroup",props:{items:{}},setup(n){const e=T(!0);let t=null;return Q(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),$t(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,o)=>(i(!0),h(H,null,z(s.items,a=>(i(),h("div",{key:a.text,class:A(["group",{"no-transition":e.value}])},[y(Pr,{item:a,depth:0},null,8,["item"])],2))),128))}}),Vr=V(Lr,[["__scopeId","data-v-ec086cd5"]]),Sr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Tr=k({__name:"VPSidebar",props:{open:{type:Boolean}},setup(n){const{sidebarGroups:e,hasSidebar:t}=x(),s=n,o=T(null),a=Ye(ge?document.body:null);J([s,o],()=>{var l;s.open?(a.value=!0,(l=o.value)==null||l.focus()):a.value=!1},{immediate:!0,flush:"post"});const r=T(0);return J(e,()=>{r.value+=1},{deep:!0}),(l,u)=>c(t)?(i(),h("aside",{key:0,class:A(["VPSidebar",{open:l.open}]),ref_key:"navEl",ref:o,onClick:u[0]||(u[0]=Xe(()=>{},["stop"]))},[u[2]||(u[2]=d("div",{class:"curtain"},null,-1)),d("nav",Sr,[u[1]||(u[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),p(l.$slots,"sidebar-nav-before",{},void 0,!0),(i(),P(Vr,{items:c(e),key:r.value},null,8,["items"])),p(l.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):g("",!0)}}),wr=V(Tr,[["__scopeId","data-v-12a40e3d"]]),Mr=k({__name:"VPSkipLink",setup(n){const{theme:e}=M(),t=me(),s=T();J(()=>t.path,()=>s.value.focus());function o({target:a}){const r=document.getElementById(decodeURIComponent(a.hash).slice(1));if(r){const l=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",l)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",l),r.focus(),window.scrollTo(0,0)}}return(a,r)=>(i(),h(H,null,[d("span",{ref_key:"backToTop",ref:s,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o},C(c(e).skipToContentLabel||"Skip to content"),1)],64))}}),Nr=V(Mr,[["__scopeId","data-v-17ad389b"]]),Ir=k({__name:"Layout",setup(n){const{isOpen:e,open:t,close:s}=x(),o=me();J(()=>o.path,s),Ft(e,s);const{frontmatter:a}=M(),r=yt(),l=S(()=>!!r["home-hero-image"]);return Qe("hero-image-slot-exists",l),(u,v)=>{const _=Z("Content");return c(a).layout!==!1?(i(),h("div",{key:0,class:A(["Layout",c(a).pageClass])},[p(u.$slots,"layout-top",{},void 0,!0),y(Nr),y(St,{class:"backdrop",show:c(e),onClick:c(s)},null,8,["show","onClick"]),y(kr,null,{"nav-bar-title-before":f(()=>[p(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[p(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[p(u.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[p(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[p(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),y(Es,{open:c(e),onOpenMenu:c(t)},null,8,["open","onOpenMenu"]),y(wr,{open:c(e)},{"sidebar-nav-before":f(()=>[p(u.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[p(u.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),y(bs,null,{"page-top":f(()=>[p(u.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[p(u.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[p(u.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[p(u.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[p(u.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(u.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(u.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(u.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(u.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[p(u.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[p(u.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[p(u.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[p(u.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[p(u.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[p(u.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[p(u.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[p(u.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[p(u.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[p(u.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[p(u.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(u.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(u.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(u.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),y(Vs),p(u.$slots,"layout-bottom",{},void 0,!0)],2)):(i(),P(_,{key:1}))}}}),Cr=V(Ir,[["__scopeId","data-v-c4daae71"]]),Hr={Layout:Cr,enhanceApp:({app:n})=>{n.component("Badge",Pt)}};export{Hr as t};
+import{d as k,c as h,r as p,n as A,o as i,a as ee,t as C,b as P,w as f,T as we,e as g,_ as V,u as Re,i as it,f as lt,g as he,h as S,j as d,k as c,l as te,m as Pe,p as T,q as J,s as fe,v as Q,x as Me,y as Ne,z as ct,A as ut,F as H,B as z,C as Z,D as We,E as ve,G as y,H as W,I as Ke,J as me,K as Y,L as _e,M as dt,N as Je,O as pt,P as Ie,Q as xe,R as ge,S as ht,U as ft,V as vt,W as Fe,X as mt,Y as Xe,Z as _t,$ as gt,a0 as Ye,a1 as Qe,a2 as kt,a3 as bt,a4 as $t,a5 as yt}from"./framework.xxfEszSJ.js";const Pt=k({__name:"VPBadge",props:{text:{},type:{default:"tip"}},setup(n){return(e,t)=>(i(),h("span",{class:A(["VPBadge",e.type])},[p(e.$slots,"default",{},()=>[ee(C(e.text),1)])],2))}}),Lt={key:0,class:"VPBackdrop"},Vt=k({__name:"VPBackdrop",props:{show:{type:Boolean}},setup(n){return(e,t)=>(i(),P(we,{name:"fade"},{default:f(()=>[e.show?(i(),h("div",Lt)):g("",!0)]),_:1}))}}),St=V(Vt,[["__scopeId","data-v-b2600058"]]),M=Re;function Tt(n,e){let t,s=!1;return()=>{t&&clearTimeout(t),s?t=setTimeout(n,e):(n(),(s=!0)&&setTimeout(()=>s=!1,e))}}function Le(n){return n.startsWith("/")?n:`/${n}`}function Ce(n){const{pathname:e,search:t,hash:s,protocol:o}=new URL(n,"http://a.com");if(it(n)||n.startsWith("#")||!o.startsWith("http")||!lt(e))return n;const{site:a}=M(),r=e.endsWith("/")||e.endsWith(".html")?n:n.replace(/(?:(^\.+)\/)?.*$/,`$1${e.replace(/(\.md)?$/,a.value.cleanUrls?"":".html")}${t}${s}`);return he(r)}function ae({correspondingLink:n=!1}={}){const{site:e,localeIndex:t,page:s,theme:o,hash:a}=M(),r=S(()=>{var u,v;return{label:(u=e.value.locales[t.value])==null?void 0:u.label,link:((v=e.value.locales[t.value])==null?void 0:v.link)||(t.value==="root"?"/":`/${t.value}/`)}});return{localeLinks:S(()=>Object.entries(e.value.locales).flatMap(([u,v])=>r.value.label===v.label?[]:{text:v.label,link:wt(v.link||(u==="root"?"/":`/${u}/`),o.value.i18nRouting!==!1&&n,s.value.relativePath.slice(r.value.link.length-1),!e.value.cleanUrls)+a.value})),currentLang:r}}function wt(n,e,t,s){return e?n.replace(/\/$/,"")+Le(t.replace(/(^|\/)index\.md$/,"$1").replace(/\.md$/,s?".html":"")):n}const Mt={class:"NotFound"},Nt={class:"code"},It={class:"title"},Ct={class:"quote"},At={class:"action"},Ht=["href","aria-label"],Bt=k({__name:"NotFound",setup(n){const{theme:e}=M(),{currentLang:t}=ae();return(s,o)=>{var a,r,l,u,v;return i(),h("div",Mt,[d("p",Nt,C(((a=c(e).notFound)==null?void 0:a.code)??"404"),1),d("h1",It,C(((r=c(e).notFound)==null?void 0:r.title)??"PAGE NOT FOUND"),1),o[0]||(o[0]=d("div",{class:"divider"},null,-1)),d("blockquote",Ct,C(((l=c(e).notFound)==null?void 0:l.quote)??"But if you don't change your direction, and if you keep looking, you may end up where you are heading."),1),d("div",At,[d("a",{class:"link",href:c(he)(c(t).link),"aria-label":((u=c(e).notFound)==null?void 0:u.linkLabel)??"go to home"},C(((v=c(e).notFound)==null?void 0:v.linkText)??"Take me home"),9,Ht)])])}}}),Et=V(Bt,[["__scopeId","data-v-93fd8736"]]);function Ze(n,e){if(Array.isArray(n))return le(n);if(n==null)return[];e=Le(e);const t=Object.keys(n).sort((o,a)=>a.split("/").length-o.split("/").length).find(o=>e.startsWith(Le(o))),s=t?n[t]:[];return Array.isArray(s)?le(s):le(s.items,s.base)}function Ot(n){const e=[];let t=0;for(const s in n){const o=n[s];if(o.items){t=e.push(o);continue}e[t]||e.push({items:[]}),e[t].items.push(o)}return e}function Dt(n){const e=[];function t(s){for(const o of s)o.text&&o.link&&e.push({text:o.text,link:o.link,docFooterText:o.docFooterText}),o.items&&t(o.items)}return t(n),e}function Ve(n,e){return Array.isArray(e)?e.some(t=>Ve(n,t)):te(n,e.link)?!0:e.items?Ve(n,e.items):!1}function le(n,e){return[...n].map(t=>{const s={...t},o=s.base||e;return o&&s.link&&(s.link=o+s.link),s.items&&(s.items=le(s.items,o)),s})}function x(){const{frontmatter:n,page:e,theme:t}=M(),s=Pe("(min-width: 960px)"),o=T(!1),a=S(()=>{const N=t.value.sidebar,w=e.value.relativePath;return N?Ze(N,w):[]}),r=T(a.value);J(a,(N,w)=>{JSON.stringify(N)!==JSON.stringify(w)&&(r.value=a.value)});const l=S(()=>n.value.sidebar!==!1&&r.value.length>0&&n.value.layout!=="home"),u=S(()=>v?n.value.aside==null?t.value.aside==="left":n.value.aside==="left":!1),v=S(()=>n.value.layout==="home"?!1:n.value.aside!=null?!!n.value.aside:t.value.aside!==!1),_=S(()=>l.value&&s.value),m=S(()=>l.value?Ot(r.value):[]);function L(){o.value=!0}function b(){o.value=!1}function $(){o.value?b():L()}return{isOpen:o,sidebar:r,sidebarGroups:m,hasSidebar:l,hasAside:v,leftAside:u,isSidebarEnabled:_,open:L,close:b,toggle:$}}function Ft(n,e){let t;fe(()=>{t=n.value?document.activeElement:void 0}),Q(()=>{window.addEventListener("keyup",s)}),Me(()=>{window.removeEventListener("keyup",s)});function s(o){o.key==="Escape"&&n.value&&(e(),t==null||t.focus())}}function zt(n){const{page:e,hash:t}=M(),s=T(!1),o=S(()=>n.value.collapsed!=null),a=S(()=>!!n.value.link),r=T(!1),l=()=>{r.value=te(e.value.relativePath,n.value.link)};J([e,n,t],l),Q(l);const u=S(()=>r.value?!0:n.value.items?Ve(e.value.relativePath,n.value.items):!1),v=S(()=>!!(n.value.items&&n.value.items.length));fe(()=>{s.value=!!(o.value&&n.value.collapsed)}),Ne(()=>{(r.value||u.value)&&(s.value=!1)});function _(){o.value&&(s.value=!s.value)}return{collapsed:s,collapsible:o,isLink:a,isActiveLink:r,hasActiveLink:u,hasChildren:v,toggle:_}}function jt(){const{hasSidebar:n}=x(),e=Pe("(min-width: 960px)"),t=Pe("(min-width: 1280px)");return{isAsideEnabled:S(()=>!t.value&&!e.value?!1:n.value?t.value:e.value)}}const Ut=/\b(?:VPBadge|header-anchor|footnote-ref|ignore-header)\b/,Se=[];function et(n){return typeof n.outline=="object"&&!Array.isArray(n.outline)&&n.outline.label||n.outlineTitle||"On this page"}function Ae(n){const e=[...document.querySelectorAll(".VPDoc :where(h1,h2,h3,h4,h5,h6)")].filter(t=>t.id&&t.hasChildNodes()).map(t=>{const s=Number(t.tagName[1]);return{element:t,title:qt(t),link:"#"+t.id,level:s}});return Gt(e,n)}function qt(n){let e="";for(const t of n.childNodes)if(t.nodeType===1){if(Ut.test(t.className))continue;e+=t.textContent}else t.nodeType===3&&(e+=t.textContent);return e.trim()}function Gt(n,e){if(e===!1)return[];const t=(typeof e=="object"&&!Array.isArray(e)?e.level:e)||2,[s,o]=typeof t=="number"?[t,t]:t==="deep"?[2,6]:t;return Kt(n,s,o)}function Rt(n,e){const{isAsideEnabled:t}=jt(),s=Tt(a,100);let o=null;Q(()=>{requestAnimationFrame(a),window.addEventListener("scroll",s)}),ct(()=>{r(location.hash)}),Me(()=>{window.removeEventListener("scroll",s)});function a(){if(!t.value)return;const l=window.scrollY,u=window.innerHeight,v=document.body.offsetHeight,_=Math.abs(l+u-v)<1,m=Se.map(({element:b,link:$})=>({link:$,top:Wt(b)})).filter(({top:b})=>!Number.isNaN(b)).sort((b,$)=>b.top-$.top);if(!m.length){r(null);return}if(l<1){r(null);return}if(_){r(m[m.length-1].link);return}let L=null;for(const{link:b,top:$}of m){if($>l+ut()+4)break;L=b}r(L)}function r(l){o&&o.classList.remove("active"),l==null?o=null:o=n.value.querySelector(`a[href="${decodeURIComponent(l)}"]`);const u=o;u?(u.classList.add("active"),e.value.style.top=u.offsetTop+39+"px",e.value.style.opacity="1"):(e.value.style.top="33px",e.value.style.opacity="0")}}function Wt(n){let e=0;for(;n!==document.body;){if(n===null)return NaN;e+=n.offsetTop,n=n.offsetParent}return e}function Kt(n,e,t){Se.length=0;const s=[],o=[];return n.forEach(a=>{const r={...a,children:[]};let l=o[o.length-1];for(;l&&l.level>=r.level;)o.pop(),l=o[o.length-1];if(r.element.classList.contains("ignore-header")||l&&"shouldIgnore"in l){o.push({level:r.level,shouldIgnore:!0});return}r.level>t||r.level{const o=Z("VPDocOutlineItem",!0);return i(),h("ul",{class:A(["VPDocOutlineItem",t.root?"root":"nested"])},[(i(!0),h(H,null,z(t.headers,({children:a,link:r,title:l})=>(i(),h("li",null,[d("a",{class:"outline-link",href:r,onClick:e,title:l},C(l),9,Jt),a!=null&&a.length?(i(),P(o,{key:0,headers:a},null,8,["headers"])):g("",!0)]))),256))],2)}}}),tt=V(xt,[["__scopeId","data-v-da421f78"]]),Xt={class:"content"},Yt={"aria-level":"2",class:"outline-title",id:"doc-outline-aria-label",role:"heading"},Qt=k({__name:"VPDocAsideOutline",setup(n){const{frontmatter:e,theme:t}=M(),s=We([]);ve(()=>{s.value=Ae(e.value.outline??t.value.outline)});const o=T(),a=T();return Rt(o,a),(r,l)=>(i(),h("nav",{"aria-labelledby":"doc-outline-aria-label",class:A(["VPDocAsideOutline",{"has-outline":s.value.length>0}]),ref_key:"container",ref:o},[d("div",Xt,[d("div",{class:"outline-marker",ref_key:"marker",ref:a},null,512),d("div",Yt,C(c(et)(c(t))),1),y(tt,{headers:s.value,root:!0},null,8,["headers"])])],2))}}),Zt=V(Qt,[["__scopeId","data-v-dfbd9fb8"]]),en={class:"VPDocAsideCarbonAds"},tn=k({__name:"VPDocAsideCarbonAds",props:{carbonAds:{}},setup(n){const e=()=>null;return(t,s)=>(i(),h("div",en,[y(c(e),{"carbon-ads":t.carbonAds},null,8,["carbon-ads"])]))}}),nn={class:"VPDocAside"},sn=k({__name:"VPDocAside",setup(n){const{theme:e}=M();return(t,s)=>(i(),h("div",nn,[p(t.$slots,"aside-top",{},void 0,!0),p(t.$slots,"aside-outline-before",{},void 0,!0),y(Zt),p(t.$slots,"aside-outline-after",{},void 0,!0),s[0]||(s[0]=d("div",{class:"spacer"},null,-1)),p(t.$slots,"aside-ads-before",{},void 0,!0),c(e).carbonAds?(i(),P(tn,{key:0,"carbon-ads":c(e).carbonAds},null,8,["carbon-ads"])):g("",!0),p(t.$slots,"aside-ads-after",{},void 0,!0),p(t.$slots,"aside-bottom",{},void 0,!0)]))}}),on=V(sn,[["__scopeId","data-v-79cae1a0"]]);function an(){const{theme:n,page:e}=M();return S(()=>{const{text:t="Edit this page",pattern:s=""}=n.value.editLink||{};let o;return typeof s=="function"?o=s(e.value):o=s.replace(/:path/g,e.value.filePath),{url:o,text:t}})}function rn(){const{page:n,theme:e,frontmatter:t}=M();return S(()=>{var v,_,m,L,b,$,N,w;const s=Ze(e.value.sidebar,n.value.relativePath),o=Dt(s),a=ln(o,O=>O.link.replace(/[?#].*$/,"")),r=a.findIndex(O=>te(n.value.relativePath,O.link)),l=((v=e.value.docFooter)==null?void 0:v.prev)===!1&&!t.value.prev||t.value.prev===!1,u=((_=e.value.docFooter)==null?void 0:_.next)===!1&&!t.value.next||t.value.next===!1;return{prev:l?void 0:{text:(typeof t.value.prev=="string"?t.value.prev:typeof t.value.prev=="object"?t.value.prev.text:void 0)??((m=a[r-1])==null?void 0:m.docFooterText)??((L=a[r-1])==null?void 0:L.text),link:(typeof t.value.prev=="object"?t.value.prev.link:void 0)??((b=a[r-1])==null?void 0:b.link)},next:u?void 0:{text:(typeof t.value.next=="string"?t.value.next:typeof t.value.next=="object"?t.value.next.text:void 0)??(($=a[r+1])==null?void 0:$.docFooterText)??((N=a[r+1])==null?void 0:N.text),link:(typeof t.value.next=="object"?t.value.next.link:void 0)??((w=a[r+1])==null?void 0:w.link)}}})}function ln(n,e){const t=new Set;return n.filter(s=>{const o=e(s);return t.has(o)?!1:t.add(o)})}const K=k({__name:"VPLink",props:{tag:{},href:{},noIcon:{type:Boolean},target:{},rel:{}},setup(n){const e=n,t=S(()=>e.tag??(e.href?"a":"span")),s=S(()=>e.href&&Ke.test(e.href)||e.target==="_blank");return(o,a)=>(i(),P(W(t.value),{class:A(["VPLink",{link:o.href,"vp-external-link-icon":s.value,"no-icon":o.noIcon}]),href:o.href?c(Ce)(o.href):void 0,target:o.target??(s.value?"_blank":void 0),rel:o.rel??(s.value?"noreferrer":void 0)},{default:f(()=>[p(o.$slots,"default")]),_:3},8,["class","href","target","rel"]))}}),cn={class:"VPLastUpdated"},un=["datetime"],dn=k({__name:"VPDocFooterLastUpdated",setup(n){const{theme:e,page:t,lang:s}=M(),o=S(()=>new Date(t.value.lastUpdated)),a=S(()=>o.value.toISOString()),r=T("");return Q(()=>{fe(()=>{var l,u,v;r.value=new Intl.DateTimeFormat((u=(l=e.value.lastUpdated)==null?void 0:l.formatOptions)!=null&&u.forceLocale?s.value:void 0,((v=e.value.lastUpdated)==null?void 0:v.formatOptions)??{dateStyle:"short",timeStyle:"short"}).format(o.value)})}),(l,u)=>{var v;return i(),h("p",cn,[ee(C(((v=c(e).lastUpdated)==null?void 0:v.text)||c(e).lastUpdatedText||"Last updated")+": ",1),d("time",{datetime:a.value},C(r.value),9,un)])}}}),pn=V(dn,[["__scopeId","data-v-e95db471"]]),hn={key:0,class:"VPDocFooter"},fn={key:0,class:"edit-info"},vn={key:0,class:"edit-link"},mn={key:1,class:"last-updated"},_n={key:1,class:"prev-next","aria-labelledby":"doc-footer-aria-label"},gn={class:"pager"},kn=["innerHTML"],bn=["innerHTML"],$n={class:"pager"},yn=["innerHTML"],Pn=["innerHTML"],Ln=k({__name:"VPDocFooter",setup(n){const{theme:e,page:t,frontmatter:s}=M(),o=an(),a=rn(),r=S(()=>e.value.editLink&&s.value.editLink!==!1),l=S(()=>t.value.lastUpdated),u=S(()=>r.value||l.value||a.value.prev||a.value.next);return(v,_)=>{var m,L,b,$;return u.value?(i(),h("footer",hn,[p(v.$slots,"doc-footer-before",{},void 0,!0),r.value||l.value?(i(),h("div",fn,[r.value?(i(),h("div",vn,[y(K,{class:"edit-link-button",href:c(o).url,"no-icon":!0},{default:f(()=>[_[0]||(_[0]=d("span",{class:"vpi-square-pen edit-link-icon"},null,-1)),ee(" "+C(c(o).text),1)]),_:1},8,["href"])])):g("",!0),l.value?(i(),h("div",mn,[y(pn)])):g("",!0)])):g("",!0),(m=c(a).prev)!=null&&m.link||(L=c(a).next)!=null&&L.link?(i(),h("nav",_n,[_[1]||(_[1]=d("span",{class:"visually-hidden",id:"doc-footer-aria-label"},"Pager",-1)),d("div",gn,[(b=c(a).prev)!=null&&b.link?(i(),P(K,{key:0,class:"pager-link prev",href:c(a).prev.link},{default:f(()=>{var N;return[d("span",{class:"desc",innerHTML:((N=c(e).docFooter)==null?void 0:N.prev)||"Previous page"},null,8,kn),d("span",{class:"title",innerHTML:c(a).prev.text},null,8,bn)]}),_:1},8,["href"])):g("",!0)]),d("div",$n,[($=c(a).next)!=null&&$.link?(i(),P(K,{key:0,class:"pager-link next",href:c(a).next.link},{default:f(()=>{var N;return[d("span",{class:"desc",innerHTML:((N=c(e).docFooter)==null?void 0:N.next)||"Next page"},null,8,yn),d("span",{class:"title",innerHTML:c(a).next.text},null,8,Pn)]}),_:1},8,["href"])):g("",!0)])])):g("",!0)])):g("",!0)}}}),Vn=V(Ln,[["__scopeId","data-v-07d71ff1"]]),Sn={class:"container"},Tn={class:"aside-container"},wn={class:"aside-content"},Mn={class:"content"},Nn={class:"content-container"},In={class:"main"},Cn=k({__name:"VPDoc",setup(n){const{theme:e}=M(),t=me(),{hasSidebar:s,hasAside:o,leftAside:a}=x(),r=S(()=>t.path.replace(/[./]+/g,"_").replace(/_html$/,""));return(l,u)=>{const v=Z("Content");return i(),h("div",{class:A(["VPDoc",{"has-sidebar":c(s),"has-aside":c(o)}])},[p(l.$slots,"doc-top",{},void 0,!0),d("div",Sn,[c(o)?(i(),h("div",{key:0,class:A(["aside",{"left-aside":c(a)}])},[u[0]||(u[0]=d("div",{class:"aside-curtain"},null,-1)),d("div",Tn,[d("div",wn,[y(on,null,{"aside-top":f(()=>[p(l.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[p(l.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[p(l.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(l.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(l.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(l.$slots,"aside-ads-after",{},void 0,!0)]),_:3})])])],2)):g("",!0),d("div",Mn,[d("div",Nn,[p(l.$slots,"doc-before",{},void 0,!0),d("main",In,[y(v,{class:A(["vp-doc",[r.value,c(e).externalLinkIcon&&"external-link-icon-enabled"]])},null,8,["class"])]),y(Vn,null,{"doc-footer-before":f(()=>[p(l.$slots,"doc-footer-before",{},void 0,!0)]),_:3}),p(l.$slots,"doc-after",{},void 0,!0)])])]),p(l.$slots,"doc-bottom",{},void 0,!0)],2)}}}),An=V(Cn,[["__scopeId","data-v-ef3a4dda"]]),Hn=k({__name:"VPButton",props:{tag:{},size:{default:"medium"},theme:{default:"brand"},text:{},href:{},target:{},rel:{}},setup(n){const e=n,t=S(()=>e.href&&Ke.test(e.href)),s=S(()=>e.tag||(e.href?"a":"button"));return(o,a)=>(i(),P(W(s.value),{class:A(["VPButton",[o.size,o.theme]]),href:o.href?c(Ce)(o.href):void 0,target:e.target??(t.value?"_blank":void 0),rel:e.rel??(t.value?"noreferrer":void 0)},{default:f(()=>[ee(C(o.text),1)]),_:1},8,["class","href","target","rel"]))}}),Bn=V(Hn,[["__scopeId","data-v-b20c43c2"]]),En=["src","alt"],On=k({inheritAttrs:!1,__name:"VPImage",props:{image:{},alt:{}},setup(n){return(e,t)=>{const s=Z("VPImage",!0);return e.image?(i(),h(H,{key:0},[typeof e.image=="string"||"src"in e.image?(i(),h("img",Y({key:0,class:"VPImage"},typeof e.image=="string"?e.$attrs:{...e.image,...e.$attrs},{src:c(he)(typeof e.image=="string"?e.image:e.image.src),alt:e.alt??(typeof e.image=="string"?"":e.image.alt||"")}),null,16,En)):(i(),h(H,{key:1},[y(s,Y({class:"dark",image:e.image.dark,alt:e.image.alt},e.$attrs),null,16,["image","alt"]),y(s,Y({class:"light",image:e.image.light,alt:e.image.alt},e.$attrs),null,16,["image","alt"])],64))],64)):g("",!0)}}}),ue=V(On,[["__scopeId","data-v-4d414b82"]]),Dn={class:"container"},Fn={class:"main"},zn={class:"heading"},jn=["innerHTML"],Un=["innerHTML"],qn=["innerHTML"],Gn={key:0,class:"actions"},Rn={key:0,class:"image"},Wn={class:"image-container"},Kn=k({__name:"VPHero",props:{name:{},text:{},tagline:{},image:{},actions:{}},setup(n){const e=_e("hero-image-slot-exists");return(t,s)=>(i(),h("div",{class:A(["VPHero",{"has-image":t.image||c(e)}])},[d("div",Dn,[d("div",Fn,[p(t.$slots,"home-hero-info-before",{},void 0,!0),p(t.$slots,"home-hero-info",{},()=>[d("h1",zn,[t.name?(i(),h("span",{key:0,innerHTML:t.name,class:"name clip"},null,8,jn)):g("",!0),t.text?(i(),h("span",{key:1,innerHTML:t.text,class:"text"},null,8,Un)):g("",!0)]),t.tagline?(i(),h("p",{key:0,innerHTML:t.tagline,class:"tagline"},null,8,qn)):g("",!0)],!0),p(t.$slots,"home-hero-info-after",{},void 0,!0),t.actions?(i(),h("div",Gn,[(i(!0),h(H,null,z(t.actions,o=>(i(),h("div",{key:o.link,class:"action"},[y(Bn,{tag:"a",size:"medium",theme:o.theme,text:o.text,href:o.link,target:o.target,rel:o.rel},null,8,["theme","text","href","target","rel"])]))),128))])):g("",!0),p(t.$slots,"home-hero-actions-after",{},void 0,!0)]),t.image||c(e)?(i(),h("div",Rn,[d("div",Wn,[s[0]||(s[0]=d("div",{class:"image-bg"},null,-1)),p(t.$slots,"home-hero-image",{},()=>[t.image?(i(),P(ue,{key:0,class:"image-src",image:t.image},null,8,["image"])):g("",!0)],!0)])])):g("",!0)])],2))}}),Jn=V(Kn,[["__scopeId","data-v-d266baba"]]),xn=k({__name:"VPHomeHero",setup(n){const{frontmatter:e}=M();return(t,s)=>c(e).hero?(i(),P(Jn,{key:0,class:"VPHomeHero",name:c(e).hero.name,text:c(e).hero.text,tagline:c(e).hero.tagline,image:c(e).hero.image,actions:c(e).hero.actions},{"home-hero-info-before":f(()=>[p(t.$slots,"home-hero-info-before")]),"home-hero-info":f(()=>[p(t.$slots,"home-hero-info")]),"home-hero-info-after":f(()=>[p(t.$slots,"home-hero-info-after")]),"home-hero-actions-after":f(()=>[p(t.$slots,"home-hero-actions-after")]),"home-hero-image":f(()=>[p(t.$slots,"home-hero-image")]),_:3},8,["name","text","tagline","image","actions"])):g("",!0)}}),Xn={class:"box"},Yn={key:0,class:"icon"},Qn=["innerHTML"],Zn=["innerHTML"],es=["innerHTML"],ts={key:4,class:"link-text"},ns={class:"link-text-value"},ss=k({__name:"VPFeature",props:{icon:{},title:{},details:{},link:{},linkText:{},rel:{},target:{}},setup(n){return(e,t)=>(i(),P(K,{class:"VPFeature",href:e.link,rel:e.rel,target:e.target,"no-icon":!0,tag:e.link?"a":"div"},{default:f(()=>[d("article",Xn,[typeof e.icon=="object"&&e.icon.wrap?(i(),h("div",Yn,[y(ue,{image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])])):typeof e.icon=="object"?(i(),P(ue,{key:1,image:e.icon,alt:e.icon.alt,height:e.icon.height||48,width:e.icon.width||48},null,8,["image","alt","height","width"])):e.icon?(i(),h("div",{key:2,class:"icon",innerHTML:e.icon},null,8,Qn)):g("",!0),d("h2",{class:"title",innerHTML:e.title},null,8,Zn),e.details?(i(),h("p",{key:3,class:"details",innerHTML:e.details},null,8,es)):g("",!0),e.linkText?(i(),h("div",ts,[d("p",ns,[ee(C(e.linkText)+" ",1),t[0]||(t[0]=d("span",{class:"vpi-arrow-right link-text-icon"},null,-1))])])):g("",!0)])]),_:1},8,["href","rel","target","tag"]))}}),os=V(ss,[["__scopeId","data-v-95001937"]]),as={key:0,class:"VPFeatures"},rs={class:"container"},is={class:"items"},ls=k({__name:"VPFeatures",props:{features:{}},setup(n){const e=n,t=S(()=>{const s=e.features.length;if(s){if(s===2)return"grid-2";if(s===3)return"grid-3";if(s%3===0)return"grid-6";if(s>3)return"grid-4"}else return});return(s,o)=>s.features?(i(),h("div",as,[d("div",rs,[d("div",is,[(i(!0),h(H,null,z(s.features,a=>(i(),h("div",{key:a.title,class:A(["item",[t.value]])},[y(os,{icon:a.icon,title:a.title,details:a.details,link:a.link,"link-text":a.linkText,rel:a.rel,target:a.target},null,8,["icon","title","details","link","link-text","rel","target"])],2))),128))])])])):g("",!0)}}),cs=V(ls,[["__scopeId","data-v-1da4ff3d"]]),us=k({__name:"VPHomeFeatures",setup(n){const{frontmatter:e}=M();return(t,s)=>c(e).features?(i(),P(cs,{key:0,class:"VPHomeFeatures",features:c(e).features},null,8,["features"])):g("",!0)}}),ds=k({__name:"VPHomeContent",setup(n){const{width:e}=dt({initialWidth:0,includeScrollbar:!1});return(t,s)=>(i(),h("div",{class:"vp-doc container",style:Je(c(e)?{"--vp-offset":`calc(50% - ${c(e)/2}px)`}:{})},[p(t.$slots,"default",{},void 0,!0)],4))}}),ps=V(ds,[["__scopeId","data-v-2498cc33"]]),hs=k({__name:"VPHome",setup(n){const{frontmatter:e,theme:t}=M();return(s,o)=>{const a=Z("Content");return i(),h("div",{class:A(["VPHome",{"external-link-icon-enabled":c(t).externalLinkIcon}])},[p(s.$slots,"home-hero-before",{},void 0,!0),y(xn,null,{"home-hero-info-before":f(()=>[p(s.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(s.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(s.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(s.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(s.$slots,"home-hero-image",{},void 0,!0)]),_:3}),p(s.$slots,"home-hero-after",{},void 0,!0),p(s.$slots,"home-features-before",{},void 0,!0),y(us),p(s.$slots,"home-features-after",{},void 0,!0),c(e).markdownStyles!==!1?(i(),P(ps,{key:0},{default:f(()=>[y(a)]),_:1})):(i(),P(a,{key:1}))],2)}}}),fs=V(hs,[["__scopeId","data-v-8b59c434"]]),vs={},ms={class:"VPPage"};function _s(n,e){const t=Z("Content");return i(),h("div",ms,[p(n.$slots,"page-top"),y(t),p(n.$slots,"page-bottom")])}const gs=V(vs,[["render",_s]]),ks=k({__name:"VPContent",setup(n){const{page:e,frontmatter:t}=M(),{hasSidebar:s}=x();return(o,a)=>(i(),h("div",{class:A(["VPContent",{"has-sidebar":c(s),"is-home":c(t).layout==="home"}]),id:"VPContent"},[c(e).isNotFound?p(o.$slots,"not-found",{key:0},()=>[y(Et)],!0):c(t).layout==="page"?(i(),P(gs,{key:1},{"page-top":f(()=>[p(o.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[p(o.$slots,"page-bottom",{},void 0,!0)]),_:3})):c(t).layout==="home"?(i(),P(fs,{key:2},{"home-hero-before":f(()=>[p(o.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[p(o.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(o.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(o.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(o.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(o.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[p(o.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[p(o.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[p(o.$slots,"home-features-after",{},void 0,!0)]),_:3})):c(t).layout&&c(t).layout!=="doc"?(i(),P(W(c(t).layout),{key:3})):(i(),P(An,{key:4},{"doc-top":f(()=>[p(o.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[p(o.$slots,"doc-bottom",{},void 0,!0)]),"doc-footer-before":f(()=>[p(o.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[p(o.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[p(o.$slots,"doc-after",{},void 0,!0)]),"aside-top":f(()=>[p(o.$slots,"aside-top",{},void 0,!0)]),"aside-outline-before":f(()=>[p(o.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(o.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(o.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(o.$slots,"aside-ads-after",{},void 0,!0)]),"aside-bottom":f(()=>[p(o.$slots,"aside-bottom",{},void 0,!0)]),_:3}))],2))}}),bs=V(ks,[["__scopeId","data-v-d2aef184"]]),$s={class:"container"},ys=["innerHTML"],Ps=["innerHTML"],Ls=k({__name:"VPFooter",setup(n){const{theme:e,frontmatter:t}=M(),{hasSidebar:s}=x();return(o,a)=>c(e).footer&&c(t).footer!==!1?(i(),h("footer",{key:0,class:A(["VPFooter",{"has-sidebar":c(s)}])},[d("div",$s,[c(e).footer.message?(i(),h("p",{key:0,class:"message",innerHTML:c(e).footer.message},null,8,ys)):g("",!0),c(e).footer.copyright?(i(),h("p",{key:1,class:"copyright",innerHTML:c(e).footer.copyright},null,8,Ps)):g("",!0)])],2)):g("",!0)}}),Vs=V(Ls,[["__scopeId","data-v-e3157d6d"]]);function Ss(){const{theme:n,frontmatter:e}=M(),t=We([]),s=S(()=>t.value.length>0);return ve(()=>{t.value=Ae(e.value.outline??n.value.outline)}),{headers:t,hasLocalNav:s}}const Ts={class:"menu-text"},ws={class:"header"},Ms={class:"outline"},Ns=k({__name:"VPLocalNavOutlineDropdown",props:{headers:{},navHeight:{}},setup(n){const e=n,{theme:t}=M(),s=T(!1),o=T(0),a=T(),r=T();function l(m){var L;(L=a.value)!=null&&L.contains(m.target)||(s.value=!1)}J(s,m=>{if(m){document.addEventListener("click",l);return}document.removeEventListener("click",l)}),pt("Escape",()=>{s.value=!1}),ve(()=>{s.value=!1});function u(){s.value=!s.value,o.value=window.innerHeight+Math.min(window.scrollY-e.navHeight,0)}function v(m){m.target.classList.contains("outline-link")&&(r.value&&(r.value.style.transition="none"),Ie(()=>{s.value=!1}))}function _(){s.value=!1,window.scrollTo({top:0,left:0,behavior:"smooth"})}return(m,L)=>(i(),h("div",{class:"VPLocalNavOutlineDropdown",style:Je({"--vp-vh":o.value+"px"}),ref_key:"main",ref:a},[m.headers.length>0?(i(),h("button",{key:0,onClick:u,class:A({open:s.value})},[d("span",Ts,C(c(et)(c(t))),1),L[0]||(L[0]=d("span",{class:"vpi-chevron-right icon"},null,-1))],2)):(i(),h("button",{key:1,onClick:_},C(c(t).returnToTopLabel||"Return to top"),1)),y(we,{name:"flyout"},{default:f(()=>[s.value?(i(),h("div",{key:0,ref_key:"items",ref:r,class:"items",onClick:v},[d("div",ws,[d("a",{class:"top-link",href:"#",onClick:_},C(c(t).returnToTopLabel||"Return to top"),1)]),d("div",Ms,[y(tt,{headers:m.headers},null,8,["headers"])])],512)):g("",!0)]),_:1})],4))}}),Is=V(Ns,[["__scopeId","data-v-d61422fe"]]),Cs={class:"container"},As=["aria-expanded"],Hs={class:"menu-text"},Bs=k({__name:"VPLocalNav",props:{open:{type:Boolean}},emits:["open-menu"],setup(n){const{theme:e,frontmatter:t}=M(),{hasSidebar:s}=x(),{headers:o}=Ss(),{y:a}=xe(),r=T(0);Q(()=>{r.value=parseInt(getComputedStyle(document.documentElement).getPropertyValue("--vp-nav-height"))}),ve(()=>{o.value=Ae(t.value.outline??e.value.outline)});const l=S(()=>o.value.length===0),u=S(()=>l.value&&!s.value),v=S(()=>({VPLocalNav:!0,"has-sidebar":s.value,empty:l.value,fixed:u.value}));return(_,m)=>c(t).layout!=="home"&&(!u.value||c(a)>=r.value)?(i(),h("div",{key:0,class:A(v.value)},[d("div",Cs,[c(s)?(i(),h("button",{key:0,class:"menu","aria-expanded":_.open,"aria-controls":"VPSidebarNav",onClick:m[0]||(m[0]=L=>_.$emit("open-menu"))},[m[1]||(m[1]=d("span",{class:"vpi-align-left menu-icon"},null,-1)),d("span",Hs,C(c(e).sidebarMenuLabel||"Menu"),1)],8,As)):g("",!0),y(Is,{headers:c(o),navHeight:r.value},null,8,["headers","navHeight"])])],2)):g("",!0)}}),Es=V(Bs,[["__scopeId","data-v-9d8129cc"]]);function Os(){const n=T(!1);function e(){n.value=!0,window.addEventListener("resize",o)}function t(){n.value=!1,window.removeEventListener("resize",o)}function s(){n.value?t():e()}function o(){window.outerWidth>=768&&t()}const a=me();return J(()=>a.path,t),{isScreenOpen:n,openScreen:e,closeScreen:t,toggleScreen:s}}const Ds={},Fs={class:"VPSwitch",type:"button",role:"switch"},zs={class:"check"},js={key:0,class:"icon"};function Us(n,e){return i(),h("button",Fs,[d("span",zs,[n.$slots.default?(i(),h("span",js,[p(n.$slots,"default",{},void 0,!0)])):g("",!0)])])}const qs=V(Ds,[["render",Us],["__scopeId","data-v-7012e5dd"]]),Gs=k({__name:"VPSwitchAppearance",setup(n){const{isDark:e,theme:t}=M(),s=_e("toggle-appearance",()=>{e.value=!e.value}),o=T("");return Ne(()=>{o.value=e.value?t.value.lightModeSwitchTitle||"Switch to light theme":t.value.darkModeSwitchTitle||"Switch to dark theme"}),(a,r)=>(i(),P(qs,{title:o.value,class:"VPSwitchAppearance","aria-checked":c(e),onClick:c(s)},{default:f(()=>r[0]||(r[0]=[d("span",{class:"vpi-sun sun"},null,-1),d("span",{class:"vpi-moon moon"},null,-1)])),_:1},8,["title","aria-checked","onClick"]))}}),He=V(Gs,[["__scopeId","data-v-fa1daf57"]]),Rs={key:0,class:"VPNavBarAppearance"},Ws=k({__name:"VPNavBarAppearance",setup(n){const{site:e}=M();return(t,s)=>c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",Rs,[y(He)])):g("",!0)}}),Ks=V(Ws,[["__scopeId","data-v-123fcb2f"]]),Be=T();let nt=!1,be=0;function Js(n){const e=T(!1);if(ge){!nt&&xs(),be++;const t=J(Be,s=>{var o,a,r;s===n.el.value||(o=n.el.value)!=null&&o.contains(s)?(e.value=!0,(a=n.onFocus)==null||a.call(n)):(e.value=!1,(r=n.onBlur)==null||r.call(n))});Me(()=>{t(),be--,be||Xs()})}return ht(e)}function xs(){document.addEventListener("focusin",st),nt=!0,Be.value=document.activeElement}function Xs(){document.removeEventListener("focusin",st)}function st(){Be.value=document.activeElement}const Ys={class:"VPMenuLink"},Qs=["innerHTML"],Zs=k({__name:"VPMenuLink",props:{item:{}},setup(n){const{page:e}=M();return(t,s)=>(i(),h("div",Ys,[y(K,{class:A({active:c(te)(c(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Qs)]),_:1},8,["class","href","target","rel","no-icon"])]))}}),ke=V(Zs,[["__scopeId","data-v-65e4a6b1"]]),eo={class:"VPMenuGroup"},to={key:0,class:"title"},no=k({__name:"VPMenuGroup",props:{text:{},items:{}},setup(n){return(e,t)=>(i(),h("div",eo,[e.text?(i(),h("p",to,C(e.text),1)):g("",!0),(i(!0),h(H,null,z(e.items,s=>(i(),h(H,null,["link"in s?(i(),P(ke,{key:0,item:s},null,8,["item"])):g("",!0)],64))),256))]))}}),so=V(no,[["__scopeId","data-v-2bec9359"]]),oo={class:"VPMenu"},ao={key:0,class:"items"},ro=k({__name:"VPMenu",props:{items:{}},setup(n){return(e,t)=>(i(),h("div",oo,[e.items?(i(),h("div",ao,[(i(!0),h(H,null,z(e.items,s=>(i(),h(H,{key:JSON.stringify(s)},["link"in s?(i(),P(ke,{key:0,item:s},null,8,["item"])):"component"in s?(i(),P(W(s.component),Y({key:1,ref_for:!0},s.props),null,16)):(i(),P(so,{key:2,text:s.text,items:s.items},null,8,["text","items"]))],64))),128))])):g("",!0),p(e.$slots,"default",{},void 0,!0)]))}}),io=V(ro,[["__scopeId","data-v-39eca401"]]),lo=["aria-expanded","aria-label"],co={key:0,class:"text"},uo=["innerHTML"],po={key:1,class:"vpi-more-horizontal icon"},ho={class:"menu"},fo=k({__name:"VPFlyout",props:{icon:{},button:{},label:{},items:{}},setup(n){const e=T(!1),t=T();Js({el:t,onBlur:s});function s(){e.value=!1}return(o,a)=>(i(),h("div",{class:"VPFlyout",ref_key:"el",ref:t,onMouseenter:a[1]||(a[1]=r=>e.value=!0),onMouseleave:a[2]||(a[2]=r=>e.value=!1)},[d("button",{type:"button",class:"button","aria-haspopup":"true","aria-expanded":e.value,"aria-label":o.label,onClick:a[0]||(a[0]=r=>e.value=!e.value)},[o.button||o.icon?(i(),h("span",co,[o.icon?(i(),h("span",{key:0,class:A([o.icon,"option-icon"])},null,2)):g("",!0),o.button?(i(),h("span",{key:1,innerHTML:o.button},null,8,uo)):g("",!0),a[3]||(a[3]=d("span",{class:"vpi-chevron-down text-icon"},null,-1))])):(i(),h("span",po))],8,lo),d("div",ho,[y(io,{items:o.items},{default:f(()=>[p(o.$slots,"default",{},void 0,!0)]),_:3},8,["items"])])],544))}}),Ee=V(fo,[["__scopeId","data-v-40e55da0"]]),vo=["href","aria-label","innerHTML"],mo=k({__name:"VPSocialLink",props:{icon:{},link:{},ariaLabel:{}},setup(n){const e=n,t=T();Q(async()=>{var a;await Ie();const o=(a=t.value)==null?void 0:a.children[0];o instanceof HTMLElement&&o.className.startsWith("vpi-social-")&&(getComputedStyle(o).maskImage||getComputedStyle(o).webkitMaskImage)==="none"&&o.style.setProperty("--icon",`url('https://api.iconify.design/simple-icons/${e.icon}.svg')`)});const s=S(()=>typeof e.icon=="object"?e.icon.svg:``);return(o,a)=>(i(),h("a",{ref_key:"el",ref:t,class:"VPSocialLink no-icon",href:o.link,"aria-label":o.ariaLabel??(typeof o.icon=="string"?o.icon:""),target:"_blank",rel:"noopener",innerHTML:s.value},null,8,vo))}}),_o=V(mo,[["__scopeId","data-v-fbf39218"]]),go={class:"VPSocialLinks"},ko=k({__name:"VPSocialLinks",props:{links:{}},setup(n){return(e,t)=>(i(),h("div",go,[(i(!0),h(H,null,z(e.links,({link:s,icon:o,ariaLabel:a})=>(i(),P(_o,{key:s,icon:o,link:s,ariaLabel:a},null,8,["icon","link","ariaLabel"]))),128))]))}}),Oe=V(ko,[["__scopeId","data-v-f2234a39"]]),bo={key:0,class:"group translations"},$o={class:"trans-title"},yo={key:1,class:"group"},Po={class:"item appearance"},Lo={class:"label"},Vo={class:"appearance-action"},So={key:2,class:"group"},To={class:"item social-links"},wo=k({__name:"VPNavBarExtra",setup(n){const{site:e,theme:t}=M(),{localeLinks:s,currentLang:o}=ae({correspondingLink:!0}),a=S(()=>s.value.length&&o.value.label||e.value.appearance||t.value.socialLinks);return(r,l)=>a.value?(i(),P(Ee,{key:0,class:"VPNavBarExtra",label:"extra navigation"},{default:f(()=>[c(s).length&&c(o).label?(i(),h("div",bo,[d("p",$o,C(c(o).label),1),(i(!0),h(H,null,z(c(s),u=>(i(),P(ke,{key:u.link,item:u},null,8,["item"]))),128))])):g("",!0),c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",yo,[d("div",Po,[d("p",Lo,C(c(t).darkModeSwitchLabel||"Appearance"),1),d("div",Vo,[y(He)])])])):g("",!0),c(t).socialLinks?(i(),h("div",So,[d("div",To,[y(Oe,{class:"social-links-list",links:c(t).socialLinks},null,8,["links"])])])):g("",!0)]),_:1})):g("",!0)}}),Mo=V(wo,[["__scopeId","data-v-0c845e5d"]]),No=["aria-expanded"],Io=k({__name:"VPNavBarHamburger",props:{active:{type:Boolean}},emits:["click"],setup(n){return(e,t)=>(i(),h("button",{type:"button",class:A(["VPNavBarHamburger",{active:e.active}]),"aria-label":"mobile navigation","aria-expanded":e.active,"aria-controls":"VPNavScreen",onClick:t[0]||(t[0]=s=>e.$emit("click"))},t[1]||(t[1]=[d("span",{class:"container"},[d("span",{class:"top"}),d("span",{class:"middle"}),d("span",{class:"bottom"})],-1)]),10,No))}}),Co=V(Io,[["__scopeId","data-v-670493dd"]]),Ao=["innerHTML"],Ho=k({__name:"VPNavBarMenuLink",props:{item:{}},setup(n){const{page:e}=M();return(t,s)=>(i(),P(K,{class:A({VPNavBarMenuLink:!0,active:c(te)(c(e).relativePath,t.item.activeMatch||t.item.link,!!t.item.activeMatch)}),href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,tabindex:"0"},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Ao)]),_:1},8,["class","href","target","rel","no-icon"]))}}),Bo=V(Ho,[["__scopeId","data-v-8dbce4d0"]]),Eo=k({__name:"VPNavBarMenuGroup",props:{item:{}},setup(n){const e=n,{page:t}=M(),s=a=>"component"in a?!1:"link"in a?te(t.value.relativePath,a.link,!!e.item.activeMatch):a.items.some(s),o=S(()=>s(e.item));return(a,r)=>(i(),P(Ee,{class:A({VPNavBarMenuGroup:!0,active:c(te)(c(t).relativePath,a.item.activeMatch,!!a.item.activeMatch)||o.value}),button:a.item.text,items:a.item.items},null,8,["class","button","items"]))}}),Oo={key:0,"aria-labelledby":"main-nav-aria-label",class:"VPNavBarMenu"},Do=k({__name:"VPNavBarMenu",setup(n){const{theme:e}=M();return(t,s)=>c(e).nav?(i(),h("nav",Oo,[s[0]||(s[0]=d("span",{id:"main-nav-aria-label",class:"visually-hidden"}," Main Navigation ",-1)),(i(!0),h(H,null,z(c(e).nav,o=>(i(),h(H,{key:JSON.stringify(o)},["link"in o?(i(),P(Bo,{key:0,item:o},null,8,["item"])):"component"in o?(i(),P(W(o.component),Y({key:1,ref_for:!0},o.props),null,16)):(i(),P(Eo,{key:2,item:o},null,8,["item"]))],64))),128))])):g("",!0)}}),Fo=V(Do,[["__scopeId","data-v-5bacfe89"]]),zo="/document/assets/flex-logo.BJA2J7hW.svg";function $e(n,e){return typeof n>"u"?e:n}function ze(n){const e=Array(n);for(let t=0;t=this.minlength&&(l||!r[_])){let L=ie(u,o,v),b="";switch(this.tokenize){case"full":if(3$;N--)if(N-$>=this.minlength){const w=ie(u,o,v,m,$);b=_.substring($,N),this.push_index(r,b,w,n,t)}break}case"reverse":if(2=this.minlength){const N=ie(u,o,v,m,$);this.push_index(r,b,N,n,t)}b=""}case"forward":if(1=this.minlength&&this.push_index(r,b,L,n,t);break}default:if(this.boost&&(L=Math.min(0|L/this.boost(e,_,v),u-1)),this.push_index(r,_,L,n,t),l&&1=this.minlength&&!$[_]){$[_]=1;const R=ie(N+(o/2>N?0:1),o,v,O-1,F-1),X=this.bidirectional&&_>w;this.push_index(a,X?w:_,R,n,t,X?_:w)}}}}}this.fastupdate||(this.register[n]=1)}}return this};function ie(n,e,t,s,o){return t&&1=this.minlength&&!m[b]){if(!this.optimize&&!a&&!this.map[b])return r;L[N++]=b,m[b]=1}n=L,s=n.length}if(!s)return r;e||(e=100);let u,v=this.depth&&1=t)))));b++);if(v)return o?qe(l,t,0):void(n[n.length]=l)}return!e&&l};function qe(n,e,t){return n=n.length===1?n[0]:Uo(n),t||n.length>e?n.slice(t,t+e):n}function Ge(n,e,t,s){if(t){const o=s&&e>t;n=n[o?e:t],n=n&&n[o?t:e]}else n=n[e];return n}q.prototype.contain=function(n){return!!this.register[n]},q.prototype.update=function(n,e){return this.remove(n).add(n,e)},q.prototype.remove=function(n,e){const t=this.register[n];if(t){if(this.fastupdate)for(let s,o=0;o{if(a.value){for(var B=m.value.search(a.value,{enrich:!0}),I=[],j=0;j!B||!B.length?[]:B.reduce((j,E)=>(j[I(E)]||(j[I(E)]=[]),j[I(E)].push(E),j),{}),R=()=>{setTimeout(()=>{l.value&&l.value.focus()},100),De(),o.value=!0};Q(async()=>{var E,D;const B=await vt(()=>import("./virtual_search-data.LxkiP9ls.js"),[]);u.value=B.default.INDEX_DATA,v.value=B.default.PREVIEW_LOOKUP,_.value=B.default.Options,r.value=window.location.origin+he(t.value==="root"?"/":t.value),L.value=((E=_.value)==null?void 0:E.buttonLabel)||L.value,b.value=((D=_.value)==null?void 0:D.placeholder)||b.value;var I=new q(_.value);I.import("reg",u.value.reg),I.import("cfg",u.value.cfg),I.import("map",u.value.map),I.import("ctx",u.value.ctx),m.value=I,s.value.innerHTML=/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform)?"⌘":"Ctrl";const j=U=>{var se;U.key==="k"&&(U.ctrlKey||U.metaKey)&&(U.preventDefault(),R()),U.key==="Escape"&&((se=a.value)==null?void 0:se.length)==0&&o.value&&(o.value=!1)};window.addEventListener("keydown",j)});const X=S(()=>F(O.value,B=>B.link.split("/").slice(0,-1).join("-"))),ne=S(()=>Object.values(X.value).flat().map(B=>B.id));function De(){o.value=!1,a.value=""}const at=B=>{var I,j;if(document.getElementsByClassName("search-group")[0]){if(B.key=="ArrowUp"||B.key=="ArrowDown"){const E=ne.value.indexOf($.value);if(B.key=="ArrowUp"){const D=E==0?ne.value.length-1:E-1;$.value=ne.value[D]}if(B.key=="ArrowDown"){const D=E>ne.value.length-2?0:E+1;$.value=ne.value[D]}if(E<5){const D=N.value.getElementsByClassName("VPPluginSearch-search-group")[0];D==null||D.scrollIntoView(!0)}else(I=document.getElementById(ne.value[$.value]))==null||I.scrollIntoView(!0);Ie()}B.key=="Enter"&&w.go(e.site.value.base+((j=N.value.getElementsByClassName("link-focused")[0].getAttribute("href"))==null?void 0:j.replace(r.value,"")))}};return(B,I)=>{const j=Z("ClientOnly");return i(),h("div",la,[y(j,null,{default:f(()=>[(i(),P(gt,{to:"body"},[Fe(d("div",{class:"VPPluginSearch-modal-back",onClick:I[2]||(I[2]=E=>o.value=!1),onKeydown:at},[d("div",{class:"VPPluginSearch-modal",onClick:I[1]||(I[1]=Xe(()=>{},["stop"])),ref_key:"modal",ref:N},[d("form",ca,[I[4]||(I[4]=d("label",{class:"DocSearch-MagnifierLabel",for:"docsearch-input",id:"docsearch-label"},[d("svg",{width:"20",height:"20",class:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},[d("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})])],-1)),Fe(d("input",{class:"DocSearch-Input","aria-autocomplete":"both","aria-labelledby":"docsearch-label",id:"docsearch-input",autocomplete:"off",autocorrect:"off",autocapitalize:"off",enterkeyhint:"search",spellcheck:"false",autofocus:"true","onUpdate:modelValue":I[0]||(I[0]=E=>a.value=E),placeholder:b.value,maxlength:"64",type:"search",ref_key:"input",ref:l},null,8,ua),[[_t,a.value]])]),d("div",da,[(i(!0),h(H,null,z(X.value,(E,D)=>(i(),h("div",{class:"search-group",key:D},[d("span",pa,C(D?D.toString()[0].toUpperCase()+D.toString().slice(1):"Home"),1),(i(!0),h(H,null,z(E,(U,se)=>(i(),h("a",{href:r.value+U.link,key:U.id,onClick:De,onMouseenter:re=>$.value=U.id,class:A({"link-focused":$.value==U.id}),id:se.toString()},[d("div",fa,[d("span",va,C(U.link.includes("#")?"#":"▤"),1),d("div",ma,[d("h3",null,C(U.title),1),d("p",null,[d("div",{innerHTML:U.preview},null,8,_a)])]),I[5]||(I[5]=d("span",{class:"VPPluginSearch-search-item-icon"},"↪",-1))])],42,ha))),128))]))),128))]),I[6]||(I[6]=d("img",{class:"VPPluginSearch-flex-logo",src:zo,alt:"flex logo"},null,-1))],512)],544),[[mt,o.value]])]))]),_:1}),d("div",{id:"docsearch",onClick:I[3]||(I[3]=E=>R())},[d("button",ga,[d("span",ka,[I[7]||(I[7]=d("svg",{width:"20",height:"20",class:"DocSearch-Search-Icon",viewBox:"0 0 20 20"},[d("path",{d:"M14.386 14.386l4.0877 4.0877-4.0877-4.0877c-2.9418 2.9419-7.7115 2.9419-10.6533 0-2.9419-2.9418-2.9419-7.7115 0-10.6533 2.9418-2.9419 7.7115-2.9419 10.6533 0 2.9419 2.9418 2.9419 7.7115 0 10.6533z",stroke:"currentColor",fill:"none","fill-rule":"evenodd","stroke-linecap":"round","stroke-linejoin":"round"})],-1)),d("span",ba,C(L.value),1)]),d("span",$a,[d("span",{class:"DocSearch-Button-Key",ref_key:"metaKey",ref:s},"Meta",512),I[8]||(I[8]=d("span",{class:"DocSearch-Button-Key"},"K",-1))])])])])}}}),Pa=k({__name:"VPNavBarSocialLinks",setup(n){const{theme:e}=M();return(t,s)=>c(e).socialLinks?(i(),P(Oe,{key:0,class:"VPNavBarSocialLinks",links:c(e).socialLinks},null,8,["links"])):g("",!0)}}),La=V(Pa,[["__scopeId","data-v-08b35e6f"]]),Va=["href","rel","target"],Sa=["innerHTML"],Ta={key:2},wa=k({__name:"VPNavBarTitle",setup(n){const{site:e,theme:t}=M(),{hasSidebar:s}=x(),{currentLang:o}=ae(),a=S(()=>{var u;return typeof t.value.logoLink=="string"?t.value.logoLink:(u=t.value.logoLink)==null?void 0:u.link}),r=S(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.rel}),l=S(()=>{var u;return typeof t.value.logoLink=="string"||(u=t.value.logoLink)==null?void 0:u.target});return(u,v)=>(i(),h("div",{class:A(["VPNavBarTitle",{"has-sidebar":c(s)}])},[d("a",{class:"title",href:a.value??c(Ce)(c(o).link),rel:r.value,target:l.value},[p(u.$slots,"nav-bar-title-before",{},void 0,!0),c(t).logo?(i(),P(ue,{key:0,class:"logo",image:c(t).logo},null,8,["image"])):g("",!0),c(t).siteTitle?(i(),h("span",{key:1,innerHTML:c(t).siteTitle},null,8,Sa)):c(t).siteTitle===void 0?(i(),h("span",Ta,C(c(e).title),1)):g("",!0),p(u.$slots,"nav-bar-title-after",{},void 0,!0)],8,Va)],2))}}),Ma=V(wa,[["__scopeId","data-v-5622a072"]]),Na={class:"items"},Ia={class:"title"},Ca=k({__name:"VPNavBarTranslations",setup(n){const{theme:e}=M(),{localeLinks:t,currentLang:s}=ae({correspondingLink:!0});return(o,a)=>c(t).length&&c(s).label?(i(),P(Ee,{key:0,class:"VPNavBarTranslations",icon:"vpi-languages",label:c(e).langMenuLabel||"Change language"},{default:f(()=>[d("div",Na,[d("p",Ia,C(c(s).label),1),(i(!0),h(H,null,z(c(t),r=>(i(),P(ke,{key:r.link,item:r},null,8,["item"]))),128))])]),_:1},8,["label"])):g("",!0)}}),Aa=V(Ca,[["__scopeId","data-v-dac637f3"]]),Ha={class:"wrapper"},Ba={class:"container"},Ea={class:"title"},Oa={class:"content"},Da={class:"content-body"},Fa=k({__name:"VPNavBar",props:{isScreenOpen:{type:Boolean}},emits:["toggle-screen"],setup(n){const e=n,{y:t}=xe(),{hasSidebar:s}=x(),{frontmatter:o}=M(),a=T({});return Ne(()=>{a.value={"has-sidebar":s.value,home:o.value.layout==="home",top:t.value===0,"screen-open":e.isScreenOpen}}),(r,l)=>(i(),h("div",{class:A(["VPNavBar",a.value])},[d("div",Ha,[d("div",Ba,[d("div",Ea,[y(Ma,null,{"nav-bar-title-before":f(()=>[p(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(r.$slots,"nav-bar-title-after",{},void 0,!0)]),_:3})]),d("div",Oa,[d("div",Da,[p(r.$slots,"nav-bar-content-before",{},void 0,!0),y(ya,{class:"search"}),y(Fo,{class:"menu"}),y(Aa,{class:"translations"}),y(Ks,{class:"appearance"}),y(La,{class:"social-links"}),y(Mo,{class:"extra"}),p(r.$slots,"nav-bar-content-after",{},void 0,!0),y(Co,{class:"hamburger",active:r.isScreenOpen,onClick:l[0]||(l[0]=u=>r.$emit("toggle-screen"))},null,8,["active"])])])])]),l[1]||(l[1]=d("div",{class:"divider"},[d("div",{class:"divider-line"})],-1))],2))}}),za=V(Fa,[["__scopeId","data-v-bb7529ee"]]),ja={key:0,class:"VPNavScreenAppearance"},Ua={class:"text"},qa=k({__name:"VPNavScreenAppearance",setup(n){const{site:e,theme:t}=M();return(s,o)=>c(e).appearance&&c(e).appearance!=="force-dark"&&c(e).appearance!=="force-auto"?(i(),h("div",ja,[d("p",Ua,C(c(t).darkModeSwitchLabel||"Appearance"),1),y(He)])):g("",!0)}}),Ga=V(qa,[["__scopeId","data-v-774971f8"]]),Ra=["innerHTML"],Wa=k({__name:"VPNavScreenMenuLink",props:{item:{}},setup(n){const e=_e("close-screen");return(t,s)=>(i(),P(K,{class:"VPNavScreenMenuLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:c(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Ra)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),Ka=V(Wa,[["__scopeId","data-v-29871565"]]),Ja=["innerHTML"],xa=k({__name:"VPNavScreenMenuGroupLink",props:{item:{}},setup(n){const e=_e("close-screen");return(t,s)=>(i(),P(K,{class:"VPNavScreenMenuGroupLink",href:t.item.link,target:t.item.target,rel:t.item.rel,"no-icon":t.item.noIcon,onClick:c(e)},{default:f(()=>[d("span",{innerHTML:t.item.text},null,8,Ja)]),_:1},8,["href","target","rel","no-icon","onClick"]))}}),ot=V(xa,[["__scopeId","data-v-581896e9"]]),Xa={class:"VPNavScreenMenuGroupSection"},Ya={key:0,class:"title"},Qa=k({__name:"VPNavScreenMenuGroupSection",props:{text:{},items:{}},setup(n){return(e,t)=>(i(),h("div",Xa,[e.text?(i(),h("p",Ya,C(e.text),1)):g("",!0),(i(!0),h(H,null,z(e.items,s=>(i(),P(ot,{key:s.text,item:s},null,8,["item"]))),128))]))}}),Za=V(Qa,[["__scopeId","data-v-836cddb8"]]),er=["aria-controls","aria-expanded"],tr=["innerHTML"],nr=["id"],sr={key:0,class:"item"},or={key:1,class:"item"},ar={key:2,class:"group"},rr=k({__name:"VPNavScreenMenuGroup",props:{text:{},items:{}},setup(n){const e=n,t=T(!1),s=S(()=>`NavScreenGroup-${e.text.replace(" ","-").toLowerCase()}`);function o(){t.value=!t.value}return(a,r)=>(i(),h("div",{class:A(["VPNavScreenMenuGroup",{open:t.value}])},[d("button",{class:"button","aria-controls":s.value,"aria-expanded":t.value,onClick:o},[d("span",{class:"button-text",innerHTML:a.text},null,8,tr),r[0]||(r[0]=d("span",{class:"vpi-plus button-icon"},null,-1))],8,er),d("div",{id:s.value,class:"items"},[(i(!0),h(H,null,z(a.items,l=>(i(),h(H,{key:JSON.stringify(l)},["link"in l?(i(),h("div",sr,[y(ot,{item:l},null,8,["item"])])):"component"in l?(i(),h("div",or,[(i(),P(W(l.component),Y({ref_for:!0},l.props,{"screen-menu":""}),null,16))])):(i(),h("div",ar,[y(Za,{text:l.text,items:l.items},null,8,["text","items"])]))],64))),128))],8,nr)],2))}}),ir=V(rr,[["__scopeId","data-v-a8d3502a"]]),lr={key:0,class:"VPNavScreenMenu"},cr=k({__name:"VPNavScreenMenu",setup(n){const{theme:e}=M();return(t,s)=>c(e).nav?(i(),h("nav",lr,[(i(!0),h(H,null,z(c(e).nav,o=>(i(),h(H,{key:JSON.stringify(o)},["link"in o?(i(),P(Ka,{key:0,item:o},null,8,["item"])):"component"in o?(i(),P(W(o.component),Y({key:1,ref_for:!0},o.props,{"screen-menu":""}),null,16)):(i(),P(ir,{key:2,text:o.text||"",items:o.items},null,8,["text","items"]))],64))),128))])):g("",!0)}}),ur=k({__name:"VPNavScreenSocialLinks",setup(n){const{theme:e}=M();return(t,s)=>c(e).socialLinks?(i(),P(Oe,{key:0,class:"VPNavScreenSocialLinks",links:c(e).socialLinks},null,8,["links"])):g("",!0)}}),dr={class:"list"},pr=k({__name:"VPNavScreenTranslations",setup(n){const{localeLinks:e,currentLang:t}=ae({correspondingLink:!0}),s=T(!1);function o(){s.value=!s.value}return(a,r)=>c(e).length&&c(t).label?(i(),h("div",{key:0,class:A(["VPNavScreenTranslations",{open:s.value}])},[d("button",{class:"title",onClick:o},[r[0]||(r[0]=d("span",{class:"vpi-languages icon lang"},null,-1)),ee(" "+C(c(t).label)+" ",1),r[1]||(r[1]=d("span",{class:"vpi-chevron-down icon chevron"},null,-1))]),d("ul",dr,[(i(!0),h(H,null,z(c(e),l=>(i(),h("li",{key:l.link,class:"item"},[y(K,{class:"link",href:l.link},{default:f(()=>[ee(C(l.text),1)]),_:2},1032,["href"])]))),128))])],2)):g("",!0)}}),hr=V(pr,[["__scopeId","data-v-0d43316b"]]),fr={class:"container"},vr=k({__name:"VPNavScreen",props:{open:{type:Boolean}},setup(n){const e=T(null),t=Ye(ge?document.body:null);return(s,o)=>(i(),P(we,{name:"fade",onEnter:o[0]||(o[0]=a=>t.value=!0),onAfterLeave:o[1]||(o[1]=a=>t.value=!1)},{default:f(()=>[s.open?(i(),h("div",{key:0,class:"VPNavScreen",ref_key:"screen",ref:e,id:"VPNavScreen"},[d("div",fr,[p(s.$slots,"nav-screen-content-before",{},void 0,!0),y(cr,{class:"menu"}),y(hr,{class:"translations"}),y(Ga,{class:"appearance"}),y(ur,{class:"social-links"}),p(s.$slots,"nav-screen-content-after",{},void 0,!0)])],512)):g("",!0)]),_:3}))}}),mr=V(vr,[["__scopeId","data-v-34fa79a7"]]),_r={key:0,class:"VPNav"},gr=k({__name:"VPNav",setup(n){const{isScreenOpen:e,closeScreen:t,toggleScreen:s}=Os(),{frontmatter:o}=M(),a=S(()=>o.value.navbar!==!1);return Qe("close-screen",t),fe(()=>{ge&&document.documentElement.classList.toggle("hide-nav",!a.value)}),(r,l)=>a.value?(i(),h("header",_r,[y(za,{"is-screen-open":c(e),onToggleScreen:c(s)},{"nav-bar-title-before":f(()=>[p(r.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(r.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[p(r.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[p(r.$slots,"nav-bar-content-after",{},void 0,!0)]),_:3},8,["is-screen-open","onToggleScreen"]),y(mr,{open:c(e)},{"nav-screen-content-before":f(()=>[p(r.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[p(r.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3},8,["open"])])):g("",!0)}}),kr=V(gr,[["__scopeId","data-v-a46e73f0"]]),br=["role","tabindex"],$r={key:1,class:"items"},yr=k({__name:"VPSidebarItem",props:{item:{},depth:{}},setup(n){const e=n,{collapsed:t,collapsible:s,isLink:o,isActiveLink:a,hasActiveLink:r,hasChildren:l,toggle:u}=zt(S(()=>e.item)),v=S(()=>l.value?"section":"div"),_=S(()=>o.value?"a":"div"),m=S(()=>l.value?e.depth+2===7?"p":`h${e.depth+2}`:"p"),L=S(()=>o.value?void 0:"button"),b=S(()=>[[`level-${e.depth}`],{collapsible:s.value},{collapsed:t.value},{"is-link":o.value},{"is-active":a.value},{"has-active":r.value}]);function $(w){"key"in w&&w.key!=="Enter"||!e.item.link&&u()}function N(){e.item.link&&u()}return(w,O)=>{const F=Z("VPSidebarItem",!0);return i(),P(W(v.value),{class:A(["VPSidebarItem",b.value])},{default:f(()=>[w.item.text?(i(),h("div",Y({key:0,class:"item",role:L.value},kt(w.item.items?{click:$,keydown:$}:{},!0),{tabindex:w.item.items&&0}),[O[1]||(O[1]=d("div",{class:"indicator"},null,-1)),w.item.link?(i(),P(K,{key:0,tag:_.value,class:"link",href:w.item.link,rel:w.item.rel,target:w.item.target},{default:f(()=>[(i(),P(W(m.value),{class:"text",innerHTML:w.item.text},null,8,["innerHTML"]))]),_:1},8,["tag","href","rel","target"])):(i(),P(W(m.value),{key:1,class:"text",innerHTML:w.item.text},null,8,["innerHTML"])),w.item.collapsed!=null&&w.item.items&&w.item.items.length?(i(),h("div",{key:2,class:"caret",role:"button","aria-label":"toggle section",onClick:N,onKeydown:bt(N,["enter"]),tabindex:"0"},O[0]||(O[0]=[d("span",{class:"vpi-chevron-right caret-icon"},null,-1)]),32)):g("",!0)],16,br)):g("",!0),w.item.items&&w.item.items.length?(i(),h("div",$r,[w.depth<5?(i(!0),h(H,{key:0},z(w.item.items,R=>(i(),P(F,{key:R.text,item:R,depth:w.depth+1},null,8,["item","depth"]))),128)):g("",!0)])):g("",!0)]),_:1},8,["class"])}}}),Pr=V(yr,[["__scopeId","data-v-2e0476bc"]]),Lr=k({__name:"VPSidebarGroup",props:{items:{}},setup(n){const e=T(!0);let t=null;return Q(()=>{t=setTimeout(()=>{t=null,e.value=!1},300)}),$t(()=>{t!=null&&(clearTimeout(t),t=null)}),(s,o)=>(i(!0),h(H,null,z(s.items,a=>(i(),h("div",{key:a.text,class:A(["group",{"no-transition":e.value}])},[y(Pr,{item:a,depth:0},null,8,["item"])],2))),128))}}),Vr=V(Lr,[["__scopeId","data-v-ec086cd5"]]),Sr={class:"nav",id:"VPSidebarNav","aria-labelledby":"sidebar-aria-label",tabindex:"-1"},Tr=k({__name:"VPSidebar",props:{open:{type:Boolean}},setup(n){const{sidebarGroups:e,hasSidebar:t}=x(),s=n,o=T(null),a=Ye(ge?document.body:null);J([s,o],()=>{var l;s.open?(a.value=!0,(l=o.value)==null||l.focus()):a.value=!1},{immediate:!0,flush:"post"});const r=T(0);return J(e,()=>{r.value+=1},{deep:!0}),(l,u)=>c(t)?(i(),h("aside",{key:0,class:A(["VPSidebar",{open:l.open}]),ref_key:"navEl",ref:o,onClick:u[0]||(u[0]=Xe(()=>{},["stop"]))},[u[2]||(u[2]=d("div",{class:"curtain"},null,-1)),d("nav",Sr,[u[1]||(u[1]=d("span",{class:"visually-hidden",id:"sidebar-aria-label"}," Sidebar Navigation ",-1)),p(l.$slots,"sidebar-nav-before",{},void 0,!0),(i(),P(Vr,{items:c(e),key:r.value},null,8,["items"])),p(l.$slots,"sidebar-nav-after",{},void 0,!0)])],2)):g("",!0)}}),wr=V(Tr,[["__scopeId","data-v-12a40e3d"]]),Mr=k({__name:"VPSkipLink",setup(n){const{theme:e}=M(),t=me(),s=T();J(()=>t.path,()=>s.value.focus());function o({target:a}){const r=document.getElementById(decodeURIComponent(a.hash).slice(1));if(r){const l=()=>{r.removeAttribute("tabindex"),r.removeEventListener("blur",l)};r.setAttribute("tabindex","-1"),r.addEventListener("blur",l),r.focus(),window.scrollTo(0,0)}}return(a,r)=>(i(),h(H,null,[d("span",{ref_key:"backToTop",ref:s,tabindex:"-1"},null,512),d("a",{href:"#VPContent",class:"VPSkipLink visually-hidden",onClick:o},C(c(e).skipToContentLabel||"Skip to content"),1)],64))}}),Nr=V(Mr,[["__scopeId","data-v-17ad389b"]]),Ir=k({__name:"Layout",setup(n){const{isOpen:e,open:t,close:s}=x(),o=me();J(()=>o.path,s),Ft(e,s);const{frontmatter:a}=M(),r=yt(),l=S(()=>!!r["home-hero-image"]);return Qe("hero-image-slot-exists",l),(u,v)=>{const _=Z("Content");return c(a).layout!==!1?(i(),h("div",{key:0,class:A(["Layout",c(a).pageClass])},[p(u.$slots,"layout-top",{},void 0,!0),y(Nr),y(St,{class:"backdrop",show:c(e),onClick:c(s)},null,8,["show","onClick"]),y(kr,null,{"nav-bar-title-before":f(()=>[p(u.$slots,"nav-bar-title-before",{},void 0,!0)]),"nav-bar-title-after":f(()=>[p(u.$slots,"nav-bar-title-after",{},void 0,!0)]),"nav-bar-content-before":f(()=>[p(u.$slots,"nav-bar-content-before",{},void 0,!0)]),"nav-bar-content-after":f(()=>[p(u.$slots,"nav-bar-content-after",{},void 0,!0)]),"nav-screen-content-before":f(()=>[p(u.$slots,"nav-screen-content-before",{},void 0,!0)]),"nav-screen-content-after":f(()=>[p(u.$slots,"nav-screen-content-after",{},void 0,!0)]),_:3}),y(Es,{open:c(e),onOpenMenu:c(t)},null,8,["open","onOpenMenu"]),y(wr,{open:c(e)},{"sidebar-nav-before":f(()=>[p(u.$slots,"sidebar-nav-before",{},void 0,!0)]),"sidebar-nav-after":f(()=>[p(u.$slots,"sidebar-nav-after",{},void 0,!0)]),_:3},8,["open"]),y(bs,null,{"page-top":f(()=>[p(u.$slots,"page-top",{},void 0,!0)]),"page-bottom":f(()=>[p(u.$slots,"page-bottom",{},void 0,!0)]),"not-found":f(()=>[p(u.$slots,"not-found",{},void 0,!0)]),"home-hero-before":f(()=>[p(u.$slots,"home-hero-before",{},void 0,!0)]),"home-hero-info-before":f(()=>[p(u.$slots,"home-hero-info-before",{},void 0,!0)]),"home-hero-info":f(()=>[p(u.$slots,"home-hero-info",{},void 0,!0)]),"home-hero-info-after":f(()=>[p(u.$slots,"home-hero-info-after",{},void 0,!0)]),"home-hero-actions-after":f(()=>[p(u.$slots,"home-hero-actions-after",{},void 0,!0)]),"home-hero-image":f(()=>[p(u.$slots,"home-hero-image",{},void 0,!0)]),"home-hero-after":f(()=>[p(u.$slots,"home-hero-after",{},void 0,!0)]),"home-features-before":f(()=>[p(u.$slots,"home-features-before",{},void 0,!0)]),"home-features-after":f(()=>[p(u.$slots,"home-features-after",{},void 0,!0)]),"doc-footer-before":f(()=>[p(u.$slots,"doc-footer-before",{},void 0,!0)]),"doc-before":f(()=>[p(u.$slots,"doc-before",{},void 0,!0)]),"doc-after":f(()=>[p(u.$slots,"doc-after",{},void 0,!0)]),"doc-top":f(()=>[p(u.$slots,"doc-top",{},void 0,!0)]),"doc-bottom":f(()=>[p(u.$slots,"doc-bottom",{},void 0,!0)]),"aside-top":f(()=>[p(u.$slots,"aside-top",{},void 0,!0)]),"aside-bottom":f(()=>[p(u.$slots,"aside-bottom",{},void 0,!0)]),"aside-outline-before":f(()=>[p(u.$slots,"aside-outline-before",{},void 0,!0)]),"aside-outline-after":f(()=>[p(u.$slots,"aside-outline-after",{},void 0,!0)]),"aside-ads-before":f(()=>[p(u.$slots,"aside-ads-before",{},void 0,!0)]),"aside-ads-after":f(()=>[p(u.$slots,"aside-ads-after",{},void 0,!0)]),_:3}),y(Vs),p(u.$slots,"layout-bottom",{},void 0,!0)],2)):(i(),P(_,{key:1}))}}}),Cr=V(Ir,[["__scopeId","data-v-c4daae71"]]),Hr={Layout:Cr,enhanceApp:({app:n})=>{n.component("Badge",Pt)}};export{Hr as t};
diff --git a/docs/document/assets/chunks/virtual_search-data.BBGOhSPI.js b/docs/document/assets/chunks/virtual_search-data.LxkiP9ls.js
similarity index 83%
rename from docs/document/assets/chunks/virtual_search-data.BBGOhSPI.js
rename to docs/document/assets/chunks/virtual_search-data.LxkiP9ls.js
index d99e14fe4..434e0c73e 100644
--- a/docs/document/assets/chunks/virtual_search-data.BBGOhSPI.js
+++ b/docs/document/assets/chunks/virtual_search-data.LxkiP9ls.js
@@ -1,377 +1,377 @@
-const e={map:'[{"高级属性":["0.0"],"option":["0.1","1.12","10.1","11.12","20.9","23.9","24.17"],"template":["0.2","10.2"],"events":["0.3","10.3"],"storage":["0.4","10.4"],"icons":["0.5","10.5","22.39","26.39"],"i18n":["0.6","10.6","22.43","26.43"],"notice":["0.7","3.4","10.7","13.4"],"layers":["0.8","10.8","22.29","26.29"],"controls":["0.9","10.9","17.0","22.32","26.32"],"contextmenu":["0.10","2.37","3.3","10.10","12.37","13.3","22.31","26.31"],"subtitle":["0.11","2.36","10.11","12.36","22.37","26.37"],"info":["0.12","2.32","3.22","10.12","12.32","13.22"],"loading":["0.13","2.34","10.13","12.34"],"hotkey":["0.14","2.5","10.14","12.5","22.19","26.19"],"mask":["0.15","2.35","10.15","12.35"],"setting":["0.16","2.39","3.5","3.6","3.7","10.16","12.39","13.5","13.6","13.7","22.18","26.18"],"plugins":["0.17","10.17","22.35","26.35"],"静态属性":["1.0"],"instances":["1.1","11.1"],"version":["1.2","11.2"],"env":["1.3","11.3"],"build":["1.4","11.4"],"config":["1.5","11.5","24.13"],"utils":["1.6","11.6"],"scheme":["1.7","11.7"],"emitter":["1.8","11.8"],"validator":["1.9","11.9"],"kindof":["1.10","11.10"],"html":["1.11","11.11"],"实例事件":["2.0"],"ready":["2.1","12.1"],"restart":["2.2","12.2"],"pause":["2.3","5.2","12.3","15.2"],"play":["2.4","5.1","12.4","15.1"],"destroy":["2.6","5.4","12.6","15.4"],"focus":["2.7","12.7"],"blur":["2.8","12.8"],"dblclick":["2.9","12.9"],"click":["2.10","12.10"],"error":["2.11","12.11"],"hover":["2.12","12.12"],"mousemove":["2.13","12.13"],"resize":["2.14","3.8","12.14","13.8"],"view":["2.15","12.15"],"lock":["2.16","12.16","22.44","26.44"],"aspectratio":["2.17","5.32","12.17","15.32","22.16","26.16"],"autoheight":["2.18","5.33","12.18","15.33"],"autosize":["2.19","5.27","12.19","15.27","22.11","26.11"],"flip":["2.20","3.30","5.30","12.20","13.30","15.30","22.14","26.14"],"fullscreen":["2.21","3.31","5.20","12.21","13.31","15.20","22.23","26.23"],"fullscreenerror":["2.22","12.22"],"fullscreenweb":["2.23","5.21","12.23","15.21","22.24","26.24"],"mini":["2.24","5.24","12.24","15.24"],"pip":["2.25","5.22","12.25","15.22","22.20","26.20"],"screenshot":["2.26","5.17","12.26","15.17","22.17","26.17"],"seek":["2.27","3.27","5.6","12.27","13.27","15.6"],"subtitleoffset":["2.28","5.47","12.28","15.47","22.25","26.25"],"subtitlebeforeupdate":["2.29","12.29"],"subtitleafterupdate":["2.30","12.30"],"subtitleload":["2.31","12.31"],"layer":["2.33","12.33","18.0"],"control":["2.38","3.16","12.38","13.16"],"muted":["2.40","5.14","12.40","15.14","22.9","26.9"],"keydown":["2.41","12.41"],"video":["2.42","2.43","2.44","2.45","2.46","2.47","2.48","2.49","2.50","2.51","2.52","2.53","2.54","2.55","2.56","2.57","2.58","2.59","2.60","2.61","2.62","5.43","12.42","12.43","12.44","12.45","12.46","12.47","12.48","12.49","12.50","12.51","12.52","12.53","12.54","12.55","12.56","12.57","12.58","12.59","12.60","12.61","12.62","15.43"],"全局属性":["3.0"],"debug":["3.1","13.1"],"style":["3.2","13.2"],"scroll":["3.9","3.10","13.9","13.10"],"auto":["3.11","3.12","3.13","3.21","13.11","13.12","13.13","13.21"],"reconnect":["3.14","3.15","13.14","13.15"],"dbclick":["3.17","3.18","13.17","13.18"],"mobile":["3.19","3.20","13.19","13.20"],"fast":["3.23","3.24","13.23","13.24"],"touch":["3.25","13.25"],"volume":["3.26","5.9","13.26","15.9","22.7","26.7"],"playback":["3.28","13.28"],"aspect":["3.29","13.29"],"log":["3.32","13.32"],"use":["3.33","13.33"],"remove":["3.34","13.34","19.8"],"编写插件":["4.0"],"实例属性":["5.0"],"toggle":["5.3","15.3"],"reset":["5.5","15.5","24.15"],"forward":["5.7","15.7"],"backward":["5.8","15.8"],"url":["5.10","15.10","22.2","26.2"],"switch":["5.11","15.11"],"switchurl":["5.12","15.12"],"switchquality":["5.13","15.13"],"currenttime":["5.15","15.15"],"duration":["5.16","15.16"],"getdataurl":["5.18","15.18"],"getbloburl":["5.19","15.19"],"poster":["5.23","15.23","22.5","26.5"],"playing":["5.25","15.25"],"state":["5.26","15.26"],"rect":["5.28","15.28"],"bottom":["5.29","15.29"],"playbackrate":["5.31","15.31","22.15","26.15"],"attr":["5.34","15.34"],"type":["5.35","15.35","22.40","26.40"],"theme":["5.36","15.36","22.6","26.6"],"airplay":["5.37","15.37","22.49","26.49"],"loaded":["5.38","15.38"],"loadedtime":["5.39","15.39"],"played":["5.40","15.40"],"proxy":["5.41","15.41","22.51","26.51"],"query":["5.42","15.42"],"cssvar":["5.44","15.44","22.50","26.50"],"quality":["5.45","15.45","22.33","26.33"],"thumbnails":["5.46","15.46","22.36","26.36"],"右键菜单":["6.0"],"配置":["6.1","7.1","8.1"],"创建":["6.2","7.2","8.2","9.2","9.3","9.4","9.5","9.6"],"添加":["6.3","7.3","8.3","9.7"],"删除":["6.4","7.4","8.4","9.8"],"更新":["6.5","7.5","8.5","9.9"],"控制器":["7.0"],"业务层":["8.0"],"设置面板":["9.0"],"内置":["9.1"],"advanced":["10.0"],"static":["11.0"],"instance":["12.0","15.0"],"global":["13.0"],"writing":["14.0"],"context":["16.0"],"configuration":["16.1","17.1","18.1"],"creation":["16.2","17.2","18.2"],"addition":["16.3","18.3"],"removal":["16.4","17.4","18.4"],"update":["16.5","18.5","19.9"],"adding":["17.3","21.3"],"updating":["17.5"],"settings":["19.0","22.30","26.30"],"built":["19.1"],"creating":["19.2","19.3","19.4"],"create":["19.5","19.6"],"add":["19.7"],"installation":["20.0","20.1"],"cdn":["20.2","23.2","24.3"],"usage":["20.3"],"vue":["20.4","20.7","23.4","23.7"],"react":["20.5","20.8","23.5","23.8"],"typescript":["20.6","23.6"],"javascript":["20.10","23.10"],"legacy":["20.11"],"ecmascript":["20.12","23.12"],"custom":["20.13"],"language":["21.0"],"default":["21.1"],"importing":["21.2"],"modifying":["21.4"],"basic":["22.0"],"container":["22.1","26.1"],"id":["22.3","26.3"],"onready":["22.4","26.4"],"islive":["22.8","26.8"],"autoplay":["22.10","26.10"],"automini":["22.12","26.12"],"loop":["22.13","26.13"],"mutex":["22.21","26.21"],"backdrop":["22.22","26.22"],"miniprogressbar":["22.26","26.26"],"usessr":["22.27","26.27"],"playsinline":["22.28","26.28"],"highlight":["22.34","26.34"],"morevideoattr":["22.38","26.38"],"customtype":["22.41","26.41"],"lang":["22.42","26.42"],"gesture":["22.45","26.45"],"fastforward":["22.46","26.46"],"autoplayback":["22.47","26.47"],"autoorientation":["22.48","26.48"],"安装使用":["23.0"],"安装":["23.1","24.2"],"使用":["23.3"],"古老的浏览器":["23.11"],"自定义":["23.13"],"弹幕库":["24.0"],"演示":["24.1"],"弹幕结构":["24.4"],"全部选项":["24.5"],"生命周期":["24.6"],"使用弹幕数组":["24.7"],"使用弹幕":["24.8"],"使用异步返回":["24.9"],"hide":["24.10"],"ishide":["24.11"],"emit":["24.12"],"load":["24.14"],"mount":["24.16"],"事件":["24.18"],"语言设置":["25.0"],"默认语言":["25.1"],"导入语言":["25.2"],"新增语言":["25.3"],"修改语言":["25.4"],"基础选项":["26.0"]},{"0":["3.28","5.38","5.40","22.7","26.7"],"1":["23.11","24.5"],"3":["3.29","23.9"],"4":["3.29","25.3"],"5":["3.28","8.2","18.2","24.5"],"7":["8.3","18.3","22.7"],"9":["25.3"],"10":["24.5"],"15":["4.0"],"21":["8.5","9.9","18.5","19.9"],"26":["7.5","17.5"],"27":["9.9","19.9"],"75":["3.28"],"250":["3.5"],"这里的":["0.0","1.0","3.0","5.0"],"播放器的选项":["0.1"],"div":["0.1","0.2","0.4","0.5","0.7","0.14","0.17","1.1","1.6","2.0","2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.28","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","3.3","4.0","5.1","5.2","5.3","5.16","5.28","5.33","5.37","5.45","6.2","6.3","6.4","6.5","7.2","7.3","7.4","7.5","8.2","8.3","8.4","8.5","9.4","9.7","9.8","9.9","10.1","10.2","14.0","16.2","16.3","16.4","16.5","17.2","17.3","17.4","17.5","18.2","18.3","18.4","18.5","19.4","19.7","19.8","19.9","22.2","22.29","22.30","24.6","24.7","24.9","24.10","24.11","24.12","24.13","24.14","24.15","24.17","24.18","26.2","26.29","26.30","26.31","26.32"],"classname":["0.1","0.2","0.17","2.0","2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.28","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","4.0","5.45","6.2","6.3","6.4","6.5","7.2","7.3","7.4","7.5","8.2","8.3","8.4","8.5","9.4","9.7","9.8","9.9","10.2","14.0","16.2","16.3","16.4","16.5","17.2","17.3","17.4","17.5","18.2","18.3","18.4","18.5","19.4","19.7","19.8","19.9","22.2","22.29","22.30","24.6","24.7","24.9","24.11","24.12","24.13","24.14","24.15","24.17","24.18","26.2","26.29","26.30"],"run":["0.1","0.2","2.0","2.2","2.6","2.11","2.12","2.17","2.18","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.28","2.29","2.30","2.31","2.39","4.0","5.45","6.2","6.3","6.4","6.5","7.2","7.3","7.4","7.5","8.2","8.3","8.4","8.5","9.4","9.7","9.8","9.9","14.0","16.2","16.3","16.4","16.5","17.2","17.3","17.4","17.5","18.2","18.3","18.4","18.5","19.4","19.7","19.8","19.9","22.2","22.29","24.6","24.7","24.9","24.11","24.12","24.13","24.14","24.15","24.17","24.18","26.2","26.29","26.30"],"管理播放器所有的":["0.2","0.3","0.5"],"dom":["0.2","0.3","5.41","5.42","9.2","9.3","9.5","9.6","10.2","10.3","15.41","15.42","19.2","19.3","19.5","19.6","22.1","26.1"],"元素":["0.2","9.5","9.6"],"事件":["0.3","4.0"],"实质上是代理了":["0.3"],"addeventlistener":["0.3","5.41","10.3","15.41"],"和":["0.3","4.0","5.13","24.8","24.10","26.4"],"removeeventlistener":["0.3","10.3"],"当使用以下方法来处理事件":["0.3"],"播放器销毁时也会自动销毁该事件":["0.3"],"管理播放器的本地存储":["0.4"],"name":["0.4","4.0","10.4"],"属性用于设置缓存的":["0.4"],"key":["0.4","10.4"],"set":["0.4","10.4","15.9","15.11","15.12","22.36","22.37"],"方法用于设置缓存":["0.4"],"get":["0.4","0.6","10.6"],"方法用于获取缓存":["0.4"],"del":["0.4"],"方法用于删除缓存":["0.4"],"clear":["0.4"],"方法用于清空缓存":["0.4"],"svg":["0.5","10.5"],"图标":["0.5"],"管理播放器的":["0.6"],"方法用于获取":["0.6"],"的值":["0.6"],"update":["0.6","0.8","0.9","0.10","0.16"],"管理播放器的提示语":["0.7"],"只有一个":["0.7"],"show":["0.7","0.13","0.15","10.13","10.15","24.10"],"属性用于显示提示语":["0.7"],"管理播放器的层":["0.8"],"add":["0.8","0.9","0.10","0.14","0.16","0.17","10.8","10.9","10.10","10.14","10.16"],"方法用于动态添加层":["0.8"],"remove":["0.8","0.9","0.10","0.14","0.16"],"方法用于动态删除层":["0.8"],"管理播放器的控制器":["0.9"],"方法用于动态添加控制器":["0.9"],"方法用于动态删除控制器":["0.9"],"管理播放器的右键菜单":["0.10"],"方法用于动态添加菜单":["0.10"],"方法用于动态删除菜单":["0.10"],"方法用于动态更新菜单":["0.10"],"管理播放器的字幕功能":["0.11"],"url":["0.11","5.12","10.11","12.2","15.12","15.18","15.19"],"属性设置和返回当前字幕地址":["0.11"],"style":["0.11"],"方法设置当前字幕的样式":["0.11"],"switch":["0.11"],"管理播放器的信息面板":["0.12"],"常用于查看当前播放器和视频的运行状态":["0.12"],"例如版本号":["0.12"],"分辨率":["0.12"],"时长等":["0.12"],"管理播放器的加载层":["0.13"],"属性用于设置是否显示加载层":["0.13"],"toggle":["0.13","0.15","19.5"],"管理播放器的快捷键功能":["0.14"],"方法用于添加快捷键":["0.14"],"方法用于删除快捷键":["0.14"],"管理播放器的遮罩层":["0.15"],"属性用于设置是否显示遮罩层":["0.15"],"管理播放器的设置面板":["0.16"],"方法用于动态添加设置项":["0.16"],"方法用于动态删除设置项":["0.16"],"方法用于动态更新设置项":["0.16"],"管理播放器的插件功能":["0.17"],"只有一个方法":["0.17"],"用于动态添加插件":["0.17"],"返回全部播放器实例的数组":["1.1"],"假如你想同时管理多个播放器的时候":["1.1"],"可以用到该属性":["1.1"],"返回播放器的版本信息":["1.2"],"返回播放器的环境变量":["1.3"],"返回播放器的打包时间":["1.4"],"返回视频的默认配置":["1.5"],"返回播放器的工具函数集合":["1.6"],"返回播放器选项的校验方案":["1.7"],"返回事件分发器的构造函数":["1.8"],"返回选项的校验函数":["1.9"],"返回类型检测的函数工具":["1.10"],"返回播放器所需的":["1.11"],"返回播放器的默认选项":["1.12"],"播放器的事件分为两种":["2.0"],"一种视频的":["2.0"],"原生事件":["2.0"],"前缀":["2.0"],"video":["2.0","12.0","13.29","13.30","13.34","15.3","15.5","15.11","15.12","15.13","15.16","22.2","22.5","22.37","22.40","22.41"],"另外一种是":["2.0"],"自定义事件":["2.0"],"监听事件":["2.0"],"code":["2.0","2.2","2.28","4.0","6.2","6.3","6.4","6.5","7.2","7.3","7.4","7.5","8.2","8.3","8.4","8.5","9.4","9.7","9.8","9.9","14.0","16.2","16.3","16.4","16.5","17.2","17.3","17.4","17.5","18.2","18.3","18.4","18.5","19.4","19.7","19.8","19.9","20.1","20.2","20.3","20.4","20.5","22.2","22.29","23.1","23.2","23.3","23.4","23.5","24.2","24.3","24.6","24.7","24.9","24.11","24.12","24.13","24.14","24.15","24.17","24.18","26.2","26.29"],"js":["2.0","4.0","6.5","7.2","7.3","7.5","8.2","8.3","8.5","9.4","9.8","9.9","14.0","16.5","17.2","17.3","17.5","18.2","18.3","18.5","19.4","19.8","19.9","20.4","20.5","20.7","20.8","20.10","20.11","21.2","21.4","23.4","23.5","23.7","23.8","23.10","23.11","24.5","24.18","25.2","25.3","25.4"],"当播放器首次可以播放器时触发":["2.1"],"当播放器切换地址后并可以播放时触发":["2.2"],"当播放器暂停时触发":["2.3"],"当播放器播放时触发":["2.4"],"当播放器热键被按下时触发":["2.5"],"当播放器销毁时触发":["2.6"],"当播放器获得焦点时触发":["2.7"],"当播放器失去焦点时触发":["2.8"],"当播放器被双击时触发":["2.9"],"当播放器被单击时触发":["2.10"],"当播放器加载视频发生错误时触发":["2.11"],"当播放器被鼠标移出或者移入时触发":["2.12"],"当播放器被鼠标经过时触发":["2.13"],"当播放器尺寸变化时触发":["2.14"],"当播放器出现在视口时触发":["2.15"],"在移动端":["2.16","3.19","3.20","3.21","3.23","3.24","3.25"],"当锁定的状态发生变化时触发":["2.16"],"当播放器长宽比变化时触发":["2.17"],"当播放器自动设置高度时触发":["2.18"],"当播放器自动设置尺寸时触发":["2.19"],"当播放器发生翻转时触发":["2.20"],"当播放器发生窗口全屏时触发":["2.21"],"当播放器发生窗口全屏错误时触发":["2.22"],"当播放器发生网页全屏时触发":["2.23"],"当播放器进入迷你模式时触发":["2.24"],"当播放器进入画中画时触发":["2.25"],"当播放器被截图时触发":["2.26"],"当播放器发生时间跳转时触发":["2.27"],"当播放器发生字幕偏移时触发":["2.28"],"当字幕更新前触发":["2.29"],"当字幕更新后触发":["2.30"],"当字幕加载时触发":["2.31"],"当信息面板显示或隐藏时触发":["2.32"],"当自定义层显示或隐藏时触发":["2.33"],"当加载器显示或隐藏时触发":["2.34"],"当遮罩层显示或隐藏时触发":["2.35"],"当字幕层显示或隐藏时触发":["2.36"],"当右键菜单显示或隐藏时触发":["2.37"],"当控制器显示或隐藏时触发":["2.38"],"当设置面板显示或隐藏时触发":["2.39"],"当静音的状态变化时触发":["2.40"],"监听来自":["2.41"],"document":["2.41"],"的":["2.41"],"canplay":["2.42","12.42"],"canplaythrough":["2.43","12.43"],"complete":["2.44","12.44"],"durationchange":["2.45","12.45"],"emptied":["2.46","12.46"],"ended":["2.47","12.47"],"error":["2.48","12.48"],"loadeddata":["2.49","12.49"],"loadedmetadata":["2.50","12.50"],"pause":["2.51","12.51"],"play":["2.52","3.19","3.20","12.52","13.19","13.20"],"playing":["2.53","12.53"],"progress":["2.54","12.54","22.36"],"ratechange":["2.55","12.55"],"seeked":["2.56","12.56"],"seeking":["2.57","12.57","13.27"],"stalled":["2.58","12.58"],"suspend":["2.59","12.59"],"timeupdate":["2.60","12.60"],"volumechange":["2.61","12.61"],"waiting":["2.62","12.62"],"是否开始":["3.1"],"模式":["3.1"],"返回播放器样式文本":["3.2"],"是否开启右键菜单":["3.3"],"默认开启":["3.3"],"time":["3.4","3.8","3.9","3.14","3.15","3.16","3.17","3.21","3.22","3.24","13.4","13.8","13.9","13.14","13.15","13.16","13.17","13.21","13.22","13.24"],"提示信息的显示时长":["3.4"],"单位为毫秒":["3.4","3.8","3.9","3.13","3.16","3.17","3.22"],"width":["3.5","3.6","5.29","9.3","13.5","13.6","15.29","15.33"],"设置面板的默认宽度":["3.5"],"单位为像素":["3.5","3.6","3.7","3.10"],"默认为":["3.5","3.6","3.7","3.11","3.17","3.26","3.28","3.29","3.30","3.32","3.33"],"item":["3.6","3.7","13.6","13.7","19.6"],"设置面板的设置项的默认宽度":["3.6"],"height":["3.7","5.29","13.7","15.29"],"设置面板的设置项的默认高度":["3.7"],"事件的节流时间":["3.8","3.9"],"gap":["3.10","13.10"],"view":["3.10","10.12"],"事件的边界容差距离":["3.10"],"playback":["3.11","3.12","3.13","12.53","13.11","13.12","13.13","15.3","22.47"],"max":["3.11","3.14","13.11","13.14"],"自动回放功能的最大记录数":["3.11"],"min":["3.12","13.12"],"自动回放功能的最小记录时长":["3.12"],"单位为秒":["3.12","3.27","5.39"],"timeout":["3.13","13.13"],"自动回放功能的隐藏延迟时长":["3.13"],"发生连接错误时":["3.14","3.15"],"自动连接的最大次数":["3.14"],"sleep":["3.15","13.15"],"自动连接的延迟时间":["3.15"],"hide":["3.16","13.13","13.16"],"底部控制栏的自动隐藏的延迟时间":["3.16"],"双击事件的延迟事件":["3.17"],"fullscreen":["3.18","12.22","13.18"],"在桌面端":["3.18"],"是否双击切换全屏":["3.18"],"dbclick":["3.19","13.19"],"是否双击切换播放暂停":["3.19"],"click":["3.20","13.20"],"是否单击切换播放暂停":["3.20"],"orientation":["3.21","13.21"],"自动旋屏的延迟时间":["3.21"],"loop":["3.22","13.22"],"信息面板的刷新时间":["3.22"],"forward":["3.23","3.24","13.23","13.24"],"value":["3.23","13.23"],"长按加速的速率倍数":["3.23"],"长按加速的延迟时间":["3.24"],"move":["3.25","13.25"],"ratio":["3.25","3.29","13.25","13.29"],"左右滑动进度的速率倍数":["3.25"],"step":["3.26","3.27","13.26","13.27"],"快捷键调节音量的幅度比例":["3.26"],"快捷键调节播放进度的幅度":["3.27"],"rate":["3.28","13.28"],"内置播放速率的列表":["3.28"],"内置视频长宽比的列表":["3.29"],"default":["3.29","13.5","13.6","13.7","22.1","22.2","22.3","22.4","22.5","22.6","22.7","22.8","22.9","22.10","22.11","22.12","22.13","22.14","22.15","22.16","22.17","22.18","22.19","22.20","22.21","22.22","22.23","22.24","22.25","22.26","22.27","22.28","22.29","22.30","22.31","22.32","22.33","22.34","22.35","22.36","22.37","22.38","22.39","22.40","22.41","22.42","22.43","22.44","22.45","22.46","22.47","22.48","22.49","22.50","22.51","26.1","26.2","26.3","26.4","26.5","26.6","26.7","26.8","26.9","26.10","26.11","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.19","26.20","26.21","26.22","26.23","26.24","26.25","26.26","26.27","26.28","26.29","26.30","26.31","26.32","26.33","26.34","26.35","26.36","26.37","26.38","26.39","26.40","26.41","26.42","26.43","26.44","26.45","26.46","26.47","26.48","26.49","26.50","26.51"],"内置视频翻转的列表":["3.30"],"normal":["3.30"],"horizontal":["3.30"],"vertical":["3.30"],"web":["3.31","13.31"],"in":["3.31","12.28","13.17","13.28","13.29","13.30","13.31","19.1","20.10"],"body":["3.31","13.31"],"网页全屏时":["3.31"],"version":["3.32","13.32"],"设置是否打印播放器版本":["3.32"],"raf":["3.33","13.33"],"设置是否使用":["3.33"],"requestanimationframe":["3.33"],"src":["3.34","5.5","13.34","21.2","25.2"],"when":["3.34","10.3","12.1","12.2","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.28","12.31","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","13.34","15.33"],"destroy":["3.34","13.34"],"在销毁播放器时":["3.34"],"是否同时移除视频的":["3.34"],"但你已经知道播放器的":["4.0"],"属性":["4.0","6.1","7.1","8.1","9.2","9.3","9.5","9.6","26.33","26.34","26.36","26.37"],"方法":["4.0"],"后":["4.0"],"再编写插件是非常简单的事":["4.0"],"可以在实例化的时候加载插件的函数":["4.0"],"function":["4.0","5.1","5.2","5.3","5.4","5.5","5.12","5.13","5.17","5.18","5.19","5.27","5.33","5.34","5.37","5.41","5.42","5.44","9.3","15.1","15.2","15.3","15.4","15.5","15.12","15.13","15.17","15.18","15.19","15.27","15.33","15.34","15.37","15.41","15.42","15.44","19.3","22.4","22.51","26.4","26.51"],"myplugin":["4.0"],"art":["4.0","5.12","7.2","15.12","17.2"],"console":["4.0"],"info":["4.0"],"return":["4.0"],"something":["4.0"],"type":["5.1","5.2","5.3","5.4","5.5","5.6","5.7","5.8","5.9","5.10","5.11","5.12","5.13","5.14","5.15","5.16","5.17","5.18","5.19","5.20","5.21","5.22","5.23","5.24","5.25","5.26","5.27","5.28","5.30","5.31","5.32","5.33","5.34","5.36","5.37","5.38","5.39","5.40","5.41","5.42","5.43","5.44","5.45","5.46","5.47","15.1","15.2","15.3","15.4","15.5","15.6","15.7","15.8","15.9","15.10","15.11","15.12","15.13","15.14","15.15","15.16","15.17","15.18","15.19","15.20","15.21","15.22","15.23","15.24","15.25","15.26","15.27","15.28","15.29","15.30","15.31","15.32","15.33","15.34","15.36","15.37","15.38","15.39","15.40","15.41","15.42","15.43","15.44","15.45","15.46","15.47","16.1","17.1","18.1","19.2","19.3","19.5","19.6","20.10","22.1","22.2","22.3","22.4","22.5","22.6","22.7","22.8","22.9","22.10","22.11","22.12","22.13","22.14","22.15","22.16","22.17","22.18","22.19","22.20","22.21","22.22","22.23","22.24","22.25","22.26","22.27","22.28","22.29","22.30","22.31","22.32","22.33","22.34","22.35","22.36","22.37","22.38","22.39","22.41","22.42","22.43","22.44","22.45","22.46","22.47","22.48","22.49","22.50","22.51","26.1","26.2","26.3","26.4","26.5","26.6","26.7","26.8","26.9","26.10","26.11","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.19","26.20","26.21","26.22","26.23","26.24","26.25","26.26","26.27","26.28","26.29","26.30","26.31","26.32","26.33","26.34","26.35","26.36","26.37","26.38","26.39","26.41","26.42","26.43","26.44","26.45","26.46","26.47","26.48","26.49","26.50","26.51"],"播放视频":["5.1"],"暂停视频":["5.2"],"切换视频的播放和暂停":["5.3"],"parameter":["5.4","5.6","5.7","5.8","5.9","5.10","5.11","5.12","5.13","5.14","5.15","5.20","5.21","5.22","5.23","5.24","5.25","5.26","5.30","5.31","5.32","5.34","5.35","5.36","5.45","5.46","5.47","15.4","15.6","15.7","15.8","15.9","15.10","15.11","15.12","15.13","15.14","15.15","15.20","15.21","15.22","15.23","15.24","15.25","15.26","15.30","15.31","15.32","15.34","15.35","15.36","15.45","15.46","15.47","22.4"],"boolean":["5.4","5.14","5.20","5.21","5.22","5.25","7.1","15.4","15.14","15.20","15.21","15.22","15.24","15.25","16.1","17.1","18.1","22.8","22.9","22.10","22.11","22.12","22.13","22.14","22.15","22.16","22.17","22.18","22.19","22.20","22.21","22.22","22.23","22.24","22.25","22.26","22.27","22.28","22.44","22.45","22.46","22.47","22.48","22.49","26.8","26.9","26.10","26.11","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.19","26.20","26.21","26.22","26.23","26.24","26.25","26.26","26.27","26.28","26.44","26.45","26.46","26.47","26.48","26.49"],"重置播放器的视频元素":["5.5"],"会移除当前":["5.5"],"并调用一次":["5.5"],"setter":["5.6","5.7","5.8","5.9","5.10","5.11","5.14","5.15","5.20","5.21","5.22","5.23","5.24","5.26","5.30","5.31","5.32","5.35","5.36","5.45","5.46","5.47","15.6","15.7","15.8","15.9","15.10","15.11","15.14","15.15","15.20","15.21","15.22","15.23","15.24","15.26","15.30","15.31","15.32","15.35","15.36","15.45","15.46","15.47"],"number":["5.6","5.7","5.8","5.9","5.15","5.31","13.14","15.6","15.7","15.8","15.9","15.15","15.31","15.47","21.0","22.7","26.7"],"getter":["5.9","5.10","5.14","5.15","5.16","5.20","5.21","5.22","5.23","5.24","5.25","5.26","5.28","5.30","5.31","5.32","5.35","5.36","5.38","5.39","5.40","5.46","5.47","15.9","15.10","15.14","15.15","15.16","15.20","15.21","15.22","15.23","15.24","15.25","15.26","15.28","15.29","15.30","15.31","15.32","15.35","15.36","15.38","15.39","15.40","15.46","15.47"],"string":["5.11","5.12","5.13","5.23","5.26","5.30","5.32","5.34","5.35","5.36","9.2","9.3","9.5","9.6","15.10","15.11","15.12","15.13","15.23","15.26","15.30","15.32","15.34","15.35","15.36","19.2","19.3","19.5","19.6","22.1","22.2","22.3","22.5","22.6","22.40","22.42","26.1","26.2","26.3","26.5","26.6","26.40","26.42"],"设置视频地址":["5.11","5.12"],"设置时和":["5.11","5.12"],"设置视频画质地址":["5.13"],"获取视频时长":["5.16"],"下载当前视频帧的截图":["5.17"],"可选参数为截图名字":["5.17"],"获取当前视频帧的截图的":["5.18","5.19"],"base64":["5.18","15.18"],"地址":["5.18","5.19"],"blob":["5.19","15.19"],"设置和获取视频海报":["5.23"],"获取或设置播放器当前状态":["5.26"],"设置视频是否自适应尺寸":["5.27"],"获取播放器的尺寸和坐标信息":["5.28"],"top":["5.29","15.29"],"left":["5.29","15.29"],"right":["5.29","15.29"],"x":["5.29","15.29"],"y":["5.29","15.29"],"当容器只有宽度":["5.33"],"该属性可以自动计算出并设置视频的高度":["5.33"],"动态获取和设置":["5.34"],"开启隔空播放":["5.37"],"视频缓存的比例":["5.38"],"范围是":["5.38","5.40"],"已缓存的媒体时长":["5.39"],"视频播放的比例":["5.40"],"事件的代理函数":["5.41"],"实质上代理了":["5.41"],"的查询函数":["5.42"],"element":["5.43","9.2","9.3","9.5","9.6","15.5","15.43","19.2","19.3","19.5","19.6","22.1","26.1"],"快捷返回播放器的":["5.43"],"动态获取或设置":["5.44"],"css":["5.44"],"变量":["5.44","23.10"],"array":["5.45","9.3","11.1","15.45","19.3","22.29","22.30","22.31","22.32","22.33","22.34","22.35","26.29","26.30","26.31","26.32","26.33","26.34","26.35"],"动态设置画质列表":["5.45"],"object":["5.46","15.46","22.36","22.37","22.38","22.39","22.41","22.43","22.50","26.36","26.37","26.38","26.39","26.41","26.43","26.50"],"类型":["6.1","7.1","8.1","9.2","9.3","9.5","9.6","26.34","26.36","26.37"],"描述":["6.1","7.1","8.1","9.2","9.3","9.5","9.6","26.36"],"disable":["6.1","7.1","8.1","16.1","17.1","18.1"],"var":["7.2","9.4","17.2"],"new":["7.2","17.2","21.3"],"artplayer":["7.2","17.2","20.4","20.5","20.6","20.11","20.12","21.2","22.1","23.5","23.11","23.12","24.18","25.2","25.4","26.1"],"container":["7.2","15.33","17.2"],"须先打开设置面板":["9.1"],"然后自带四个内置项":["9.1"],"flip":["9.1"],"playbackrate":["9.1"],"按钮":["9.2"],"html":["9.2","9.3","9.5","9.6","19.2","19.3","19.5","19.6","20.3","23.3","26.39"],"元素的":["9.2","9.3","9.5","9.6"],"选择列表":["9.3"],"icon":["9.3","9.5","9.6","19.3","19.6"],"元素的图标":["9.3"],"selector":["9.3","19.3"],"元素列表":["9.3"],"onselect":["9.3","19.3"],"元素点击事件":["9.3"],"列表嵌套":["9.4"],"切换按钮":["9.5"],"范围滑块":["9.6"],"properties":["10.0","11.0","13.0","14.0","15.0"],"the":["10.0","10.1","10.2","10.3","10.4","10.6","10.7","10.8","10.9","10.10","10.11","10.12","10.13","10.14","10.15","10.16","10.17","11.2","11.3","11.4","11.5","11.6","11.7","11.8","11.9","11.10","11.11","11.12","12.1","12.2","12.3","12.4","12.6","12.7","12.8","12.9","12.10","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.23","12.24","12.25","12.26","12.27","12.32","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.42","12.43","12.46","12.58","13.2","13.3","13.4","13.5","13.6","13.7","13.8","13.9","13.10","13.11","13.12","13.13","13.14","13.15","13.16","13.17","13.22","13.24","13.26","13.27","13.28","13.29","13.30","13.34","14.0","15.1","15.2","15.4","15.5","15.11","15.12","15.13","15.16","15.18","15.19","15.20","15.22","15.28","15.33","15.38","15.39","15.40","15.45","17.1","19.5","19.6","20.9","20.11","20.13","21.0","21.1","22.1","22.2","22.3","22.4","22.5","22.6","22.7","22.11","22.22","22.33","22.34","22.36","22.37","22.40","22.41","22.47","22.51"],"player":["10.1","10.2","10.3","10.4","10.6","10.7","10.8","10.9","10.10","10.11","10.12","10.13","10.14","10.15","10.16","10.17","11.1","12.0","12.1","12.2","12.3","12.4","12.6","12.7","12.8","12.9","12.10","12.14","12.15","12.17","12.18","12.19","12.20","12.21","12.23","12.24","12.25","12.26","12.27","14.0","15.5","15.28"],"s":["10.1","10.4","10.6","10.7","10.8","10.9","10.10","10.11","10.12","10.13","10.14","10.15","10.16","10.17","12.17","13.34","14.0","15.5","15.28"],"options":["10.1","22.0"],"manages":["10.2","10.3","10.4","10.5","10.6","10.7","10.8","10.9","10.10","10.11","10.12","10.13","10.14","10.15","10.16","10.17"],"all":["10.2","10.3","10.5","11.1"],"elements":["10.2"],"of":["10.2","11.1","11.6","13.5","13.6","13.7","13.28","13.29","13.30","15.16","15.38","15.39","15.40","15.45","19.5","19.6","21.0"],"for":["10.3","10.5","12.41","13.8","13.9","15.41","20.13"],"it":["10.3","10.7","22.40"],"essentially":["10.3","15.41"],"proxies":["10.3"],"and":["10.3","10.11","12.0","13.34","14.0","15.15","15.20","15.22","15.23"],"using":["10.3"],"local":["10.4"],"property":["10.4","10.11","16.1","17.1","18.1","19.2","19.3","19.5","19.6"],"is":["10.4","10.6","10.8","10.9","10.10","10.14","10.16","12.20","20.13"],"used":["10.4","10.6","10.8","10.9","10.10","10.12","10.16","22.39","22.40","22.50"],"to":["10.4","10.6","10.8","10.9","10.10","10.12","10.16","12.0","13.1","13.3","13.31","13.32","13.33","13.34","15.12","17.1","19.1","21.0","22.10","22.17","22.19","22.22","22.27","22.33","22.39","22.40","22.47","22.50"],"cache":["10.4"],"method":["10.4","10.6","10.8","10.9","10.10","10.14","10.16"],"notifications":["10.7"],"only":["10.7","15.33","20.11"],"dynamically":["10.8","10.9","10.10","10.16","15.34","15.35","15.36","15.44","15.45"],"context":["10.10","12.37","22.31"],"menu":["10.10","16.0"],"functionality":["10.11","10.14","10.17"],"sets":["10.11","13.32","13.33","15.13","15.14","15.15","15.20","15.21","15.22","15.23","15.26","15.27","15.30","15.31","15.32","15.44","15.45"],"information":["10.12","22.34"],"panel":["10.12","10.16","12.39","19.0","22.30"],"commonly":["10.12"],"layer":["10.13","10.15"],"settings":["10.16","12.39","21.0"],"plugin":["10.17","14.0","24.18"],"with":["10.17","12.0","14.0"],"here":["11.0","15.0"],"returns":["11.1","11.2","11.3","11.4","11.5","11.6","11.7","11.8","11.9","11.10","11.11","11.12","13.2","15.43"],"an":["11.1","12.0","12.11","12.48"],"collection":["11.6"],"events":["12.0","12.41","14.0","15.41"],"are":["12.0","12.29","12.30","12.31","14.0","21.2"],"divided":["12.0"],"into":["12.0"],"two":["12.0"],"types":["12.0"],"native":["12.0"],"prefixed":["12.0"],"custom":["12.0","12.33","22.29","22.30","22.31","22.32","22.35","22.43"],"listen":["12.0"],"event":["12.0"],"triggered":["12.1","12.2","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.28","12.29","12.30","12.31","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40"],"switches":["12.2"],"a":["12.5","12.22","15.17","15.33","15.41","15.42","20.13","21.3","22.4"],"occurs":["12.11"],"mouse":["12.12","12.13"],"enters":["12.12","12.21","12.23","12.24","12.25"],"state":["12.16"],"automatically":["12.18","22.12"],"window":["12.22"],"subtitle":["12.28","22.25"],"offset":["12.28"],"changes":["12.28"],"before":["12.29","21.2"],"subtitles":["12.29","12.30","12.31"],"updated":["12.29","12.30"],"after":["12.30"],"loaded":["12.31"],"layers":["12.33"],"loader":["12.34"],"controls":["12.38","22.38","26.38"],"mute":["12.40"],"listens":["12.41"],"browser":["12.42"],"media":["12.46","15.39"],"has":["12.46","15.33"],"these":["13.0"],"whether":["13.1","13.3","13.18","13.31","13.32","13.33","13.34","15.27","16.1","17.1","18.1","20.13","22.10","22.14","22.15","22.16","22.17","22.18","22.19","22.20","22.22","22.23","22.24","22.27","22.33","22.44","22.45","22.46","22.47","22.48","22.49"],"enable":["13.1","13.3","22.8","22.19","22.22"],"mode":["13.1"],"display":["13.4","22.17","22.33","22.34"],"duration":["13.4"],"throttle":["13.8","13.9"],"boundary":["13.10"],"tolerance":["13.10"],"distance":["13.10"],"maximum":["13.11","13.14"],"record":["13.11","13.12"],"minimum":["13.12"],"delay":["13.13","13.15","13.16","13.17"],"on":["13.18","13.19","13.20","13.21","13.23","13.24","13.25","22.34","22.36","22.41"],"desktop":["13.18"],"devices":["13.19","13.20","13.21","13.23","13.24","13.25"],"mobile":["13.21","13.23","13.24","13.25","20.13"],"refresh":["13.22"],"interval":["13.22"],"adjustment":["13.26"],"built":["13.28","13.29","13.30"],"list":["13.28","13.29","13.30","15.45","19.3"],"determines":["13.31","13.34"],"attribute":["13.34"],"plugins":["14.0"],"once":["14.0"],"you":["14.0","19.1","20.9"],"familiar":["14.0"],"methods":["14.0"],"becomes":["14.0"],"very":["14.0"],"straightforward":["14.0"],"can":["14.0","20.9"],"load":["14.0"],"functions":["14.0"],"during":["14.0"],"instantiation":["14.0"],"removes":["15.5"],"rewind":["15.8"],"similar":["15.12"],"gets":["15.15","15.16","15.18","15.19","15.20","15.22","15.23","15.25","15.26","15.28","15.34","15.44"],"downloads":["15.17"],"or":["15.26","15.44"],"defined":["15.33"],"this":["15.33","22.43"],"initiates":["15.37"],"proportion":["15.38","15.40"],"amount":["15.39"],"proxying":["15.41"],"quickly":["15.43"],"description":["16.1","17.1","18.1","19.2","19.3","19.5","19.6"],"control":["17.1","22.32"],"first":["19.1"],"need":["19.1"],"open":["19.1"],"buttons":["19.2"],"selection":["19.3","22.33"],"lists":["19.3","19.4"],"nested":["19.4"],"button":["19.5"],"range":["19.6"],"slider":["19.6"],"usage":["20.0"],"group":["20.1","20.2","20.3","20.4","20.5","23.1","23.2","23.3","23.4","23.5","24.2","24.3"],"bash":["20.2","23.2","24.2","24.3"],"index":["20.3","23.3","24.18"],"head":["20.3"],"jsx":["20.5","20.8","23.5","23.8"],"import":["20.5","21.4","23.5","23.9","25.4"],"from":["20.5","21.4","23.5","25.4"],"useeffect":["20.5","23.5"],"useref":["20.5"],"also":["20.9"],"use":["20.9","22.27","22.47"],"sometimes":["20.10"],"your":["20.10"],"files":["20.10","21.2"],"may":["20.10"],"lose":["20.10"],"typescript":["20.10","23.10"],"hints":["20.10"],"browsers":["20.11"],"production":["20.11"],"build":["20.11"],"supports":["20.11"],"latest":["20.11"],"major":["20.11"],"module":["20.12","23.12"],"tip":["20.12","23.12"],"esm":["20.12","23.12"],"demo":["20.12","23.12"],"https":["20.12","23.12"],"org":["20.12","23.12"],"useragent":["20.13","23.13"],"currently":["20.13"],"detection":["20.13"],"device":["20.13"],"danger":["21.0","25.0"],"due":["21.0"],"increasing":["21.0"],"languages":["21.1","21.2","21.4"],"language":["21.2","21.3","22.42","26.42"],"bundling":["21.2"],"located":["21.2"],"at":["21.2"],"i18n":["21.2","25.2"],"zhtw":["21.4","25.4"],"where":["22.1"],"source":["22.2"],"unique":["22.3"],"undefined":["22.4","22.51","26.4","26.51"],"constructor":["22.4"],"accepts":["22.4"],"as":["22.4"],"second":["22.4"],"which":["22.4"],"f00":["22.6","26.6"],"false":["22.8","22.9","22.10","22.11","22.12","22.13","22.14","22.15","22.16","22.17","22.18","22.20","22.23","22.24","22.25","22.26","22.27","22.38","22.44","22.46","22.47","22.48","22.49","26.10","26.11","26.12","26.14","26.15","26.16","26.17","26.25","26.27","26.38","26.44","26.47","26.49"],"by":["22.11"],"true":["22.19","22.21","22.22","22.28","22.45","26.19","26.22"],"hotkeys":["22.19"],"if":["22.21"],"blur":["22.22"],"timing":["22.25"],"mini":["22.26"],"ssr":["22.27","26.27"],"initialize":["22.29","22.30","22.31","22.32","22.35"],"bottom":["22.32"],"preview":["22.36"],"bar":["22.36"],"supported":["22.37"],"formats":["22.37"],"vtt":["22.37","26.37"],"srt":["22.37","26.37"],"preload":["22.38"],"metadata":["22.38"],"replace":["22.39"],"specify":["22.40"],"format":["22.40"],"needs":["22.40"],"be":["22.40","22.43"],"matches":["22.41"],"based":["22.41"],"navigator":["22.42","26.42"],"configuration":["22.43"],"will":["22.43"],"deeply":["22.43"],"merged":["22.43"],"automatic":["22.47"],"导入":["23.6"],"你也可以使用选项的类型":["23.9"],"ts":["23.9"],"有时你的":["23.10"],"文件会丢失":["23.10"],"的类型提示":["23.10"],"这时候你可以手动导入类型":["23.10"],"生产构建的":["23.11"],"只兼容最新一个主版本的":["23.11"],"chrome":["23.11"],"last":["23.11"],"目前对于是否移动设备的判断并不准确":["23.13"],"有时候希望通过改变":["23.13"],"来调整播放器的ui":["23.13"],"查看完整演示":["24.1"],"jsdelivr":["24.3"],"每一个弹幕是一个对象":["24.4"],"多个弹幕组成的数组就是弹幕库":["24.4"],"通常只需要":["24.4"],"text":["24.4"],"只有":["24.5"],"danmuku":["24.5","24.18"],"是必须的参数":["24.5"],"其余都是非必填":["24.5"],"弹幕数据":["24.5"],"speed":["24.5"],"弹幕持续时间":["24.5"],"范围在":["24.5"],"margin":["24.5"],"来自用户输入的弹幕":["24.6"],"beforeemit":["24.6"],"filter":["24.6"],"beforevisible":["24.6"],"artplayerplugindanmuku":["24.6"],"visible":["24.6"],"来自服务器的弹幕":["24.6"],"xml":["24.8"],"弹幕":["24.8"],"文件":["24.8"],"data":["24.9","24.11","24.12","24.13","24.14","24.18"],"通过方法":["24.10","24.12","24.13"],"进行隐藏或者显示弹幕":["24.10"],"通过属性":["24.11"],"判断当前弹幕是隐藏或者显示":["24.11"],"发送一条实时弹幕":["24.12"],"libs":["24.12","24.13","24.14","24.18"],"实时改变弹幕配置":["24.13"],"uncompiled":["24.13","24.14","24.18"],"通过":["24.14"],"方法可以重载弹幕库":["24.14"],"或者切换新弹幕库":["24.14"],"或者追加新的弹幕库":["24.14"],"用于清空当前显示的弹幕":["24.15"],"在初始化弹幕插件的时候":["24.16"],"是可以指定弹幕发射器的挂载位置的":["24.16"],"默认是挂载在控制栏的中部":["24.16"],"你也可以把它挂载在播放器以外的地方":["24.16"],"当播放器全屏的时候":["24.16"],"发射器会自动回到控制栏的中部":["24.16"],"假如你挂载的地方是亮色的话":["24.16"],"建议把":["24.16"],"用于获取当前弹幕配置":["24.17"],"鉴于捆绑的多国语言越来越多":["25.0"],"从":["25.0"],"默认语言有":["25.1"],"en":["25.1"],"zh":["25.1"],"打包前的语言文件存放于":["25.2"],"欢迎来添加你的语言":["25.2"],"打包后的语言文件存放于":["25.2"],"dist":["25.2"],"播放器挂载的":["26.1"],"视频源地址":["26.2"],"播放器的唯一标识":["26.3"],"构造函数接受一个函数作为第二个参数":["26.4"],"播放器初始化成功且视频可以播放时触发":["26.4"],"ready":["26.4"],"视频的海报":["26.5"],"是否自动播放":["26.10"],"是否使用快捷键":["26.19"],"是否开启播放器":["26.22"],"字幕时间偏移":["26.25"],"是否使用":["26.27"],"初始化自定义的":["26.29","26.30","26.31","26.35"],"层":["26.29"],"设置面板":["26.30"],"右键菜单":["26.31"],"初始化自定义的底部":["26.32"],"控制栏":["26.32"],"是否在底部控制栏里显示":["26.33"],"画质选择":["26.33"],"列表":["26.33"],"在进度条上显示":["26.34"],"高亮信息":["26.34"],"插件":["26.35"],"在进度条上设置":["26.36"],"预览图":["26.36"],"设置视频的字幕":["26.37"],"支持字幕格式":["26.37"],"ass":["26.37"],"用于替换默认图标":["26.39"],"支持":["26.39"],"用于指明视频的格式":["26.40"],"需要配合":["26.40"],"customtype":["26.40"],"通过视频的":["26.41"],"自定义":["26.43"],"配置":["26.43"],"该配置会和自带的":["26.43"],"进行深度合并":["26.43"],"新增你的语言":["26.43"],"是否使用自动":["26.47"],"回放功能":["26.47"],"用于改变内置的css变量":["26.50"]},{"0":["3.25","3.26","5.9","13.28","21.0","24.5","25.0"],"1":["3.26","3.28","5.9","5.38","5.40","13.28","20.11","21.0","23.10","25.0"],"2":["3.28","20.8","20.12","23.8","23.12","23.13"],"3":["3.23","13.29","20.9","22.2","23.10","26.2"],"4":["6.2","13.29","16.2","21.3","22.47","23.13","26.43"],"5":["3.12","3.14","3.25","3.27","13.28","20.12","21.0","22.29","22.30","23.12","23.13","25.0","26.29","26.30"],"6":["2.0","6.3","7.3","12.0","16.3","17.3","20.12","23.12"],"7":["26.7"],"9":["3.29","9.7","19.7","21.3","26.43"],"10":["2.2","3.11","7.2","17.2"],"11":["2.28"],"13":["6.2","6.3","16.2","16.3"],"14":["9.7","19.7"],"15":["14.0"],"16":["3.29","13.29"],"19":["5.45"],"21":["6.4","6.5","7.3","7.4","8.4","16.4","16.5","17.3","17.4","18.4"],"22":["8.2","8.3","9.8","18.2","18.3","19.8"],"23":["22.29","26.29"],"24":["6.5","16.5"],"25":["3.28","24.5"],"29":["5.45","8.5","18.5"],"34":["22.30","26.30"],"35":["3.7"],"40":["7.5","17.5"],"50":["3.10"],"75":["13.28"],"200":["3.6","3.8","3.9","3.21"],"300":["3.17"],"1000":["3.15","3.22","3.24"],"2000":["3.4"],"3000":["3.13","3.16"],"code":["0.1","0.2","0.4","0.5","0.6","0.7","0.13","0.14","0.15","0.16","0.17","1.1","1.6","2.1","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","3.3","3.5","3.6","3.7","3.17","3.29","3.30","5.1","5.2","5.3","5.12","5.14","5.16","5.17","5.20","5.21","5.22","5.23","5.25","5.27","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.44","5.45","5.46","9.3","10.1","10.2","10.5","12.0","12.20","12.28","12.29","12.30","12.31","15.2","15.12","15.16","15.20","15.22","15.37","15.44","15.45","19.3","22.1","22.10","22.19","22.30","22.31","22.32","22.35","22.43","22.47","24.10","24.16","25.2","26.1","26.4","26.10","26.19","26.30","26.31","26.32","26.35","26.39","26.43","26.47","26.50"],"js":["0.2","0.4","0.14","0.17","2.2","2.18","2.22","2.24","2.28","2.29","2.30","2.31","5.45","6.2","6.3","6.4","7.4","8.4","9.3","9.6","9.7","10.2","12.0","15.16","16.2","16.3","16.4","17.4","18.4","19.3","19.7","21.3","22.2","22.10","22.19","22.29","22.30","22.47","24.4","24.6","24.11","24.12","24.13","24.14","25.1","26.2","26.4","26.29","26.30","26.32","26.43"],"var":["0.2","0.4","2.0","4.0","5.45","6.2","6.3","6.4","6.5","7.3","7.4","7.5","8.2","8.3","8.4","8.5","9.3","9.7","9.8","9.9","10.2","12.0","14.0","16.2","16.3","16.4","16.5","17.3","17.4","17.5","18.2","18.3","18.4","18.5","19.3","19.4","19.7","19.8","19.9","21.3","21.4","22.2","22.29","22.30","24.13","24.14","24.18","25.3","25.4","26.2","26.29","26.30"],"proxy":["0.3"],"方法用于代理":["0.3"],"hover":["0.3"],"方法用于代理自定义的":["0.3"],"div":["0.3","0.6","0.8","0.9","0.10","0.13","0.15","0.16","1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.11","1.12","2.41","3.1","3.2","3.4","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.15","3.16","3.17","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.28","3.29","3.30","3.32","3.33","5.6","5.7","5.8","5.9","5.10","5.11","5.12","5.13","5.14","5.15","5.17","5.18","5.19","5.20","5.21","5.22","5.23","5.24","5.25","5.27","5.30","5.31","5.32","5.34","5.35","5.36","5.39","5.41","5.43","5.44","5.46","5.47","9.1","9.3","10.5","12.0","12.2","12.3","12.4","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.16","12.17","12.18","12.19","12.20","12.22","12.24","12.26","12.27","12.28","12.29","12.30","12.31","12.33","12.34","12.38","12.39","12.40","12.41","15.1","15.2","15.3","15.12","15.16","15.20","15.22","15.28","15.33","15.37","15.44","15.45","15.46","15.47","19.3","20.4","22.1","22.7","22.10","22.19","22.31","22.32","22.35","22.39","22.43","22.47","23.4","24.8","24.16","26.1","26.3","26.4","26.5","26.7","26.8","26.9","26.10","26.13","26.17","26.19","26.21","26.26","26.35","26.39","26.43","26.45","26.46","26.47","26.50"],"classname":["0.4","0.5","0.6","0.7","0.8","0.9","0.10","0.13","0.14","0.15","0.16","1.1","1.2","1.3","1.4","1.5","1.6","1.7","1.8","1.9","1.10","1.12","2.41","3.1","3.2","3.3","3.4","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.16","3.17","3.18","3.19","3.20","3.22","3.23","3.26","3.27","3.29","3.30","3.32","3.33","5.1","5.2","5.3","5.6","5.7","5.8","5.9","5.10","5.11","5.12","5.13","5.14","5.16","5.17","5.18","5.19","5.20","5.21","5.22","5.23","5.24","5.25","5.27","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.43","5.44","5.46","5.47","9.1","9.3","10.1","10.5","12.0","12.2","12.3","12.4","12.6","12.7","12.8","12.9","12.10","12.17","12.18","12.20","12.22","12.24","12.26","12.28","12.29","12.30","12.31","12.40","12.41","15.1","15.2","15.3","15.12","15.16","15.20","15.22","15.28","15.33","15.37","15.44","15.45","15.46","19.3","22.1","22.7","22.10","22.19","22.31","22.32","22.35","22.43","22.47","24.8","24.10","24.16","26.1","26.3","26.4","26.5","26.7","26.9","26.10","26.13","26.17","26.19","26.31","26.32","26.35","26.39","26.43","26.45","26.46","26.47","26.50"],"run":["0.4","0.5","0.6","0.7","0.10","0.13","0.14","0.15","0.16","0.17","1.1","1.6","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.13","2.14","2.15","2.16","2.19","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.40","2.41","3.3","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.17","3.22","3.29","3.30","3.32","5.1","5.2","5.3","5.8","5.10","5.12","5.14","5.16","5.17","5.18","5.19","5.20","5.21","5.22","5.23","5.25","5.27","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.44","5.46","5.47","9.1","9.3","10.1","10.2","10.5","12.0","12.2","12.6","12.7","12.8","12.10","12.20","12.22","12.28","12.29","12.30","12.31","15.1","15.2","15.3","15.12","15.16","15.20","15.22","15.28","15.37","15.44","15.45","19.3","22.1","22.7","22.10","22.19","22.30","22.31","22.32","22.35","22.43","22.47","24.8","24.10","24.16","26.1","26.4","26.5","26.7","26.10","26.19","26.31","26.32","26.35","26.39","26.43","26.47","26.50"],"art":["0.4","0.12","2.0","5.11","5.13","5.45","6.2","6.3","6.4","6.5","7.3","7.4","7.5","8.2","8.3","8.5","9.3","9.4","9.7","9.8","9.9","10.2","12.0","14.0","15.11","15.13","16.2","16.3","16.4","16.5","17.3","17.4","17.5","18.2","18.3","18.5","19.3","19.4","19.7","19.8","19.9","22.2","23.10","24.14","24.18","25.3","25.4","26.2"],"new":["0.4","2.0","4.0","6.2","6.3","6.4","6.5","7.3","7.4","7.5","8.3","9.3","9.4","9.7","9.8","9.9","10.2","12.0","14.0","16.2","16.3","16.4","16.5","17.3","17.4","17.5","18.3","19.4","19.7","19.8","19.9","22.2","24.14","24.18","25.3","26.2"],"artplayer":["0.4","2.0","4.0","5.5","6.2","6.3","6.4","6.5","7.3","7.4","7.5","9.3","9.4","9.8","9.9","12.0","14.0","16.2","16.3","16.4","16.5","17.3","17.4","17.5","19.4","19.8","19.9","20.3","21.4","22.2","23.3","23.4","23.6","23.9","23.10","24.6","24.7","24.9","24.10","24.11","24.12","24.13","24.14","24.15","24.17","26.2"],"container":["0.4","2.0","4.0","6.4","6.5","7.3","7.5","9.3","9.4","9.8","9.9","12.0","14.0","16.4","16.5","17.3","17.5","19.4","19.8","19.9","20.4","20.5","22.2","22.11","23.5","24.18","26.11"],"方法用于更新":["0.6"],"对象":["0.6"],"方法用于动态更新层":["0.8"],"show":["0.8","0.9","0.10","0.12","0.16","10.7"],"属性用于设置是否显示全部层":["0.8"],"toggle":["0.8","0.9","0.10","0.16","22.18"],"方法用于切换是否显示全部层":["0.8"],"方法用于动态更新控制器":["0.9"],"属性用于设置是否显示全部控制器":["0.9"],"方法用于切换是否显示全部控制器":["0.9"],"属性用于设置是否显示全部菜单":["0.10"],"方法用于切换是否显示全部菜单":["0.10"],"方法设置当前字幕地址和选项":["0.11"],"texttrack":["0.11"],"获取当前字幕轨":["0.11"],"activecues":["0.11"],"获取当前活跃的字幕列表":["0.11"],"cues":["0.11"],"通过":["0.12"],"控制面板的显示与隐藏":["0.12"],"触发的事件名为":["0.12"],"属性用于切换是否显示加载层":["0.13"],"属性用于切换是否显示遮罩层":["0.15"],"属性用于设置是否显示全部设置项":["0.16"],"方法用于切换是否显示全部设置项":["0.16"],"字符串":["1.11"],"app":["2.0","4.0","7.2","7.5","9.3","9.4","9.8","9.9","12.0","14.0","17.2","17.5","19.4","19.8","19.9","22.2","24.18"],"url":["2.0","4.0","5.11","7.2","7.5","9.4","9.9","12.0","14.0","15.11","15.13","17.2","17.5","19.4","19.9","22.36","22.37","24.18","26.36","26.37"],"assets":["2.0","4.0","7.2","8.2","8.3","8.4","8.5","9.4","9.9","12.0","14.0","17.2","18.2","18.3","18.4","18.5","19.4","19.9","22.2","22.29","24.18","26.29"],"sample":["2.0","4.0","7.2","8.2","8.3","8.4","8.5","9.4","9.9","12.0","14.0","17.2","18.2","18.3","18.4","18.5","19.4","19.9","22.29","24.18","26.29"],"mp4":["2.0","4.0","7.2","12.0","14.0","17.2","24.18"],"on":["2.0","4.0","12.5","12.16","14.0","19.6","22.21","22.45"],"canplay":["2.0"],"事件":["2.41"],"浏览器可以播放媒体文件了":["2.42"],"浏览器估计它可以在不停止内容缓冲的情况下播放媒体直到结束":["2.43"],"offlineaudiocontext":["2.44","12.44"],"duration":["2.45","13.12","13.13"],"媒体内容变为空":["2.46"],"例如":["2.46"],"视频停止播放":["2.47"],"获取媒体数据时出错":["2.48"],"media":["2.49","12.59","13.34"],"已加载元数据":["2.50"],"播放已暂停":["2.51"],"播放已开始":["2.52"],"由于缺乏数据而暂停或延迟后":["2.53"],"在浏览器加载资源时周期性触发":["2.54"],"播放速率发生变化":["2.55"],"跳帧":["2.56","2.57"],"用户代理":["2.58"],"媒体数据加载已暂停":["2.59"],"currenttime":["2.60"],"音量发生变化":["2.61"],"由于暂时缺少数据":["2.62"],"可以打印出视频全部的内置事件":["3.1"],"默认关闭":["3.1"],"默认为":["3.4","3.8","3.9","3.10","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.27","3.31","3.34","5.4"],"单位为毫秒":["3.15","3.21","3.24"],"true":["3.18","3.19","3.31","3.32","3.34","5.4","26.21","26.28","26.45"],"false":["3.20","3.33","13.33","26.8","26.9","26.13","26.18","26.20","26.23","26.24","26.26","26.46","26.48"],"是否把播放器挂在在":["3.31"],"元素下":["3.31"],"目前主要用于进度条的平滑效果":["3.33"],"属性并调用":["3.34"],"load":["3.34","5.5","13.34","15.5"],"以主动释放媒体资源":["3.34"],"开启后可以在单页应用或频繁创建":["3.34"],"销毁播放器的场景下":["3.34"],"dosomething":["4.0","14.0"],"video":["4.0","5.34","5.38","5.40","7.2","9.4","9.9","10.12","12.11","14.0","15.1","15.2","15.7","15.8","15.9","15.10","15.14","15.15","15.17","15.23","15.25","15.27","15.33","15.34","15.35","15.38","15.40","17.2","19.4","19.9","22.4","22.13","22.14","22.15","22.16","22.17","24.18","26.41"],"plugins":["4.0"],"ready":["4.0","12.53","14.0","22.4"],"可以在实例化之后再加载插件的函数":["4.0"],"销毁播放器":["5.4"],"接受一个参数表示是否销毁后同时移除播放器的":["5.4"],"html":["5.4","20.12","22.39","23.12","26.27","26.33"],"常用于在单页应用中手动释放媒体资源或重新初始化视频标签":["5.5"],"注意":["5.5"],"全局配置":["5.5"],"remove":["5.5","10.8","10.9","10.10","10.14","10.16"],"视频时间跳转":["5.6"],"单位秒":["5.6","5.7","5.8","26.34"],"视频时间快进":["5.7"],"视频时间快退":["5.8"],"设置和获取视频音量":["5.9"],"范围在":["5.9","26.25"],"string":["5.10","6.1","7.1","8.1","11.11","16.1","17.1","18.1","22.36","22.37","26.33","26.34","26.36","26.37"],"设置和获取视频地址":["5.10"],"类似":["5.11","5.12","5.13","5.15","5.42"],"但会执行一些优化操作":["5.11","5.12"],"switchurl":["5.13","15.13"],"但会带上之前的播放进度":["5.13"],"设置和获取视频是否静音":["5.14"],"设置和获取视频当前时间":["5.15"],"设置时间时和":["5.15"],"seek":["5.15"],"但它不会触发额外的事件":["5.15"],"返回的是一个":["5.18","5.19"],"promise":["5.18","5.19"],"设置和获取播放器窗口全屏":["5.20"],"设置和获取播放器网页全屏":["5.21"],"设置和获取播放器画中画模式":["5.22"],"只有在视频播放前才能看到海报效果":["5.23"],"boolean":["5.24","6.1","8.1","9.5","19.5","26.33"],"设置和获取播放器迷你模式":["5.24"],"获取视频是否正在播放中":["5.25"],"支持":["5.26","5.30"],"standard":["5.26","15.26"],"正常":["5.26"],"mini":["5.26","22.12"],"迷你窗":["5.26"],"pip":["5.26"],"type":["5.29","20.9","23.9","23.10"],"getter":["5.29"],"这些属性是对":["5.29"],"rect":["5.29","15.29"],"的快捷访问":["5.29"],"设置和获取播放器翻转":["5.30"],"normal":["5.30","13.30"],"horizontal":["5.30","13.30"],"vertical":["5.30"],"设置和获取播放器播放速度":["5.31"],"设置和获取播放器长宽比":["5.32"],"元素的属性":["5.34"],"动态获取和设置视频类型":["5.35"],"动态获取和设置播放器主题颜色":["5.36"],"常配合":["5.38","5.40"],"timeupdate":["5.38","5.40"],"事件使用":["5.38","5.40"],"通常与":["5.39"],"loaded":["5.39"],"一起使用":["5.39","26.40"],"用于展示缓冲进度细节":["5.39"],"和":["5.41","26.6","26.14","26.15","26.16"],"removeeventlistener":["5.41","15.41"],"当使用":["5.41"],"来处理事件":["5.41"],"播放器销毁时也会自动销毁该事件":["5.41"],"document":["5.42","12.41","15.42"],"queryselector":["5.42","15.42"],"但被查询的对象局限于当前播放器内":["5.42"],"可以避免同类名的错误":["5.42"],"元素":["5.43"],"动态设置缩略图":["5.46"],"number":["5.47","9.2","9.3","19.3","22.34","22.36","26.34","26.36"],"动态设置字幕偏移":["5.47"],"是否禁用组件":["6.1","7.1","8.1"],"name":["6.1","7.1","7.2","8.1","14.0","16.1","17.1","17.2","18.1","22.37","26.37"],"组件唯一名称":["7.1"],"用于标记类名":["7.1"],"index":["7.1","7.2","17.1","17.2","24.6","24.9","24.11","24.12","24.13","24.14"],"controls":["7.2","17.2"],"your":["7.2","17.2","21.2","22.43"],"button":["7.2","17.2","22.18","22.44","22.49"],"img":["8.2","8.3","8.4","8.5","18.2","18.3","18.4","18.5","22.29","26.29"],"layer":["8.2","8.3","8.4","8.5","10.8","12.35","12.36","18.2","18.3","18.4","18.5"],"png":["8.2","8.3","8.5","18.2","18.3","18.5"],"aspectratio":["9.1"],"subtitleoffset":["9.1"],"icon":["9.2","19.2","19.5"],"元素的图标":["9.2","9.5","9.6"],"onclick":["9.2","19.2"],"function":["9.2","9.5","9.6","11.8","11.9","11.10","14.0","19.2","19.6","20.5","23.5","24.6"],"元素点击事件":["9.2"],"width":["9.2","19.3"],"列表宽度":["9.3"],"tooltip":["9.3","9.5","9.6","19.3"],"提示文本":["9.3","9.6"],"switch":["9.5","19.5"],"按钮默认状态":["9.5"],"onswitch":["9.5"],"按钮切换事件":["9.5"],"range":["9.6","15.9","22.25"],"array":["9.6","19.6"],"默认状态数组":["9.6"],"onrange":["9.6","19.6"],"完成时触发的事件":["9.6"],"onchange":["9.6"],"变化时触发的事件":["9.6"],"here":["10.0"],"following":["10.3"],"methods":["10.3"],"to":["10.3","10.13","10.14","10.15","13.0","15.5","15.6","15.11","15.13","15.29","15.41","15.42","16.1","18.1","20.13","21.2","22.4","22.9","22.13","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.28","22.38","22.41","22.44","22.45","22.46","22.48","22.49"],"handle":["10.3","15.41"],"event":["10.3","13.8","13.9","13.10","15.41","19.2","19.3","19.6"],"will":["10.3"],"be":["10.3","11.1"],"automatically":["10.3","12.19","15.33","15.41","22.38"],"destroyed":["10.3","12.6"],"is":["10.3","10.13","10.15","12.1","12.3","12.5","12.6","12.9","12.10","12.32","12.34","12.35","12.36","12.37","12.39","12.53","13.3","13.5","13.28","13.29","13.30","15.14","15.23","15.25","15.41","22.1","22.4","22.40"],"a":["10.4","10.7","10.8","10.9","12.26","12.27","12.56","12.57","13.15","15.4","15.6","15.18","15.19","22.44","22.46","22.51"],"value":["10.4","10.6"],"get":["10.4","15.9","15.10"],"del":["10.4"],"the":["10.5","12.5","12.11","12.28","12.41","12.49","12.55","12.60","12.61","13.0","13.21","13.23","13.25","13.31","13.32","15.7","15.8","15.9","15.10","15.14","15.15","15.17","15.21","15.23","15.24","15.25","15.26","15.27","15.30","15.31","15.32","15.34","15.35","15.36","15.41","15.42","15.43","16.1","18.1","19.1","20.10","22.14","22.15","22.16","22.17","22.18","22.20","22.21","22.23","22.24","22.42","22.43","22.48","22.49"],"player":["10.5","11.6","12.5","12.12","12.13","12.28","13.2","13.31","13.32","13.34","15.4","15.20","15.21","15.22","15.24","15.26","15.30","15.31","15.32","15.36","15.43","20.5","22.1","22.3","22.4","22.6","22.7","22.11","22.12","22.22","22.23","22.24","22.48","23.5"],"an":["10.6","15.17"],"update":["10.6","10.10","10.16"],"has":["10.7","12.47","15.38","15.39","15.40"],"property":["10.7","10.13","10.15","11.1","15.33","22.33","22.34","22.36","22.37"],"for":["10.7","10.17","11.6","11.7","11.8","11.10","11.12","12.1","12.46","13.4","13.10","13.11","13.12","13.13","13.15","13.16","13.17","13.21","13.22","13.23","13.24","13.25","13.26","13.27","17.1","20.11","22.3","22.22"],"displaying":["10.7"],"control":["10.9","22.17","22.33"],"items":["10.10","10.16","13.6","13.7"],"returns":["10.11"],"current":["10.11","10.12","15.5","15.15","15.17","15.18","15.19","15.26"],"style":["10.11"],"method":["10.11","10.17"],"of":["10.11","10.12","11.2","11.3","11.4","13.14","15.15","15.17","15.18","15.19","15.34","20.11","22.7"],"status":["10.12"],"and":["10.12","12.2","15.3","15.5","15.9","15.10","15.14","15.21","15.24","15.28","15.30","15.31","15.32","15.33","15.34","15.35","15.36","15.41","20.12","22.4","22.39","22.41"],"such":["10.12","20.10","22.22"],"as":["10.12","22.22"],"used":["10.13","10.14","10.15","15.5"],"set":["10.13","10.15","15.10","15.33","15.46","15.47"],"whether":["10.13","10.15","13.19","13.20","15.4","15.14","15.25","22.9","22.13","22.28"],"display":["10.13","10.15","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.42","22.44","22.49"],"hotkeys":["10.14"],"only":["10.17","15.23","22.5","22.26"],"add":["10.17","21.2","22.43","22.46"],"dynamically":["10.17","15.46","15.47"],"adding":["10.17"],"refer":["11.0","13.0"],"this":["11.1"],"can":["11.1","12.42","13.1","15.33","20.10","20.11","22.51"],"useful":["11.1","22.27"],"information":["11.2","13.22","15.28"],"environment":["11.3"],"variables":["11.3","15.44","22.50"],"time":["11.4","12.27","12.60","15.6","15.7","15.8","15.15","22.34","26.34"],"default":["11.5","11.12","13.3","13.8","13.9","13.17","13.26","13.28","13.29","13.30","19.5","19.6","20.5","23.5"],"configuration":["11.5"],"utility":["11.6","11.10"],"functions":["11.6"],"validation":["11.7","11.9"],"schema":["11.7"],"constructor":["11.8"],"required":["11.11"],"options":["11.12"],"first":["12.1"],"becomes":["12.2"],"playable":["12.2"],"paused":["12.3"],"starts":["12.4"],"playing":["12.4","12.42"],"pressed":["12.5"],"gains":["12.7"],"loses":["12.8"],"focus":["12.8"],"double":["12.9","13.17","13.18","13.19"],"clicked":["12.9","12.10"],"while":["12.11"],"loading":["12.11"],"or":["12.12","12.15","12.21","12.23","12.24","12.25","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39"],"leaves":["12.12","12.15"],"moves":["12.13"],"over":["12.13"],"s":["12.14","15.20","15.21","15.22","15.26","15.31","15.32","15.36","15.43","22.6","22.11","22.41"],"dimensions":["12.14","15.28","22.11"],"change":["12.14"],"enters":["12.15","22.12"],"viewport":["12.15"],"changes":["12.16","12.17","12.40"],"mobile":["12.16"],"devices":["12.16"],"aspect":["12.17","15.32","22.16"],"ratio":["12.17","22.16"],"adjusts":["12.18","12.19","22.38"],"its":["12.18","12.19","15.27"],"height":["12.18","15.33"],"size":["12.19","15.27","22.11"],"flipped":["12.20"],"exits":["12.21","12.23","12.24","12.25"],"window":["12.21","15.20","22.23"],"mode":["12.21","12.23","12.24","13.18","15.22","22.8","22.12","22.27","22.28","24.5"],"error":["12.22"],"occurs":["12.22"],"web":["12.23","15.21"],"fullscreen":["12.23","22.48"],"picture":["12.25","15.22","22.20"],"in":["12.25","13.4","13.5","13.6","13.7","13.8","13.9","13.10","13.16","13.21","13.22","13.24","13.27","15.6","15.8","15.22","15.39","22.17","22.20","22.33","22.38","22.40","22.43","22.50"],"captures":["12.26"],"performs":["12.27","15.12"],"panel":["12.32","13.5","13.6","13.7","13.22","19.1"],"shown":["12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39"],"hidden":["12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39"],"are":["12.33","12.38","21.1"],"menu":["12.37","13.3","22.31"],"state":["12.40","15.20","15.30","19.5","19.6"],"from":["12.41","15.38","15.40","20.12","21.0","23.9","25.2"],"start":["12.42"],"browser":["12.43"],"estimates":["12.43"],"triggered":["12.45","19.6","22.4"],"become":["12.46"],"empty":["12.46"],"example":["12.46"],"playback":["12.47","12.51","12.52","12.62","15.15","15.31","22.15"],"occurred":["12.48"],"metadata":["12.50","26.38"],"periodically":["12.54"],"user":["12.58"],"agent":["12.58"],"top":["13.0"],"which":["13.1","22.5","22.8"],"print":["13.1","13.32"],"all":["13.1"],"built":["13.1","22.43","22.50"],"context":["13.3"],"notification":["13.4"],"messages":["13.4"],"milliseconds":["13.4","13.8","13.9","13.16","13.17","13.21","13.22","13.24"],"settings":["13.5","13.6","13.7","19.1"],"pixels":["13.5","13.10"],"view":["13.10"],"count":["13.11"],"feature":["13.12","13.13","22.47"],"automatic":["13.14","13.15"],"reconnection":["13.14","13.15"],"attempts":["13.14"],"when":["13.14","13.15","13.25","15.11","15.12","15.41","22.4","22.5","22.12","22.22"],"connection":["13.15"],"auto":["13.16","22.38"],"hiding":["13.16"],"click":["13.17","13.18","13.19","19.2","19.3"],"events":["13.17","22.45"],"toggles":["13.18","13.19","13.20"],"single":["13.20"],"delay":["13.21","13.24"],"speed":["13.23","13.25"],"multiplier":["13.23","13.25"],"activating":["13.24"],"seeking":["13.25"],"keyboard":["13.26","13.27"],"shortcuts":["13.26","13.27"],"seconds":["13.27","15.8","15.39"],"rates":["13.28"],"ratios":["13.29"],"modes":["13.30"],"mount":["13.31","22.27"],"under":["13.31"],"defaults":["13.32","13.33","13.34"],"requestanimationframe":["13.33"],"currently":["13.33","15.25","22.3","22.6","22.42"],"mainly":["13.33"],"call":["13.34"],"actively":["13.34"],"release":["13.34","15.5"],"resources":["13.34","21.0"],"destroying":["13.34"],"myplugin":["14.0"],"console":["14.0"],"info":["14.0"],"return":["14.0","22.51"],"something":["14.0"],"pause":["15.3"],"accepts":["15.4"],"indicating":["15.4"],"src":["15.5"],"calls":["15.5"],"once":["15.5"],"commonly":["15.5"],"manually":["15.5","20.10"],"specific":["15.6"],"fast":["15.7"],"similar":["15.11","15.13","15.42"],"setting":["15.11","15.12","15.15"],"but":["15.12","15.13","15.42"],"some":["15.12"],"optimization":["15.12"],"operations":["15.12"],"quality":["15.13"],"gets":["15.14","15.21","15.24","15.30","15.31","15.32","15.35","15.36"],"frame":["15.17"],"screenshot":["15.18","15.19"],"effect":["15.23","22.22"],"sets":["15.24","15.34","15.35","15.36"],"supported":["15.26","15.30"],"values":["15.26"],"adapts":["15.27"],"coordinate":["15.28"],"these":["15.29"],"properties":["15.29"],"provide":["15.29"],"shortcut":["15.29"],"access":["15.29"],"calculate":["15.33"],"attributes":["15.34"],"element":["15.34"],"that":["15.38","15.39","15.40","22.26"],"been":["15.38","15.39","15.40"],"buffered":["15.38","15.39"],"ranging":["15.38","15.40"],"using":["15.41"],"search":["15.42"],"css":["15.44","17.1","22.50"],"available":["15.45"],"levels":["15.45"],"subtitle":["15.47"],"offset":["15.47","22.25"],"component":["16.1","18.1"],"unique":["16.1","17.1","18.1"],"class":["17.1"],"identification":["17.1"],"it":["19.1","22.38"],"comes":["19.1"],"with":["19.1","22.40","22.43"],"four":["19.1"],"text":["19.3","26.34"],"item":["19.5"],"bash":["20.1","23.1"],"npm":["20.1","23.1","24.2"],"jsdelivr":["20.2","23.2"],"net":["20.2","23.2","24.3"],"https":["20.2","23.2","24.3"],"title":["20.3","23.3"],"demo":["20.3"],"meta":["20.3"],"charset":["20.3"],"utf":["20.3"],"template":["20.4","23.4"],"ref":["20.4"],"export":["20.5","23.5"],"option":["20.5","23.5"],"getinstance":["20.5","23.5"],"rest":["20.5","23.5"],"const":["20.5","23.5"],"d":["20.6"],"import":["20.8","20.9","20.10","23.8","23.10","25.2"],"ts":["20.9","26.40"],"cases":["20.10"],"you":["20.10","20.11","20.13","22.27"],"types":["20.10"],"variable":["20.10"],"version":["20.11","21.0","23.11"],"chrome":["20.11"],"last":["20.11"],"starting":["20.12","21.0"],"not":["20.13"],"entirely":["20.13"],"accurate":["20.13"],"sometimes":["20.13"],"may":["20.13"],"want":["20.13","22.27"],"adjust":["20.13"],"bundled":["21.0"],"multilingual":["21.0"],"en":["21.1","26.42"],"zh":["21.1","21.4","25.4","26.42"],"cn":["21.1","25.1"],"contributions":["21.2"],"welcome":["21.2"],"after":["21.2"],"i18n":["21.4","25.4"],"tw":["21.4","25.4"],"mounted":["22.1"],"identifier":["22.3"],"successfully":["22.4"],"initialized":["22.4"],"play":["22.4"],"image":["22.5","22.36"],"appears":["22.5","22.25","22.26"],"color":["22.6","24.5"],"live":["22.8"],"streaming":["22.8"],"hides":["22.8"],"mute":["22.9"],"by":["22.9","22.40"],"fill":["22.11"],"entire":["22.11"],"enable":["22.13","22.45"],"functionality":["22.14","22.17"],"rate":["22.15"],"bottom":["22.17","22.33"],"multiple":["22.21"],"players":["22.21"],"exist":["22.21"],"simultaneously":["22.21"],"ui":["22.22","26.22"],"enabled":["22.22"],"overlays":["22.22"],"webpage":["22.24"],"within":["22.25"],"5s":["22.25","26.25"],"progress":["22.26","22.34"],"bar":["22.26","22.32","22.33","22.34"],"if":["22.27"],"pre":["22.27"],"render":["22.27"],"use":["22.28"],"list":["22.33"],"description":["22.33","22.34","22.36","22.37"],"thumbnail":["22.36"],"ass":["22.37"],"safari":["22.38","26.38"],"supports":["22.39"],"both":["22.39"],"strings":["22.39"],"htmlelement":["22.39","26.39"],"conjunction":["22.40"],"customtype":["22.40"],"determined":["22.40"],"suffix":["22.40"],"delegates":["22.41"],"decoding":["22.41"],"third":["22.41","22.51"],"tolowercase":["22.42","26.42"],"language":["22.43"],"long":["22.46"],"press":["22.46"],"rotate":["22.48"],"during":["22.48"],"modify":["22.50"],"party":["22.51"],"htmlcanvaselement":["22.51","26.51"],"head":["23.3"],"useref":["23.5"],"let":["23.10"],"null":["23.10"],"参数":["23.10"],"对于古老的浏览器":["23.11"],"可以使用":["23.11"],"legacy":["23.11"],"文件":["23.11"],"从":["23.12"],"开始":["23.12"],"所以在":["23.13"],"开始新增了一个":["23.13"],"install":["24.2"],"就可以发送一个弹幕":["24.4"],"其余都是非必要参数":["24.4"],"弹幕文本":["24.4"],"弹幕上下边距":["24.5"],"支持像素数字和百分比":["24.5"],"opacity":["24.5"],"弹幕透明度":["24.5"],"ffffff":["24.5"],"默认弹幕颜色":["24.5"],"可以被单独弹幕项覆盖":["24.5"],"data":["24.6","24.7","24.10","24.15","24.17"],"libs":["24.6","24.7","24.9","24.10","24.11","24.15","24.17"],"uncompiled":["24.6","24.7","24.9","24.10","24.11","24.12","24.15","24.17"],"plugin":["24.6","24.7","24.9","24.10","24.11","24.12","24.13","24.14","24.15","24.17"],"danmuku":["24.6","24.9","24.11","24.12","24.13","24.14","24.15","24.17"],"保存到数据库":["24.6"],"savedanmu":["24.6"],"bilibili":["24.8"],"网站的弹幕格式一致":["24.8"],"theme":["24.16"],"设置成":["24.16"],"light":["24.16"],"否则会看不清":["24.16"],"无需手动导入":["25.1"],"group":["25.2"],"id":["25.2"],"容器":["26.1"],"目前只用于记忆播放":["26.3"],"autoplayback":["26.3"],"事件一样":["26.4"],"只会出现在播放器初始化且未播放的状态下":["26.5"],"播放器主题颜色":["26.6"],"目前用于":["26.6"],"进度条":["26.6"],"播放器的默认音量":["26.7"],"使用直播模式":["26.8"],"会隐藏进度条和播放时间":["26.8"],"是否默认静音":["26.9"],"播放器的尺寸默认会填充整个":["26.11"],"容器尺寸":["26.11"],"所以经常出现黑边":["26.11"],"该值能自动调整播放器尺寸以隐藏黑边":["26.11"],"当播放器滚动到浏览器视口以外时":["26.12"],"自动进入":["26.12"],"迷你播放":["26.12"],"模式":["26.12","26.28"],"是否循环播放":["26.13"],"是否显示视频翻转功能":["26.14"],"目前只出现在":["26.14"],"设置面板":["26.14","26.15","26.16","26.18","26.22","26.25"],"右键菜单":["26.14","26.15","26.16","26.22"],"是否显示视频播放速度功能":["26.15"],"会出现在":["26.15","26.16"],"是否显示视频长宽比功能":["26.16"],"是否在底部控制栏里显示":["26.17","26.18","26.20"],"视频截图":["26.17"],"功能":["26.17"],"的开关按钮":["26.18","26.20"],"画中画":["26.20"],"假如页面里同时存在多个播放器":["26.21"],"是否只能让一个播放器播放":["26.21"],"的背景虚化效果":["26.22"],"开启后":["26.22"],"是否在底部控制栏里显示播放器":["26.23","26.24"],"窗口全屏":["26.23"],"按钮":["26.23","26.24","26.49"],"网页全屏":["26.24"],"出现在":["26.25"],"迷你进度条":["26.26"],"只在播放器失去焦点后且正在播放时出现":["26.26"],"挂载模式":["26.27"],"假如你希望在播放器挂载前":["26.27"],"就提前渲染好播放器所需的":["26.27"],"时有用":["26.27"],"你可以通过":["26.27"],"在移动端是否使用":["26.28"],"类型":["26.33"],"描述":["26.33","26.34","26.37"],"默认画质":["26.33"],"画质名字":["26.33"],"高亮时间":["26.34"],"高亮文本":["26.34"],"预览图地址":["26.36"],"预览图数量":["26.36"],"column":["26.36"],"字幕名字":["26.37"],"字幕地址":["26.37"],"字幕类型":["26.37"],"可选":["26.37"],"preload":["26.38"],"中会自动调整为":["26.38"],"字符串和":["26.39"],"默认视频的格式就是视频地址的后缀":["26.40"],"如":["26.40"],"m3u8":["26.40"],"mkv":["26.40"],"但有时候视频地地址没有正确的后缀":["26.40"],"进行匹配":["26.41"],"把视频解码权交给第三方程序进行处理":["26.41"],"处理的函数能接收三个参数":["26.41"],"视频":["26.41"],"dom":["26.41"],"默认显示语言":["26.42"],"目前支持":["26.42"],"是否在移动端显示一个":["26.44"],"锁定按钮":["26.44"],"用于隐藏底部":["26.44"],"控制栏":["26.44"],"是否在移动端启用视频元素上的手势事件":["26.45"],"是否在移动端添加长按视频快进功能":["26.46"],"是否在移动端的网页全屏时":["26.48"],"根据视频尺寸和视口尺寸":["26.48"],"旋转播放器":["26.48"],"是否显示":["26.49"],"当前只有部分浏览器支持该功能":["26.49"],"函数可以返回一个第三方的":["26.51"],"或者":["26.51"],"htmlvideoelement":["26.51"],"例如可以代理一个已经存在的":["26.51"]},{"0":["9.6","13.26","15.9","15.38","15.40"],"1":["9.6","13.26","15.9","15.38","15.40","19.6","20.10"],"2":["13.28","22.1","24.5","26.1"],"3":["13.23","20.7","20.10","23.7"],"4":["22.7","22.10","22.19","22.31","22.32","22.39","22.43","25.1","26.10","26.19","26.31","26.32","26.39","26.47","26.50"],"5":["9.6","13.12","13.27","19.6","22.47","26.47"],"6":["2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40"],"7":["2.19","2.21","2.23","2.25","2.26","5.16","5.28","5.33","15.16","15.28","15.33","22.4","26.4","26.39"],"8":["2.17","2.20","5.1","5.14","5.21","5.31","5.32","5.34","5.35","5.36","5.44","12.20","15.44","20.3"],"9":["2.29","2.30","2.31","5.12","5.20","5.22","5.23","5.37","12.29","12.30","12.31","13.29","15.12","15.20","15.22","15.37","22.4","22.43","26.4"],"10":["2.6","2.18","2.24","7.5","9.6","12.2","13.11","17.5","24.4"],"11":["5.2","5.3","5.21","5.33","12.28","15.2","15.33","23.11"],"12":["22.31","26.31"],"15":["22.35","26.35"],"16":["22.32","26.32"],"17":["4.0","14.0"],"19":["15.45"],"25":["13.28"],"29":["15.45"],"35":["13.7"],"50":["13.10"],"200":["13.6","13.8","13.9","13.21"],"250":["9.3","13.5","19.3"],"300":["13.17"],"1000":["13.22","24.6"],"2000":["13.4"],"3000":["13.13"],"是指挂载在":["0.0","1.0","5.0"],"js":["0.1","0.3","0.5","0.6","0.7","0.8","0.9","0.10","0.13","0.15","0.16","1.1","2.1","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.19","2.20","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.3","3.5","3.6","3.7","3.8","3.9","3.10","3.17","3.28","3.29","3.30","5.1","5.2","5.3","5.8","5.9","5.10","5.11","5.12","5.13","5.14","5.16","5.17","5.18","5.19","5.20","5.21","5.22","5.23","5.25","5.27","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.41","5.44","5.46","5.47","9.1","9.5","10.1","10.5","10.6","10.14","12.2","12.6","12.17","12.18","12.20","12.22","12.24","12.28","12.29","12.30","12.31","15.1","15.2","15.3","15.12","15.20","15.22","15.28","15.33","15.37","15.44","15.45","15.46","19.6","21.0","22.1","22.4","22.7","22.31","22.32","22.35","22.39","22.43","24.7","24.9","24.10","24.15","24.16","24.17","25.0","26.1","26.7","26.10","26.19","26.31","26.34","26.35","26.39","26.47","26.50"],"var":["0.1","0.3","0.5","0.6","0.7","0.8","0.9","0.10","0.13","0.14","0.15","0.16","0.17","2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.28","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","5.2","5.3","5.12","5.14","5.16","5.20","5.22","5.23","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.44","5.46","9.5","10.1","10.5","10.6","10.14","12.22","12.28","12.29","12.30","12.31","15.12","15.16","15.20","15.22","15.33","15.44","15.45","22.1","22.7","22.10","22.19","22.31","22.32","22.43","22.47","24.6","24.9","24.10","24.11","24.12","25.1","25.2","26.1","26.4","26.10","26.19","26.31","26.32","26.39","26.43","26.47"],"art":["0.1","0.2","0.5","0.6","0.7","0.10","0.14","0.16","0.17","2.2","2.6","2.11","2.12","2.16","2.17","2.18","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.28","2.29","2.30","2.31","2.39","5.16","5.20","5.22","5.23","5.28","5.33","5.44","8.4","9.5","10.1","10.5","12.31","15.16","15.20","15.22","15.33","15.44","15.45","18.4","20.5","20.10","21.3","21.4","22.1","22.7","22.10","22.19","22.29","22.30","22.31","22.32","22.43","22.47","23.5","24.6","24.11","24.12","24.13","25.1","25.2","26.1","26.4","26.19","26.29","26.30","26.31","26.32","26.35","26.39","26.41","26.43","26.47"],"new":["0.1","0.2","0.6","0.7","0.14","0.16","0.17","2.2","2.6","2.17","2.18","2.20","2.22","2.24","2.28","2.29","2.30","2.31","5.12","5.23","5.44","5.45","8.2","8.4","8.5","10.1","15.12","15.16","15.20","15.22","15.33","15.45","18.2","18.4","18.5","19.3","20.5","21.4","22.1","22.10","22.19","22.29","22.30","22.31","22.32","22.43","22.47","23.5","24.6","24.11","24.12","24.13","25.4","26.1","26.4","26.29","26.30","26.31","26.32","26.43"],"artplayer":["0.2","0.7","0.14","0.16","0.17","2.2","2.22","2.24","2.28","2.29","2.30","2.31","3.5","3.6","3.7","3.29","3.30","5.12","5.23","5.45","8.2","8.3","8.4","8.5","9.7","10.1","10.2","15.12","15.16","15.20","15.22","15.45","18.2","18.3","18.4","18.5","19.3","19.7","20.1","20.8","20.9","20.10","21.0","21.3","22.10","22.19","22.29","22.30","22.32","22.43","22.47","23.1","23.8","24.2","24.3","24.8","24.16","25.0","25.3","26.4","26.27","26.29","26.30","26.32","26.43"],"container":["0.2","0.3","0.14","0.17","2.2","2.28","5.12","5.45","6.2","6.3","7.4","8.2","8.3","8.4","8.5","9.7","10.2","15.12","15.16","15.20","15.45","16.2","16.3","17.4","18.2","18.3","18.4","18.5","19.3","19.7","21.4","22.10","22.19","22.29","22.30","22.43","22.47","23.4","23.9","24.6","24.11","24.12","24.13","24.14","25.3","25.4","26.2","26.4","26.29","26.30","26.32","26.43"],"app":["0.2","0.4","0.14","5.45","6.2","6.3","6.4","6.5","7.3","7.4","8.2","8.3","8.4","8.5","9.7","10.2","15.12","15.16","15.45","16.2","16.3","16.4","16.5","17.3","17.4","18.2","18.3","18.4","18.5","19.3","19.7","20.3","20.4","21.4","22.1","22.19","22.29","22.30","22.47","23.4","24.11","24.12","24.13","24.14","25.4","26.2","26.4","26.29","26.30","26.43"],"url":["0.2","0.4","5.45","6.2","6.3","6.4","6.5","7.3","7.4","8.2","8.3","8.5","9.3","9.7","9.8","10.2","15.16","16.2","16.3","16.4","16.5","17.3","17.4","18.2","18.3","18.5","19.3","19.7","19.8","22.29","22.30","22.33","22.40","22.47","24.12","24.13","24.14","26.29","26.30","26.33","26.41","26.43"],"classname":["0.3","0.11","0.12","1.11","3.15","3.21","3.24","3.25","3.28","3.31","5.4","5.15","5.26","5.30","5.38","5.39","5.40","5.41","5.42","9.2","9.5","10.4","10.6","10.7","10.14","10.17","11.6","12.1","12.5","12.11","12.12","12.13","12.14","12.15","12.16","12.19","12.21","12.23","12.25","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","13.2","13.3","13.4","13.5","13.6","13.7","13.8","13.9","13.10","13.11","13.17","13.18","13.22","13.26","13.27","13.28","13.29","13.30","13.32","15.6","15.7","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.23","15.24","15.25","15.27","15.30","15.31","15.32","15.34","15.35","15.36","15.41","15.43","15.47","19.2","19.5","22.4","22.9","22.13","22.17","22.25","22.34","22.39","22.42","22.50","26.6","26.8","26.12","26.14","26.15","26.16","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.27","26.28","26.33","26.34","26.38","26.40","26.42","26.44","26.48","26.49","26.51"],"run":["0.3","0.8","0.9","0.11","0.12","1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.11","1.12","3.1","3.2","3.4","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.23","3.24","3.25","3.26","3.27","3.28","3.31","3.33","5.4","5.6","5.7","5.9","5.11","5.13","5.15","5.24","5.30","5.38","5.39","5.40","5.41","5.42","5.43","9.2","9.5","10.4","10.6","10.7","10.14","10.17","11.6","12.1","12.3","12.4","12.5","12.9","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.21","12.23","12.24","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.3","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.28","13.29","13.30","15.7","15.8","15.9","15.10","15.14","15.21","15.23","15.25","15.27","15.30","15.31","15.32","15.33","15.34","15.35","15.36","15.41","15.43","15.46","15.47","22.4","22.9","22.13","22.17","22.34","22.39","22.50","26.3","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.28","26.33","26.34","26.40","26.42","26.44","26.45","26.46","26.48","26.49","26.51"],"code":["0.3","0.8","0.9","0.10","0.11","0.12","1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.12","2.41","3.1","3.2","3.4","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.28","3.31","3.32","3.33","5.4","5.6","5.7","5.8","5.9","5.10","5.11","5.13","5.15","5.18","5.19","5.24","5.30","5.38","5.39","5.40","5.41","5.42","5.43","5.47","9.1","9.2","9.5","10.4","10.6","10.7","10.14","10.17","11.6","12.1","12.2","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.29","13.30","15.1","15.3","15.8","15.9","15.10","15.14","15.21","15.23","15.25","15.27","15.28","15.31","15.32","15.33","15.34","15.35","15.36","15.41","15.43","15.46","15.47","21.0","21.2","22.4","22.7","22.17","22.39","22.50","24.8","26.3","26.5","26.7","26.8","26.9","26.12","26.13","26.17","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.28","26.33","26.34","26.40","26.42","26.44","26.45","26.46","26.48","26.49"],"document":["0.3","22.1"],"assets":["0.4","5.45","6.2","6.3","6.4","6.5","7.3","7.4","7.5","9.3","9.7","9.8","10.2","16.2","16.3","16.4","16.5","17.3","17.4","17.5","19.3","19.7","19.8","22.30","22.47","24.12","24.13","24.14","26.2","26.30","26.43"],"sample":["0.4","5.45","6.2","6.3","6.4","6.5","7.3","7.4","7.5","9.3","9.8","10.2","16.2","16.3","16.4","16.5","17.3","17.4","17.5","19.3","19.8","22.2","22.30","24.13","24.14","26.2","26.30","26.43"],"video":["0.4","3.34","5.45","6.2","6.3","6.4","6.5","7.3","7.5","8.2","8.3","8.5","9.3","9.8","10.2","13.1","15.6","15.18","15.19","16.2","16.3","16.4","16.5","17.3","17.5","18.2","18.3","18.5","19.3","19.8","22.38","22.45","22.46","24.13","24.14","26.2","26.51"],"mp4":["0.4","6.3","6.4","6.5","7.3","7.5","8.2","8.3","8.5","9.3","9.4","9.8","9.9","10.2","16.3","16.4","16.5","17.3","17.5","18.2","18.3","18.5","19.3","19.4","19.8","19.9","22.2","24.14","26.2"],"test":["0.4"],"foo":["0.4"],"bar":["0.4","13.16","13.33","22.6","22.8","22.17","22.22"],"const":["0.4","9.6","19.6","20.9","23.9"],"获取整体的字幕列表":["0.11"],"div":["0.11","0.12","3.31","5.4","5.26","5.38","5.40","5.42","9.2","9.5","10.4","10.6","10.7","10.14","10.17","11.5","11.6","11.9","12.1","12.5","12.15","12.21","12.23","12.25","12.32","12.35","12.36","12.37","13.2","13.3","13.4","13.5","13.6","13.7","13.8","13.9","13.10","13.11","13.17","13.18","13.19","13.20","13.22","13.26","13.27","13.28","13.29","13.30","13.32","15.6","15.7","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.23","15.24","15.25","15.27","15.30","15.31","15.32","15.34","15.35","15.36","15.41","15.43","19.2","19.5","20.3","22.4","22.9","22.13","22.17","22.25","22.28","22.34","22.42","22.50","26.6","26.12","26.14","26.15","26.16","26.18","26.20","26.23","26.24","26.25","26.27","26.28","26.33","26.34","26.38","26.40","26.41","26.42","26.44","26.48","26.49","26.51"],"详见事件文档":["0.12"],"console":["1.1","2.0","12.0","24.18"],"info":["2.0","12.0","24.18"],"只监听一次事件":["2.0"],"但估计没有足够的数据来支撑播放到结束":["2.42"],"渲染完成":["2.44"],"属性的值改变时触发":["2.45"],"当这个":["2.46"],"因为":["2.47"],"或者资源类型不是受支持的媒体格式":["2.48"],"中的首帧已经完成加载":["2.49"],"播放准备开始":["2.53"],"seek":["2.56","2.57","12.56","12.57","15.15"],"user":["2.58","23.13"],"属性指定的时间发生变化":["2.60"],"播放已停止":["2.62"],"也是指挂载在":["3.0"],"构造函数":["3.0"],"减少视频资源占用":["3.34"],"如果你希望保留":["3.34"],"元素的状态":["3.34"],"仅移除界面":["3.34"],"可将其设置为":["3.34"],"when":["5.5","11.1","12.45","22.26"],"destroy":["5.5"],"也会在调用":["5.5"],"时自动执行类似逻辑":["5.5"],"画中画":["5.26"],"fullscreen":["5.26","15.21","22.24"],"窗口全屏":["5.26"],"fullscreenweb":["5.26"],"网页全屏":["5.26"],"对应":["5.29"],"domrect":["5.29"],"的同名字段":["5.29"],"组件唯一名称":["6.1","8.1"],"用于标记类名":["6.1","8.1"],"index":["6.1","7.5","8.1","16.1","17.5","18.1","24.7","24.10","24.15","24.16","24.17"],"number":["6.1","7.1","8.1","10.12","16.1","17.1","18.1","19.2"],"contextmenu":["6.4","6.5","16.4","16.5"],"name":["6.5","7.5","9.9","16.5","17.5","19.9","22.33"],"组件索引":["7.1"],"用于显示的优先级":["7.1"],"html":["7.1","7.2","9.4","9.9","15.4","17.1","17.2","19.4","19.9","22.27","22.33"],"element":["7.1","13.31","17.1","22.45"],"position":["7.2","7.5","17.2","17.5"],"left":["7.2","13.25","17.2"],"tooltip":["7.2","9.2","9.9","17.2","19.2","19.5","19.6","19.9"],"style":["7.2","9.3","17.2","22.37","26.37"],"color":["7.2","15.36","17.2"],"red":["7.2","17.2"],"click":["7.2","17.2"],"function":["7.2","17.2","19.5","22.35","22.41","23.10","26.35"],"args":["7.2","17.2"],"controls":["7.3","7.5","17.3","17.5"],"add":["7.3","17.3"],"button1":["7.5","17.5"],"png":["8.4","18.4","22.29","26.29"],"列表宽度":["9.2"],"提示文本":["9.2","9.5"],"setting":["9.3","9.4","9.8","9.9","19.3","19.4","19.8","19.9"],"true":["9.3","9.4","9.8","9.9","13.18","13.19","13.32","13.34","19.3","19.4","19.8","19.9","24.6"],"settings":["9.3","9.4","9.9","19.3","19.4","19.9","22.14","22.15","22.16","22.18","22.22","22.25"],"subtitle":["9.3","19.3"],"01":["9.3","9.4","19.3"],"default":["9.3","13.1","13.4","13.10","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.27"],"span":["9.3"],"multi":["9.4","19.4"],"level":["9.4","13.0","19.4"],"selector":["9.4","19.4"],"value":["9.6"],"min":["9.6"],"flip":["9.8","19.1","19.8"],"slider":["9.9","19.9"],"5x":["9.9","19.9"],"icon":["9.9","19.9"],"refer":["10.0","15.0"],"to":["10.0","11.0","11.1","12.53","15.0","15.4","15.15","15.39","20.11"],"proxy":["10.3"],"method":["10.3"],"used":["10.3","13.33","15.38","15.39","15.40","22.3","22.6"],"hover":["10.3"],"delete":["10.4"],"clear":["10.4"],"all":["10.4","20.12"],"object":["10.6","26.11"],"update":["10.8","10.9"],"show":["10.8","10.9","10.10","10.16"],"property":["10.8","10.9","10.10","10.16"],"switch":["10.11"],"version":["10.12","20.12"],"resolution":["10.12"],"duration":["10.12"],"etc":["10.12"],"control":["10.12"],"visibility":["10.12"],"toggle":["10.13","10.15","22.20"],"set":["10.16"],"whether":["10.16","22.21"],"the":["11.0","12.45","13.1","15.0","15.6","15.29","22.8","22.12","22.25","22.26","22.27","22.44","22.45"],"top":["11.0"],"you":["11.1"],"need":["11.1"],"manage":["11.1"],"multiple":["11.1"],"player":["11.2","11.3","11.4","11.7","11.11","11.12","15.41","15.42","20.13","22.5","22.21","22.26","22.27"],"for":["11.5","11.9","13.33","16.1","18.1","22.6","22.18","22.38","22.51"],"videos":["11.5"],"options":["11.7","11.9","22.37"],"event":["11.8","12.46","19.5","22.4"],"type":["11.10"],"detection":["11.10"],"by":["11.11","20.13"],"on":["12.0","13.0","13.3","22.28","22.44","22.46","22.48","24.18"],"canplay":["12.0"],"only":["12.0","21.0","22.3","22.21","22.49"],"once":["12.0"],"time":["12.1","24.4"],"mode":["12.25","13.31","15.24","22.48"],"media":["12.42","12.48","15.5"],"but":["12.42","15.11","15.15"],"estimates":["12.42"],"there":["12.42"],"it":["12.43","15.15","22.51"],"can":["12.43","13.34"],"play":["12.43"],"rendering":["12.44"],"this":["12.46","13.34","22.11"],"is":["12.46","12.58","13.4","13.6","13.7","13.8","13.9","13.10","13.11","13.12","13.13","13.14","13.16","13.17","13.18","13.19","13.20","13.21","13.22","13.23","13.25","13.26","13.27","15.15","15.42","20.6","21.1","22.2","22.5","22.21"],"sent":["12.46"],"stopped":["12.47","12.62"],"because":["12.47"],"while":["12.48","12.54"],"fetching":["12.48"],"first":["12.49"],"frame":["12.49","15.18","15.19"],"has":["12.50","12.51","12.52","12.62"],"start":["12.53"],"after":["12.53","14.0","15.4"],"triggered":["12.54"],"playback":["12.55","15.13","15.23","22.3","22.8"],"trying":["12.58"],"data":["12.59","24.8","24.16"],"indicated":["12.60"],"volume":["12.61","22.22"],"mounted":["13.0"],"in":["13.1","13.12","13.13","13.15","13.34","15.5","15.7","15.26","22.2","22.11","22.14","22.15","22.16","22.18","22.23","22.24","22.25","22.34"],"events":["13.1"],"of":["13.1","15.29","22.12","22.36","22.40"],"text":["13.2","19.2","19.5","19.6","22.34"],"pixels":["13.6","13.7"],"feature":["13.11","22.46"],"seconds":["13.12","15.6","15.7","22.34"],"milliseconds":["13.13","13.15"],"a":["13.14","22.22"],"connection":["13.14"],"error":["13.14","13.15"],"occurs":["13.14","13.15"],"bottom":["13.16","22.20","22.23","22.24"],"pause":["13.19","13.20"],"false":["13.20"],"automatic":["13.21"],"screen":["13.21"],"rotation":["13.21"],"during":["13.23","13.24","13.31"],"long":["13.23","13.24"],"press":["13.23","13.24"],"swiping":["13.25"],"right":["13.25"],"vertical":["13.30","15.30"],"defaults":["13.31"],"smooth":["13.33"],"progress":["13.33","15.13","22.6","22.8"],"enabled":["13.34"],"reduce":["13.34"],"resource":["13.34"],"usage":["13.34"],"single":["13.34","15.5"],"page":["13.34","15.5","15.21","22.21"],"applications":["13.34","15.5"],"also":["14.0","20.12"],"remove":["15.4"],"s":["15.4","15.24","20.13","22.27"],"resources":["15.5"],"or":["15.5","22.51"],"reinitialize":["15.5"],"tag":["15.5"],"performs":["15.11"],"some":["15.11","22.49"],"optimization":["15.11"],"operations":["15.11"],"retains":["15.13"],"previous":["15.13"],"similar":["15.15","22.4"],"optional":["15.17"],"parameter":["15.17","20.10"],"specifies":["15.17"],"filename":["15.17"],"returns":["15.18","15.19"],"promise":["15.18","15.19","24.6"],"state":["15.21"],"visible":["15.23","24.18"],"before":["15.23","22.27"],"starts":["15.23"],"normal":["15.26","15.30"],"mini":["15.26"],"window":["15.26"],"pip":["15.26"],"picture":["15.26"],"automatically":["15.27","22.11"],"correspond":["15.29"],"fields":["15.29"],"same":["15.29"],"values":["15.30"],"horizontal":["15.30"],"rate":["15.31"],"ratio":["15.32"],"often":["15.38","15.40","22.11"],"with":["15.38","15.40"],"typically":["15.39"],"alongside":["15.39"],"loaded":["15.39"],"display":["15.39","17.1"],"detailed":["15.39"],"removed":["15.41"],"destroyed":["15.41"],"scoped":["15.42"],"current":["15.42","20.5","23.5"],"instance":["15.42"],"css":["16.1","18.1","26.11"],"class":["16.1","18.1","20.3"],"priority":["17.1"],"items":["19.1"],"playbackrate":["19.1"],"aspectratio":["19.1"],"width":["19.2","22.36","26.36"],"list":["19.2"],"onswitch":["19.5"],"completion":["19.6"],"onchange":["19.6"],"change":["19.6"],"install":["20.1","23.1"],"body":["20.3"],"if":["20.5","23.5"],"typeof":["20.5","23.5"],"ts":["20.6","22.40"],"from":["20.8","20.9","20.13","21.2","23.8","23.11"],"let":["20.10"],"null":["20.10"],"use":["20.11"],"file":["20.11"],"which":["20.11"],"compatibility":["20.11"],"down":["20.11"],"ie":["20.11","23.11"],"plugins":["20.12","24.14","24.18"],"provide":["20.12"],"an":["20.12"],"mjs":["20.12","23.12"],"ui":["20.13"],"changing":["20.13"],"therefore":["20.13"],"starting":["20.13"],"core":["21.0"],"will":["21.0","22.22"],"include":["21.0"],"no":["21.1"],"manual":["21.1"],"import":["21.1","21.2","23.11"],"dist":["21.2","23.12"],"group":["21.2"],"id":["21.2"],"sometimes":["22.2","22.40"],"not":["22.2","22.5"],"known":["22.2"],"immediately":["22.2"],"such":["22.2"],"cases":["22.2"],"resumption":["22.3"],"autoplayback":["22.3"],"initialized":["22.5"],"and":["22.5","22.6","22.8","22.22","22.26"],"resulting":["22.11"],"black":["22.11"],"bars":["22.11"],"option":["22.11"],"scrolls":["22.12"],"out":["22.12"],"looping":["22.13"],"currently":["22.14","22.49"],"appears":["22.14","22.15","22.16"],"panel":["22.14","22.15","22.16","22.18","22.22","22.25"],"functionality":["22.15","22.16"],"button":["22.20","22.23","22.24"],"one":["22.21"],"context":["22.22"],"menu":["22.22"],"apply":["22.22"],"loses":["22.26"],"focus":["22.26"],"required":["22.27"],"mounting":["22.27"],"mobile":["22.28","22.44","22.45","22.48"],"devices":["22.28","22.44"],"layer":["22.29","26.29"],"boolean":["22.33"],"string":["22.33","22.34"],"myplugin":["22.35","26.35"],"column":["22.36"],"columns":["22.36"],"encoding":["22.37","26.37"],"better":["22.38"],"loading":["22.38"],"experience":["22.38"],"more":["22.38"],"attributes":["22.38"],"these":["22.38"],"e":["22.40"],"g":["22.40"],"m3u8":["22.40"],"mkv":["22.40"],"however":["22.40"],"lacks":["22.40"],"party":["22.41"],"programs":["22.41"],"handler":["22.41"],"receives":["22.41"],"three":["22.41"],"parameters":["22.41"],"supported":["22.42"],"en":["22.42"],"zh":["22.42","25.2"],"cn":["22.42","26.42"],"hide":["22.44"],"fast":["22.46"],"forward":["22.46"],"web":["22.48"],"based":["22.48"],"browsers":["22.49"],"support":["22.49"],"htmlvideoelement":["22.51"],"example":["22.51"],"demo":["23.3"],"meta":["23.3"],"charset":["23.3"],"ref":["23.4"],"时会自动导入的":["23.6"],"param":["23.10"],"getinstance":["23.10"],"可以兼容到":["23.11"],"和所有插件还会提供一个":["23.12"],"版本的":["23.12"],"如":["23.12"],"globalthis":["23.13"],"custom":["23.13"],"agent":["23.13"],"全局变量":["23.13"],"plugin":["24.2","24.3","24.8","24.16"],"danmuku":["24.2","24.7","24.10","24.16"],"npm":["24.3"],"弹幕时间":["24.4"],"默认为当前播放器时间":["24.4"],"默认弹幕模式":["24.5"],"滚动":["24.5"],"顶部":["24.5"],"底部":["24.5"],"modes":["24.5"],"弹幕可见的模式":["24.5"],"fontsize":["24.5"],"danmu":["24.6","24.18"],"return":["24.6"],"resolve":["24.6"],"settimeout":["24.6"],"libs":["24.8","24.16"],"uncompiled":["24.8","24.16"],"artplayerplugindanmuku":["24.14","24.18"],"xml":["24.18"],"显示弹幕":["24.18"],"版本开始":["25.0"],"核心代码除了包含":["25.0"],"zhtw":["25.2"],"tw":["25.2"],"高亮元素":["26.6"],"上":["26.6"],"类似":["26.11"],"的":["26.11"],"fit":["26.11"],"里":["26.14","26.15","26.16","26.25"],"音量条等浮层会应用":["26.22"],"filter":["26.22"],"毛玻璃效果":["26.22"],"看起来更通透":["26.22"],"访问到播放器所需的":["26.27"],"画质地址":["26.33"],"预览图列数":["26.36"],"预览图宽度":["26.36"],"height":["26.36"],"预览图高度":["26.36"],"scale":["26.36"],"字幕样式":["26.37"],"字幕编码":["26.37"],"默认":["26.37"],"utf":["26.37"],"auto":["26.38"],"以提升加载体验":["26.38"],"更多视频属性":["26.38"],"这些属性将直接写入视频元素里":["26.38"],"所以需要特别指明":["26.40"],"元素":["26.41"],"视频地址":["26.41"],"当前实例":["26.41"],"dom元素":["26.51"]},{"0":["13.25","19.6","24.4"],"1":["3.29","9.3","13.29","19.3"],"2":["3.29","9.6","19.6","20.13","26.3"],"3":["9.6"],"4":["9.1","20.13","21.1","22.17","22.34","22.50","23.10","26.5","26.7","26.8","26.9","26.13","26.17","26.21","26.25","26.26","26.33","26.34","26.40","26.42","26.45","26.46"],"5":["13.14","13.25","20.13"],"6":["2.41","5.42","5.43","12.1","12.3","12.4","12.5","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","23.10"],"7":["5.4","5.6","5.7","5.10","5.17","5.18","5.19","5.24","5.38","5.39","5.40","12.19","12.21","12.23","12.25","12.26","15.10","22.39"],"8":["5.9","5.15","5.25","5.27","5.30","5.41","12.17","15.1","15.9","15.14","15.21","15.25","15.30","15.31","15.32","15.34","15.35","15.36","15.41","22.37","23.3","26.37"],"9":["5.11","5.13","15.11","15.13","15.23"],"10":["5.8","5.41","7.3","7.4","12.6","12.18","12.24","15.8","15.12","15.41","17.3","17.4","19.6"],"11":["15.3","15.21","20.11"],"14":["26.33"],"22":["9.9","19.9"],"25":["22.34","26.34"],"40":["3.7"],"100":["3.10"],"150":["9.4","19.4"],"300":["3.5","3.6"],"500":["3.8","3.9","3.17"],"1000":["13.15","13.24"],"3000":["13.16"],"实例":["0.0","5.0"],"artplayer":["0.1","0.3","0.5","0.6","0.8","0.9","0.10","0.13","0.15","1.1","2.1","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","3.1","3.3","3.4","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.15","3.16","3.17","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.28","3.31","3.32","3.33","5.1","5.2","5.3","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.16","5.18","5.19","5.20","5.21","5.22","5.25","5.28","5.30","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.41","5.44","5.46","5.47","9.1","9.2","9.5","10.3","10.4","10.5","10.6","10.7","10.14","10.17","12.2","12.6","12.17","12.18","12.20","12.22","12.24","12.28","12.29","12.30","12.31","13.5","13.6","13.7","13.8","13.9","13.17","13.28","13.29","13.30","15.2","15.3","15.5","15.28","15.33","15.34","15.37","15.41","15.44","15.46","15.47","19.2","19.5","20.2","22.4","22.7","22.17","22.27","22.31","22.39","23.2","23.13","25.1","26.10","26.19","26.31","26.34","26.39","26.40","26.47","26.50"],"container":["0.1","0.5","0.6","0.7","0.8","0.9","0.10","0.13","0.15","0.16","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","5.2","5.3","5.9","5.11","5.13","5.14","5.16","5.20","5.21","5.22","5.23","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.41","5.44","5.46","5.47","9.2","9.5","10.1","10.3","10.4","10.5","10.6","10.7","10.14","10.17","12.2","12.20","12.22","12.28","12.29","12.30","12.31","15.2","15.22","15.28","15.41","15.44","15.46","19.5","20.9","21.3","22.4","22.7","22.17","22.31","22.32","22.39","24.9","24.10","24.15","24.17","25.1","25.2","26.10","26.19","26.31","26.34","26.39","26.47"],"app":["0.1","0.3","0.5","0.6","0.7","0.8","0.9","0.10","0.16","0.17","2.2","2.6","2.17","2.18","2.20","2.22","2.24","2.28","2.29","2.30","2.31","5.12","5.16","5.20","5.22","5.23","5.28","5.33","5.34","5.44","9.5","10.1","10.4","10.5","10.6","10.14","12.28","12.31","15.20","15.22","15.28","15.33","15.41","15.44","19.5","20.5","20.9","21.3","22.4","22.7","22.10","22.31","22.32","22.43","23.9","24.6","24.10","25.2","25.3","26.1","26.19","26.31","26.32","26.39","26.47"],"assets":["0.2","0.6","0.7","0.10","0.14","0.16","0.17","2.2","2.22","2.28","2.31","5.12","5.23","5.44","9.5","10.1","10.4","10.6","10.14","15.12","15.16","15.20","15.22","15.33","15.45","21.4","22.1","22.4","22.7","22.10","22.19","22.31","22.32","22.43","23.9","24.6","24.10","24.11","25.2","25.3","25.4","26.1","26.4","26.31","26.32"],"sample":["0.2","0.6","0.14","0.16","0.17","2.2","2.28","5.12","5.23","9.5","9.7","10.1","10.4","10.6","10.14","15.12","15.16","15.20","15.22","15.33","15.45","19.7","21.4","22.1","22.4","22.10","22.19","22.31","22.32","22.43","22.47","23.9","24.6","24.11","24.12","25.2","25.4","26.4","26.32"],"video":["0.2","0.14","0.16","0.17","5.12","7.4","8.4","9.5","9.7","10.4","10.6","10.14","15.20","15.22","15.45","17.4","18.4","19.7","21.4","22.1","22.10","22.19","22.29","22.30","22.32","22.43","22.47","22.48","22.51","24.6","24.11","24.12","25.2","25.4","26.4","26.29","26.30","26.32","26.43"],"mp4":["0.2","0.14","0.17","5.12","5.45","6.2","7.4","8.4","9.5","9.7","10.4","10.6","10.14","15.12","15.16","15.20","15.22","15.33","15.45","16.2","17.4","18.4","19.7","21.4","22.1","22.4","22.10","22.19","22.29","22.30","22.32","22.43","22.47","24.6","24.11","24.12","24.13","25.2","25.4","26.4","26.29","26.30","26.43"],"console":["0.2","0.4","1.6","7.2","10.2","11.6","15.16","17.2","22.35","26.35"],"info":["0.2","0.4","1.1","7.2","10.2","11.6","17.2","22.35","26.35"],"queryselector":["0.3","5.41","10.3","15.41","22.1","24.16","26.1"],"art":["0.3","0.8","0.9","0.11","0.13","0.15","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.13","2.14","2.15","2.19","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.40","2.41","3.5","3.6","3.7","3.30","5.1","5.2","5.3","5.6","5.7","5.8","5.9","5.10","5.14","5.15","5.17","5.18","5.19","5.21","5.24","5.25","5.27","5.30","5.31","5.32","5.34","5.35","5.36","5.37","5.39","5.46","5.47","9.1","9.2","10.4","10.6","10.7","10.12","10.14","10.17","12.2","12.3","12.4","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.26","12.27","12.28","12.29","12.30","12.39","12.40","12.41","15.1","15.2","15.3","15.8","15.9","15.10","15.14","15.23","15.28","15.31","15.32","15.34","15.35","15.36","15.37","15.41","15.46","15.47","19.2","19.5","21.2","22.4","22.17","22.35","22.39","22.50","24.7","24.9","24.10","24.15","24.17","26.5","26.7","26.10","26.17","26.33","26.34","26.40","26.50"],"new":["0.3","0.5","0.8","0.9","0.10","0.11","0.13","0.15","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.19","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.5","3.30","5.1","5.2","5.3","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.16","5.17","5.18","5.19","5.20","5.21","5.22","5.25","5.27","5.28","5.30","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.46","5.47","9.1","9.2","9.5","10.4","10.5","10.6","10.7","10.14","10.17","12.2","12.6","12.7","12.8","12.10","12.17","12.18","12.20","12.22","12.24","12.26","12.28","12.29","12.30","12.31","15.1","15.2","15.3","15.23","15.28","15.32","15.34","15.35","15.37","15.44","15.46","15.47","19.2","19.5","20.13","22.4","22.7","22.17","22.39","24.9","24.10","24.15","24.17","25.1","25.2","26.7","26.10","26.19","26.34","26.39","26.40","26.47","26.50"],"url":["0.6","0.7","0.9","0.10","0.14","0.16","0.17","2.2","2.18","2.22","2.24","2.28","2.29","2.30","2.31","5.20","5.23","5.33","5.44","8.4","9.5","10.1","10.4","10.5","10.6","10.14","15.20","15.22","15.33","15.44","15.45","18.4","21.3","21.4","22.1","22.4","22.7","22.10","22.19","22.31","22.32","22.41","22.43","23.9","24.6","24.10","24.11","25.2","25.3","25.4","26.1","26.4","26.31","26.32","26.39","26.47"],"js":["0.11","0.12","1.6","3.1","3.4","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.31","3.32","3.33","5.4","5.6","5.7","5.15","5.24","5.26","5.30","5.38","5.39","5.40","5.42","5.43","9.2","10.3","10.4","10.7","10.17","11.6","12.1","12.3","12.4","12.5","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.19","12.21","12.23","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.22","13.28","13.29","13.30","15.7","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.23","15.25","15.27","15.30","15.31","15.32","15.34","15.35","15.36","15.41","15.43","15.47","19.2","19.5","21.1","22.17","22.25","22.34","22.42","22.50","24.8","26.3","26.5","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.27","26.28","26.33","26.40","26.42","26.44","26.45","26.46","26.48","26.49"],"var":["0.11","0.12","1.1","2.41","3.5","3.6","3.7","3.17","3.30","5.1","5.6","5.7","5.8","5.9","5.10","5.11","5.13","5.15","5.17","5.18","5.19","5.21","5.24","5.25","5.27","5.30","5.38","5.39","5.40","5.41","5.43","5.47","9.1","9.2","10.3","10.4","10.7","10.17","12.2","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.23","12.24","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","15.1","15.2","15.3","15.8","15.9","15.10","15.14","15.23","15.25","15.28","15.31","15.32","15.34","15.35","15.36","15.37","15.41","15.46","15.47","19.2","19.5","21.1","21.2","22.4","22.17","22.34","22.39","22.50","24.7","24.15","24.16","24.17","26.3","26.5","26.7","26.17","26.25","26.33","26.34","26.40","26.50"],"function":["0.14","6.5","16.5","17.1","20.10","26.37"],"构造函数":["1.0"],"code":["1.11","3.34","5.5","5.26","5.29","9.6","10.3","11.1","13.2","13.3","13.4","13.6","13.7","13.8","13.9","13.10","13.11","13.12","13.13","13.14","13.15","13.16","13.17","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.28","13.31","13.32","13.33","15.6","15.7","15.11","15.13","15.17","15.18","15.19","15.24","15.30","15.38","15.39","15.40","19.1","19.2","19.5","20.11","22.3","22.5","22.8","22.9","22.13","22.25","22.28","22.33","22.34","22.40","22.42","22.45","23.11","26.6","26.11","26.14","26.15","26.16","26.22","26.27","26.36","26.38","26.41","26.51"],"once":["2.0"],"不必停下来进一步缓冲内容":["2.42"],"media":["2.46","2.47","12.43"],"已经加载完成":["2.46"],"操作完成":["2.56"],"操作开始":["2.57"],"agent":["2.58"],"的":["3.0"],"false":["3.3","3.34","20.5","23.5","24.5","24.14"],"div":["3.34","5.5","5.29","9.6","10.3","10.13","10.15","11.1","11.2","11.3","11.4","11.7","11.8","11.10","11.11","11.12","13.1","13.12","13.13","13.14","13.15","13.16","13.21","13.23","13.24","13.25","13.31","13.33","15.4","15.15","15.17","15.26","15.38","15.39","15.40","15.42","19.1","20.5","22.3","22.5","22.6","22.8","22.12","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.33","22.40","22.44","22.45","22.46","22.49","22.51","23.3","23.5","26.11","26.22","26.36"],"classname":["3.34","5.5","5.29","9.6","10.3","11.1","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","13.1","13.12","13.13","13.14","13.15","13.16","13.19","13.20","13.21","13.23","13.24","13.25","13.31","13.33","15.4","15.15","15.17","15.26","15.38","15.39","15.40","19.1","22.3","22.5","22.6","22.8","22.12","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.28","22.33","22.40","22.44","22.45","22.46","22.49","26.11","26.22","26.36","26.41"],"run":["3.34","5.5","5.26","5.29","9.6","10.3","11.1","11.2","11.3","11.4","11.5","11.7","11.9","11.10","11.12","13.1","13.2","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","15.6","15.11","15.13","15.15","15.17","15.18","15.19","15.24","15.38","15.39","15.40","19.1","19.2","19.5","22.3","22.5","22.6","22.8","22.12","22.14","22.15","22.16","22.20","22.23","22.24","22.25","22.26","22.28","22.33","22.40","22.42","22.45","22.46","22.49","26.11","26.22","26.27","26.36","26.38","26.41"],"add":["4.0","6.3","8.3","14.0","16.3","18.3","24.2"],"例如我想写一个在视频暂停后":["4.0"],"显示一个图片广告的插件":["4.0"],"on":["5.12","15.12","15.16","15.33"],"播放器当前可见宽高":["5.29"],"document":["5.41","10.3","15.41","24.16","26.1"],"default":["5.45","7.5","15.45","17.5","19.3","23.10"],"true":["5.45","7.5","9.7","13.31","15.4","15.45","17.5","19.7","22.4","22.10","22.30","22.47","24.5","26.4","26.30","26.37"],"html":["5.45","6.1","6.2","6.3","6.4","6.5","7.3","7.5","8.1","8.2","8.3","8.5","9.8","15.45","16.1","16.2","16.3","16.4","16.5","17.3","17.5","18.1","18.2","18.3","18.5","19.8","22.29","22.30","22.37","23.13","24.14","26.29","26.30","26.37"],"sd":["5.45"],"480p":["5.45"],"组件索引":["6.1","8.1"],"用于显示的优先级":["6.1","8.1"],"contextmenu":["6.2","6.3","16.2","16.3"],"name":["6.2","6.3","6.4","7.3","7.4","8.2","8.3","8.4","8.5","9.8","15.29","16.2","16.3","16.4","17.3","17.4","18.2","18.3","18.4","18.5","19.8","22.29","22.35","26.29","26.35"],"your":["6.2","6.3","6.4","6.5","7.3","16.2","16.3","16.4","16.5","17.3","22.47","26.43"],"menu":["6.2","6.3","6.4","6.5","16.2","16.3","16.4","16.5","22.14","22.15","22.16"],"click":["6.4","6.5","16.4","16.5","17.1","24.14"],"args":["6.5","16.5"],"组件的":["7.1"],"dom":["7.1","17.1","22.41","22.51"],"元素":["7.1"],"style":["7.1","8.2","8.3","8.5","17.1","18.2","18.3","18.5","19.3","20.4","22.29"],"object":["7.1","17.1"],"mounted":["7.2","17.2"],"subtitle":["7.2","7.5","17.2","17.5"],"button1":["7.3","7.4","17.3","17.4"],"index":["7.3","7.4","17.3","17.4","24.8"],"position":["7.3","15.20","15.22","17.3","24.13","24.14"],"left":["7.3","17.3"],"controls":["7.4","15.20","15.22","17.4","24.13","24.14"],"right":["7.5","17.5","24.14"],"selector":["7.5","17.5","22.30","26.30"],"01":["7.5","17.5","19.4"],"layers":["8.2","8.3","8.4","8.5","18.2","18.3","18.4","18.5"],"potser":["8.2","8.3","8.5","18.2","18.3","18.5","22.29","26.29"],"width":["8.2","8.3","8.5","9.4","9.9","18.2","18.3","18.5","19.4","19.9","22.29"],"100px":["8.2","8.3","8.5","18.2","18.3","18.5"],"src":["8.2","8.5","9.9","18.2","18.5","19.9"],"color":["9.3","19.3"],"red":["9.3","19.3"],"srt":["9.3","19.3"],"id":["9.3","19.3","22.47"],"yellow":["9.3"],"02":["9.3"],"setting":["9.5","9.7","19.7","22.30","26.30"],"max":["9.6","19.6"],"step":["9.6"],"settings":["9.8","19.8"],"slider":["9.8","19.8"],"tooltip":["9.8","19.8"],"5x":["9.8","19.8"],"icon":["9.8","19.8"],"img":["9.9","19.9"],"height":["9.9","19.9","22.36"],"state":["9.9","19.9"],"svg":["9.9","19.9"],"secondary":["10.0"],"custom":["10.3"],"test":["10.4"],"foo":["10.4"],"bar":["10.4","22.18","22.20","22.23","22.24","22.44"],"set":["10.8","10.9","10.10","22.2"],"whether":["10.8","10.9","10.10","22.37"],"all":["10.8","10.9","10.10","10.16"],"are":["10.8","13.34","21.0"],"visible":["10.8"],"toggle":["10.8","10.9","10.10","10.16"],"display":["10.9","10.10","10.16","16.1","18.1"],"options":["10.11"],"texttrack":["10.11"],"gets":["10.11"],"text":["10.11"],"track":["10.11"],"activecues":["10.11"],"list":["10.11"],"via":["10.12","22.27"],"show":["10.12"],"triggered":["10.12"],"event":["10.12","15.38","15.40"],"is":["10.12","12.44","13.1","13.15","13.24","22.26"],"named":["10.12"],"of":["10.13","10.15","12.49"],"level":["11.0","15.0"],"simultaneously":["11.1"],"isn":["12.42"],"t":["12.42"],"enough":["12.42"],"value":["12.45","19.6"],"when":["12.46","15.5"],"the":["12.47","12.54","20.3","22.38"],"data":["12.48","23.10"],"or":["12.48","13.34"],"been":["12.50","12.51","12.53"],"begun":["12.52"],"having":["12.53"],"rate":["12.55"],"operation":["12.56","12.57"],"to":["12.58","22.11","22.21","22.37"],"fetch":["12.58"],"loading":["12.59"],"by":["12.60"],"has":["12.61"],"due":["12.62"],"constructor":["13.0"],"property":["13.0","20.10"],"names":["13.0","15.42"],"off":["13.1"],"effects":["13.33"],"scenarios":["13.34"],"where":["13.34"],"players":["13.34"],"frequently":["13.34"],"created":["13.34"],"destroyed":["13.34"],"if":["13.34"],"you":["13.34","22.1","22.2"],"wish":["13.34"],"preserve":["13.34"],"for":["14.0"],"example":["14.0"],"let":["14.0"],"say":["14.0"],"first":["15.0"],"destruction":["15.4"],"defaults":["15.4"],"note":["15.5","20.3"],"global":["15.5","20.13"],"configuration":["15.5"],"remove":["15.5"],"destroy":["15.5","20.5","23.5"],"will":["15.5","22.38"],"also":["15.5"],"ready":["15.12","15.16"],"seek":["15.12"],"settimeout":["15.12"],"does":["15.15"],"not":["15.15"],"trigger":["15.15"],"additional":["15.15"],"events":["15.15"],"fullscreen":["15.26"],"fullscreenweb":["15.26"],"webpage":["15.26"],"in":["15.29"],"domrect":["15.29"],"player":["15.29","20.3"],"s":["15.29","17.1"],"current":["15.29"],"timeupdate":["15.38","15.40"],"buffering":["15.39"],"progress":["15.39"],"preventing":["15.42"],"errors":["15.42"],"from":["15.42","20.11"],"duplicate":["15.42"],"class":["15.42"],"priority":["16.1","18.1"],"subtitleoffset":["19.1"],"span":["19.3"],"min":["19.6"],"yarn":["20.1","23.1","24.2"],"npm":["20.2","23.2"],"dist":["20.2","20.12","23.2","24.3"],"warning":["20.3","22.47"],"option":["20.4","23.4"],"return":["20.5","22.35","23.5","23.10","26.35"],"ref":["20.5","23.5"],"automatically":["20.6"],"const":["20.8","23.8"],"param":["20.10"],"getinstance":["20.10"],"import":["20.11"],"group":["20.11","23.11"],"bash":["20.11","23.11"],"jsdelivr":["20.11","23.11"],"net":["20.11","23.11"],"such":["20.12"],"as":["20.12"],"plugin":["20.12","23.12"],"variable":["20.13"],"globalthis":["20.13"],"user":["20.13"],"simplified":["21.0"],"chinese":["21.0"],"and":["21.0","22.14","22.15","22.16","22.48"],"english":["21.0"],"other":["21.0"],"languages":["21.0"],"no":["21.0"],"longer":["21.0"],"required":["21.1"],"zhtw":["21.2"],"zh":["21.2"],"tw":["21.2"],"may":["22.1"],"can":["22.2","22.27"],"asynchronously":["22.2"],"muted":["22.4","26.4"],"yet":["22.5"],"playing":["22.5","22.26"],"highlighted":["22.6"],"elements":["22.6"],"time":["22.8","22.21"],"adjusts":["22.11"],"hide":["22.11"],"browser":["22.12"],"viewport":["22.12","22.48"],"context":["22.14","22.15","22.16"],"bottom":["22.18","22.44"],"control":["22.18","22.20","22.23","22.24","22.44"],"allowed":["22.21"],"play":["22.21","26.43"],"at":["22.21"],"a":["22.21"],"filter":["22.22"],"frosted":["22.22"],"glass":["22.22"],"more":["22.22"],"transparent":["22.22"],"appearance":["22.22"],"however":["22.22"],"access":["22.27"],"setting01":["22.30","26.30"],"scale":["22.36"],"utf":["22.37","23.3"],"escape":["22.37","26.37"],"boolean":["22.37","26.37"],"tags":["22.37"],"be":["22.38"],"directly":["22.38"],"written":["22.38"],"into":["22.38"],"correct":["22.40"],"so":["22.40"],"explicit":["22.40"],"specification":["22.40"],"necessary":["22.40"],"element":["22.41","22.51"],"lang":["22.43","26.43"],"devices":["22.45","22.46"],"mobile":["22.46"],"dimensions":["22.48"],"size":["22.48"],"this":["22.49"],"feature":["22.49"],"an":["22.51"],"existing":["22.51"],"body":["23.3"],"属性":["23.10"],"export":["23.10"],"https":["23.11"],"danmuku":["23.12","24.3","24.8"],"head":["23.13"],"title":["23.13"],"mode":["24.4"],"弹幕模式":["24.4"],"滚动":["24.4"],"弹幕字体大小":["24.5"],"antioverlap":["24.5"],"弹幕是否防重叠":["24.5"],"synchronousplayback":["24.5"],"是否同步播放速度":["24.5"],"mount":["24.5"],"undefined":["24.5"],"弹幕发射器挂载点":["24.5"],"默认为播放器控制栏中部":["24.5"],"heatmap":["24.5"],"plugins":["24.6","24.11","24.12","24.13"],"xml":["24.6","24.13","24.14"],"这是用户在输入框输入弹幕文本":["24.6"],"然后点击发送按钮后触发的函数":["24.6"],"artplayerplugindanmuku":["24.11","24.12","24.13"],"emitter":["24.14"],"重载":["24.14"],"danmu":["24.16"],"loaded":["24.18"],"danmus":["24.18"],"加载弹幕":["24.18"],"length":["24.18"],"简体中文":["25.0"],"和":["25.0"],"英文":["25.0"],"有时候":["26.2"],"地址没那么快知道":["26.2"],"这时候你可以异步设置":["26.2"],"cover":["26.11"],"但在部分低性能设备或老旧浏览器上可能会有性能或兼容性问题":["26.22"],"预览图缩放":["26.36"],"是否转义":["26.37"],"标签":["26.37"],"默认为":["26.37"],"onvttload":["26.37"],"用于修改":["26.37"]},{"0":["15.12","23.9"],"1":["3.25","9.9","19.9","24.4"],"2":["3.26","9.3","13.29","19.3","22.3","24.4"],"3":["3.28","13.28","19.6","26.1"],"4":["3.28","13.28","19.1","20.10","22.5","22.8","22.9","22.13","22.14","22.15","22.16","22.23","22.24","22.25","22.28","22.33","22.36","22.40","22.42","22.45","22.46","22.49","26.6","26.11","26.12","26.14","26.15","26.16","26.18","26.20","26.22","26.23","26.24","26.28","26.36","26.37","26.38","26.41","26.44","26.48","26.49","26.51"],"5":["3.23","3.29","9.9","13.29","19.9","22.7"],"6":["3.29","13.29","15.43","20.10","22.2","26.2"],"7":["5.29","15.6","15.7","15.17","15.18","15.19","15.24","15.38","15.39","15.40","26.27","26.38"],"8":["5.26","15.15","15.26","15.27","22.36","23.13","26.36","26.41"],"9":["5.5"],"10":["3.12","3.14","3.27","5.12","9.9","19.9"],"12":["24.13"],"14":["22.33"],"20":["3.11"],"22":["9.5"],"40":["13.7"],"50":["24.13"],"100":["13.10"],"300":["13.5","13.6"],"500":["3.21","13.8","13.9","13.17"],"512":["24.5"],"2000":["3.22","3.24","13.22"],"3000":["3.15","15.12"],"5000":["3.4","3.13","3.16"],"的":["0.0","0.4","1.0","5.0"],"url":["0.1","0.3","0.5","0.8","0.12","0.13","0.15","2.1","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.19","2.20","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.5","3.30","5.1","5.2","5.3","5.8","5.9","5.13","5.14","5.15","5.16","5.17","5.18","5.19","5.21","5.22","5.25","5.28","5.30","5.31","5.32","5.34","5.35","5.36","5.37","5.46","5.47","9.1","9.2","9.6","10.3","10.7","10.17","12.6","12.7","12.8","12.10","12.12","12.16","12.17","12.18","12.20","12.22","12.24","12.26","12.28","12.29","12.30","12.31","15.2","15.3","15.8","15.9","15.14","15.23","15.28","15.31","15.32","15.34","15.35","15.36","15.37","15.41","15.46","15.47","19.2","19.5","20.5","20.9","21.2","22.17","22.34","22.39","24.9","24.15","24.17","25.1","26.7","26.10","26.19","26.34","26.40","26.50"],"assets":["0.1","0.3","0.5","0.8","0.9","0.11","0.13","0.15","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.23","2.24","2.25","2.26","2.27","2.29","2.30","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","3.30","5.2","5.3","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.16","5.18","5.19","5.20","5.21","5.22","5.25","5.28","5.30","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.46","5.47","9.1","9.2","9.6","10.3","10.5","10.7","10.17","12.2","12.6","12.17","12.18","12.20","12.22","12.24","12.28","12.29","12.30","12.31","15.2","15.3","15.9","15.14","15.23","15.28","15.31","15.32","15.34","15.35","15.37","15.41","15.44","15.46","15.47","19.2","19.5","20.9","21.2","21.3","22.17","22.34","22.39","22.40","24.9","24.15","24.17","25.1","26.10","26.19","26.33","26.34","26.39","26.40","26.47","26.50"],"sample":["0.1","0.3","0.5","0.7","0.8","0.9","0.10","0.11","0.13","0.15","2.6","2.11","2.12","2.16","2.17","2.18","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.29","2.30","2.31","2.39","5.2","5.3","5.9","5.11","5.13","5.14","5.15","5.16","5.18","5.19","5.20","5.21","5.22","5.28","5.30","5.31","5.32","5.33","5.34","5.35","5.36","5.44","5.46","5.47","9.2","9.6","10.3","10.5","10.7","10.17","12.2","12.18","12.20","12.22","12.24","12.28","12.29","12.30","12.31","15.2","15.23","15.28","15.34","15.41","15.44","15.46","19.2","19.5","20.9","21.2","21.3","22.7","22.17","22.34","22.39","22.40","24.9","24.10","24.15","24.17","25.3","26.1","26.10","26.19","26.31","26.33","26.34","26.39","26.40","26.47"],"video":["0.1","0.3","0.5","0.6","0.7","0.8","0.9","0.10","0.13","0.15","2.2","2.6","2.12","2.17","2.18","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.28","2.29","2.30","2.31","5.2","5.3","5.9","5.11","5.13","5.14","5.16","5.20","5.22","5.23","5.28","5.31","5.32","5.33","5.35","5.36","5.44","5.46","9.2","9.6","10.1","10.3","10.5","10.7","10.17","12.2","12.22","12.28","12.29","12.30","12.31","15.28","15.41","15.44","15.46","19.2","19.5","20.9","21.2","21.3","22.7","22.31","22.39","23.9","24.9","24.10","24.15","24.17","25.3","26.1","26.10","26.19","26.31","26.34","26.39","26.40","26.47"],"mp4":["0.3","0.5","0.6","0.7","0.8","0.9","0.10","0.16","2.2","2.17","2.18","2.20","2.22","2.24","2.28","2.29","2.30","2.31","5.16","5.20","5.22","5.23","5.28","5.32","5.33","5.34","5.44","5.46","9.2","10.1","10.3","10.5","10.7","10.17","12.2","12.28","12.29","12.30","12.31","15.23","15.28","15.41","15.44","19.2","19.5","20.9","21.2","21.3","22.7","22.17","22.31","22.39","23.9","24.9","24.10","24.17","25.3","26.1","26.10","26.19","26.31","26.32","26.34","26.39","26.47"],"warning":["0.4","10.2","10.4","11.6","15.12","15.16","15.22","15.33","20.4","22.7","22.10","25.0"],"提示":["0.4"],"默认所有播放器实例都是共享同一个":["0.4"],"localstorage":["0.4"],"而且默认的":["0.4"],"是":["0.4"],"settings":["0.4","9.2","9.5","19.5"],"如果你想不同的播放器使用不同的":["0.4"],"console":["0.6","0.14","0.17","6.2","6.3","6.4","6.5","9.3","9.4","10.1","10.4","10.5","10.6","10.14","11.1","16.2","16.3","16.4","16.5","19.3","19.4","22.30"],"info":["0.6","0.14","0.17","1.6","6.2","6.3","6.4","6.5","9.3","9.4","10.1","10.4","10.5","10.6","10.14","11.1","15.16","16.2","16.3","16.4","16.5","19.3","19.4","22.30"],"play":["0.6","10.6","12.42","22.43","26.4"],"on":["0.7","0.8","0.9","0.10","2.2","2.22","5.33","5.44","7.5","8.5","9.9","10.7","10.14","11.0","15.0","15.28","15.44","17.5","18.5","19.9","20.3","22.22"],"ready":["0.9","0.10","2.2","5.12","5.44","7.5","10.14","15.33","17.5"],"artplayer":["0.11","0.12","1.6","2.41","3.34","5.4","5.6","5.7","5.17","5.24","5.26","5.27","5.29","5.38","5.39","5.40","5.42","5.43","9.6","11.6","12.1","12.3","12.4","12.5","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.19","12.21","12.23","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.3","13.4","13.10","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","15.1","15.7","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.23","15.24","15.25","15.27","15.30","15.31","15.32","15.35","15.36","15.43","19.1","19.6","20.13","21.1","22.25","22.33","22.34","22.40","22.42","22.50","26.3","26.5","26.7","26.8","26.9","26.13","26.14","26.15","26.16","26.17","26.21","26.25","26.26","26.33","26.36","26.42","26.45","26.46"],"container":["0.11","0.12","1.1","2.1","2.3","2.4","2.14","2.41","3.5","3.6","3.7","3.8","3.9","3.10","3.17","3.29","3.30","5.1","5.4","5.6","5.7","5.8","5.10","5.15","5.17","5.18","5.19","5.24","5.25","5.26","5.27","5.30","5.38","5.39","5.40","5.42","5.43","9.1","9.6","12.1","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.21","12.23","12.24","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.30","15.1","15.3","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.23","15.25","15.30","15.31","15.32","15.34","15.35","15.36","15.37","15.47","19.2","19.6","21.1","21.2","22.25","22.33","22.34","22.40","22.42","22.50","24.7","24.16","26.5","26.7","26.17","26.25","26.27","26.33","26.40","26.42","26.50"],"app":["0.11","0.12","0.13","0.15","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.19","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.5","3.6","3.7","3.30","5.1","5.2","5.3","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.17","5.18","5.19","5.21","5.25","5.27","5.30","5.31","5.32","5.35","5.36","5.37","5.39","5.41","5.46","5.47","9.1","9.2","9.6","10.3","10.7","10.17","12.2","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.29","12.30","12.39","12.40","12.41","15.1","15.2","15.3","15.8","15.9","15.10","15.11","15.13","15.14","15.21","15.23","15.30","15.31","15.32","15.34","15.35","15.36","15.37","15.46","15.47","19.2","21.2","22.17","22.34","22.39","22.40","22.50","23.3","23.5","24.7","24.9","24.15","24.16","24.17","25.1","26.7","26.10","26.17","26.25","26.27","26.33","26.34","26.40","26.50"],"new":["0.12","1.1","3.3","3.6","3.7","3.8","3.9","3.10","3.11","3.17","3.22","3.28","3.29","3.33","5.4","5.5","5.6","5.7","5.24","5.26","5.29","5.38","5.39","5.40","5.41","5.42","5.43","9.6","10.3","10.16","12.1","12.3","12.4","12.5","12.9","12.11","12.12","12.13","12.14","12.15","12.16","12.19","12.21","12.23","12.25","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.6","13.7","13.8","13.9","13.17","13.30","15.6","15.7","15.8","15.9","15.10","15.11","15.13","15.14","15.15","15.17","15.18","15.19","15.21","15.24","15.25","15.27","15.30","15.31","15.36","15.41","15.43","19.1","19.6","21.1","21.2","22.9","22.13","22.25","22.33","22.34","22.40","22.42","22.50","24.7","24.8","24.16","26.3","26.5","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.28","26.33","26.36","26.38","26.42","26.44","26.45","26.46","26.48","26.49","26.51"],"hotkeyevent":["0.14","10.14"],"event":["0.14","9.3","9.4","10.14","17.1","19.4"],"click":["0.14","6.2","6.3","7.1","7.3","10.14","15.20","15.22","16.2","16.3","17.3","22.31","24.12"],"true":["0.16","2.28","3.1","3.20","3.33","7.2","9.2","9.5","17.2","19.2","19.5","22.17","22.37"],"flip":["0.16"],"playbackrate":["0.16"],"aspectratio":["0.16"],"function":["0.17","6.2","6.3","6.4","7.1","7.3","9.4","10.14","10.17","15.20","15.22","16.2","16.3","16.4","17.3","19.4","22.30","22.37","24.12","24.14","26.30"],"myplugin":["0.17","10.17"],"art":["1.1","3.1","3.3","3.4","3.8","3.9","3.10","3.11","3.12","3.13","3.17","3.18","3.21","3.22","3.23","3.24","3.27","3.28","3.29","3.32","3.33","5.4","5.5","5.26","5.29","5.38","5.40","5.41","5.42","5.43","9.6","10.3","10.16","12.1","12.5","12.14","12.15","12.25","12.32","12.33","12.34","12.35","12.36","12.37","12.38","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.29","13.30","15.6","15.7","15.15","15.17","15.18","15.19","15.21","15.24","15.25","15.27","15.30","15.38","15.39","15.40","15.43","19.1","19.6","20.8","21.1","22.9","22.13","22.25","22.28","22.33","22.34","22.40","22.41","22.42","23.8","24.8","24.16","26.3","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.28","26.36","26.38","26.42","26.44","26.45","26.46","26.48","26.49","26.51"],"js":["1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.12","3.2","3.34","5.5","5.29","10.8","10.9","10.10","10.13","10.15","10.16","11.1","13.1","13.3","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","15.4","15.6","15.15","15.17","15.24","15.26","15.38","15.39","15.40","15.42","19.1","20.2","22.3","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.27","22.28","22.33","22.36","22.40","22.44","22.45","22.46","22.49","23.2","24.3","26.6","26.11","26.22","26.36","26.37","26.38","26.41","26.51"],"手动触发事件":["2.0"],"subtitle":["2.28","2.29","2.30","2.31","12.31"],"或者部分加载完成":["2.46"],"则发送此事件":["2.46"],"已经到达结束点":["2.47"],"正在尝试获取媒体数据":["2.58"],"一级属性":["3.0"],"var":["3.1","3.3","3.4","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.28","3.29","3.31","3.32","3.33","5.4","5.5","5.26","5.29","5.42","9.6","10.13","10.15","10.16","12.1","13.3","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.22","13.28","13.29","13.30","15.6","15.7","15.11","15.13","15.15","15.17","15.18","15.19","15.21","15.24","15.26","15.27","15.30","15.38","15.39","15.40","15.43","19.1","19.6","22.3","22.5","22.9","22.13","22.25","22.28","22.33","22.40","22.42","24.8","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.22","26.23","26.24","26.26","26.27","26.28","26.36","26.38","26.41","26.42","26.44","26.45","26.46","26.48","26.49","26.51"],"false":["3.18","3.19","3.31","3.32","6.5","13.3","13.32","16.5"],"adsplugin":["4.0","14.0"],"option":["4.0","14.0","24.18"],"layers":["4.0","14.0"],"ads":["4.0","14.0"],"html":["4.0","7.4","8.4","9.7","15.20","15.22","17.4","18.4","19.7","20.13","22.31","22.32","24.11","24.12","24.13","26.31","26.32"],"img":["4.0","9.5","9.8","19.8","26.39"],"style":["4.0","6.1","7.3","8.1","8.4","16.1","17.3","18.1","18.4","23.4","26.29"],"width":["4.0","8.4","9.5","9.8","18.4","19.8","24.5","26.29"],"100px":["4.0","8.4","18.4","22.29","26.29"],"src":["4.0","8.3","8.4","9.8","18.3","18.4","19.8","22.29","26.29"],"display":["4.0"],"none":["4.0"],"position":["4.0","5.20","7.4","8.2","8.3","8.5","17.4","18.2","18.3","18.5","22.29","22.32","24.11","24.12","26.29","26.32"],"absolute":["4.0","8.2","8.3","8.5","18.2","18.3","18.5","22.29","26.29"],"top":["4.0","8.2","8.3","8.5","18.2","18.3","18.5","22.29","26.29"],"20px":["4.0","22.29","26.29"],"right":["4.0","7.2","7.4","8.2","8.5","15.20","15.22","17.2","17.4","18.2","18.5","22.29","24.11","24.12","24.13"],"seek":["5.12","22.19"],"settimeout":["5.12","7.5","17.5","22.2"],"controls":["5.20","5.22","24.11","24.12"],"jpg":["5.23"],"hd":["5.45","15.45"],"720p":["5.45","15.45"],"element":["6.1","8.1","13.34","16.1","18.1","22.38"],"组件的":["6.1","8.1"],"dom":["6.1","8.1","9.4","16.1","18.1","19.4"],"元素":["6.1","8.1"],"args":["6.2","6.3","6.4","16.2","16.3","16.4","22.30","26.30"],"show":["6.5","9.7","9.9","16.5","19.7","19.9"],"组件样式对象":["7.1"],"组件点击事件":["7.1"],"mounted":["7.1","11.0","15.0","17.1"],"selector":["7.2","17.2"],"default":["7.2","10.4","17.2","20.10","21.0","21.4","25.4"],"span":["7.2","17.2"],"01":["7.2","17.2","22.30","26.30"],"button":["7.3","7.4","17.3","17.4"],"tooltip":["7.3","7.4","8.2","8.3","17.3","17.4","18.2","18.3","22.32"],"color":["7.3","17.3"],"red":["7.3","17.3"],"your":["7.4","17.4","22.31","22.32","26.31","26.32","26.47"],"02":["7.5","9.4","17.5","19.3","19.4","22.30","26.30"],"update":["7.5","17.5"],"the":["7.5","12.48","17.5","21.4","22.10","25.4"],"tip":["8.2","8.3","18.2","18.3"],"50px":["8.2","8.3","8.5","18.2","18.3","18.5"],"potser":["8.4","18.4"],"setting":["9.2","19.2","19.5"],"item":["9.3","9.4","19.3","19.4"],"onselect":["9.4","19.4","22.30","26.30"],"pip":["9.5","19.5"],"mode":["9.5","19.5"],"close":["9.5","19.5"],"height":["9.5","9.8","19.8"],"add":["9.7","20.1","23.1"],"slider":["9.7","19.7"],"state":["9.8","13.34","19.8"],"range":["9.9","19.9","24.13"],"attached":["10.0"],"note":["10.2","10.4","15.12","15.16","15.33","22.7","22.10","22.47"],"to":["10.2","12.42","12.43","12.62","14.0","22.1"],"easily":["10.2"],"distinguish":["10.2"],"between":["10.2"],"and":["10.2","15.29"],"const":["10.4","24.6"],"by":["10.4","21.0","22.47"],"zh":["10.6"],"cn":["10.6"],"visibility":["10.8"],"of":["10.8","10.9","10.10","10.16","12.45","20.3","22.1"],"div":["10.8","10.9","10.10","10.11","10.12","10.16","15.5","15.29","19.6","22.21","22.27","22.36","22.37","22.38","22.41","22.48","26.37"],"classname":["10.8","10.9","10.10","10.12","10.13","10.15","10.16","15.5","15.29","15.42","19.6","22.21","22.27","22.36","22.37","22.38","22.41","22.48","22.51","26.37"],"run":["10.8","10.9","10.10","10.12","10.13","10.15","10.16","11.8","11.11","15.4","15.5","15.26","15.29","15.42","19.6","22.18","22.21","22.27","22.36","22.37","22.38","22.41","22.44","22.48","22.51","26.37"],"code":["10.8","10.9","10.10","10.12","10.13","10.15","10.16","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","13.1","15.4","15.15","15.26","15.29","15.42","19.6","22.6","22.12","22.14","22.15","22.16","22.18","22.20","22.21","22.23","22.24","22.26","22.27","22.36","22.37","22.38","22.41","22.44","22.46","22.48","22.49","22.51","26.37"],"currently":["10.11"],"active":["10.11"],"cues":["10.11"],"overall":["10.11"],"see":["10.12"],"documentation":["10.12"],"for":["10.12","22.1","22.37"],"details":["10.12"],"all":["11.6","13.0"],"manually":["12.0","21.0"],"trigger":["12.0"],"data":["12.42","12.58","20.10"],"through":["12.42","12.43"],"already":["12.46"],"been":["12.46","20.13"],"loaded":["12.46","12.50"],"or":["12.46","12.53","22.22"],"media":["12.47","12.49","12.58"],"resource":["12.48"],"type":["12.48","24.13"],"paused":["12.51","12.53","14.0"],"browser":["12.54"],"is":["12.54","14.0","15.5","17.1"],"has":["12.55","12.56","12.57","12.59","20.13"],"but":["12.58"],"currenttime":["12.60"],"attribute":["12.60"],"changed":["12.61"],"are":["13.0"],"in":["13.0"],"uppercase":["13.0"],"they":["13.0"],"only":["13.34"],"ui":["13.34"],"set":["13.34"],"i":["14.0","24.6"],"want":["14.0","22.10"],"write":["14.0"],"a":["14.0"],"that":["14.0"],"displays":["14.0"],"an":["14.0","22.43"],"image":["14.0"],"ad":["14.0"],"when":["14.0"],"automatically":["15.5"],"execute":["15.5"],"similar":["15.5","22.11"],"logic":["15.5"],"called":["15.5"],"t":["15.12"],"some":["15.16","22.22"],"videos":["15.16"],"may":["15.16","22.22"],"not":["15.16"],"switch":["15.20"],"visible":["15.29"],"resize":["15.33"],"sd":["15.45"],"480p":["15.45"],"object":["16.1","18.1","22.11"],"handler":["17.1"],"triggered":["17.1"],"after":["17.1"],"yellow":["19.3"],"step":["19.6","24.13"],"unpkg":["20.2","20.11","23.2","24.3"],"s":["20.3"],"dimensions":["20.3"],"depend":["20.3"],"size":["20.3","22.1"],"get":["20.4","23.4"],"instance":["20.4","22.41"],"getinstance":["20.4"],"imported":["20.6","21.0"],"useref":["20.8","23.8"],"export":["20.10"],"return":["20.10"],"https":["20.11"],"cdn":["20.11","23.11"],"npm":["20.11","23.11"],"dist":["20.11","23.11"],"danmuku":["20.12"],"doctype":["20.12","23.12"],"agent":["20.13"],"added":["20.13"],"head":["20.13"],"title":["20.13"],"demo":["20.13","23.13"],"must":["21.0"],"be":["21.0"],"as":["21.0","22.47"],"change":["21.4","25.4"],"language":["21.4","25.4"],"need":["22.1"],"initialize":["22.1"],"example":["22.1"],"this":["22.4","22.22","26.4"],"equivalent":["22.4"],"muted":["22.10"],"if":["22.10","24.6"],"you":["22.10"],"fit":["22.11"],"cover":["22.11"],"css":["22.11","26.1"],"description":["22.19"],"increase":["22.19"],"volume":["22.19","23.9"],"decrease":["22.19"],"forward":["22.19"],"backward":["22.19"],"cause":["22.22"],"performance":["22.22"],"compatibility":["22.22"],"issues":["22.22"],"low":["22.22"],"left":["22.32","26.32"],"something":["22.35","26.35"],"dosomething":["22.35","26.35"],"onvttload":["22.37"],"modifying":["22.37"],"text":["22.37","24.6","24.12"],"loading":["22.39","26.39"],"current":["22.41"],"modify":["22.43"],"existing":["22.43"],"player":["22.47"],"uses":["22.47"],"class":["23.3"],"d":["23.6"],"选项":["23.10"],"lang":["23.12","25.2","25.3"],"meta":["23.13"],"charset":["23.13"],"utf":["23.13"],"com":["24.3"],"默认":["24.4"],"顶部":["24.4"],"底部":["24.4"],"是否开启热力图":["24.5"],"当播放器宽度小于此值时":["24.5"],"弹幕发射器置于播放器底部":["24.5"],"points":["24.5"],"热力图数据":["24.5"],"filter":["24.5"],"弹幕载入前的过滤器":["24.5"],"只支持返回布尔值":["24.5"],"beforeemit":["24.5"],"弹幕发送前的过滤器":["24.5"],"支持返回":["24.5"],"你可以对弹幕做合法校验":["24.6"],"或者做存库处理":["24.6"],"当返回true后才表示把弹幕加入到弹幕队列":["24.6"],"async":["24.6"],"isdirty":["24.6"],"fuck":["24.6"],"test":["24.6"],"plugins":["24.10"],"artplayerplugindanmuku":["24.10"],"xml":["24.11","24.12"],"隐藏弹幕":["24.11"],"发送弹幕":["24.12"],"弹幕大小":["24.13"],"input":["24.13"],"min":["24.13"],"max":["24.13"],"重新加载当前弹幕库":["24.14"],"切换":["24.14"],"error":["24.18"],"加载错误":["24.18"],"config":["24.18"],"配置变化":["24.18"],"外":["25.0"],"不再捆绑其它多国语言":["25.0"],"需要自行导入需要的语言":["25.0"],"您可能需要初始化容器元素的大小":["26.1"],"如":["26.1"],"等同于":["26.4"],"document":["26.27"],"queryselector":["26.27"],"menu":["26.31"],"control":["26.32"],"文本的函数":["26.37"],"修改现有的语言":["26.43"],"id":["26.47"]},{"0":["5.12","20.5","20.9"],"1":["9.8","13.25","19.8","24.13"],"2":["13.26"],"3":["22.1"],"4":["22.6","22.12","22.18","22.20","22.21","22.26","22.37","22.38","22.41","22.44","22.48","22.51"],"5":["9.8","13.23","19.8","20.9","23.9"],"6":["15.42"],"7":["15.4","15.29","22.27","22.38"],"8":["12.0","20.12","20.13","22.41","23.12"],"9":["15.5","22.29","26.29"],"10":["9.8","13.12","13.14","13.27","19.8"],"11":["22.43","26.43"],"12":["22.37","26.37"],"20":["13.11"],"22":["9.2","9.6","9.7","19.2","19.5","19.7"],"25":["24.13"],"32":["0.14","10.14"],"60":["22.34","26.34"],"120":["26.34"],"150":["9.3","19.3"],"200":["24.5"],"404":["2.11","12.11"],"500":["13.21"],"1000":["22.2"],"2000":["13.24"],"3000":["5.12","13.15"],"5000":["13.4","13.13","13.16"],"二级属性":["0.0"],"mp4":["0.1","0.11","0.12","0.13","0.15","2.1","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.19","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.5","3.6","3.7","3.29","3.30","5.1","5.2","5.3","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.17","5.18","5.19","5.21","5.25","5.26","5.30","5.31","5.35","5.36","5.37","5.39","5.41","5.47","9.1","9.6","10.8","10.9","10.10","10.16","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.39","12.41","13.30","15.1","15.2","15.3","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.25","15.30","15.31","15.32","15.34","15.35","15.36","15.37","15.46","15.47","19.6","20.5","22.33","22.34","22.50","23.5","24.15","24.16","25.1","26.7","26.25","26.33","26.36","26.50"],"console":["0.1","0.3","0.5","1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.11","1.12","3.2","5.9","5.14","5.15","5.16","5.23","5.28","5.30","5.31","5.32","5.34","5.35","5.36","5.44","7.3","8.2","8.3","10.3","10.17","13.2","15.28","15.32","15.34","15.41","15.44","17.3","18.2","18.3","22.29","22.31","26.29","26.30","26.31"],"info":["0.1","0.3","0.5","1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.12","5.9","5.14","5.16","5.23","5.28","5.31","5.32","5.34","5.35","5.36","7.3","8.2","8.3","10.3","10.17","15.28","15.34","15.41","17.3","18.2","18.3","22.29","22.31","26.29","26.30","26.31"],"warning":["0.2","1.6","5.12","10.1","10.5","10.6","15.20","15.41","21.0","22.2","22.4","22.17","22.19","22.40","23.3","23.4","26.10","26.40","26.47"],"提示":["0.2","5.12","23.3","26.47"],"为了方便区别":["0.2"],"元素和普通对象":["0.2"],"播放器里的所有":["0.2"],"click":["0.3","5.20","5.22","6.1","8.1","8.2","8.3","10.3","15.41","16.1","18.1","18.2","18.3","22.29","22.32","24.10","24.11","26.29","26.31","26.32"],"event":["0.3","24.11"],"你可以修改":["0.4"],"即可":["0.4"],"zh":["0.6"],"cn":["0.6","21.4","25.4"],"your":["0.6","10.6","15.33","20.3","21.3","21.4","22.3","25.3","25.4","26.3"],"ready":["0.7","0.8","0.11","0.13","0.14","0.15","0.16","2.6","2.18","2.22","2.24","5.9","5.11","5.13","5.14","5.15","5.16","5.18","5.19","5.23","5.28","5.30","5.31","5.32","5.33","5.34","5.35","5.36","5.45","5.46","6.5","8.5","9.9","10.7","12.2","12.18","12.22","12.24","15.9","15.11","15.13","15.14","15.23","15.28","15.31","15.32","15.34","15.35","15.36","15.44","15.45","15.46","16.5","18.5","19.9"],"html":["0.8","0.9","0.10","5.20","5.22","14.0","24.10"],"some":["0.8","0.9","0.10"],"text":["0.8","0.9","0.10","17.1"],"position":["0.9","5.22","5.37","7.1","8.4","14.0","17.1","18.4","24.10"],"video":["0.11","0.12","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.13","2.14","2.15","2.16","2.19","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.5","3.6","3.7","3.28","3.29","3.30","5.1","5.6","5.7","5.8","5.10","5.15","5.17","5.18","5.19","5.21","5.24","5.25","5.26","5.27","5.29","5.30","5.37","5.39","5.41","5.47","9.1","10.8","10.9","10.10","10.16","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.12","12.13","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.23","12.24","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","15.21","15.30","15.31","15.32","15.36","15.37","15.47","19.6","20.5","22.25","22.33","22.34","22.42","22.50","23.5","24.7","24.16","25.1","26.7","26.17","26.25","26.33","26.36","26.50"],"on":["0.11","0.12","0.13","0.14","0.15","0.16","2.6","2.11","2.12","2.18","2.24","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.16","5.18","5.19","5.21","5.23","5.28","5.30","5.31","5.32","5.34","5.35","5.36","5.45","5.46","6.4","6.5","7.4","10.9","10.10","12.2","12.6","12.18","12.22","12.24","15.9","15.11","15.13","15.14","15.23","15.30","15.31","15.32","15.34","15.35","15.36","15.45","15.46","16.4","16.5","17.4","22.4"],"assets":["0.12","1.1","2.1","2.3","2.4","2.14","2.41","3.5","3.6","3.7","3.8","3.9","3.10","3.17","3.28","3.29","5.1","5.4","5.5","5.6","5.7","5.17","5.24","5.26","5.27","5.29","5.38","5.39","5.40","5.41","5.42","5.43","10.8","10.9","10.10","10.13","10.15","10.16","12.1","12.3","12.4","12.5","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.19","12.21","12.23","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.6","13.7","13.28","13.29","13.30","15.1","15.6","15.7","15.8","15.10","15.11","15.13","15.15","15.17","15.18","15.19","15.21","15.24","15.25","15.26","15.27","15.30","15.36","19.1","19.6","21.1","22.25","22.33","22.36","22.42","22.50","24.7","24.8","24.16","26.5","26.7","26.17","26.25","26.36","26.37","26.42"],"sample":["0.12","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.13","2.14","2.15","2.19","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.40","2.41","3.5","3.6","3.7","3.8","3.9","3.10","3.17","3.28","3.29","3.30","5.1","5.6","5.7","5.8","5.10","5.17","5.24","5.25","5.26","5.27","5.29","5.37","5.38","5.39","5.40","5.41","5.42","9.1","10.8","10.9","10.10","10.13","10.15","10.16","12.1","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.19","12.21","12.23","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.6","13.7","13.29","13.30","15.1","15.3","15.8","15.9","15.10","15.11","15.13","15.14","15.15","15.18","15.19","15.21","15.25","15.30","15.31","15.32","15.35","15.36","15.37","15.47","19.1","19.6","21.1","22.25","22.33","22.36","22.42","22.50","24.7","24.16","25.1","26.5","26.7","26.17","26.25","26.36","26.37","26.42","26.50"],"subtitleoffset":["0.16"],"return":["0.17","9.3","9.4","10.17","19.3","19.4","24.9","24.12"],"name":["0.17","10.17"],"something":["0.17"],"dosomething":["0.17"],"一级属性":["1.0","5.0"],"app":["1.1","3.3","3.8","3.9","3.10","3.11","3.12","3.13","3.17","3.22","3.23","3.28","3.29","3.33","5.4","5.5","5.6","5.7","5.24","5.26","5.29","5.38","5.40","5.42","5.43","10.8","10.9","10.10","10.13","10.15","10.16","12.1","12.3","12.4","12.5","12.14","12.15","12.32","12.33","12.34","12.35","12.36","12.37","12.38","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.28","13.29","13.30","15.6","15.7","15.15","15.17","15.18","15.19","15.24","15.25","15.26","15.27","15.29","15.38","15.39","15.40","15.43","19.1","19.6","20.13","21.1","22.5","22.9","22.13","22.25","22.27","22.33","22.36","22.37","22.42","24.8","26.5","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.23","26.24","26.26","26.28","26.36","26.37","26.38","26.41","26.42","26.44","26.45","26.46","26.48","26.49","26.51"],"url":["1.1","3.6","3.7","3.8","3.9","3.10","3.17","3.22","3.28","3.29","5.4","5.5","5.6","5.7","5.24","5.26","5.27","5.29","5.38","5.39","5.40","5.41","5.42","5.43","10.8","10.9","10.10","10.13","10.15","10.16","12.1","12.3","12.4","12.5","12.9","12.11","12.13","12.14","12.15","12.19","12.21","12.23","12.25","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.28","13.29","13.30","15.1","15.6","15.7","15.15","15.17","15.21","15.24","15.25","15.26","15.27","15.30","15.38","15.39","15.40","15.43","19.1","19.6","21.1","22.3","22.25","22.42","22.50","23.5","24.7","24.8","24.16","26.3","26.5","26.8","26.9","26.13","26.14","26.15","26.16","26.17","26.21","26.25","26.26","26.38","26.42","26.45","26.46","26.51"],"全部工具函数请参考以下地址":["1.6"],"js":["1.11","10.11","10.12","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","13.2","13.34","15.5","15.29","22.11","22.21","22.37","22.38","22.41","22.48","22.51"],"emit":["2.0","12.0"],"focus":["2.0","12.0"],"移除事件":["2.0"],"true":["2.16","2.17","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.39","3.30","5.2","5.3","5.21","6.2","6.4","6.5","9.1","9.6","10.16","12.17","12.20","12.28","13.1","13.20","13.33","15.2","15.3","16.2","16.4","16.5","19.6","24.16","26.10","26.33","26.47"],"setting":["2.17","2.20","2.28","3.30","9.1","9.6","12.17","12.20","13.30","19.6"],"fullscreen":["2.22"],"srt":["2.28","2.29","2.30","2.31","12.31"],"并调用":["2.46"],"但数据意外未出现":["2.58"],"属性名字全部都是大写的形式":["3.0"],"未来容易发生变动":["3.0"],"new":["3.1","3.4","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.23","3.24","3.25","3.26","3.27","3.31","3.32","3.34","10.8","10.9","10.10","10.11","10.12","10.13","10.15","11.1","13.1","13.3","13.4","13.10","13.11","13.12","13.13","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.26","13.27","13.28","13.29","13.31","13.32","13.33","15.4","15.5","15.26","15.29","15.38","15.39","15.40","15.42","22.3","22.5","22.6","22.8","22.12","22.14","22.15","22.16","22.18","22.20","22.21","22.23","22.24","22.26","22.28","22.35","22.36","22.37","22.38","22.41","22.44","22.45","22.46","22.48","22.49","22.51","23.9","26.6","26.11","26.22","26.35","26.37","26.41"],"container":["3.1","3.3","3.4","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.28","3.31","3.32","3.33","3.34","5.5","5.29","10.8","10.9","10.10","10.11","10.12","10.13","10.15","10.16","11.1","13.3","13.6","13.7","13.8","13.9","13.10","13.11","13.17","13.22","13.28","13.29","15.4","15.5","15.6","15.7","15.15","15.17","15.24","15.26","15.27","15.29","15.38","15.39","15.40","15.42","15.43","19.1","20.3","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.20","22.23","22.24","22.26","22.27","22.28","22.36","22.37","22.45","22.46","22.49","22.51","23.10","24.8","26.3","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.22","26.23","26.24","26.26","26.28","26.36","26.37","26.38","26.41","26.44","26.45","26.46","26.48","26.49","26.51"],"log":["3.2","5.44","15.44"],"art":["3.14","3.15","3.16","3.19","3.20","3.25","3.26","3.31","3.34","10.8","10.9","10.10","10.11","10.13","10.15","11.1","13.1","13.3","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.28","13.31","13.32","13.33","15.4","15.5","15.26","15.29","15.42","20.9","22.3","22.5","22.6","22.8","22.12","22.14","22.15","22.16","22.18","22.20","22.21","22.23","22.24","22.26","22.36","22.37","22.38","22.44","22.45","22.46","22.48","22.49","22.51","23.9","26.11","26.22","26.27","26.37"],"var":["3.34","10.8","10.9","10.10","10.11","10.12","11.1","13.1","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","15.4","15.5","15.29","15.42","22.6","22.8","22.12","22.14","22.15","22.16","22.18","22.20","22.21","22.23","22.24","22.26","22.27","22.35","22.36","22.37","22.38","22.41","22.44","22.45","22.46","22.48","22.49","22.51","26.11","26.35","26.37"],"show":["4.0","6.2","6.3","6.4","14.0","16.2","16.3","16.4"],"block":["4.0","14.0"],"hide":["4.0","14.0"],"controls":["4.0","5.37","15.37","24.10"],"tooltip":["4.0","7.1","9.7","17.1","19.7","26.32"],"muted":["5.2","5.3","5.25","15.2","15.3","26.10"],"seek":["5.11","5.13"],"t":["5.12"],"right":["5.20","5.22","8.3","8.4","14.0","17.1","18.3","18.4","24.10","26.29"],"switch":["5.20","15.12"],"function":["5.20","5.22","6.1","8.1","8.2","8.3","11.0","16.1","18.1","18.2","18.3","22.29","22.31","22.32","24.9","24.11","24.13","26.29","26.31"],"theme":["5.44","15.44"],"settimeout":["5.45","6.5","8.5","9.9","10.14","15.45","16.5","18.5","19.9","26.2"],"subtitle":["5.47","12.29","12.30"],"object":["6.1","8.1"],"组件样式对象":["6.1","8.1"],"false":["6.2","6.3","6.4","9.5","13.18","13.19","13.31","13.34","16.2","16.3","16.4","19.5","24.6"],"update":["6.5","8.5","9.9"],"组件挂载后触发":["7.1"],"组件的提示文本":["7.1"],"yellow":["7.2","17.2"],"02":["7.2","17.2"],"onselect":["7.2","17.2"],"item":["7.2","9.5","17.2"],"dom":["7.2","17.2"],"args":["7.3","8.2","8.3","17.3","18.2","18.3","22.29","22.31","22.32","26.29","26.31"],"mounted":["7.3","8.2","8.3","17.3","18.2","18.3","24.13"],"style":["7.4","14.0","17.4","20.5","22.32","23.5","24.13","26.32"],"color":["7.4","17.4","22.32","24.4","26.32"],"red":["7.4","17.4"],"control":["7.5","17.5"],"by":["7.5","8.5","9.9","17.5","18.5","19.9","22.2"],"absolute":["8.4","14.0","18.4"],"top":["8.4","14.0","18.4"],"50px":["8.4","18.4"],"the":["8.5","9.9","18.5","19.9"],"button":["9.2","19.2"],"img":["9.2","9.6","9.7","14.0","19.2","19.5","19.7","22.39"],"height":["9.2","9.6","19.2","19.5","20.5","22.1","23.5","26.1"],"src":["9.2","9.5","14.0","19.2","19.5","22.39","26.39"],"quality":["9.3","19.3"],"1080p":["9.3","19.3"],"state":["9.5","22.39","24.6","26.39"],"svg":["9.5","9.8","19.5","19.8"],"settings":["9.6","10.4","19.2","19.6"],"slider":["9.6"],"5x":["9.6","9.7","19.6","19.7"],"width":["9.6","9.7","14.0","19.5","19.7","20.5","22.1","23.5","26.1"],"icon":["9.7","19.7"],"range":["9.8","19.8"],"instance":["10.0","23.4"],"which":["10.0","11.0"],"note":["10.1","15.20","15.22","15.41","22.2","22.4","22.17","22.19"],"if":["10.1","10.4","15.41","20.11","22.47","24.11","24.12"],"you":["10.1","10.4","15.41"],"directly":["10.1","20.4"],"regular":["10.2"],"objects":["10.2"],"within":["10.2"],"are":["10.2"],"mouseenter":["10.3"],"instances":["10.4"],"share":["10.4"],"same":["10.4","15.12","22.47"],"localstorage":["10.4"],"and":["10.4","12.46","15.12"],"want":["10.4"],"different":["10.4"],"players":["10.4"],"use":["10.4"],"loading":["10.5","12.54"],"this":["10.5","22.40"],"is":["10.5","12.48","15.33","20.4"],"using":["10.6"],"can":["10.6","22.40"],"only":["10.6","22.40"],"to":["10.7","11.6","15.20","15.22","20.5","23.5"],"artplayer":["10.8","10.9","10.10","10.11","10.12","10.13","10.15","10.16","11.1","13.1","13.34","15.4","15.6","15.15","15.17","15.26","15.29","15.38","15.39","15.40","15.42","22.3","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.28","22.35","22.36","22.37","22.38","22.44","22.45","22.46","22.49","22.51","26.6","26.11","26.12","26.18","26.20","26.22","26.23","26.24","26.28","26.35","26.37","26.38","26.41","26.44","26.48","26.49","26.51"],"classname":["10.11","13.34","22.11","22.22"],"run":["10.11","13.34","22.11","22.22"],"code":["10.11","13.34","15.5","22.11","22.22"],"flip":["10.16"],"playbackrate":["10.16"],"constructor":["11.0"],"please":["11.6"],"refer":["11.6"],"remove":["12.0"],"listener":["12.0"],"end":["12.42","12.43"],"without":["12.42","12.43"],"duration":["12.45"],"partially":["12.46"],"reached":["12.47"],"its":["12.47","20.3"],"not":["12.48","20.4"],"has":["12.49","12.60"],"delayed":["12.53"],"due":["12.53","15.20","15.22","22.17"],"changed":["12.55"],"completed":["12.56"],"begun":["12.57"],"been":["12.59"],"temporary":["12.62"],"lack":["12.62"],"subject":["13.0"],"change":["13.0"],"div":["13.34","20.13","22.11","22.22","23.13"],"100px":["14.0"],"display":["14.0","24.13"],"none":["14.0"],"20px":["14.0"],"have":["15.12","15.16"],"functionality":["15.12"],"a":["15.16","21.0"],"such":["15.16"],"as":["15.16"],"live":["15.16"],"streams":["15.16"],"or":["15.16","17.1","22.1"],"browser":["15.20","15.22","22.17"],"security":["15.20","15.22","22.17"],"mechanisms":["15.20","15.22","22.17"],"page":["15.20","15.22","22.10"],"must":["15.22","20.3"],"jpg":["15.23"],"json":["15.28"],"stringify":["15.28"],"useful":["15.33"],"but":["15.33"],"need":["15.41"],"left":["17.1"],"pnpm":["20.1","23.1","24.2"],"com":["20.2","20.11","23.2","23.11"],"so":["20.3"],"reactive":["20.4"],"modifying":["20.4"],"path":["20.5","23.5"],"600px":["20.5","23.5"],"400px":["20.5","22.1","26.1"],"margin":["20.5"],"60px":["20.5"],"auto":["20.5"],"when":["20.6","21.0"],"importing":["20.6"],"null":["20.8","23.8"],"volume":["20.9"],"option":["20.10","23.10"],"tip":["20.11"],"lang":["20.12","21.2","21.3"],"en":["20.12","23.12"],"head":["20.12","23.12"],"meta":["20.12","20.13","23.12"],"charset":["20.12","20.13","23.12"],"utf":["20.12","20.13","23.12"],"body":["20.13","23.13"],"class":["20.13","23.13"],"needed":["21.0"],"cannot":["21.0"],"matched":["21.0"],"script":["21.2","25.2"],"play":["21.4","22.19","25.4"],"css":["22.1"],"300px":["22.1","26.1"],"three":["22.2"],"file":["22.2"],"formats":["22.2"],"caches":["22.7"],"last":["22.7"],"level":["22.7"],"immediately":["22.10"],"upon":["22.10"],"load":["22.10"],"space":["22.19"],"toggle":["22.19"],"pause":["22.19"],"these":["22.19"],"devices":["22.22"],"older":["22.22"],"browsers":["22.22"],"document":["22.27"],"queryselector":["22.27"],"opacity":["22.29","26.29"],"setting02":["22.30","26.30"],"green":["22.32","26.32"],"one":["22.34","26.34"],"more":["22.34","26.34"],"chance":["22.34","26.34"],"ploading":["22.39","26.39"],"gif":["22.39","26.39"],"recognition":["22.40"],"player":["22.40"],"parse":["22.40"],"suffixes":["22.40"],"like":["22.40"],"key":["22.47"],"cache":["22.47"],"progress":["22.47"],"however":["22.47"],"播放器的尺寸依赖于容器":["23.3"],"getinstance":["23.4"],"ts":["23.6"],"types":["23.10"],"const":["23.10"],"unpkg":["23.11"],"title":["23.12"],"ffffff":["24.4"],"弹幕颜色":["24.4"],"默认为白色":["24.4"],"promise":["24.5"],"beforevisible":["24.5"],"弹幕显示前的过滤器":["24.5"],"visible":["24.5"],"弹幕层是否可见":["24.5"],"emitter":["24.5"],"是否开启弹幕发射器":["24.5"],"maxlength":["24.5"],"弹幕输入框最大长度":["24.5"],"await":["24.6"],"这里是所有弹幕的过滤器":["24.6"],"包含来自服务端的和来自用户输入的":["24.6"],"plugins":["24.9","24.15","24.16","24.17"],"artplayerplugindanmuku":["24.9","24.15","24.16","24.17"],"xml":["24.10"],"隐藏弹幕":["24.10"],"prompt":["24.12"],"请输入弹幕文本":["24.12"],"弹幕测试文本":["24.12"],"trim":["24.12"],"value":["24.13"],"flex":["24.13"],"alignitems":["24.13"],"center":["24.13"],"切换到新的弹幕库":["24.14"],"config":["24.14"],"v2":["24.14"],"fullscreenweb":["24.16"],"stop":["24.18"],"弹幕停止":["24.18"],"start":["24.18"],"弹幕开始":["24.18"],"当无法匹配到语言时":["25.0"],"会默认显示英文":["25.0"],"i18n":["25.0","25.3"],"或者使用":["26.1"],"aspect":["26.1"],"热键":["26.19"],"描述":["26.19"],"增加音量":["26.19"],"降低音量":["26.19"],"innerhtml":["26.27"],"sd":["26.33"],"后缀的识别":["26.40"],"播放器只能解析这种后缀":["26.40"],"因为播放器默认使用":["26.47"]},{"0":["23.5"],"2":["5.31"],"4":["22.11","22.22"],"5":["5.8","5.9","5.15","15.8","26.7"],"8":["2.0"],"9":["5.32","22.1"],"10":["5.11","5.13","15.11","15.13"],"16":["5.32","15.32","22.1","24.12","26.1"],"22":["19.6"],"60":["22.36","24.5","26.36"],"120":["22.34"],"180":["22.34","26.34"],"200":["24.6"],"240":["26.34"],"360":["9.3"],"720":["9.3","19.3"],"1000":["0.8","0.9","0.10","0.16","10.8","24.5","26.2"],"1080":["9.3","19.3"],"5000":["0.14","10.14"],"比较少用":["0.0"],"warning":["0.1","0.5","0.6","0.7","0.8","5.16","5.20","5.22","5.28","5.33","5.41","10.3","10.7","10.14","15.28","20.5","20.13","22.29","22.30","22.31","22.32","22.39","22.42","22.50","23.13","26.2","26.4","26.7","26.17","26.19","26.31","26.32","26.39","26.42","26.50"],"提示":["0.1","5.16","5.20","5.22","5.33","26.2","26.7","26.10","26.17"],"假如直接修改这个":["0.1"],"元素都是以":["0.2"],"开头命名的":["0.2"],"这是所有":["0.2"],"元素的定义":["0.2"],"mouseenter":["0.3"],"mouseleave":["0.3","10.3"],"loading":["0.5","12.49"],"这是所有图标的定义":["0.5"],"types":["0.5","1.6","11.6","25.0","26.50"],"使用":["0.6","24.9"],"只能更新实例化之后的":["0.6"],"to":["0.7","22.2"],"play":["0.7","4.0","5.2","10.7","15.2","21.3","22.2","25.3"],"如果想马上隐藏":["0.7"],"settimeout":["0.8","0.9","0.10","0.12","0.13","0.14","0.15","0.16","5.2","5.3","5.8","5.11","5.13","5.21","6.4","7.4","8.4","9.8","10.8","10.9","10.10","10.16","15.2","15.8","15.11","15.13","16.4","17.4","18.4","19.8"],"false":["0.8","0.9","0.10","0.15","0.16","10.8","22.29","22.31","24.4","26.29","26.31"],"left":["0.9","7.1","10.9"],"true":["0.10","0.12","0.13","2.19","3.5","3.6","3.7","3.28","3.29","5.1","5.14","5.25","5.34","6.3","10.10","12.16","12.19","12.21","12.22","12.23","12.24","12.25","12.26","12.39","13.5","13.6","13.7","13.28","13.29","13.30","15.1","15.21","15.25","15.34","16.3","19.1","22.25","22.33","26.17","26.25"],"srt":["0.11","5.47","12.28","12.29","12.30","15.47"],"ready":["0.12","5.2","5.3","5.5","5.6","5.7","5.8","5.10","5.17","5.21","5.24","5.25","5.26","5.27","5.29","6.4","7.4","8.4","9.8","10.8","10.9","10.10","10.11","10.12","10.13","10.15","10.16","12.0","12.6","15.2","15.3","15.5","15.8","15.10","15.15","15.17","15.18","15.19","15.21","15.25","15.26","15.29","15.30","16.4","17.4","18.4","19.8","24.17"],"on":["0.17","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.13","2.14","2.15","2.16","2.17","2.19","2.20","2.21","2.23","2.25","2.26","2.27","2.28","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.8","3.9","3.10","3.17","5.1","5.2","5.3","5.4","5.5","5.6","5.7","5.17","5.24","5.25","5.26","5.27","5.29","5.38","5.39","5.40","5.47","8.4","9.8","10.8","10.11","10.12","10.13","10.15","10.16","12.1","12.3","12.4","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.17","12.19","12.20","12.21","12.23","12.25","12.26","12.27","12.28","12.29","12.30","12.31","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.8","13.9","13.10","13.17","15.1","15.2","15.3","15.5","15.6","15.7","15.8","15.10","15.15","15.17","15.18","15.19","15.21","15.24","15.25","15.26","15.27","15.29","15.38","15.39","15.40","15.47","18.4","19.8","24.15","24.17","26.4"],"非常少使用":["1.0"],"sample":["1.1","3.1","3.3","3.4","3.11","3.12","3.13","3.18","3.21","3.22","3.23","3.24","3.27","3.31","3.32","3.33","3.34","5.4","5.5","5.43","10.11","10.12","11.1","13.8","13.9","13.10","13.11","13.12","13.13","13.17","13.21","13.22","13.23","13.28","13.33","13.34","15.4","15.5","15.6","15.7","15.17","15.24","15.26","15.27","15.29","15.38","15.39","15.40","15.42","15.43","20.10","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.28","22.35","22.37","22.38","22.41","22.44","22.45","22.46","22.49","22.51","23.10","24.8","26.6","26.8","26.9","26.11","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.22","26.23","26.24","26.26","26.28","26.35","26.38","26.41","26.44","26.45","26.46","26.48","26.49","26.51"],"video":["1.1","3.8","3.9","3.10","3.11","3.12","3.13","3.17","3.21","3.22","3.23","3.24","3.31","3.33","5.4","5.5","5.42","10.11","10.13","10.15","11.1","12.1","12.14","13.6","13.7","13.8","13.9","13.10","13.17","13.22","13.28","15.4","15.24","15.26","15.29","15.39","15.42","19.1","20.10","21.1","22.9","22.28","22.36","23.10","24.8","26.5","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.22","26.23","26.24","26.26","26.28","26.37","26.38","26.42","26.44","26.45","26.46","26.48","26.49"],"mp4":["1.1","3.8","3.9","3.10","3.17","3.22","3.28","3.34","5.4","5.5","5.6","5.7","5.24","5.27","5.29","5.38","5.40","5.42","5.43","10.11","10.12","10.13","10.15","12.1","12.3","12.4","12.5","12.14","12.15","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.40","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.22","13.28","13.29","15.4","15.5","15.6","15.7","15.15","15.17","15.24","15.26","15.27","15.29","15.38","15.39","15.40","15.42","15.43","19.1","20.10","21.1","22.5","22.14","22.15","22.16","22.25","22.36","22.37","22.38","22.42","23.10","24.7","24.8","26.5","26.8","26.9","26.13","26.14","26.15","26.16","26.17","26.21","26.26","26.37","26.38","26.42","26.45","26.46","26.51"],"artplayer":["1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.11","1.12","3.2","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","13.2","22.11","22.21","22.22","22.41","22.48"],"d":["1.6"],"info":["1.11","2.12","5.15","5.26","5.29","5.30","5.41","5.42","9.5","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","15.9","15.14","15.15","15.23","15.26","15.29","15.30","15.31","15.32","15.35","15.36","19.5","22.32","24.17","26.32"],"const":["2.0","5.18","5.19","9.5","12.0","15.18","15.19","19.5","20.10","24.13"],"onready":["2.0","12.0"],"console":["2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.40","2.41","5.25","5.26","5.29","5.39","5.41","5.42","5.43","9.5","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","12.7","12.8","12.9","12.10","12.12","12.13","12.27","12.31","12.41","15.9","15.14","15.15","15.23","15.26","15.29","15.30","15.31","15.35","15.36","15.42","15.43","19.5","20.5","22.32","23.5","24.17","26.32"],"event":["2.5","2.7","2.8","2.9","2.10","2.12","2.13","2.22","2.41","5.41","9.2","9.5","12.5","12.7","12.8","12.9","12.10","12.12","12.13","12.22","12.41","16.1","18.1"],"reconnecttime":["2.11","12.11"],"state":["2.12","2.15","2.16","2.21","2.23","2.24","2.25","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","9.2","9.6","9.7","12.12","12.15","12.21","12.23","12.24","12.25","12.32","12.33","12.34","12.35","12.36","12.37","12.38","19.2","19.7"],"height":["2.18","9.7","19.6","19.7"],"datauri":["2.26","12.26"],"currenttime":["2.27","12.27"],"offset":["2.28"],"cues":["2.29","2.30","2.31","12.29","12.30","12.31"],"option":["2.31","12.31"],"load":["2.46","12.46"],"方法重新加载它":["2.46"],"基本上用不到":["3.0"],"app":["3.1","3.4","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.24","3.25","3.26","3.27","3.31","3.32","3.34","10.11","10.12","11.1","13.1","13.3","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","13.34","15.4","15.5","15.42","20.10","22.3","22.6","22.8","22.11","22.12","22.14","22.15","22.16","22.18","22.20","22.21","22.22","22.23","22.24","22.26","22.28","22.35","22.38","22.41","22.44","22.45","22.46","22.48","22.49","22.51","23.10","23.13","26.3","26.11","26.22","26.35"],"url":["3.1","3.3","3.4","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.23","3.24","3.25","3.26","3.27","3.31","3.32","3.33","3.34","10.12","11.1","13.1","13.3","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","13.34","15.4","15.5","15.29","15.42","20.10","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.21","22.22","22.23","22.24","22.26","22.28","22.35","22.38","22.44","22.45","22.46","22.48","22.49","22.51","23.10","26.6","26.11","26.12","26.18","26.20","26.22","26.23","26.24","26.27","26.28","26.35","26.44","26.48","26.49"],"assets":["3.1","3.3","3.4","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.31","3.32","3.33","3.34","10.11","10.12","11.1","13.3","13.4","13.8","13.9","13.10","13.11","13.12","13.13","13.17","13.18","13.21","13.22","13.23","13.24","13.26","13.27","13.31","13.32","13.33","13.34","15.4","15.5","15.29","15.38","15.39","15.40","15.42","15.43","20.10","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.21","22.22","22.23","22.24","22.26","22.28","22.35","22.37","22.38","22.41","22.44","22.45","22.46","22.48","22.49","22.51","23.10","26.3","26.6","26.8","26.9","26.11","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.22","26.23","26.24","26.26","26.27","26.28","26.35","26.38","26.41","26.44","26.45","26.46","26.48","26.49","26.51"],"loop":["3.5","3.6","3.7","13.5","13.6","13.7"],"flip":["3.5","3.6","3.7","13.5","13.6","13.7"],"dblclick":["3.17"],"setting":["3.28","3.29","12.28","13.28","13.29","19.1","24.13"],"playbackrate":["3.28","13.28"],"contextmenu":["3.28","3.29","3.30","13.29","13.30"],"aspectratio":["3.29","10.16","13.29"],"show":["3.29","3.30","9.8","13.30","19.8","22.29","22.31","24.11","24.18","26.29","26.31"],"click":["4.0","5.37","5.41","14.0","15.37"],"marginright":["4.0","14.0"],"比较常用":["5.0"],"muted":["5.1","15.1","15.25"],"seek":["5.8","15.8","15.11","15.13"],"switch":["5.12"],"和":["5.12","7.1","24.5"],"的功能是一样的":["5.12"],"只是":["5.12"],"有的视频是没有时长的":["5.16"],"async":["5.18","5.19","15.18","15.19"],"await":["5.18","5.19","15.18","15.19"],"t":["5.23"],"json":["5.28"],"stringify":["5.28"],"resize":["5.33","24.15"],"当你的容器只有宽度":["5.33"],"playsinline":["5.34","15.34"],"m3u8":["5.35","22.2","26.41"],"000":["5.36"],"right":["5.37","7.1","15.37"],"html":["5.37","10.8","10.9","10.10","15.37","20.1","23.1"],"timeupdate":["5.39"],"green":["5.44","15.44"],"1080p":["5.45","15.45"],"png":["5.46","15.46","22.36","22.39","26.36","26.39"],"组件点击事件":["6.1","8.1"],"mounted":["6.1","8.1","16.1","18.1","22.29","26.29"],"组件挂载后触发":["6.1","8.1"],"get":["6.2","6.3","7.2","7.3","8.2","8.3","16.2","16.3","17.2","17.3","18.2","18.3"],"the":["6.2","6.3","6.4","6.5","7.2","7.3","7.4","8.2","8.3","8.4","9.8","16.2","16.3","16.4","16.5","17.2","17.3","17.4","18.2","18.3","18.4","19.8","22.19"],"element":["6.2","6.3","7.2","7.3","8.2","8.3","16.2","16.3","17.2","17.3","18.2","18.3"],"of":["6.2","6.3","7.2","7.3","8.2","8.3","10.5","12.53","12.62","15.41","16.2","16.3","17.1","17.2","17.3","18.2","18.3"],"by":["6.2","6.3","6.4","6.5","7.2","7.4","8.4","16.2","16.3","16.4","16.5","17.2","17.4","18.4"],"delete":["6.4","7.4","8.4","9.8","16.4","17.4","18.4","19.8"],"控制控制器出现的左右位置":["7.1"],"selector":["7.1","17.1"],"array":["7.1","17.1"],"return":["7.2","17.2"],"control":["7.2","7.3","7.4","17.2","17.3","17.4"],"200px":["8.5","18.5"],"svg":["9.2","9.6","9.7","19.2","19.6","19.7"],"item":["9.2","9.6","19.2"],"720p":["9.3","19.3"],"360p":["9.3","19.3"],"nextstate":["9.5","19.5"],"src":["9.6","9.7","19.6","19.7"],"pip":["9.9","19.9"],"mode":["9.9","19.9"],"close":["9.9","19.9"],"are":["10.0","11.0","15.0","22.2"],"less":["10.0"],"commonly":["10.0","15.0"],"modify":["10.1","10.4","20.11","20.13"],"this":["10.1","10.2"],"object":["10.1"],"named":["10.2"],"with":["10.2","20.12","23.12"],"a":["10.2","12.48","15.12"],"prefix":["10.2"],"is":["10.2","15.12","20.5"],"definition":["10.2","10.5"],"note":["10.3","10.14","15.28","20.13"],"if":["10.3","10.6","10.7","22.4","22.17"],"you":["10.3","10.6","10.7","15.33","22.47"],"need":["10.3","20.11","20.13","22.47"],"that":["10.3","15.16"],"only":["10.3","10.14","15.5","15.41","22.19"],"exist":["10.3","15.41"],"during":["10.3"],"can":["10.4"],"after":["10.6","10.14","16.1","18.1","22.19"],"instantiation":["10.6"],"want":["10.6","10.7"],"before":["10.6","20.13"],"hide":["10.7","24.18"],"some":["10.8","10.9","10.10"],"text":["10.8","10.9","10.10","24.7","24.9"],"position":["10.9","15.37"],"these":["10.14","15.16"],"take":["10.14","22.19"],"effect":["10.14","22.19"],"subtitleoffset":["10.16"],"something":["10.17"],"dosomething":["10.17"],"very":["11.0"],"rarely":["11.0"],"following":["11.6","20.11"],"address":["11.6"],"off":["12.0"],"having":["12.42"],"stop":["12.42"],"for":["12.42","21.0","22.10","22.30","22.31","22.32"],"stopping":["12.43"],"buffer":["12.43"],"property":["12.45"],"changes":["12.45"],"method":["12.46","15.12"],"called":["12.46"],"end":["12.47"],"point":["12.47"],"supported":["12.48","22.2"],"finished":["12.49"],"lack":["12.53"],"resource":["12.54"],"unexpectedly":["12.58"],"not":["12.58","20.5"],"suspended":["12.59"],"been":["12.60","15.16"],"updated":["12.60"],"future":["13.0"],"and":["13.0","20.11"],"container":["13.1","13.4","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","13.34","20.10","22.3","22.18","22.21","22.22","22.35","22.38","22.41","22.44","22.48","23.3","26.35"],"log":["13.2","20.5","23.5"],"new":["13.14","13.15","13.16","13.25","13.34","20.8","20.9","22.11","22.22","22.27","23.8","26.27"],"var":["13.34","22.11","22.22"],"art":["13.34","22.11","22.22","22.27"],"controls":["14.0","17.1"],"tooltip":["14.0"],"which":["15.0"],"returns":["15.12"],"promise":["15.12","24.9"],"it":["15.12","15.33","15.41","20.13"],"resolve":["15.12"],"s":["15.12","15.41","22.47"],"fully":["15.16"],"decoded":["15.16"],"in":["15.16","20.4"],"must":["15.20","22.10"],"have":["15.20","15.22","20.3"],"prior":["15.20","15.22"],"user":["15.20","15.22"],"interaction":["15.20","15.22"],"e":["15.20","15.22","22.7"],"g":["15.20","15.22","22.7"],"has":["15.20","15.22","22.47"],"clicked":["15.22"],"dimension":["15.28"],"an":["15.33","22.4"],"unknown":["15.33"],"calculates":["15.33"],"duration":["15.41"],"lifecycle":["15.41"],"triggered":["16.1","18.1"],"mount":["16.1","18.1"],"list":["17.1"],"objects":["17.1"],"img":["19.6"],"width":["19.6"],"defined":["20.3"],"tip":["20.3","20.9","23.9","23.11"],"see":["20.3"],"more":["20.3","22.10","22.42"],"will":["20.4"],"current":["20.8","23.8"],"full":["20.9"],"typescript":["20.9","23.9"],"support":["20.11"],"even":["20.11"],"older":["20.11"],"configuration":["20.11","22.31","22.32"],"title":["20.12"],"import":["20.12","23.12"],"map":["20.12","23.12"],"displayed":["21.0"],"i18n":["21.0","21.3"],"implementation":["21.0"],"lang":["21.1","25.1"],"window":["21.2","25.2"],"imported":["21.4","25.4"],"use":["22.1"],"aspect":["22.1"],"ratio":["22.1","26.1"],"ogg":["22.2","26.2"],"webm":["22.2","26.2"],"other":["22.2"],"like":["22.2"],"or":["22.2"],"flv":["22.2"],"inside":["22.4"],"callback":["22.4"],"refers":["22.4"],"instance":["22.4"],"however":["22.4"],"arrow":["22.4"],"upon":["22.7"],"next":["22.7"],"initialization":["22.7"],"page":["22.7"],"refresh":["22.7"],"be":["22.10"],"set":["22.10"],"capture":["22.17"],"may":["22.17"],"fail":["22.17"],"source":["22.17"],"player":["22.19"],"gains":["22.19"],"focus":["22.19"],"js":["22.22"],"innerhtml":["22.27"],"component":["22.31","22.32"],"sd":["22.33"],"480p":["22.33","26.33"],"谁でもいいはずなのに":["22.34","26.34"],"夏の想い出がまわる":["22.34","26.34"],"all":["22.39"],"icon":["22.39"],"but":["22.40"],"cannot":["22.40"],"zh":["22.43","26.43"],"cn":["22.43","26.43"],"different":["22.47"],"variable":["22.50"],"reference":["22.50"],"的尺寸":["23.3"],"所以你的容器":["23.3"],"必须是有尺寸的":["23.3"],"非响应式":["23.4"],"在":["23.4"],"400px":["23.5"],"margin":["23.5"],"60px":["23.5"],"auto":["23.5"],"全部":["23.9"],"定义":["23.9"],"volume":["23.10"],"假如你要兼容更古老的浏览器时":["23.11"],"请修改以下配置然后自行构建":["23.11"],"body":["23.12"],"border":["24.4"],"弹幕是否有描边":["24.4"],"默认为":["24.4"],"locktime":["24.5"],"输入框锁定时间":["24.5"],"theme":["24.5"],"dark":["24.5","24.16"],"弹幕主题":["24.5"],"支持":["24.5"],"length":["24.6"],"这是弹幕即将显示的时触发的函数":["24.6"],"当返回true后才表示可以马上发送到播放器里":["24.6"],"弹幕已经出现在播放器里":["24.6"],"你可以访问到弹幕的dom元素里":["24.6"],"plugins":["24.7","24.8"],"artplayerplugindanmuku":["24.7","24.8"],"resovle":["24.9"],"function":["24.10","26.32"],"target":["24.11"],"innertext":["24.11"],"else":["24.11"],"color":["24.12"],"math":["24.12"],"floor":["24.12"],"random":["24.12"],"0xffffff":["24.12"],"tostring":["24.12"],"queryselector":["24.13"],"addeventlistener":["24.13"],"追加":["24.14"],"追加新的弹幕库":["24.14"],"参数类型和option":["24.14"],"danmuku相同":["24.14"],"xml":["24.15","24.17"],"弹幕隐藏":["24.18"],"弹幕显示":["24.18"],"写法参考":["25.0","26.50"],"默认支持三种视频文件格式":["26.2"],"播放器会缓存最后一次音量的大小":["26.7"],"假如希望默认进入页面就能自动播放视频":["26.10"],"必需为":["26.10"],"视频快进":["26.19"],"视频快退":["26.19"],"space":["26.19"],"切换播放":["26.19"],"暂停":["26.19"],"subtitle":["26.25"],"args":["26.32"],"hd":["26.33"],"webkit":["26.38"],"全部图标的定义":["26.39"],"但无法解析这种后缀":["26.40"],"作为":["26.47"],"key":["26.47"],"来缓存播放进度的":["26.47"],"但假如你的同一个视频的":["26.47"]},{"0":["5.10","5.11","5.13","5.16","5.23","15.10","15.11","15.13","15.16","15.23","20.10","23.10"],"1":["5.47","9.7","15.47","19.7","24.7","24.9"],"2":["5.8","15.8","15.31"],"5":["5.6","5.7","9.7","15.6","15.7","15.9","15.15","19.7","20.10","23.10"],"9":["15.32","26.1"],"10":["5.46","9.7","15.46","19.7","22.36","26.36"],"60":["5.46","15.46"],"240":["22.34"],"300":["22.34","26.34"],"360":["19.3"],"404":["3.14","3.15","13.14","13.15"],"1000":["0.13","0.15","10.9","10.10","10.13","10.15","10.16"],"3000":["0.12","5.2","5.3","5.8","5.11","5.13","5.21","5.45","6.4","6.5","7.4","7.5","8.4","8.5","9.8","9.9","10.12","15.2","15.3","15.8","15.11","15.13","15.21","15.45","16.4","16.5","17.4","17.5","18.4","18.5","19.8","19.9"],"对象":["0.1"],"播放器不会马上做出响应":["0.1"],"types":["0.2","2.0","10.2","10.5","20.9","21.0","22.39","22.50","23.9","26.39"],"d":["0.2","0.5","2.0","10.2","10.5","11.6","12.0","21.0","22.39","22.50","25.0","26.39","26.50"],"ts":["0.2","0.5","1.6","2.0","10.2","10.5","11.6","12.0","21.0","22.39","22.50","25.0","26.39","26.50"],"warning":["0.3","0.9","0.10","0.14","0.16","2.0","10.8","10.9","10.10","10.16","12.0","22.1","22.36","22.43","23.5","26.1","26.29","26.30","26.36","26.43"],"提示":["0.3","0.14","5.28","5.41","23.13","26.1","26.4","26.19"],"假如你需要一些":["0.3","5.41"],"事件只存在于播放器的生命周期上时":["0.3","5.41"],"强烈建议使用这些函数":["0.3"],"以避免造成内存泄漏":["0.3","5.41"],"your":["0.4","5.17","10.4","15.17"],"假如想在实例化之前更新":["0.6"],"请使用基础选项的":["0.6"],"来更新":["0.6"],"的显示":["0.7"],"组件配置":["0.8","0.9","0.10","26.29","26.31","26.32"],"请参考以下地址":["0.8","0.9","0.10","0.16","26.29","26.30","26.31","26.32"],"component":["0.8","0.9","0.10","0.16","10.8","10.9","10.10","10.16","22.29","22.30","26.29","26.30","26.31","26.32"],"color":["0.11","10.11","22.37","26.37"],"red":["0.11","10.11"],"false":["0.12","0.13","5.21","9.9","10.9","10.10","10.12","10.13","10.15","10.16","15.21","19.9","22.22","22.45","26.22","26.45"],"只在播放器获得焦点后":["0.14","26.19"],"如点击了播放器后":["0.14","26.19"],"这些快捷键才会生效":["0.14","26.19"],"true":["0.15","3.11","3.12","3.13","3.21","3.22","3.23","3.24","5.24","10.12","10.13","10.15","13.11","13.12","13.13","13.21","13.22","13.23","13.24","15.14","15.24","22.8","22.9","22.11","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.27","22.38","22.44","22.46","22.48","22.49","24.12","26.8","26.9","26.11","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.23","26.24","26.26","26.27","26.38","26.44","26.46","26.48","26.49"],"设置面板":["0.16"],"html":["0.16","10.16","22.42","22.43","24.2","26.42","26.43"],"ready":["0.17","2.0","5.1","5.4","5.47","10.17","15.1","15.4","15.6","15.7","15.24","15.27","15.47"],"off":["2.0"],"全部事件请参考以下地址":["2.0"],"events":["2.0"],"info":["2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.28","2.29","2.30","2.31","5.18","5.19","5.25","5.38","5.39","5.40","5.43","9.2","9.6","12.1","12.2","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.28","12.29","12.30","12.31","15.18","15.19","15.25","15.38","15.39","15.40","15.42","15.43","19.2","19.6"],"console":["2.2","2.6","2.19","2.28","2.39","3.8","3.9","3.10","3.17","5.18","5.19","5.38","5.40","9.2","9.6","12.1","12.2","12.3","12.4","12.5","12.6","12.11","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.28","12.29","12.30","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","13.8","13.9","13.10","13.17","15.18","15.19","15.25","15.38","15.39","15.40","19.2","19.6"],"log":["2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.8","3.9","3.10","3.17","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.8","13.9","13.10","13.17"],"video":["3.1","3.3","3.4","3.16","3.18","3.19","3.20","3.25","3.26","3.27","3.32","13.3","13.4","13.11","13.12","13.13","13.16","13.18","13.19","13.20","13.21","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","22.3","22.6","22.8","22.11","22.12","22.18","22.20","22.21","22.22","22.23","22.24","22.26","22.27","22.35","22.44","22.49","26.3","26.11","26.27","26.35"],"mp4":["3.1","3.3","3.4","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.23","3.24","3.25","3.26","3.27","3.31","3.32","3.33","11.1","13.1","13.3","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","13.34","22.3","22.6","22.8","22.9","22.11","22.12","22.13","22.18","22.20","22.21","22.22","22.23","22.24","22.26","22.27","22.28","22.35","22.44","22.45","22.46","22.48","22.49","22.51","26.3","26.6","26.11","26.12","26.18","26.20","26.22","26.23","26.24","26.27","26.28","26.35","26.44","26.48","26.49"],"playbackrate":["3.5","3.6","3.7","13.5","13.6","13.7"],"aspectratio":["3.5","3.6","3.7","13.5","13.6","13.7"],"autoplayback":["3.11","3.12","3.13","13.11","13.12","13.13"],"sample":["3.14","3.15","3.16","3.19","3.20","3.25","3.26","13.1","13.3","13.4","13.14","13.15","13.16","13.18","13.19","13.20","13.24","13.25","13.26","13.27","13.31","13.32","22.3","22.11","22.21","22.22","22.27","22.48","26.3","26.27"],"autoorientation":["3.21","13.21"],"show":["3.22","3.28","13.22","13.28","13.29"],"fastforward":["3.23","3.24","13.23","13.24"],"fullscreenweb":["3.31","13.31"],"miniprogressbar":["3.33","13.33"],"只销毁界面":["3.34"],"不主动清空":["3.34"],"pause":["4.0","14.0"],"layer":["4.0","14.0"],"png":["4.0","14.0"],"仅重置":["5.5"],"不移除界面":["5.5"],"t":["5.10","5.11","5.13","15.10","15.11","15.13","15.23"],"方法会返回":["5.12"],"promise":["5.12"],"当":["5.12"],"resolve":["5.12"],"时表示新地址是可以播放":["5.12"],"reject":["5.12","15.12"],"时表示新地址加载错误":["5.12"],"例如直播中的视频或者没被解码完成的视频":["5.16"],"这个时候获取的时长会是":["5.16"],"name":["5.17","15.17"],"由于浏览器安全机制":["5.20","5.22","26.17"],"触发窗口全屏前":["5.20"],"页面必须先存在交互":["5.20","5.22"],"例如用户点击过页面":["5.20","5.22"],"触发画中画前":["5.22"],"默认":["5.26"],"尺寸和坐标信息是通过":["5.28"],"getboundingclientrect":["5.28","15.28"],"获取的":["5.28"],"但不知道具体高度时":["5.33"],"这个属性很有用":["5.33"],"它能自动计算出视频的高度":["5.33"],"但你需要确定设置这个属性的时机":["5.33"],"强烈建议使用该函数":["5.41"],"4k":["5.45","15.45"],"number":["5.46","15.46","24.13"],"column":["5.46","15.46"],"tooltip":["6.1","8.1","16.1","18.1"],"组件的提示文本":["6.1","8.1"],"remove":["6.4","7.4","8.4","9.8","16.4","17.4","18.4"],"选择列表的对象数组":["7.1"],"onselect":["7.1","17.1"],"选择列表的元素被点击时触发的函数":["7.1"],"by":["7.3","8.2","8.3","9.8","17.3","18.2","18.3","19.8","22.19"],"left":["8.5","18.5","22.2"],"return":["9.2","9.5","9.6","19.2","19.5","19.6"],"switchquality":["9.3","19.3"],"open":["9.5","19.5"],"event":["9.6"],"x":["9.6","19.6"],"range":["9.7","19.7"],"switch":["9.9","19.9"],"used":["10.0","11.0","13.0","15.0","22.4"],"will":["10.1","15.16","20.5","22.4","22.7"],"not":["10.1","13.0","13.34","15.5","22.4"],"respond":["10.1"],"immediately":["10.1","10.7"],"s":["10.3"],"lifecycle":["10.3"],"strongly":["10.3","15.41"],"recommended":["10.3","15.41"],"use":["10.3","10.6","15.41","22.40"],"these":["10.3"],"functions":["10.3"],"avoid":["10.3","15.41"],"memory":["10.3","15.41"],"leaks":["10.3","15.41"],"please":["10.6","10.9","10.10","10.16","12.0","22.2","22.10","22.29","22.30","22.31","22.32"],"option":["10.6"],"in":["10.6","20.5"],"basic":["10.6"],"options":["10.6","22.1"],"refer":["10.8","10.9","10.10","10.16","12.0","22.2","22.29","22.30","22.31","22.32"],"following":["10.8","20.3"],"address":["10.8"],"for":["10.8","10.9","10.10","10.16","12.0","22.4","22.29","22.47"],"configuration":["10.8","10.9","10.10","22.29"],"srt":["10.11","22.25","26.25"],"settimeout":["10.12","10.13","10.15","15.3","15.21"],"gains":["10.14"],"focus":["10.14"],"e":["10.14","22.19"],"g":["10.14","22.19"],"clicking":["10.14","22.19"],"on":["10.17","15.4","15.20","15.22","22.2","22.19","24.6"],"a":["12.0"],"complete":["12.0"],"list":["12.0"],"of":["12.0"],"state":["12.39"],"further":["12.42"],"buffering":["12.42"],"content":["12.43"],"to":["12.46","15.33","22.29","22.30","22.31","22.32"],"reload":["12.46"],"it":["12.46","20.11"],"format":["12.48"],"data":["12.53","12.62"],"forthcoming":["12.58"],"generally":["13.0"],"assets":["13.1","13.14","13.15","13.16","13.19","13.20","13.25","22.3","22.11","22.27"],"dblclick":["13.17"],"contextmenu":["13.28"],"destroys":["13.34"],"does":["13.34"],"clear":["13.34"],"play":["14.0"],"do":["15.5"],"interface":["15.5"],"playable":["15.12"],"fails":["15.12"],"load":["15.12"],"cases":["15.16"],"obtained":["15.16","15.28"],"be":["15.16"],"clicked":["15.20","17.1"],"before":["15.20","15.22"],"triggering":["15.20","15.22"],"default":["15.26"],"is":["15.28","22.17"],"via":["15.28"],"need":["15.33"],"determine":["15.33"],"appropriate":["15.33"],"timing":["15.33"],"m3u8":["15.35","22.41","26.2"],"000":["15.36"],"timeupdate":["15.39"],"this":["15.41","22.7"],"text":["16.1","18.1"],"when":["17.1"],"item":["17.1"],"script":["20.1","23.1","24.2"],"examples":["20.3"],"at":["20.3"],"link":["20.3"],"example":["20.3","23.3"],"update":["20.4","20.5"],"the":["20.4","20.5"],"player":["20.4","20.12","23.12"],"reactive":["20.5"],"directly":["20.5"],"modifying":["20.5"],"definitions":["20.9","22.39"],"packages":["20.9","23.9"],"volume":["20.10"],"art8":["20.10","23.10"],"new":["20.10","23.10"],"yourself":["20.11"],"scripts":["20.11","23.11"],"reference":["20.11","21.0"],"documentation":["20.11"],"browserslist":["20.11","23.11"],"body":["20.12"],"div":["20.12","23.12"],"id":["20.12","23.12"],"importing":["20.13"],"dependency":["20.13"],"take":["20.13"],"effect":["20.13"],"see":["21.0"],"or":["21.1","25.1"],"note":["22.1"],"among":["22.1"],"all":["22.1"],"only":["22.1"],"required":["22.1"],"third":["22.2"],"party":["22.2"],"libraries":["22.2"],"section":["22.2"],"point":["22.4"],"jpg":["22.5","26.5"],"ffad00":["22.6","26.6"],"read":["22.7","22.10"],"cached":["22.7"],"value":["22.7"],"information":["22.10"],"policy":["22.10","26.10"],"changes":["22.10","26.10"],"url":["22.11","22.27"],"setting":["22.14","22.15","22.16","22.25","26.14","26.15","26.16","26.25"],"cross":["22.17"],"origin":["22.17"],"with":["22.17"],"website":["22.17"],"disable":["22.22"],"hd":["22.33"],"720p":["22.33","26.33"],"こんなとこにあるはずもないのに":["22.34","26.34"],"终わり":["22.34","26.34"],"generate":["22.36"],"online":["22.36"],"tool":["22.36","26.36"],"03a9f4":["22.37","26.37"],"font":["22.37","24.5","26.37"],"size":["22.37","24.5","26.37"],"30px":["22.37","26.37"],"webkit":["22.38"],"playsinline":["22.38","26.38"],"therefore":["22.40"],"if":["22.40"],"you":["22.40"],"best":["22.40"],"also":["22.40"],"settings":["22.42","22.43"],"start":["22.42","22.43","26.42","26.43"],"i18n":["22.42","26.42"],"tw":["22.43","26.43"],"more":["22.43"],"identify":["22.47"],"unique":["22.47"],"document":["22.51","26.51"],"createelement":["22.51","26.51"],"tip":["23.3"],"以下链接可以看到更多的使用例子":["23.3"],"里直接修改":["23.4","23.5"],"是不会改变播放器的":["23.4","23.5"],"非响应式":["23.5"],"在":["23.5"],"构建配置":["23.11"],"build":["23.11"],"参考文档":["23.11"],"你需要在引入":["23.13"],"依赖前来修改它才会生效":["23.13"],"style":["24.4"],"弹幕自定义样式":["24.4"],"默认为空对象":["24.4"],"light":["24.5"],"只在自定义挂载时生效":["24.5"],"不透明度配置项":["24.5"],"弹幕字号配置项":["24.5"],"显示区域配置项":["24.5"],"弹幕速度配置项":["24.5"],"颜色列表配置项":["24.5"],"ref":["24.6"],"innerhtml":["24.6"],"ଘ":["24.6"],"੭ˊᵕˋ":["24.6"],"੭":["24.6"],"使用数组":["24.7"],"time":["24.7","24.9"],"异步返回":["24.9"],"显示弹幕":["24.10","24.11"],"hide":["24.11"],"border":["24.12"],"change":["24.13"],"fontsize":["24.13"],"const":["24.14"],"target":["24.14"],"xml":["24.16"],"也可以手动挂载":["24.16"],"reset":["24.18"],"弹幕重置":["24.18"],"destroy":["24.18"],"弹幕销毁":["24.18"],"全部选项里":["26.1"],"只有":["26.1"],"是必填的":["26.1"],"如需要播放":["26.2"],"或者":["26.2"],"flv":["26.2"],"等其它格式":["26.2"],"请参考左侧的":["26.2"],"第三方库":["26.2"],"回调函数里的":["26.4"],"就是播放器实例":["26.4"],"但回调函数假如使用了箭头函数":["26.4"],"则不会指向播放器实例":["26.4"],"下次初始化时":["26.7"],"如刷新页面":["26.7"],"播放器会读取该缓存值":["26.7"],"更多信息请阅读":["26.10"],"假如视频源地址和网站是跨域的":["26.17"],"可能会出现截图失败":["26.17"],"关闭毛玻璃效果":["26.22"],"在线生成预览图":["26.36"],"thumbnail":["26.36"],"所以假如你使用了":["26.40"],"最好同时要指明":["26.40"],"function":["26.41"],"更多的语言设置":["26.42","26.43"],"是不同的话":["26.47"],"那么你需要使用":["26.47"],"来标识视频的唯一":["26.47"]}]'},t={"0.0":{t:"# 高级属性\r",p:`这里的 高级属性 是指挂载在 实例 的 二级属性,比较少用
-`,l:"advanced/built-in.html",a:"高级属性"},"0.1":{t:"`option`\r",p:`播放器的选项
-<div className="run-code">▶ Run Code< ...`,l:"advanced/built-in.html#option",a:"option"},"0.2":{t:"`template`\r",p:`管理播放器所有的 DOM 元素
-<div className="run-code">▶ Ru ...`,l:"advanced/built-in.html#template",a:"template"},"0.3":{t:"`events`\r",p:"管理播放器所有的 DOM 事件,实质上是代理了 addEventListener 和 removeEventListener ...",l:"advanced/built-in.html#events",a:"events"},"0.4":{t:"`storage`\r",p:`管理播放器的本地存储
+const e={map:'[{"高级属性":["0.0"],"option":["0.1","1.12","10.1","11.12","20.9","23.9","24.17"],"template":["0.2","10.2"],"events":["0.3","10.3"],"storage":["0.4","10.4"],"icons":["0.5","10.5","22.39","26.39"],"i18n":["0.6","10.6","22.43","26.43"],"notice":["0.7","3.4","10.7","13.4"],"layers":["0.8","10.8","22.29","26.29"],"controls":["0.9","10.9","17.0","22.32","26.32"],"contextmenu":["0.10","2.37","3.3","10.10","12.37","13.3","22.31","26.31"],"subtitle":["0.11","2.36","10.11","12.36","22.37","26.37"],"info":["0.12","2.32","3.22","10.12","12.32","13.22"],"loading":["0.13","2.34","10.13","12.34"],"hotkey":["0.14","2.5","10.14","12.5","22.19","26.19"],"mask":["0.15","2.35","10.15","12.35"],"setting":["0.16","2.39","3.5","3.6","3.7","10.16","12.39","13.5","13.6","13.7","22.18","26.18"],"plugins":["0.17","10.17","22.35","26.35"],"静态属性":["1.0"],"instances":["1.1","11.1"],"version":["1.2","11.2"],"env":["1.3","11.3"],"build":["1.4","11.4"],"config":["1.5","11.5","24.13"],"utils":["1.6","11.6"],"scheme":["1.7","11.7"],"emitter":["1.8","11.8"],"validator":["1.9","11.9"],"kindof":["1.10","11.10"],"html":["1.11","11.11"],"实例事件":["2.0"],"ready":["2.1","12.1"],"restart":["2.2","12.2"],"pause":["2.3","5.2","12.3","15.2"],"play":["2.4","5.1","12.4","15.1"],"destroy":["2.6","5.4","12.6","15.4"],"focus":["2.7","12.7"],"blur":["2.8","12.8"],"dblclick":["2.9","12.9"],"click":["2.10","12.10"],"error":["2.11","12.11"],"hover":["2.12","12.12"],"mousemove":["2.13","12.13"],"resize":["2.14","3.8","12.14","13.8"],"view":["2.15","12.15"],"lock":["2.16","12.16","22.44","26.44"],"aspectratio":["2.17","5.32","12.17","15.32","22.16","26.16"],"autoheight":["2.18","5.33","12.18","15.33"],"autosize":["2.19","5.27","12.19","15.27","22.11","26.11"],"flip":["2.20","3.30","5.30","12.20","13.30","15.30","22.14","26.14"],"fullscreen":["2.21","3.31","5.20","12.21","13.31","15.20","22.23","26.23"],"fullscreenerror":["2.22","12.22"],"fullscreenweb":["2.23","5.21","12.23","15.21","22.24","26.24"],"mini":["2.24","5.24","12.24","15.24"],"pip":["2.25","5.22","12.25","15.22","22.20","26.20"],"screenshot":["2.26","5.17","12.26","15.17","22.17","26.17"],"seek":["2.27","3.27","5.6","12.27","13.27","15.6"],"subtitleoffset":["2.28","5.47","12.28","15.47","22.25","26.25"],"subtitlebeforeupdate":["2.29","12.29"],"subtitleafterupdate":["2.30","12.30"],"subtitleload":["2.31","12.31"],"layer":["2.33","12.33","18.0"],"control":["2.38","3.16","12.38","13.16"],"muted":["2.40","5.14","12.40","15.14","22.9","26.9"],"keydown":["2.41","12.41"],"video":["2.42","2.43","2.44","2.45","2.46","2.47","2.48","2.49","2.50","2.51","2.52","2.53","2.54","2.55","2.56","2.57","2.58","2.59","2.60","2.61","2.62","5.43","12.42","12.43","12.44","12.45","12.46","12.47","12.48","12.49","12.50","12.51","12.52","12.53","12.54","12.55","12.56","12.57","12.58","12.59","12.60","12.61","12.62","15.43"],"全局属性":["3.0"],"debug":["3.1","13.1"],"style":["3.2","13.2"],"scroll":["3.9","3.10","13.9","13.10"],"auto":["3.11","3.12","3.13","3.21","13.11","13.12","13.13","13.21"],"reconnect":["3.14","3.15","13.14","13.15"],"dbclick":["3.17","3.18","13.17","13.18"],"mobile":["3.19","3.20","13.19","13.20"],"fast":["3.23","3.24","13.23","13.24"],"touch":["3.25","13.25"],"volume":["3.26","5.9","13.26","15.9","22.7","26.7"],"playback":["3.28","13.28"],"aspect":["3.29","13.29"],"log":["3.32","13.32"],"use":["3.33","13.33"],"remove":["3.34","13.34","19.8"],"编写插件":["4.0"],"实例属性":["5.0"],"toggle":["5.3","15.3"],"reset":["5.5","15.5","24.15"],"forward":["5.7","15.7"],"backward":["5.8","15.8"],"url":["5.10","15.10","22.2","26.2"],"switch":["5.11","15.11"],"switchurl":["5.12","15.12"],"switchquality":["5.13","15.13"],"currenttime":["5.15","15.15"],"duration":["5.16","15.16"],"getdataurl":["5.18","15.18"],"getbloburl":["5.19","15.19"],"poster":["5.23","15.23","22.5","26.5"],"playing":["5.25","15.25"],"state":["5.26","15.26"],"rect":["5.28","15.28"],"bottom":["5.29","15.29"],"playbackrate":["5.31","15.31","22.15","26.15"],"attr":["5.34","15.34"],"type":["5.35","15.35","22.40","26.40"],"theme":["5.36","15.36","22.6","26.6"],"airplay":["5.37","15.37","22.49","26.49"],"loaded":["5.38","15.38"],"loadedtime":["5.39","15.39"],"played":["5.40","15.40"],"proxy":["5.41","15.41","22.51","26.51"],"query":["5.42","15.42"],"cssvar":["5.44","15.44","22.50","26.50"],"quality":["5.45","15.45","22.33","26.33"],"thumbnails":["5.46","15.46","22.36","26.36"],"右键菜单":["6.0"],"配置":["6.1","7.1","8.1"],"创建":["6.2","7.2","8.2","9.2","9.3","9.4","9.5","9.6"],"添加":["6.3","7.3","8.3","9.7"],"删除":["6.4","7.4","8.4","9.8"],"更新":["6.5","7.5","8.5","9.9"],"控制器":["7.0"],"业务层":["8.0"],"设置面板":["9.0"],"内置":["9.1"],"advanced":["10.0"],"static":["11.0"],"instance":["12.0","15.0"],"global":["13.0"],"writing":["14.0"],"context":["16.0"],"configuration":["16.1","17.1","18.1"],"creation":["16.2","17.2","18.2"],"addition":["16.3","18.3"],"removal":["16.4","17.4","18.4"],"update":["16.5","18.5","19.9"],"adding":["17.3","21.3"],"updating":["17.5"],"settings":["19.0","22.30","26.30"],"built":["19.1"],"creating":["19.2","19.3","19.4"],"create":["19.5","19.6"],"add":["19.7"],"installation":["20.0","20.1"],"cdn":["20.2","23.2","24.3"],"usage":["20.3"],"vue":["20.4","20.7","23.4","23.7"],"react":["20.5","20.8","23.5","23.8"],"typescript":["20.6","23.6"],"javascript":["20.10","23.10"],"legacy":["20.11"],"ecmascript":["20.12","23.12"],"custom":["20.13"],"language":["21.0"],"default":["21.1"],"importing":["21.2"],"modifying":["21.4"],"basic":["22.0"],"container":["22.1","26.1"],"id":["22.3","26.3"],"onready":["22.4","26.4"],"islive":["22.8","26.8"],"autoplay":["22.10","26.10"],"automini":["22.12","26.12"],"loop":["22.13","26.13"],"mutex":["22.21","26.21"],"backdrop":["22.22","26.22"],"miniprogressbar":["22.26","26.26"],"usessr":["22.27","26.27"],"playsinline":["22.28","26.28"],"highlight":["22.34","26.34"],"morevideoattr":["22.38","26.38"],"customtype":["22.41","26.41"],"lang":["22.42","26.42"],"gesture":["22.45","26.45"],"fastforward":["22.46","26.46"],"autoplayback":["22.47","26.47"],"autoorientation":["22.48","26.48"],"安装使用":["23.0"],"安装":["23.1","24.2"],"使用":["23.3"],"古老的浏览器":["23.11"],"自定义":["23.13"],"弹幕库":["24.0"],"演示":["24.1"],"弹幕结构":["24.4"],"全部选项":["24.5"],"生命周期":["24.6"],"使用弹幕数组":["24.7"],"使用弹幕":["24.8"],"使用异步返回":["24.9"],"hide":["24.10"],"ishide":["24.11"],"emit":["24.12"],"load":["24.14"],"mount":["24.16"],"事件":["24.18"],"语言设置":["25.0"],"默认语言":["25.1"],"导入语言":["25.2"],"新增语言":["25.3"],"修改语言":["25.4"],"基础选项":["26.0"]},{"0":["3.28","5.38","5.40","22.7","26.7"],"1":["23.11","24.5"],"3":["3.29","23.9"],"4":["3.29","25.3"],"5":["3.28","8.2","18.2","24.5"],"7":["8.3","18.3","22.7"],"9":["25.3"],"10":["24.5"],"15":["4.0"],"21":["8.5","9.9","18.5","19.9"],"26":["7.5","17.5"],"27":["9.9","19.9"],"75":["3.28"],"250":["3.5"],"这里的":["0.0","1.0","3.0","5.0"],"播放器的选项":["0.1"],"div":["0.1","0.2","0.4","0.5","0.7","0.14","0.17","1.1","1.6","2.0","2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.28","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","3.3","4.0","5.1","5.2","5.3","5.16","5.28","5.33","5.37","5.45","6.2","6.3","6.4","6.5","7.2","7.3","7.4","7.5","8.2","8.3","8.4","8.5","9.4","9.7","9.8","9.9","10.1","10.2","14.0","16.2","16.3","16.4","16.5","17.2","17.3","17.4","17.5","18.2","18.3","18.4","18.5","19.4","19.7","19.8","19.9","22.2","22.29","22.30","24.6","24.7","24.9","24.10","24.11","24.12","24.13","24.14","24.15","24.17","24.18","26.2","26.29","26.30","26.31","26.32"],"classname":["0.1","0.2","0.17","2.0","2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.28","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","4.0","5.45","6.2","6.3","6.4","6.5","7.2","7.3","7.4","7.5","8.2","8.3","8.4","8.5","9.4","9.7","9.8","9.9","10.2","14.0","16.2","16.3","16.4","16.5","17.2","17.3","17.4","17.5","18.2","18.3","18.4","18.5","19.4","19.7","19.8","19.9","22.2","22.29","22.30","24.6","24.7","24.9","24.11","24.12","24.13","24.14","24.15","24.17","24.18","26.2","26.29","26.30"],"run":["0.1","0.2","2.0","2.2","2.6","2.11","2.12","2.17","2.18","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.28","2.29","2.30","2.31","2.39","4.0","5.45","6.2","6.3","6.4","6.5","7.2","7.3","7.4","7.5","8.2","8.3","8.4","8.5","9.4","9.7","9.8","9.9","14.0","16.2","16.3","16.4","16.5","17.2","17.3","17.4","17.5","18.2","18.3","18.4","18.5","19.4","19.7","19.8","19.9","22.2","22.29","24.6","24.7","24.9","24.11","24.12","24.13","24.14","24.15","24.17","24.18","26.2","26.29","26.30"],"管理播放器所有的":["0.2","0.3","0.5"],"dom":["0.2","0.3","5.41","5.42","9.2","9.3","9.5","9.6","10.2","10.3","15.41","15.42","19.2","19.3","19.5","19.6","22.1","26.1"],"元素":["0.2","9.5","9.6"],"事件":["0.3","4.0"],"实质上是代理了":["0.3"],"addeventlistener":["0.3","5.41","10.3","15.41"],"和":["0.3","4.0","5.13","24.8","24.10","26.4"],"removeeventlistener":["0.3","10.3"],"当使用以下方法来处理事件":["0.3"],"播放器销毁时也会自动销毁该事件":["0.3"],"管理播放器的本地存储":["0.4"],"name":["0.4","4.0","10.4"],"属性用于设置缓存的":["0.4"],"key":["0.4","10.4"],"set":["0.4","10.4","15.9","15.11","15.12","22.36","22.37"],"方法用于设置缓存":["0.4"],"get":["0.4","0.6","10.6"],"方法用于获取缓存":["0.4"],"del":["0.4"],"方法用于删除缓存":["0.4"],"clear":["0.4"],"方法用于清空缓存":["0.4"],"svg":["0.5","10.5"],"图标":["0.5"],"管理播放器的":["0.6"],"方法用于获取":["0.6"],"的值":["0.6"],"update":["0.6","0.8","0.9","0.10","0.16"],"管理播放器的提示语":["0.7"],"只有一个":["0.7"],"show":["0.7","0.13","0.15","10.13","10.15","24.10"],"属性用于显示提示语":["0.7"],"管理播放器的层":["0.8"],"add":["0.8","0.9","0.10","0.14","0.16","0.17","10.8","10.9","10.10","10.14","10.16"],"方法用于动态添加层":["0.8"],"remove":["0.8","0.9","0.10","0.14","0.16"],"方法用于动态删除层":["0.8"],"管理播放器的控制器":["0.9"],"方法用于动态添加控制器":["0.9"],"方法用于动态删除控制器":["0.9"],"管理播放器的右键菜单":["0.10"],"方法用于动态添加菜单":["0.10"],"方法用于动态删除菜单":["0.10"],"方法用于动态更新菜单":["0.10"],"管理播放器的字幕功能":["0.11"],"url":["0.11","5.12","10.11","12.2","15.12","15.18","15.19"],"属性设置和返回当前字幕地址":["0.11"],"style":["0.11"],"方法设置当前字幕的样式":["0.11"],"switch":["0.11"],"管理播放器的信息面板":["0.12"],"常用于查看当前播放器和视频的运行状态":["0.12"],"例如版本号":["0.12"],"分辨率":["0.12"],"时长等":["0.12"],"管理播放器的加载层":["0.13"],"属性用于设置是否显示加载层":["0.13"],"toggle":["0.13","0.15","19.5"],"管理播放器的快捷键功能":["0.14"],"方法用于添加快捷键":["0.14"],"方法用于删除快捷键":["0.14"],"管理播放器的遮罩层":["0.15"],"属性用于设置是否显示遮罩层":["0.15"],"管理播放器的设置面板":["0.16"],"方法用于动态添加设置项":["0.16"],"方法用于动态删除设置项":["0.16"],"方法用于动态更新设置项":["0.16"],"管理播放器的插件功能":["0.17"],"只有一个方法":["0.17"],"用于动态添加插件":["0.17"],"返回全部播放器实例的数组":["1.1"],"假如你想同时管理多个播放器的时候":["1.1"],"可以用到该属性":["1.1"],"返回播放器的版本信息":["1.2"],"返回播放器的环境变量":["1.3"],"返回播放器的打包时间":["1.4"],"返回视频的默认配置":["1.5"],"返回播放器的工具函数集合":["1.6"],"返回播放器选项的校验方案":["1.7"],"返回事件分发器的构造函数":["1.8"],"返回选项的校验函数":["1.9"],"返回类型检测的函数工具":["1.10"],"返回播放器所需的":["1.11"],"返回播放器的默认选项":["1.12"],"播放器的事件分为两种":["2.0"],"一种视频的":["2.0"],"原生事件":["2.0"],"前缀":["2.0"],"video":["2.0","12.0","13.29","13.30","13.34","15.3","15.5","15.11","15.12","15.13","15.16","22.2","22.5","22.37","22.40","22.41"],"另外一种是":["2.0"],"自定义事件":["2.0"],"监听事件":["2.0"],"code":["2.0","2.2","2.28","4.0","6.2","6.3","6.4","6.5","7.2","7.3","7.4","7.5","8.2","8.3","8.4","8.5","9.4","9.7","9.8","9.9","14.0","16.2","16.3","16.4","16.5","17.2","17.3","17.4","17.5","18.2","18.3","18.4","18.5","19.4","19.7","19.8","19.9","20.1","20.2","20.3","20.4","20.5","22.2","22.29","23.1","23.2","23.3","23.4","23.5","24.2","24.3","24.6","24.7","24.9","24.11","24.12","24.13","24.14","24.15","24.17","24.18","26.2","26.29"],"js":["2.0","4.0","6.5","7.2","7.3","7.5","8.2","8.3","8.5","9.4","9.8","9.9","14.0","16.5","17.2","17.3","17.5","18.2","18.3","18.5","19.4","19.8","19.9","20.4","20.5","20.7","20.8","20.10","20.11","21.2","21.4","23.4","23.5","23.7","23.8","23.10","23.11","24.5","24.18","25.2","25.3","25.4"],"当播放器首次可以播放器时触发":["2.1"],"当播放器切换地址后并可以播放时触发":["2.2"],"当播放器暂停时触发":["2.3"],"当播放器播放时触发":["2.4"],"当播放器热键被按下时触发":["2.5"],"当播放器销毁时触发":["2.6"],"当播放器获得焦点时触发":["2.7"],"当播放器失去焦点时触发":["2.8"],"当播放器被双击时触发":["2.9"],"当播放器被单击时触发":["2.10"],"当播放器加载视频发生错误时触发":["2.11"],"当播放器被鼠标移出或者移入时触发":["2.12"],"当播放器被鼠标经过时触发":["2.13"],"当播放器尺寸变化时触发":["2.14"],"当播放器出现在视口时触发":["2.15"],"在移动端":["2.16","3.19","3.20","3.21","3.23","3.24","3.25"],"当锁定的状态发生变化时触发":["2.16"],"当播放器长宽比变化时触发":["2.17"],"当播放器自动设置高度时触发":["2.18"],"当播放器自动设置尺寸时触发":["2.19"],"当播放器发生翻转时触发":["2.20"],"当播放器发生窗口全屏时触发":["2.21"],"当播放器发生窗口全屏错误时触发":["2.22"],"当播放器发生网页全屏时触发":["2.23"],"当播放器进入迷你模式时触发":["2.24"],"当播放器进入画中画时触发":["2.25"],"当播放器被截图时触发":["2.26"],"当播放器发生时间跳转时触发":["2.27"],"当播放器发生字幕偏移时触发":["2.28"],"当字幕更新前触发":["2.29"],"当字幕更新后触发":["2.30"],"当字幕加载时触发":["2.31"],"当信息面板显示或隐藏时触发":["2.32"],"当自定义层显示或隐藏时触发":["2.33"],"当加载器显示或隐藏时触发":["2.34"],"当遮罩层显示或隐藏时触发":["2.35"],"当字幕层显示或隐藏时触发":["2.36"],"当右键菜单显示或隐藏时触发":["2.37"],"当控制器显示或隐藏时触发":["2.38"],"当设置面板显示或隐藏时触发":["2.39"],"当静音的状态变化时触发":["2.40"],"监听来自":["2.41"],"document":["2.41"],"的":["2.41"],"canplay":["2.42","12.42"],"canplaythrough":["2.43","12.43"],"complete":["2.44","12.44"],"durationchange":["2.45","12.45"],"emptied":["2.46","12.46"],"ended":["2.47","12.47"],"error":["2.48","12.48"],"loadeddata":["2.49","12.49"],"loadedmetadata":["2.50","12.50"],"pause":["2.51","12.51"],"play":["2.52","3.19","3.20","12.52","13.19","13.20"],"playing":["2.53","12.53"],"progress":["2.54","12.54","22.36"],"ratechange":["2.55","12.55"],"seeked":["2.56","12.56"],"seeking":["2.57","12.57","13.27"],"stalled":["2.58","12.58"],"suspend":["2.59","12.59"],"timeupdate":["2.60","12.60"],"volumechange":["2.61","12.61"],"waiting":["2.62","12.62"],"是否开始":["3.1"],"模式":["3.1"],"返回播放器样式文本":["3.2"],"是否开启右键菜单":["3.3"],"默认开启":["3.3"],"time":["3.4","3.8","3.9","3.14","3.15","3.16","3.17","3.21","3.22","3.24","13.4","13.8","13.9","13.14","13.15","13.16","13.17","13.21","13.22","13.24"],"提示信息的显示时长":["3.4"],"单位为毫秒":["3.4","3.8","3.9","3.13","3.16","3.17","3.22"],"width":["3.5","3.6","5.29","9.3","13.5","13.6","15.29","15.33"],"设置面板的默认宽度":["3.5"],"单位为像素":["3.5","3.6","3.7","3.10"],"默认为":["3.5","3.6","3.7","3.11","3.17","3.26","3.28","3.29","3.30","3.32","3.33"],"item":["3.6","3.7","13.6","13.7","19.6"],"设置面板的设置项的默认宽度":["3.6"],"height":["3.7","5.29","13.7","15.29"],"设置面板的设置项的默认高度":["3.7"],"事件的节流时间":["3.8","3.9"],"gap":["3.10","13.10"],"view":["3.10","10.12"],"事件的边界容差距离":["3.10"],"playback":["3.11","3.12","3.13","12.53","13.11","13.12","13.13","15.3","22.47"],"max":["3.11","3.14","13.11","13.14"],"自动回放功能的最大记录数":["3.11"],"min":["3.12","13.12"],"自动回放功能的最小记录时长":["3.12"],"单位为秒":["3.12","3.27","5.39"],"timeout":["3.13","13.13"],"自动回放功能的隐藏延迟时长":["3.13"],"发生连接错误时":["3.14","3.15"],"自动连接的最大次数":["3.14"],"sleep":["3.15","13.15"],"自动连接的延迟时间":["3.15"],"hide":["3.16","13.13","13.16"],"底部控制栏的自动隐藏的延迟时间":["3.16"],"双击事件的延迟事件":["3.17"],"fullscreen":["3.18","12.22","13.18"],"在桌面端":["3.18"],"是否双击切换全屏":["3.18"],"dbclick":["3.19","13.19"],"是否双击切换播放暂停":["3.19"],"click":["3.20","13.20"],"是否单击切换播放暂停":["3.20"],"orientation":["3.21","13.21"],"自动旋屏的延迟时间":["3.21"],"loop":["3.22","13.22"],"信息面板的刷新时间":["3.22"],"forward":["3.23","3.24","13.23","13.24"],"value":["3.23","13.23"],"长按加速的速率倍数":["3.23"],"长按加速的延迟时间":["3.24"],"move":["3.25","13.25"],"ratio":["3.25","3.29","13.25","13.29"],"左右滑动进度的速率倍数":["3.25"],"step":["3.26","3.27","13.26","13.27"],"快捷键调节音量的幅度比例":["3.26"],"快捷键调节播放进度的幅度":["3.27"],"rate":["3.28","13.28"],"内置播放速率的列表":["3.28"],"内置视频长宽比的列表":["3.29"],"default":["3.29","13.5","13.6","13.7","22.1","22.2","22.3","22.4","22.5","22.6","22.7","22.8","22.9","22.10","22.11","22.12","22.13","22.14","22.15","22.16","22.17","22.18","22.19","22.20","22.21","22.22","22.23","22.24","22.25","22.26","22.27","22.28","22.29","22.30","22.31","22.32","22.33","22.34","22.35","22.36","22.37","22.38","22.39","22.40","22.41","22.42","22.43","22.44","22.45","22.46","22.47","22.48","22.49","22.50","22.51","26.1","26.2","26.3","26.4","26.5","26.6","26.7","26.8","26.9","26.10","26.11","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.19","26.20","26.21","26.22","26.23","26.24","26.25","26.26","26.27","26.28","26.29","26.30","26.31","26.32","26.33","26.34","26.35","26.36","26.37","26.38","26.39","26.40","26.41","26.42","26.43","26.44","26.45","26.46","26.47","26.48","26.49","26.50","26.51"],"内置视频翻转的列表":["3.30"],"normal":["3.30"],"horizontal":["3.30"],"vertical":["3.30"],"web":["3.31","13.31"],"in":["3.31","12.28","13.17","13.28","13.29","13.30","13.31","19.1","20.10"],"body":["3.31","13.31"],"网页全屏时":["3.31"],"version":["3.32","13.32"],"设置是否打印播放器版本":["3.32"],"raf":["3.33","13.33"],"设置是否使用":["3.33"],"requestanimationframe":["3.33"],"src":["3.34","5.5","13.34","21.2","25.2"],"when":["3.34","10.3","12.1","12.2","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.28","12.31","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","13.34","15.33"],"destroy":["3.34","13.34"],"在销毁播放器时":["3.34"],"是否同时移除视频的":["3.34"],"但你已经知道播放器的":["4.0"],"属性":["4.0","6.1","7.1","8.1","9.2","9.3","9.5","9.6","26.33","26.34","26.36","26.37"],"方法":["4.0"],"后":["4.0"],"再编写插件是非常简单的事":["4.0"],"可以在实例化的时候加载插件的函数":["4.0"],"function":["4.0","5.1","5.2","5.3","5.4","5.5","5.12","5.13","5.17","5.18","5.19","5.27","5.33","5.34","5.37","5.41","5.42","5.44","9.3","15.1","15.2","15.3","15.4","15.5","15.12","15.13","15.17","15.18","15.19","15.27","15.33","15.34","15.37","15.41","15.42","15.44","19.3","22.4","22.51","26.4","26.51"],"myplugin":["4.0"],"art":["4.0","5.12","7.2","15.12","17.2"],"console":["4.0"],"info":["4.0"],"return":["4.0"],"something":["4.0"],"type":["5.1","5.2","5.3","5.4","5.5","5.6","5.7","5.8","5.9","5.10","5.11","5.12","5.13","5.14","5.15","5.16","5.17","5.18","5.19","5.20","5.21","5.22","5.23","5.24","5.25","5.26","5.27","5.28","5.30","5.31","5.32","5.33","5.34","5.36","5.37","5.38","5.39","5.40","5.41","5.42","5.43","5.44","5.45","5.46","5.47","15.1","15.2","15.3","15.4","15.5","15.6","15.7","15.8","15.9","15.10","15.11","15.12","15.13","15.14","15.15","15.16","15.17","15.18","15.19","15.20","15.21","15.22","15.23","15.24","15.25","15.26","15.27","15.28","15.29","15.30","15.31","15.32","15.33","15.34","15.36","15.37","15.38","15.39","15.40","15.41","15.42","15.43","15.44","15.45","15.46","15.47","16.1","17.1","18.1","19.2","19.3","19.5","19.6","20.10","22.1","22.2","22.3","22.4","22.5","22.6","22.7","22.8","22.9","22.10","22.11","22.12","22.13","22.14","22.15","22.16","22.17","22.18","22.19","22.20","22.21","22.22","22.23","22.24","22.25","22.26","22.27","22.28","22.29","22.30","22.31","22.32","22.33","22.34","22.35","22.36","22.37","22.38","22.39","22.41","22.42","22.43","22.44","22.45","22.46","22.47","22.48","22.49","22.50","22.51","26.1","26.2","26.3","26.4","26.5","26.6","26.7","26.8","26.9","26.10","26.11","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.19","26.20","26.21","26.22","26.23","26.24","26.25","26.26","26.27","26.28","26.29","26.30","26.31","26.32","26.33","26.34","26.35","26.36","26.37","26.38","26.39","26.41","26.42","26.43","26.44","26.45","26.46","26.47","26.48","26.49","26.50","26.51"],"播放视频":["5.1"],"暂停视频":["5.2"],"切换视频的播放和暂停":["5.3"],"parameter":["5.4","5.6","5.7","5.8","5.9","5.10","5.11","5.12","5.13","5.14","5.15","5.20","5.21","5.22","5.23","5.24","5.25","5.26","5.30","5.31","5.32","5.34","5.35","5.36","5.45","5.46","5.47","15.4","15.6","15.7","15.8","15.9","15.10","15.11","15.12","15.13","15.14","15.15","15.20","15.21","15.22","15.23","15.24","15.25","15.26","15.30","15.31","15.32","15.34","15.35","15.36","15.45","15.46","15.47","22.4"],"boolean":["5.4","5.14","5.20","5.21","5.22","5.25","7.1","15.4","15.14","15.20","15.21","15.22","15.24","15.25","16.1","17.1","18.1","22.8","22.9","22.10","22.11","22.12","22.13","22.14","22.15","22.16","22.17","22.18","22.19","22.20","22.21","22.22","22.23","22.24","22.25","22.26","22.27","22.28","22.44","22.45","22.46","22.47","22.48","22.49","26.8","26.9","26.10","26.11","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.19","26.20","26.21","26.22","26.23","26.24","26.25","26.26","26.27","26.28","26.44","26.45","26.46","26.47","26.48","26.49"],"重置播放器的视频元素":["5.5"],"会移除当前":["5.5"],"并调用一次":["5.5"],"setter":["5.6","5.7","5.8","5.9","5.10","5.11","5.14","5.15","5.20","5.21","5.22","5.23","5.24","5.26","5.30","5.31","5.32","5.35","5.36","5.45","5.46","5.47","15.6","15.7","15.8","15.9","15.10","15.11","15.14","15.15","15.20","15.21","15.22","15.23","15.24","15.26","15.30","15.31","15.32","15.35","15.36","15.45","15.46","15.47"],"number":["5.6","5.7","5.8","5.9","5.15","5.31","13.14","15.6","15.7","15.8","15.9","15.15","15.31","15.47","21.0","22.7","26.7"],"getter":["5.9","5.10","5.14","5.15","5.16","5.20","5.21","5.22","5.23","5.24","5.25","5.26","5.28","5.30","5.31","5.32","5.35","5.36","5.38","5.39","5.40","5.46","5.47","15.9","15.10","15.14","15.15","15.16","15.20","15.21","15.22","15.23","15.24","15.25","15.26","15.28","15.29","15.30","15.31","15.32","15.35","15.36","15.38","15.39","15.40","15.46","15.47"],"string":["5.11","5.12","5.13","5.23","5.26","5.30","5.32","5.34","5.35","5.36","9.2","9.3","9.5","9.6","15.10","15.11","15.12","15.13","15.23","15.26","15.30","15.32","15.34","15.35","15.36","19.2","19.3","19.5","19.6","22.1","22.2","22.3","22.5","22.6","22.40","22.42","26.1","26.2","26.3","26.5","26.6","26.40","26.42"],"设置视频地址":["5.11","5.12"],"设置时和":["5.11","5.12"],"设置视频画质地址":["5.13"],"获取视频时长":["5.16"],"下载当前视频帧的截图":["5.17"],"可选参数为截图名字":["5.17"],"获取当前视频帧的截图的":["5.18","5.19"],"base64":["5.18","15.18"],"地址":["5.18","5.19"],"blob":["5.19","15.19"],"设置和获取视频海报":["5.23"],"获取或设置播放器当前状态":["5.26"],"设置视频是否自适应尺寸":["5.27"],"获取播放器的尺寸和坐标信息":["5.28"],"top":["5.29","15.29"],"left":["5.29","15.29"],"right":["5.29","15.29"],"x":["5.29","15.29"],"y":["5.29","15.29"],"当容器只有宽度":["5.33"],"该属性可以自动计算出并设置视频的高度":["5.33"],"动态获取和设置":["5.34"],"开启隔空播放":["5.37"],"视频缓存的比例":["5.38"],"范围是":["5.38","5.40"],"已缓存的媒体时长":["5.39"],"视频播放的比例":["5.40"],"事件的代理函数":["5.41"],"实质上代理了":["5.41"],"的查询函数":["5.42"],"element":["5.43","9.2","9.3","9.5","9.6","15.5","15.43","19.2","19.3","19.5","19.6","22.1","26.1"],"快捷返回播放器的":["5.43"],"动态获取或设置":["5.44"],"css":["5.44"],"变量":["5.44","23.10"],"array":["5.45","9.3","11.1","15.45","19.3","22.29","22.30","22.31","22.32","22.33","22.34","22.35","26.29","26.30","26.31","26.32","26.33","26.34","26.35"],"动态设置画质列表":["5.45"],"object":["5.46","15.46","22.36","22.37","22.38","22.39","22.41","22.43","22.50","26.36","26.37","26.38","26.39","26.41","26.43","26.50"],"类型":["6.1","7.1","8.1","9.2","9.3","9.5","9.6","26.34","26.36","26.37"],"描述":["6.1","7.1","8.1","9.2","9.3","9.5","9.6","26.36"],"disable":["6.1","7.1","8.1","16.1","17.1","18.1"],"var":["7.2","9.4","17.2"],"new":["7.2","17.2","21.3"],"artplayer":["7.2","17.2","20.4","20.5","20.6","20.11","20.12","21.2","22.1","23.5","23.11","23.12","24.18","25.2","25.4","26.1"],"container":["7.2","15.33","17.2"],"须先打开设置面板":["9.1"],"然后自带四个内置项":["9.1"],"flip":["9.1"],"playbackrate":["9.1"],"按钮":["9.2"],"html":["9.2","9.3","9.5","9.6","19.2","19.3","19.5","19.6","20.3","23.3","26.39"],"元素的":["9.2","9.3","9.5","9.6"],"选择列表":["9.3"],"icon":["9.3","9.5","9.6","19.3","19.6"],"元素的图标":["9.3"],"selector":["9.3","19.3"],"元素列表":["9.3"],"onselect":["9.3","19.3"],"元素点击事件":["9.3"],"列表嵌套":["9.4"],"切换按钮":["9.5"],"范围滑块":["9.6"],"properties":["10.0","11.0","13.0","14.0","15.0"],"the":["10.0","10.1","10.2","10.3","10.4","10.6","10.7","10.8","10.9","10.10","10.11","10.12","10.13","10.14","10.15","10.16","10.17","11.2","11.3","11.4","11.5","11.6","11.7","11.8","11.9","11.10","11.11","11.12","12.1","12.2","12.3","12.4","12.6","12.7","12.8","12.9","12.10","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.23","12.24","12.25","12.26","12.27","12.32","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.42","12.43","12.46","12.58","13.2","13.3","13.4","13.5","13.6","13.7","13.8","13.9","13.10","13.11","13.12","13.13","13.14","13.15","13.16","13.17","13.22","13.24","13.26","13.27","13.28","13.29","13.30","13.34","14.0","15.1","15.2","15.4","15.5","15.11","15.12","15.13","15.16","15.18","15.19","15.20","15.22","15.28","15.33","15.38","15.39","15.40","15.45","17.1","19.5","19.6","20.9","20.11","20.13","21.0","21.1","22.1","22.2","22.3","22.4","22.5","22.6","22.7","22.11","22.22","22.33","22.34","22.36","22.37","22.40","22.41","22.47","22.51"],"player":["10.1","10.2","10.3","10.4","10.6","10.7","10.8","10.9","10.10","10.11","10.12","10.13","10.14","10.15","10.16","10.17","11.1","12.0","12.1","12.2","12.3","12.4","12.6","12.7","12.8","12.9","12.10","12.14","12.15","12.17","12.18","12.19","12.20","12.21","12.23","12.24","12.25","12.26","12.27","14.0","15.5","15.28"],"s":["10.1","10.4","10.6","10.7","10.8","10.9","10.10","10.11","10.12","10.13","10.14","10.15","10.16","10.17","12.17","13.34","14.0","15.5","15.28"],"options":["10.1","22.0"],"manages":["10.2","10.3","10.4","10.5","10.6","10.7","10.8","10.9","10.10","10.11","10.12","10.13","10.14","10.15","10.16","10.17"],"all":["10.2","10.3","10.5","11.1"],"elements":["10.2"],"of":["10.2","11.1","11.6","13.5","13.6","13.7","13.28","13.29","13.30","15.16","15.38","15.39","15.40","15.45","19.5","19.6","21.0"],"for":["10.3","10.5","12.41","13.8","13.9","15.41","20.13"],"it":["10.3","10.7","22.40"],"essentially":["10.3","15.41"],"proxies":["10.3"],"and":["10.3","10.11","12.0","13.34","14.0","15.15","15.20","15.22","15.23"],"using":["10.3"],"local":["10.4"],"property":["10.4","10.11","16.1","17.1","18.1","19.2","19.3","19.5","19.6"],"is":["10.4","10.6","10.8","10.9","10.10","10.14","10.16","12.20","20.13"],"used":["10.4","10.6","10.8","10.9","10.10","10.12","10.16","22.39","22.40","22.50"],"to":["10.4","10.6","10.8","10.9","10.10","10.12","10.16","12.0","13.1","13.3","13.31","13.32","13.33","13.34","15.12","17.1","19.1","21.0","22.10","22.17","22.19","22.22","22.27","22.33","22.39","22.40","22.47","22.50"],"cache":["10.4"],"method":["10.4","10.6","10.8","10.9","10.10","10.14","10.16"],"notifications":["10.7"],"only":["10.7","15.33","20.11"],"dynamically":["10.8","10.9","10.10","10.16","15.34","15.35","15.36","15.44","15.45"],"context":["10.10","12.37","22.31"],"menu":["10.10","16.0"],"functionality":["10.11","10.14","10.17"],"sets":["10.11","13.32","13.33","15.13","15.14","15.15","15.20","15.21","15.22","15.23","15.26","15.27","15.30","15.31","15.32","15.44","15.45"],"information":["10.12","22.34"],"panel":["10.12","10.16","12.39","19.0","22.30"],"commonly":["10.12"],"layer":["10.13","10.15"],"settings":["10.16","12.39","21.0"],"plugin":["10.17","14.0","24.18"],"with":["10.17","12.0","14.0"],"here":["11.0","15.0"],"returns":["11.1","11.2","11.3","11.4","11.5","11.6","11.7","11.8","11.9","11.10","11.11","11.12","13.2","15.43"],"an":["11.1","12.0","12.11","12.48"],"collection":["11.6"],"events":["12.0","12.41","14.0","15.41"],"are":["12.0","12.29","12.30","12.31","14.0","21.2"],"divided":["12.0"],"into":["12.0"],"two":["12.0"],"types":["12.0"],"native":["12.0"],"prefixed":["12.0"],"custom":["12.0","12.33","22.29","22.30","22.31","22.32","22.35","22.43"],"listen":["12.0"],"event":["12.0"],"triggered":["12.1","12.2","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.28","12.29","12.30","12.31","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40"],"switches":["12.2"],"a":["12.5","12.22","15.17","15.33","15.41","15.42","20.13","21.3","22.4"],"occurs":["12.11"],"mouse":["12.12","12.13"],"enters":["12.12","12.21","12.23","12.24","12.25"],"state":["12.16"],"automatically":["12.18","22.12"],"window":["12.22"],"subtitle":["12.28","22.25"],"offset":["12.28"],"changes":["12.28"],"before":["12.29","21.2"],"subtitles":["12.29","12.30","12.31"],"updated":["12.29","12.30"],"after":["12.30"],"loaded":["12.31"],"layers":["12.33"],"loader":["12.34"],"controls":["12.38","22.38","26.38"],"mute":["12.40"],"listens":["12.41"],"browser":["12.42"],"media":["12.46","15.39"],"has":["12.46","15.33"],"these":["13.0"],"whether":["13.1","13.3","13.18","13.31","13.32","13.33","13.34","15.27","16.1","17.1","18.1","20.13","22.10","22.14","22.15","22.16","22.17","22.18","22.19","22.20","22.22","22.23","22.24","22.27","22.33","22.44","22.45","22.46","22.47","22.48","22.49"],"enable":["13.1","13.3","22.8","22.19","22.22"],"mode":["13.1"],"display":["13.4","22.17","22.33","22.34"],"duration":["13.4"],"throttle":["13.8","13.9"],"boundary":["13.10"],"tolerance":["13.10"],"distance":["13.10"],"maximum":["13.11","13.14"],"record":["13.11","13.12"],"minimum":["13.12"],"delay":["13.13","13.15","13.16","13.17"],"on":["13.18","13.19","13.20","13.21","13.23","13.24","13.25","22.34","22.36","22.41"],"desktop":["13.18"],"devices":["13.19","13.20","13.21","13.23","13.24","13.25"],"mobile":["13.21","13.23","13.24","13.25","20.13"],"refresh":["13.22"],"interval":["13.22"],"adjustment":["13.26"],"built":["13.28","13.29","13.30"],"list":["13.28","13.29","13.30","15.45","19.3"],"determines":["13.31","13.34"],"attribute":["13.34"],"plugins":["14.0"],"once":["14.0"],"you":["14.0","19.1","20.9"],"familiar":["14.0"],"methods":["14.0"],"becomes":["14.0"],"very":["14.0"],"straightforward":["14.0"],"can":["14.0","20.9"],"load":["14.0"],"functions":["14.0"],"during":["14.0"],"instantiation":["14.0"],"removes":["15.5"],"rewind":["15.8"],"similar":["15.12"],"gets":["15.15","15.16","15.18","15.19","15.20","15.22","15.23","15.25","15.26","15.28","15.34","15.44"],"downloads":["15.17"],"or":["15.26","15.44"],"defined":["15.33"],"this":["15.33","22.43"],"initiates":["15.37"],"proportion":["15.38","15.40"],"amount":["15.39"],"proxying":["15.41"],"quickly":["15.43"],"description":["16.1","17.1","18.1","19.2","19.3","19.5","19.6"],"control":["17.1","22.32"],"first":["19.1"],"need":["19.1"],"open":["19.1"],"buttons":["19.2"],"selection":["19.3","22.33"],"lists":["19.3","19.4"],"nested":["19.4"],"button":["19.5"],"range":["19.6"],"slider":["19.6"],"usage":["20.0"],"group":["20.1","20.2","20.3","20.4","20.5","23.1","23.2","23.3","23.4","23.5","24.2","24.3"],"bash":["20.2","23.2","24.2","24.3"],"index":["20.3","23.3","24.18"],"head":["20.3"],"jsx":["20.5","20.8","23.5","23.8"],"import":["20.5","21.4","23.5","23.9","25.4"],"from":["20.5","21.4","23.5","25.4"],"useeffect":["20.5","23.5"],"useref":["20.5"],"also":["20.9"],"use":["20.9","22.27","22.47"],"sometimes":["20.10"],"your":["20.10"],"files":["20.10","21.2"],"may":["20.10"],"lose":["20.10"],"typescript":["20.10","23.10"],"hints":["20.10"],"browsers":["20.11"],"production":["20.11"],"build":["20.11"],"supports":["20.11"],"latest":["20.11"],"major":["20.11"],"module":["20.12","23.12"],"tip":["20.12","23.12"],"esm":["20.12","23.12"],"demo":["20.12","23.12"],"https":["20.12","23.12"],"org":["20.12","23.12"],"useragent":["20.13","23.13"],"currently":["20.13"],"detection":["20.13"],"device":["20.13"],"danger":["21.0","25.0"],"due":["21.0"],"increasing":["21.0"],"languages":["21.1","21.2","21.4"],"language":["21.2","21.3","22.42","26.42"],"bundling":["21.2"],"located":["21.2"],"at":["21.2"],"i18n":["21.2","25.2"],"zhtw":["21.4","25.4"],"where":["22.1"],"source":["22.2"],"unique":["22.3"],"undefined":["22.4","22.51","26.4","26.51"],"constructor":["22.4"],"accepts":["22.4"],"as":["22.4"],"second":["22.4"],"which":["22.4"],"f00":["22.6","26.6"],"false":["22.8","22.9","22.10","22.11","22.12","22.13","22.14","22.15","22.16","22.17","22.18","22.20","22.23","22.24","22.25","22.26","22.27","22.38","22.44","22.46","22.47","22.48","22.49","26.10","26.11","26.12","26.14","26.15","26.16","26.17","26.25","26.27","26.38","26.44","26.47","26.49"],"by":["22.11"],"true":["22.19","22.21","22.22","22.28","22.45","26.19","26.22"],"hotkeys":["22.19"],"if":["22.21"],"blur":["22.22"],"timing":["22.25"],"mini":["22.26"],"ssr":["22.27","26.27"],"initialize":["22.29","22.30","22.31","22.32","22.35"],"bottom":["22.32"],"preview":["22.36"],"bar":["22.36"],"supported":["22.37"],"formats":["22.37"],"vtt":["22.37","26.37"],"srt":["22.37","26.37"],"preload":["22.38"],"metadata":["22.38"],"replace":["22.39"],"specify":["22.40"],"format":["22.40"],"needs":["22.40"],"be":["22.40","22.43"],"matches":["22.41"],"based":["22.41"],"navigator":["22.42","26.42"],"configuration":["22.43"],"will":["22.43"],"deeply":["22.43"],"merged":["22.43"],"automatic":["22.47"],"导入":["23.6"],"你也可以使用选项的类型":["23.9"],"ts":["23.9"],"有时你的":["23.10"],"文件会丢失":["23.10"],"的类型提示":["23.10"],"这时候你可以手动导入类型":["23.10"],"生产构建的":["23.11"],"只兼容最新一个主版本的":["23.11"],"chrome":["23.11"],"last":["23.11"],"目前对于是否移动设备的判断并不准确":["23.13"],"有时候希望通过改变":["23.13"],"来调整播放器的ui":["23.13"],"查看完整演示":["24.1"],"jsdelivr":["24.3"],"每一个弹幕是一个对象":["24.4"],"多个弹幕组成的数组就是弹幕库":["24.4"],"通常只需要":["24.4"],"text":["24.4"],"只有":["24.5"],"danmuku":["24.5","24.18"],"是必须的参数":["24.5"],"其余都是非必填":["24.5"],"弹幕数据":["24.5"],"speed":["24.5"],"弹幕持续时间":["24.5"],"范围在":["24.5"],"margin":["24.5"],"来自用户输入的弹幕":["24.6"],"beforeemit":["24.6"],"filter":["24.6"],"beforevisible":["24.6"],"artplayerplugindanmuku":["24.6"],"visible":["24.6"],"来自服务器的弹幕":["24.6"],"xml":["24.8"],"弹幕":["24.8"],"文件":["24.8"],"data":["24.9","24.11","24.12","24.13","24.14","24.18"],"通过方法":["24.10","24.12","24.13"],"进行隐藏或者显示弹幕":["24.10"],"通过属性":["24.11"],"判断当前弹幕是隐藏或者显示":["24.11"],"发送一条实时弹幕":["24.12"],"libs":["24.12","24.13","24.14","24.18"],"实时改变弹幕配置":["24.13"],"uncompiled":["24.13","24.14","24.18"],"通过":["24.14"],"方法可以重载弹幕库":["24.14"],"或者切换新弹幕库":["24.14"],"或者追加新的弹幕库":["24.14"],"用于清空当前显示的弹幕":["24.15"],"在初始化弹幕插件的时候":["24.16"],"是可以指定弹幕发射器的挂载位置的":["24.16"],"默认是挂载在控制栏的中部":["24.16"],"你也可以把它挂载在播放器以外的地方":["24.16"],"当播放器全屏的时候":["24.16"],"发射器会自动回到控制栏的中部":["24.16"],"假如你挂载的地方是亮色的话":["24.16"],"建议把":["24.16"],"用于获取当前弹幕配置":["24.17"],"鉴于捆绑的多国语言越来越多":["25.0"],"从":["25.0"],"默认语言有":["25.1"],"en":["25.1"],"zh":["25.1"],"打包前的语言文件存放于":["25.2"],"欢迎来添加你的语言":["25.2"],"打包后的语言文件存放于":["25.2"],"dist":["25.2"],"播放器挂载的":["26.1"],"视频源地址":["26.2"],"播放器的唯一标识":["26.3"],"构造函数接受一个函数作为第二个参数":["26.4"],"播放器初始化成功且视频可以播放时触发":["26.4"],"ready":["26.4"],"视频的海报":["26.5"],"是否自动播放":["26.10"],"是否使用快捷键":["26.19"],"是否开启播放器":["26.22"],"字幕时间偏移":["26.25"],"是否使用":["26.27"],"初始化自定义的":["26.29","26.30","26.31","26.35"],"层":["26.29"],"设置面板":["26.30"],"右键菜单":["26.31"],"初始化自定义的底部":["26.32"],"控制栏":["26.32"],"是否在底部控制栏里显示":["26.33"],"画质选择":["26.33"],"列表":["26.33"],"在进度条上显示":["26.34"],"高亮信息":["26.34"],"插件":["26.35"],"在进度条上设置":["26.36"],"预览图":["26.36"],"设置视频的字幕":["26.37"],"支持字幕格式":["26.37"],"ass":["26.37"],"用于替换默认图标":["26.39"],"支持":["26.39"],"用于指明视频的格式":["26.40"],"需要配合":["26.40"],"customtype":["26.40"],"通过视频的":["26.41"],"自定义":["26.43"],"配置":["26.43"],"该配置会和自带的":["26.43"],"进行深度合并":["26.43"],"新增你的语言":["26.43"],"是否使用自动":["26.47"],"回放功能":["26.47"],"用于改变内置的css变量":["26.50"]},{"0":["3.25","3.26","5.9","13.28","21.0","24.5","25.0"],"1":["3.26","3.28","5.9","5.38","5.40","13.28","20.11","21.0","23.10","25.0"],"2":["3.28","20.8","20.12","23.8","23.12","23.13"],"3":["3.23","13.29","20.9","22.2","23.10","26.2"],"4":["6.2","13.29","16.2","21.3","22.47","23.13","26.43"],"5":["3.12","3.14","3.25","3.27","13.28","20.12","21.0","22.29","22.30","23.12","23.13","25.0","26.29","26.30"],"6":["2.0","6.3","7.3","12.0","16.3","17.3","20.12","23.12"],"7":["26.7"],"9":["3.29","9.7","19.7","21.3","26.43"],"10":["2.2","3.11","7.2","17.2"],"11":["2.28"],"13":["6.2","6.3","16.2","16.3"],"14":["9.7","19.7"],"15":["14.0"],"16":["3.29","13.29"],"19":["5.45"],"21":["6.4","6.5","7.3","7.4","8.4","16.4","16.5","17.3","17.4","18.4"],"22":["8.2","8.3","9.8","18.2","18.3","19.8"],"23":["22.29","26.29"],"24":["6.5","16.5"],"25":["3.28","24.5"],"29":["5.45","8.5","18.5"],"34":["22.30","26.30"],"35":["3.7"],"40":["7.5","17.5"],"50":["3.10"],"75":["13.28"],"200":["3.6","3.8","3.9","3.21"],"300":["3.17"],"1000":["3.15","3.22","3.24"],"2000":["3.4"],"3000":["3.13","3.16"],"code":["0.1","0.2","0.4","0.5","0.6","0.7","0.13","0.14","0.15","0.16","0.17","1.1","1.6","2.1","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","3.3","3.5","3.6","3.7","3.17","3.29","3.30","5.1","5.2","5.3","5.12","5.14","5.16","5.17","5.20","5.21","5.22","5.23","5.25","5.27","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.44","5.45","5.46","9.3","10.1","10.2","10.5","12.0","12.20","12.28","12.29","12.30","12.31","15.2","15.12","15.16","15.20","15.22","15.37","15.44","15.45","19.3","22.1","22.10","22.19","22.30","22.31","22.32","22.35","22.43","22.47","24.10","24.16","25.2","26.1","26.4","26.10","26.19","26.30","26.31","26.32","26.35","26.39","26.43","26.47","26.50"],"js":["0.2","0.4","0.14","0.17","2.2","2.18","2.22","2.24","2.28","2.29","2.30","2.31","5.45","6.2","6.3","6.4","7.4","8.4","9.3","9.6","9.7","10.2","12.0","15.16","16.2","16.3","16.4","17.4","18.4","19.3","19.7","21.3","22.2","22.10","22.19","22.29","22.30","22.47","24.4","24.6","24.11","24.12","24.13","24.14","25.1","26.2","26.4","26.29","26.30","26.32","26.43"],"var":["0.2","0.4","2.0","4.0","5.45","6.2","6.3","6.4","6.5","7.3","7.4","7.5","8.2","8.3","8.4","8.5","9.3","9.7","9.8","9.9","10.2","12.0","14.0","16.2","16.3","16.4","16.5","17.3","17.4","17.5","18.2","18.3","18.4","18.5","19.3","19.4","19.7","19.8","19.9","21.3","21.4","22.2","22.29","22.30","24.13","24.14","24.18","25.3","25.4","26.2","26.29","26.30"],"proxy":["0.3"],"方法用于代理":["0.3"],"hover":["0.3"],"方法用于代理自定义的":["0.3"],"div":["0.3","0.6","0.8","0.9","0.10","0.13","0.15","0.16","1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.11","1.12","2.41","3.1","3.2","3.4","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.15","3.16","3.17","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.28","3.29","3.30","3.32","3.33","5.6","5.7","5.8","5.9","5.10","5.11","5.12","5.13","5.14","5.15","5.17","5.18","5.19","5.20","5.21","5.22","5.23","5.24","5.25","5.27","5.30","5.31","5.32","5.34","5.35","5.36","5.39","5.41","5.43","5.44","5.46","5.47","9.1","9.3","10.5","12.0","12.2","12.3","12.4","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.16","12.17","12.18","12.19","12.20","12.22","12.24","12.26","12.27","12.28","12.29","12.30","12.31","12.33","12.34","12.38","12.39","12.40","12.41","15.1","15.2","15.3","15.12","15.16","15.20","15.22","15.28","15.33","15.37","15.44","15.45","15.46","15.47","19.3","20.4","22.1","22.7","22.10","22.19","22.31","22.32","22.35","22.39","22.43","22.47","23.4","24.8","24.16","26.1","26.3","26.4","26.5","26.7","26.8","26.9","26.10","26.13","26.17","26.19","26.21","26.26","26.35","26.39","26.43","26.45","26.46","26.47","26.50"],"classname":["0.4","0.5","0.6","0.7","0.8","0.9","0.10","0.13","0.14","0.15","0.16","1.1","1.2","1.3","1.4","1.5","1.6","1.7","1.8","1.9","1.10","1.12","2.41","3.1","3.2","3.3","3.4","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.16","3.17","3.18","3.19","3.20","3.22","3.23","3.26","3.27","3.29","3.30","3.32","3.33","5.1","5.2","5.3","5.6","5.7","5.8","5.9","5.10","5.11","5.12","5.13","5.14","5.16","5.17","5.18","5.19","5.20","5.21","5.22","5.23","5.24","5.25","5.27","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.43","5.44","5.46","5.47","9.1","9.3","10.1","10.5","12.0","12.2","12.3","12.4","12.6","12.7","12.8","12.9","12.10","12.17","12.18","12.20","12.22","12.24","12.26","12.28","12.29","12.30","12.31","12.40","12.41","15.1","15.2","15.3","15.12","15.16","15.20","15.22","15.28","15.33","15.37","15.44","15.45","15.46","19.3","22.1","22.7","22.10","22.19","22.31","22.32","22.35","22.43","22.47","24.8","24.10","24.16","26.1","26.3","26.4","26.5","26.7","26.9","26.10","26.13","26.17","26.19","26.31","26.32","26.35","26.39","26.43","26.45","26.46","26.47","26.50"],"run":["0.4","0.5","0.6","0.7","0.10","0.13","0.14","0.15","0.16","0.17","1.1","1.6","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.13","2.14","2.15","2.16","2.19","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.40","2.41","3.3","3.5","3.6","3.7","3.8","3.9","3.10","3.11","3.17","3.22","3.29","3.30","3.32","5.1","5.2","5.3","5.8","5.10","5.12","5.14","5.16","5.17","5.18","5.19","5.20","5.21","5.22","5.23","5.25","5.27","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.44","5.46","5.47","9.1","9.3","10.1","10.2","10.5","12.0","12.2","12.6","12.7","12.8","12.10","12.20","12.22","12.28","12.29","12.30","12.31","15.1","15.2","15.3","15.12","15.16","15.20","15.22","15.28","15.37","15.44","15.45","19.3","22.1","22.7","22.10","22.19","22.30","22.31","22.32","22.35","22.43","22.47","24.8","24.10","24.16","26.1","26.4","26.5","26.7","26.10","26.19","26.31","26.32","26.35","26.39","26.43","26.47","26.50"],"art":["0.4","0.12","2.0","5.11","5.13","5.45","6.2","6.3","6.4","6.5","7.3","7.4","7.5","8.2","8.3","8.5","9.3","9.4","9.7","9.8","9.9","10.2","12.0","14.0","15.11","15.13","16.2","16.3","16.4","16.5","17.3","17.4","17.5","18.2","18.3","18.5","19.3","19.4","19.7","19.8","19.9","22.2","23.10","24.14","24.18","25.3","25.4","26.2"],"new":["0.4","2.0","4.0","6.2","6.3","6.4","6.5","7.3","7.4","7.5","8.3","9.3","9.4","9.7","9.8","9.9","10.2","12.0","14.0","16.2","16.3","16.4","16.5","17.3","17.4","17.5","18.3","19.4","19.7","19.8","19.9","22.2","24.14","24.18","25.3","26.2"],"artplayer":["0.4","2.0","4.0","5.5","6.2","6.3","6.4","6.5","7.3","7.4","7.5","9.3","9.4","9.8","9.9","12.0","14.0","16.2","16.3","16.4","16.5","17.3","17.4","17.5","19.4","19.8","19.9","20.3","21.4","22.2","23.3","23.4","23.6","23.9","23.10","24.6","24.7","24.9","24.10","24.11","24.12","24.13","24.14","24.15","24.17","26.2"],"container":["0.4","2.0","4.0","6.4","6.5","7.3","7.5","9.3","9.4","9.8","9.9","12.0","14.0","16.4","16.5","17.3","17.5","19.4","19.8","19.9","20.4","20.5","22.2","22.11","23.5","24.18","26.11"],"方法用于更新":["0.6"],"对象":["0.6"],"方法用于动态更新层":["0.8"],"show":["0.8","0.9","0.10","0.12","0.16","10.7"],"属性用于设置是否显示全部层":["0.8"],"toggle":["0.8","0.9","0.10","0.16","22.18"],"方法用于切换是否显示全部层":["0.8"],"方法用于动态更新控制器":["0.9"],"属性用于设置是否显示全部控制器":["0.9"],"方法用于切换是否显示全部控制器":["0.9"],"属性用于设置是否显示全部菜单":["0.10"],"方法用于切换是否显示全部菜单":["0.10"],"方法设置当前字幕地址和选项":["0.11"],"texttrack":["0.11"],"获取当前字幕轨":["0.11"],"activecues":["0.11"],"获取当前活跃的字幕列表":["0.11"],"cues":["0.11"],"通过":["0.12"],"控制面板的显示与隐藏":["0.12"],"触发的事件名为":["0.12"],"属性用于切换是否显示加载层":["0.13"],"属性用于切换是否显示遮罩层":["0.15"],"属性用于设置是否显示全部设置项":["0.16"],"方法用于切换是否显示全部设置项":["0.16"],"字符串":["1.11"],"app":["2.0","4.0","7.2","7.5","9.3","9.4","9.8","9.9","12.0","14.0","17.2","17.5","19.4","19.8","19.9","22.2","24.18"],"url":["2.0","4.0","5.11","7.2","7.5","9.4","9.9","12.0","14.0","15.11","15.13","17.2","17.5","19.4","19.9","22.36","22.37","24.18","26.36","26.37"],"assets":["2.0","4.0","7.2","8.2","8.3","8.4","8.5","9.4","9.9","12.0","14.0","17.2","18.2","18.3","18.4","18.5","19.4","19.9","22.2","22.29","24.18","26.29"],"sample":["2.0","4.0","7.2","8.2","8.3","8.4","8.5","9.4","9.9","12.0","14.0","17.2","18.2","18.3","18.4","18.5","19.4","19.9","22.29","24.18","26.29"],"mp4":["2.0","4.0","7.2","12.0","14.0","17.2","24.18"],"on":["2.0","4.0","12.5","12.16","14.0","19.6","22.21","22.45"],"canplay":["2.0"],"事件":["2.41"],"浏览器可以播放媒体文件了":["2.42"],"浏览器估计它可以在不停止内容缓冲的情况下播放媒体直到结束":["2.43"],"offlineaudiocontext":["2.44","12.44"],"duration":["2.45","13.12","13.13"],"媒体内容变为空":["2.46"],"例如":["2.46"],"视频停止播放":["2.47"],"获取媒体数据时出错":["2.48"],"media":["2.49","12.59","13.34"],"已加载元数据":["2.50"],"播放已暂停":["2.51"],"播放已开始":["2.52"],"由于缺乏数据而暂停或延迟后":["2.53"],"在浏览器加载资源时周期性触发":["2.54"],"播放速率发生变化":["2.55"],"跳帧":["2.56","2.57"],"用户代理":["2.58"],"媒体数据加载已暂停":["2.59"],"currenttime":["2.60"],"音量发生变化":["2.61"],"由于暂时缺少数据":["2.62"],"可以打印出视频全部的内置事件":["3.1"],"默认关闭":["3.1"],"默认为":["3.4","3.8","3.9","3.10","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.27","3.31","3.34","5.4"],"单位为毫秒":["3.15","3.21","3.24"],"true":["3.18","3.19","3.31","3.32","3.34","5.4","26.21","26.28","26.45"],"false":["3.20","3.33","13.33","26.8","26.9","26.13","26.18","26.20","26.23","26.24","26.26","26.46","26.48"],"是否把播放器挂在在":["3.31"],"元素下":["3.31"],"目前主要用于进度条的平滑效果":["3.33"],"属性并调用":["3.34"],"load":["3.34","5.5","13.34","15.5"],"以主动释放媒体资源":["3.34"],"开启后可以在单页应用或频繁创建":["3.34"],"销毁播放器的场景下":["3.34"],"dosomething":["4.0","14.0"],"video":["4.0","5.34","5.38","5.40","7.2","9.4","9.9","10.12","12.11","14.0","15.1","15.2","15.7","15.8","15.9","15.10","15.14","15.15","15.17","15.23","15.25","15.27","15.33","15.34","15.35","15.38","15.40","17.2","19.4","19.9","22.4","22.13","22.14","22.15","22.16","22.17","24.18","26.41"],"plugins":["4.0"],"ready":["4.0","12.53","14.0","22.4"],"可以在实例化之后再加载插件的函数":["4.0"],"销毁播放器":["5.4"],"接受一个参数表示是否销毁后同时移除播放器的":["5.4"],"html":["5.4","20.12","22.39","23.12","26.27","26.33"],"常用于在单页应用中手动释放媒体资源或重新初始化视频标签":["5.5"],"注意":["5.5"],"全局配置":["5.5"],"remove":["5.5","10.8","10.9","10.10","10.14","10.16"],"视频时间跳转":["5.6"],"单位秒":["5.6","5.7","5.8","26.34"],"视频时间快进":["5.7"],"视频时间快退":["5.8"],"设置和获取视频音量":["5.9"],"范围在":["5.9","26.25"],"string":["5.10","6.1","7.1","8.1","11.11","16.1","17.1","18.1","22.36","22.37","26.33","26.34","26.36","26.37"],"设置和获取视频地址":["5.10"],"类似":["5.11","5.12","5.13","5.15","5.42"],"但会执行一些优化操作":["5.11","5.12"],"switchurl":["5.13","15.13"],"但会带上之前的播放进度":["5.13"],"设置和获取视频是否静音":["5.14"],"设置和获取视频当前时间":["5.15"],"设置时间时和":["5.15"],"seek":["5.15"],"但它不会触发额外的事件":["5.15"],"返回的是一个":["5.18","5.19"],"promise":["5.18","5.19"],"设置和获取播放器窗口全屏":["5.20"],"设置和获取播放器网页全屏":["5.21"],"设置和获取播放器画中画模式":["5.22"],"只有在视频播放前才能看到海报效果":["5.23"],"boolean":["5.24","6.1","8.1","9.5","19.5","26.33"],"设置和获取播放器迷你模式":["5.24"],"获取视频是否正在播放中":["5.25"],"支持":["5.26","5.30"],"standard":["5.26","15.26"],"正常":["5.26"],"mini":["5.26","22.12"],"迷你窗":["5.26"],"pip":["5.26"],"type":["5.29","20.9","23.9","23.10"],"getter":["5.29"],"这些属性是对":["5.29"],"rect":["5.29","15.29"],"的快捷访问":["5.29"],"设置和获取播放器翻转":["5.30"],"normal":["5.30","13.30"],"horizontal":["5.30","13.30"],"vertical":["5.30"],"设置和获取播放器播放速度":["5.31"],"设置和获取播放器长宽比":["5.32"],"元素的属性":["5.34"],"动态获取和设置视频类型":["5.35"],"动态获取和设置播放器主题颜色":["5.36"],"常配合":["5.38","5.40"],"timeupdate":["5.38","5.40"],"事件使用":["5.38","5.40"],"通常与":["5.39"],"loaded":["5.39"],"一起使用":["5.39","26.40"],"用于展示缓冲进度细节":["5.39"],"和":["5.41","26.6","26.14","26.15","26.16"],"removeeventlistener":["5.41","15.41"],"当使用":["5.41"],"来处理事件":["5.41"],"播放器销毁时也会自动销毁该事件":["5.41"],"document":["5.42","12.41","15.42"],"queryselector":["5.42","15.42"],"但被查询的对象局限于当前播放器内":["5.42"],"可以避免同类名的错误":["5.42"],"元素":["5.43"],"动态设置缩略图":["5.46"],"number":["5.47","9.2","9.3","19.3","22.34","22.36","26.34","26.36"],"动态设置字幕偏移":["5.47"],"是否禁用组件":["6.1","7.1","8.1"],"name":["6.1","7.1","7.2","8.1","14.0","16.1","17.1","17.2","18.1","22.37","26.37"],"组件唯一名称":["7.1"],"用于标记类名":["7.1"],"index":["7.1","7.2","17.1","17.2","24.6","24.9","24.11","24.12","24.13","24.14"],"controls":["7.2","17.2"],"your":["7.2","17.2","21.2","22.43"],"button":["7.2","17.2","22.18","22.44","22.49"],"img":["8.2","8.3","8.4","8.5","18.2","18.3","18.4","18.5","22.29","26.29"],"layer":["8.2","8.3","8.4","8.5","10.8","12.35","12.36","18.2","18.3","18.4","18.5"],"png":["8.2","8.3","8.5","18.2","18.3","18.5"],"aspectratio":["9.1"],"subtitleoffset":["9.1"],"icon":["9.2","19.2","19.5"],"元素的图标":["9.2","9.5","9.6"],"onclick":["9.2","19.2"],"function":["9.2","9.5","9.6","11.8","11.9","11.10","14.0","19.2","19.6","20.5","23.5","24.6"],"元素点击事件":["9.2"],"width":["9.2","19.3"],"列表宽度":["9.3"],"tooltip":["9.3","9.5","9.6","19.3"],"提示文本":["9.3","9.6"],"switch":["9.5","19.5"],"按钮默认状态":["9.5"],"onswitch":["9.5"],"按钮切换事件":["9.5"],"range":["9.6","15.9","22.25"],"array":["9.6","19.6"],"默认状态数组":["9.6"],"onrange":["9.6","19.6"],"完成时触发的事件":["9.6"],"onchange":["9.6"],"变化时触发的事件":["9.6"],"here":["10.0"],"following":["10.3"],"methods":["10.3"],"to":["10.3","10.13","10.14","10.15","13.0","15.5","15.6","15.11","15.13","15.29","15.41","15.42","16.1","18.1","20.13","21.2","22.4","22.9","22.13","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.28","22.38","22.41","22.44","22.45","22.46","22.48","22.49"],"handle":["10.3","15.41"],"event":["10.3","13.8","13.9","13.10","15.41","19.2","19.3","19.6"],"will":["10.3"],"be":["10.3","11.1"],"automatically":["10.3","12.19","15.33","15.41","22.38"],"destroyed":["10.3","12.6"],"is":["10.3","10.13","10.15","12.1","12.3","12.5","12.6","12.9","12.10","12.32","12.34","12.35","12.36","12.37","12.39","12.53","13.3","13.5","13.28","13.29","13.30","15.14","15.23","15.25","15.41","22.1","22.4","22.40"],"a":["10.4","10.7","10.8","10.9","12.26","12.27","12.56","12.57","13.15","15.4","15.6","15.18","15.19","22.44","22.46","22.51"],"value":["10.4","10.6"],"get":["10.4","15.9","15.10"],"del":["10.4"],"the":["10.5","12.5","12.11","12.28","12.41","12.49","12.55","12.60","12.61","13.0","13.21","13.23","13.25","13.31","13.32","15.7","15.8","15.9","15.10","15.14","15.15","15.17","15.21","15.23","15.24","15.25","15.26","15.27","15.30","15.31","15.32","15.34","15.35","15.36","15.41","15.42","15.43","16.1","18.1","19.1","20.10","22.14","22.15","22.16","22.17","22.18","22.20","22.21","22.23","22.24","22.42","22.43","22.48","22.49"],"player":["10.5","11.6","12.5","12.12","12.13","12.28","13.2","13.31","13.32","13.34","15.4","15.20","15.21","15.22","15.24","15.26","15.30","15.31","15.32","15.36","15.43","20.5","22.1","22.3","22.4","22.6","22.7","22.11","22.12","22.22","22.23","22.24","22.48","23.5"],"an":["10.6","15.17"],"update":["10.6","10.10","10.16"],"has":["10.7","12.47","15.38","15.39","15.40"],"property":["10.7","10.13","10.15","11.1","15.33","22.33","22.34","22.36","22.37"],"for":["10.7","10.17","11.6","11.7","11.8","11.10","11.12","12.1","12.46","13.4","13.10","13.11","13.12","13.13","13.15","13.16","13.17","13.21","13.22","13.23","13.24","13.25","13.26","13.27","17.1","20.11","22.3","22.22"],"displaying":["10.7"],"control":["10.9","22.17","22.33"],"items":["10.10","10.16","13.6","13.7"],"returns":["10.11"],"current":["10.11","10.12","15.5","15.15","15.17","15.18","15.19","15.26"],"style":["10.11"],"method":["10.11","10.17"],"of":["10.11","10.12","11.2","11.3","11.4","13.14","15.15","15.17","15.18","15.19","15.34","20.11","22.7"],"status":["10.12"],"and":["10.12","12.2","15.3","15.5","15.9","15.10","15.14","15.21","15.24","15.28","15.30","15.31","15.32","15.33","15.34","15.35","15.36","15.41","20.12","22.4","22.39","22.41"],"such":["10.12","20.10","22.22"],"as":["10.12","22.22"],"used":["10.13","10.14","10.15","15.5"],"set":["10.13","10.15","15.10","15.33","15.46","15.47"],"whether":["10.13","10.15","13.19","13.20","15.4","15.14","15.25","22.9","22.13","22.28"],"display":["10.13","10.15","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.42","22.44","22.49"],"hotkeys":["10.14"],"only":["10.17","15.23","22.5","22.26"],"add":["10.17","21.2","22.43","22.46"],"dynamically":["10.17","15.46","15.47"],"adding":["10.17"],"refer":["11.0","13.0"],"this":["11.1"],"can":["11.1","12.42","13.1","15.33","20.10","20.11","22.51"],"useful":["11.1","22.27"],"information":["11.2","13.22","15.28"],"environment":["11.3"],"variables":["11.3","15.44","22.50"],"time":["11.4","12.27","12.60","15.6","15.7","15.8","15.15","22.34","26.34"],"default":["11.5","11.12","13.3","13.8","13.9","13.17","13.26","13.28","13.29","13.30","19.5","19.6","20.5","23.5"],"configuration":["11.5"],"utility":["11.6","11.10"],"functions":["11.6"],"validation":["11.7","11.9"],"schema":["11.7"],"constructor":["11.8"],"required":["11.11"],"options":["11.12"],"first":["12.1"],"becomes":["12.2"],"playable":["12.2"],"paused":["12.3"],"starts":["12.4"],"playing":["12.4","12.42"],"pressed":["12.5"],"gains":["12.7"],"loses":["12.8"],"focus":["12.8"],"double":["12.9","13.17","13.18","13.19"],"clicked":["12.9","12.10"],"while":["12.11"],"loading":["12.11"],"or":["12.12","12.15","12.21","12.23","12.24","12.25","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39"],"leaves":["12.12","12.15"],"moves":["12.13"],"over":["12.13"],"s":["12.14","15.20","15.21","15.22","15.26","15.31","15.32","15.36","15.43","22.6","22.11","22.41"],"dimensions":["12.14","15.28","22.11"],"change":["12.14"],"enters":["12.15","22.12"],"viewport":["12.15"],"changes":["12.16","12.17","12.40"],"mobile":["12.16"],"devices":["12.16"],"aspect":["12.17","15.32","22.16"],"ratio":["12.17","22.16"],"adjusts":["12.18","12.19","22.38"],"its":["12.18","12.19","15.27"],"height":["12.18","15.33"],"size":["12.19","15.27","22.11"],"flipped":["12.20"],"exits":["12.21","12.23","12.24","12.25"],"window":["12.21","15.20","22.23"],"mode":["12.21","12.23","12.24","13.18","15.22","22.8","22.12","22.27","22.28","24.5"],"error":["12.22"],"occurs":["12.22"],"web":["12.23","15.21"],"fullscreen":["12.23","22.48"],"picture":["12.25","15.22","22.20"],"in":["12.25","13.4","13.5","13.6","13.7","13.8","13.9","13.10","13.16","13.21","13.22","13.24","13.27","15.6","15.8","15.22","15.39","22.17","22.20","22.33","22.38","22.40","22.43","22.50"],"captures":["12.26"],"performs":["12.27","15.12"],"panel":["12.32","13.5","13.6","13.7","13.22","19.1"],"shown":["12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39"],"hidden":["12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39"],"are":["12.33","12.38","21.1"],"menu":["12.37","13.3","22.31"],"state":["12.40","15.20","15.30","19.5","19.6"],"from":["12.41","15.38","15.40","20.12","21.0","23.9","25.2"],"start":["12.42"],"browser":["12.43"],"estimates":["12.43"],"triggered":["12.45","19.6","22.4"],"become":["12.46"],"empty":["12.46"],"example":["12.46"],"playback":["12.47","12.51","12.52","12.62","15.15","15.31","22.15"],"occurred":["12.48"],"metadata":["12.50","26.38"],"periodically":["12.54"],"user":["12.58"],"agent":["12.58"],"top":["13.0"],"which":["13.1","22.5","22.8"],"print":["13.1","13.32"],"all":["13.1"],"built":["13.1","22.43","22.50"],"context":["13.3"],"notification":["13.4"],"messages":["13.4"],"milliseconds":["13.4","13.8","13.9","13.16","13.17","13.21","13.22","13.24"],"settings":["13.5","13.6","13.7","19.1"],"pixels":["13.5","13.10"],"view":["13.10"],"count":["13.11"],"feature":["13.12","13.13","22.47"],"automatic":["13.14","13.15"],"reconnection":["13.14","13.15"],"attempts":["13.14"],"when":["13.14","13.15","13.25","15.11","15.12","15.41","22.4","22.5","22.12","22.22"],"connection":["13.15"],"auto":["13.16","22.38"],"hiding":["13.16"],"click":["13.17","13.18","13.19","19.2","19.3"],"events":["13.17","22.45"],"toggles":["13.18","13.19","13.20"],"single":["13.20"],"delay":["13.21","13.24"],"speed":["13.23","13.25"],"multiplier":["13.23","13.25"],"activating":["13.24"],"seeking":["13.25"],"keyboard":["13.26","13.27"],"shortcuts":["13.26","13.27"],"seconds":["13.27","15.8","15.39"],"rates":["13.28"],"ratios":["13.29"],"modes":["13.30"],"mount":["13.31","22.27"],"under":["13.31"],"defaults":["13.32","13.33","13.34"],"requestanimationframe":["13.33"],"currently":["13.33","15.25","22.3","22.6","22.42"],"mainly":["13.33"],"call":["13.34"],"actively":["13.34"],"release":["13.34","15.5"],"resources":["13.34","21.0"],"destroying":["13.34"],"myplugin":["14.0"],"console":["14.0"],"info":["14.0"],"return":["14.0","22.51"],"something":["14.0"],"pause":["15.3"],"accepts":["15.4"],"indicating":["15.4"],"src":["15.5"],"calls":["15.5"],"once":["15.5"],"commonly":["15.5"],"manually":["15.5","20.10"],"specific":["15.6"],"fast":["15.7"],"similar":["15.11","15.13","15.42"],"setting":["15.11","15.12","15.15"],"but":["15.12","15.13","15.42"],"some":["15.12"],"optimization":["15.12"],"operations":["15.12"],"quality":["15.13"],"gets":["15.14","15.21","15.24","15.30","15.31","15.32","15.35","15.36"],"frame":["15.17"],"screenshot":["15.18","15.19"],"effect":["15.23","22.22"],"sets":["15.24","15.34","15.35","15.36"],"supported":["15.26","15.30"],"values":["15.26"],"adapts":["15.27"],"coordinate":["15.28"],"these":["15.29"],"properties":["15.29"],"provide":["15.29"],"shortcut":["15.29"],"access":["15.29"],"calculate":["15.33"],"attributes":["15.34"],"element":["15.34"],"that":["15.38","15.39","15.40","22.26"],"been":["15.38","15.39","15.40"],"buffered":["15.38","15.39"],"ranging":["15.38","15.40"],"using":["15.41"],"search":["15.42"],"css":["15.44","17.1","22.50"],"available":["15.45"],"levels":["15.45"],"subtitle":["15.47"],"offset":["15.47","22.25"],"component":["16.1","18.1"],"unique":["16.1","17.1","18.1"],"class":["17.1"],"identification":["17.1"],"it":["19.1","22.38"],"comes":["19.1"],"with":["19.1","22.40","22.43"],"four":["19.1"],"text":["19.3","26.34"],"item":["19.5"],"bash":["20.1","23.1"],"npm":["20.1","23.1","24.2"],"jsdelivr":["20.2","23.2"],"net":["20.2","23.2","24.3"],"https":["20.2","23.2","24.3"],"title":["20.3","23.3"],"demo":["20.3"],"meta":["20.3"],"charset":["20.3"],"utf":["20.3"],"template":["20.4","23.4"],"ref":["20.4"],"export":["20.5","23.5"],"option":["20.5","23.5"],"getinstance":["20.5","23.5"],"rest":["20.5","23.5"],"const":["20.5","23.5"],"d":["20.6"],"import":["20.8","20.9","20.10","23.8","23.10","25.2"],"ts":["20.9","26.40"],"cases":["20.10"],"you":["20.10","20.11","20.13","22.27"],"types":["20.10"],"variable":["20.10"],"version":["20.11","21.0","23.11"],"chrome":["20.11"],"last":["20.11"],"starting":["20.12","21.0"],"not":["20.13"],"entirely":["20.13"],"accurate":["20.13"],"sometimes":["20.13"],"may":["20.13"],"want":["20.13","22.27"],"adjust":["20.13"],"bundled":["21.0"],"multilingual":["21.0"],"en":["21.1","26.42"],"zh":["21.1","21.4","25.4","26.42"],"cn":["21.1","25.1"],"contributions":["21.2"],"welcome":["21.2"],"after":["21.2"],"i18n":["21.4","25.4"],"tw":["21.4","25.4"],"mounted":["22.1"],"identifier":["22.3"],"successfully":["22.4"],"initialized":["22.4"],"play":["22.4"],"image":["22.5","22.36"],"appears":["22.5","22.25","22.26"],"color":["22.6","24.5"],"live":["22.8"],"streaming":["22.8"],"hides":["22.8"],"mute":["22.9"],"by":["22.9","22.40"],"fill":["22.11"],"entire":["22.11"],"enable":["22.13","22.45"],"functionality":["22.14","22.17"],"rate":["22.15"],"bottom":["22.17","22.33"],"multiple":["22.21"],"players":["22.21"],"exist":["22.21"],"simultaneously":["22.21"],"ui":["22.22","26.22"],"enabled":["22.22"],"overlays":["22.22"],"webpage":["22.24"],"within":["22.25"],"5s":["22.25","26.25"],"progress":["22.26","22.34"],"bar":["22.26","22.32","22.33","22.34"],"if":["22.27"],"pre":["22.27"],"render":["22.27"],"use":["22.28"],"list":["22.33"],"description":["22.33","22.34","22.36","22.37"],"thumbnail":["22.36"],"ass":["22.37"],"safari":["22.38","26.38"],"supports":["22.39"],"both":["22.39"],"strings":["22.39"],"htmlelement":["22.39","26.39"],"conjunction":["22.40"],"customtype":["22.40"],"determined":["22.40"],"suffix":["22.40"],"delegates":["22.41"],"decoding":["22.41"],"third":["22.41","22.51"],"tolowercase":["22.42","26.42"],"language":["22.43"],"long":["22.46"],"press":["22.46"],"rotate":["22.48"],"during":["22.48"],"modify":["22.50"],"party":["22.51"],"htmlcanvaselement":["22.51","26.51"],"head":["23.3"],"useref":["23.5"],"let":["23.10"],"null":["23.10"],"参数":["23.10"],"对于古老的浏览器":["23.11"],"可以使用":["23.11"],"legacy":["23.11"],"文件":["23.11"],"从":["23.12"],"开始":["23.12"],"所以在":["23.13"],"开始新增了一个":["23.13"],"install":["24.2"],"就可以发送一个弹幕":["24.4"],"其余都是非必要参数":["24.4"],"弹幕文本":["24.4"],"弹幕上下边距":["24.5"],"支持像素数字和百分比":["24.5"],"opacity":["24.5"],"弹幕透明度":["24.5"],"ffffff":["24.5"],"默认弹幕颜色":["24.5"],"可以被单独弹幕项覆盖":["24.5"],"data":["24.6","24.7","24.10","24.15","24.17"],"libs":["24.6","24.7","24.9","24.10","24.11","24.15","24.17"],"uncompiled":["24.6","24.7","24.9","24.10","24.11","24.12","24.15","24.17"],"plugin":["24.6","24.7","24.9","24.10","24.11","24.12","24.13","24.14","24.15","24.17"],"danmuku":["24.6","24.9","24.11","24.12","24.13","24.14","24.15","24.17"],"保存到数据库":["24.6"],"savedanmu":["24.6"],"bilibili":["24.8"],"网站的弹幕格式一致":["24.8"],"theme":["24.16"],"设置成":["24.16"],"light":["24.16"],"否则会看不清":["24.16"],"无需手动导入":["25.1"],"group":["25.2"],"id":["25.2"],"容器":["26.1"],"目前只用于记忆播放":["26.3"],"autoplayback":["26.3"],"事件一样":["26.4"],"只会出现在播放器初始化且未播放的状态下":["26.5"],"播放器主题颜色":["26.6"],"目前用于":["26.6"],"进度条":["26.6"],"播放器的默认音量":["26.7"],"使用直播模式":["26.8"],"会隐藏进度条和播放时间":["26.8"],"是否默认静音":["26.9"],"播放器的尺寸默认会填充整个":["26.11"],"容器尺寸":["26.11"],"所以经常出现黑边":["26.11"],"该值能自动调整播放器尺寸以隐藏黑边":["26.11"],"当播放器滚动到浏览器视口以外时":["26.12"],"自动进入":["26.12"],"迷你播放":["26.12"],"模式":["26.12","26.28"],"是否循环播放":["26.13"],"是否显示视频翻转功能":["26.14"],"目前只出现在":["26.14"],"设置面板":["26.14","26.15","26.16","26.18","26.22","26.25"],"右键菜单":["26.14","26.15","26.16","26.22"],"是否显示视频播放速度功能":["26.15"],"会出现在":["26.15","26.16"],"是否显示视频长宽比功能":["26.16"],"是否在底部控制栏里显示":["26.17","26.18","26.20"],"视频截图":["26.17"],"功能":["26.17"],"的开关按钮":["26.18","26.20"],"画中画":["26.20"],"假如页面里同时存在多个播放器":["26.21"],"是否只能让一个播放器播放":["26.21"],"的背景虚化效果":["26.22"],"开启后":["26.22"],"是否在底部控制栏里显示播放器":["26.23","26.24"],"窗口全屏":["26.23"],"按钮":["26.23","26.24","26.49"],"网页全屏":["26.24"],"出现在":["26.25"],"迷你进度条":["26.26"],"只在播放器失去焦点后且正在播放时出现":["26.26"],"挂载模式":["26.27"],"假如你希望在播放器挂载前":["26.27"],"就提前渲染好播放器所需的":["26.27"],"时有用":["26.27"],"你可以通过":["26.27"],"在移动端是否使用":["26.28"],"类型":["26.33"],"描述":["26.33","26.34","26.37"],"默认画质":["26.33"],"画质名字":["26.33"],"高亮时间":["26.34"],"高亮文本":["26.34"],"预览图地址":["26.36"],"预览图数量":["26.36"],"column":["26.36"],"字幕名字":["26.37"],"字幕地址":["26.37"],"字幕类型":["26.37"],"可选":["26.37"],"preload":["26.38"],"中会自动调整为":["26.38"],"字符串和":["26.39"],"默认视频的格式就是视频地址的后缀":["26.40"],"如":["26.40"],"m3u8":["26.40"],"mkv":["26.40"],"但有时候视频地地址没有正确的后缀":["26.40"],"进行匹配":["26.41"],"把视频解码权交给第三方程序进行处理":["26.41"],"处理的函数能接收三个参数":["26.41"],"视频":["26.41"],"dom":["26.41"],"默认显示语言":["26.42"],"目前支持":["26.42"],"是否在移动端显示一个":["26.44"],"锁定按钮":["26.44"],"用于隐藏底部":["26.44"],"控制栏":["26.44"],"是否在移动端启用视频元素上的手势事件":["26.45"],"是否在移动端添加长按视频快进功能":["26.46"],"是否在移动端的网页全屏时":["26.48"],"根据视频尺寸和视口尺寸":["26.48"],"旋转播放器":["26.48"],"是否显示":["26.49"],"当前只有部分浏览器支持该功能":["26.49"],"函数可以返回一个第三方的":["26.51"],"或者":["26.51"],"htmlvideoelement":["26.51"],"例如可以代理一个已经存在的":["26.51"]},{"0":["9.6","13.26","15.9","15.38","15.40"],"1":["9.6","13.26","15.9","15.38","15.40","19.6","20.10"],"2":["13.28","22.1","24.5","26.1"],"3":["13.23","20.7","20.10","23.7"],"4":["22.7","22.10","22.19","22.31","22.32","22.39","22.43","25.1","26.10","26.19","26.31","26.32","26.39","26.47","26.50"],"5":["9.6","13.12","13.27","19.6","22.47","26.47"],"6":["2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40"],"7":["2.19","2.21","2.23","2.25","2.26","5.16","5.28","5.33","15.16","15.28","15.33","22.4","26.4","26.39"],"8":["2.17","2.20","5.1","5.14","5.21","5.31","5.32","5.34","5.35","5.36","5.44","12.20","15.44","20.3"],"9":["2.29","2.30","2.31","5.12","5.20","5.22","5.23","5.37","12.29","12.30","12.31","13.29","15.12","15.20","15.22","15.37","22.4","22.43","26.4"],"10":["2.6","2.18","2.24","7.5","9.6","12.2","13.11","17.5","24.4"],"11":["5.2","5.3","5.21","5.33","12.28","15.2","15.33","23.11"],"12":["22.31","26.31"],"15":["22.35","26.35"],"16":["22.32","26.32"],"17":["4.0","14.0"],"19":["15.45"],"25":["13.28"],"29":["15.45"],"35":["13.7"],"50":["13.10"],"200":["13.6","13.8","13.9","13.21"],"250":["9.3","13.5","19.3"],"300":["13.17"],"1000":["13.22","24.6"],"2000":["13.4"],"3000":["13.13"],"是指挂载在":["0.0","1.0","5.0"],"js":["0.1","0.3","0.5","0.6","0.7","0.8","0.9","0.10","0.13","0.15","0.16","1.1","2.1","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.19","2.20","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.3","3.5","3.6","3.7","3.8","3.9","3.10","3.17","3.28","3.29","3.30","5.1","5.2","5.3","5.8","5.9","5.10","5.11","5.12","5.13","5.14","5.16","5.17","5.18","5.19","5.20","5.21","5.22","5.23","5.25","5.27","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.41","5.44","5.46","5.47","9.1","9.5","10.1","10.5","10.6","10.14","12.2","12.6","12.17","12.18","12.20","12.22","12.24","12.28","12.29","12.30","12.31","15.1","15.2","15.3","15.12","15.20","15.22","15.28","15.33","15.37","15.44","15.45","15.46","19.6","21.0","22.1","22.4","22.7","22.31","22.32","22.35","22.39","22.43","24.7","24.9","24.10","24.15","24.16","24.17","25.0","26.1","26.7","26.10","26.19","26.31","26.34","26.35","26.39","26.47","26.50"],"var":["0.1","0.3","0.5","0.6","0.7","0.8","0.9","0.10","0.13","0.14","0.15","0.16","0.17","2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.28","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","5.2","5.3","5.12","5.14","5.16","5.20","5.22","5.23","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.44","5.46","9.5","10.1","10.5","10.6","10.14","12.22","12.28","12.29","12.30","12.31","15.12","15.16","15.20","15.22","15.33","15.44","15.45","22.1","22.7","22.10","22.19","22.31","22.32","22.43","22.47","24.6","24.9","24.10","24.11","24.12","25.1","25.2","26.1","26.4","26.10","26.19","26.31","26.32","26.39","26.43","26.47"],"art":["0.1","0.2","0.5","0.6","0.7","0.10","0.14","0.16","0.17","2.2","2.6","2.11","2.12","2.16","2.17","2.18","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.28","2.29","2.30","2.31","2.39","5.16","5.20","5.22","5.23","5.28","5.33","5.44","8.4","9.5","10.1","10.5","12.31","15.16","15.20","15.22","15.33","15.44","15.45","18.4","20.5","20.10","21.3","21.4","22.1","22.7","22.10","22.19","22.29","22.30","22.31","22.32","22.43","22.47","23.5","24.6","24.11","24.12","24.13","25.1","25.2","26.1","26.4","26.19","26.29","26.30","26.31","26.32","26.35","26.39","26.41","26.43","26.47"],"new":["0.1","0.2","0.6","0.7","0.14","0.16","0.17","2.2","2.6","2.17","2.18","2.20","2.22","2.24","2.28","2.29","2.30","2.31","5.12","5.23","5.44","5.45","8.2","8.4","8.5","10.1","15.12","15.16","15.20","15.22","15.33","15.45","18.2","18.4","18.5","19.3","20.5","21.4","22.1","22.10","22.19","22.29","22.30","22.31","22.32","22.43","22.47","23.5","24.6","24.11","24.12","24.13","25.4","26.1","26.4","26.29","26.30","26.31","26.32","26.43"],"artplayer":["0.2","0.7","0.14","0.16","0.17","2.2","2.22","2.24","2.28","2.29","2.30","2.31","3.5","3.6","3.7","3.29","3.30","5.12","5.23","5.45","8.2","8.3","8.4","8.5","9.7","10.1","10.2","15.12","15.16","15.20","15.22","15.45","18.2","18.3","18.4","18.5","19.3","19.7","20.1","20.8","20.9","20.10","21.0","21.3","22.10","22.19","22.29","22.30","22.32","22.43","22.47","23.1","23.8","24.2","24.3","24.8","24.16","25.0","25.3","26.4","26.27","26.29","26.30","26.32","26.43"],"container":["0.2","0.3","0.14","0.17","2.2","2.28","5.12","5.45","6.2","6.3","7.4","8.2","8.3","8.4","8.5","9.7","10.2","15.12","15.16","15.20","15.45","16.2","16.3","17.4","18.2","18.3","18.4","18.5","19.3","19.7","21.4","22.10","22.19","22.29","22.30","22.43","22.47","23.4","23.9","24.6","24.11","24.12","24.13","24.14","25.3","25.4","26.2","26.4","26.29","26.30","26.32","26.43"],"app":["0.2","0.4","0.14","5.45","6.2","6.3","6.4","6.5","7.3","7.4","8.2","8.3","8.4","8.5","9.7","10.2","15.12","15.16","15.45","16.2","16.3","16.4","16.5","17.3","17.4","18.2","18.3","18.4","18.5","19.3","19.7","20.3","20.4","21.4","22.1","22.19","22.29","22.30","22.47","23.4","24.11","24.12","24.13","24.14","25.4","26.2","26.4","26.29","26.30","26.43"],"url":["0.2","0.4","5.45","6.2","6.3","6.4","6.5","7.3","7.4","8.2","8.3","8.5","9.3","9.7","9.8","10.2","15.16","16.2","16.3","16.4","16.5","17.3","17.4","18.2","18.3","18.5","19.3","19.7","19.8","22.29","22.30","22.33","22.40","22.47","24.12","24.13","24.14","26.29","26.30","26.33","26.41","26.43"],"classname":["0.3","0.11","0.12","1.11","3.15","3.21","3.24","3.25","3.28","3.31","5.4","5.15","5.26","5.30","5.38","5.39","5.40","5.41","5.42","9.2","9.5","10.4","10.6","10.7","10.14","10.17","11.6","12.1","12.5","12.11","12.12","12.13","12.14","12.15","12.16","12.19","12.21","12.23","12.25","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","13.2","13.3","13.4","13.5","13.6","13.7","13.8","13.9","13.10","13.11","13.17","13.18","13.22","13.26","13.27","13.28","13.29","13.30","13.32","15.6","15.7","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.23","15.24","15.25","15.27","15.30","15.31","15.32","15.34","15.35","15.36","15.41","15.43","15.47","19.2","19.5","22.4","22.9","22.13","22.17","22.25","22.34","22.39","22.42","22.50","26.6","26.8","26.12","26.14","26.15","26.16","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.27","26.28","26.33","26.34","26.38","26.40","26.42","26.44","26.48","26.49","26.51"],"run":["0.3","0.8","0.9","0.11","0.12","1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.11","1.12","3.1","3.2","3.4","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.23","3.24","3.25","3.26","3.27","3.28","3.31","3.33","5.4","5.6","5.7","5.9","5.11","5.13","5.15","5.24","5.30","5.38","5.39","5.40","5.41","5.42","5.43","9.2","9.5","10.4","10.6","10.7","10.14","10.17","11.6","12.1","12.3","12.4","12.5","12.9","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.21","12.23","12.24","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.3","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.28","13.29","13.30","15.7","15.8","15.9","15.10","15.14","15.21","15.23","15.25","15.27","15.30","15.31","15.32","15.33","15.34","15.35","15.36","15.41","15.43","15.46","15.47","22.4","22.9","22.13","22.17","22.34","22.39","22.50","26.3","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.28","26.33","26.34","26.40","26.42","26.44","26.45","26.46","26.48","26.49","26.51"],"code":["0.3","0.8","0.9","0.10","0.11","0.12","1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.12","2.41","3.1","3.2","3.4","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.28","3.31","3.32","3.33","5.4","5.6","5.7","5.8","5.9","5.10","5.11","5.13","5.15","5.18","5.19","5.24","5.30","5.38","5.39","5.40","5.41","5.42","5.43","5.47","9.1","9.2","9.5","10.4","10.6","10.7","10.14","10.17","11.6","12.1","12.2","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.29","13.30","15.1","15.3","15.8","15.9","15.10","15.14","15.21","15.23","15.25","15.27","15.28","15.31","15.32","15.33","15.34","15.35","15.36","15.41","15.43","15.46","15.47","21.0","21.2","22.4","22.7","22.17","22.39","22.50","24.8","26.3","26.5","26.7","26.8","26.9","26.12","26.13","26.17","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.28","26.33","26.34","26.40","26.42","26.44","26.45","26.46","26.48","26.49"],"document":["0.3","22.1"],"assets":["0.4","5.45","6.2","6.3","6.4","6.5","7.3","7.4","7.5","9.3","9.7","9.8","10.2","16.2","16.3","16.4","16.5","17.3","17.4","17.5","19.3","19.7","19.8","22.30","22.47","24.12","24.13","24.14","26.2","26.30","26.43"],"sample":["0.4","5.45","6.2","6.3","6.4","6.5","7.3","7.4","7.5","9.3","9.8","10.2","16.2","16.3","16.4","16.5","17.3","17.4","17.5","19.3","19.8","22.2","22.30","24.13","24.14","26.2","26.30","26.43"],"video":["0.4","3.34","5.45","6.2","6.3","6.4","6.5","7.3","7.5","8.2","8.3","8.5","9.3","9.8","10.2","13.1","15.6","15.18","15.19","16.2","16.3","16.4","16.5","17.3","17.5","18.2","18.3","18.5","19.3","19.8","22.38","22.45","22.46","24.13","24.14","26.2","26.51"],"mp4":["0.4","6.3","6.4","6.5","7.3","7.5","8.2","8.3","8.5","9.3","9.4","9.8","9.9","10.2","16.3","16.4","16.5","17.3","17.5","18.2","18.3","18.5","19.3","19.4","19.8","19.9","22.2","24.14","26.2"],"test":["0.4"],"foo":["0.4"],"bar":["0.4","13.16","13.33","22.6","22.8","22.17","22.22"],"const":["0.4","9.6","19.6","20.9","23.9"],"获取整体的字幕列表":["0.11"],"div":["0.11","0.12","3.31","5.4","5.26","5.38","5.40","5.42","9.2","9.5","10.4","10.6","10.7","10.14","10.17","11.5","11.6","11.9","12.1","12.5","12.15","12.21","12.23","12.25","12.32","12.35","12.36","12.37","13.2","13.3","13.4","13.5","13.6","13.7","13.8","13.9","13.10","13.11","13.17","13.18","13.19","13.20","13.22","13.26","13.27","13.28","13.29","13.30","13.32","15.6","15.7","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.23","15.24","15.25","15.27","15.30","15.31","15.32","15.34","15.35","15.36","15.41","15.43","19.2","19.5","20.3","22.4","22.9","22.13","22.17","22.25","22.28","22.34","22.42","22.50","26.6","26.12","26.14","26.15","26.16","26.18","26.20","26.23","26.24","26.25","26.27","26.28","26.33","26.34","26.38","26.40","26.41","26.42","26.44","26.48","26.49","26.51"],"详见事件文档":["0.12"],"console":["1.1","2.0","12.0","24.18"],"info":["2.0","12.0","24.18"],"只监听一次事件":["2.0"],"但估计没有足够的数据来支撑播放到结束":["2.42"],"渲染完成":["2.44"],"属性的值改变时触发":["2.45"],"当这个":["2.46"],"因为":["2.47"],"或者资源类型不是受支持的媒体格式":["2.48"],"中的首帧已经完成加载":["2.49"],"播放准备开始":["2.53"],"seek":["2.56","2.57","12.56","12.57","15.15"],"user":["2.58","23.13"],"属性指定的时间发生变化":["2.60"],"播放已停止":["2.62"],"也是指挂载在":["3.0"],"构造函数":["3.0"],"减少视频资源占用":["3.34"],"如果你希望保留":["3.34"],"元素的状态":["3.34"],"仅移除界面":["3.34"],"可将其设置为":["3.34"],"when":["5.5","11.1","12.45","22.26"],"destroy":["5.5"],"也会在调用":["5.5"],"时自动执行类似逻辑":["5.5"],"画中画":["5.26"],"fullscreen":["5.26","15.21","22.24"],"窗口全屏":["5.26"],"fullscreenweb":["5.26"],"网页全屏":["5.26"],"对应":["5.29"],"domrect":["5.29"],"的同名字段":["5.29"],"组件唯一名称":["6.1","8.1"],"用于标记类名":["6.1","8.1"],"index":["6.1","7.5","8.1","16.1","17.5","18.1","24.7","24.10","24.15","24.16","24.17"],"number":["6.1","7.1","8.1","10.12","16.1","17.1","18.1","19.2"],"contextmenu":["6.4","6.5","16.4","16.5"],"name":["6.5","7.5","9.9","16.5","17.5","19.9","22.33"],"组件索引":["7.1"],"用于显示的优先级":["7.1"],"html":["7.1","7.2","9.4","9.9","15.4","17.1","17.2","19.4","19.9","22.27","22.33"],"element":["7.1","13.31","17.1","22.45"],"position":["7.2","7.5","17.2","17.5"],"left":["7.2","13.25","17.2"],"tooltip":["7.2","9.2","9.9","17.2","19.2","19.5","19.6","19.9"],"style":["7.2","9.3","17.2","22.37","26.37"],"color":["7.2","15.36","17.2"],"red":["7.2","17.2"],"click":["7.2","17.2"],"function":["7.2","17.2","19.5","22.35","22.41","23.10","26.35"],"args":["7.2","17.2"],"controls":["7.3","7.5","17.3","17.5"],"add":["7.3","17.3"],"button1":["7.5","17.5"],"png":["8.4","18.4","22.29","26.29"],"列表宽度":["9.2"],"提示文本":["9.2","9.5"],"setting":["9.3","9.4","9.8","9.9","19.3","19.4","19.8","19.9"],"true":["9.3","9.4","9.8","9.9","13.18","13.19","13.32","13.34","19.3","19.4","19.8","19.9","24.6"],"settings":["9.3","9.4","9.9","19.3","19.4","19.9","22.14","22.15","22.16","22.18","22.22","22.25"],"subtitle":["9.3","19.3"],"01":["9.3","9.4","19.3"],"default":["9.3","13.1","13.4","13.10","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.27"],"span":["9.3"],"multi":["9.4","19.4"],"level":["9.4","13.0","19.4"],"selector":["9.4","19.4"],"value":["9.6"],"min":["9.6"],"flip":["9.8","19.1","19.8"],"slider":["9.9","19.9"],"5x":["9.9","19.9"],"icon":["9.9","19.9"],"refer":["10.0","15.0"],"to":["10.0","11.0","11.1","12.53","15.0","15.4","15.15","15.39","20.11"],"proxy":["10.3"],"method":["10.3"],"used":["10.3","13.33","15.38","15.39","15.40","22.3","22.6"],"hover":["10.3"],"delete":["10.4"],"clear":["10.4"],"all":["10.4","20.12"],"object":["10.6","26.11"],"update":["10.8","10.9"],"show":["10.8","10.9","10.10","10.16"],"property":["10.8","10.9","10.10","10.16"],"switch":["10.11"],"version":["10.12","20.12"],"resolution":["10.12"],"duration":["10.12"],"etc":["10.12"],"control":["10.12"],"visibility":["10.12"],"toggle":["10.13","10.15","22.20"],"set":["10.16"],"whether":["10.16","22.21"],"the":["11.0","12.45","13.1","15.0","15.6","15.29","22.8","22.12","22.25","22.26","22.27","22.44","22.45"],"top":["11.0"],"you":["11.1"],"need":["11.1"],"manage":["11.1"],"multiple":["11.1"],"player":["11.2","11.3","11.4","11.7","11.11","11.12","15.41","15.42","20.13","22.5","22.21","22.26","22.27"],"for":["11.5","11.9","13.33","16.1","18.1","22.6","22.18","22.38","22.51"],"videos":["11.5"],"options":["11.7","11.9","22.37"],"event":["11.8","12.46","19.5","22.4"],"type":["11.10"],"detection":["11.10"],"by":["11.11","20.13"],"on":["12.0","13.0","13.3","22.28","22.44","22.46","22.48","24.18"],"canplay":["12.0"],"only":["12.0","21.0","22.3","22.21","22.49"],"once":["12.0"],"time":["12.1","24.4"],"mode":["12.25","13.31","15.24","22.48"],"media":["12.42","12.48","15.5"],"but":["12.42","15.11","15.15"],"estimates":["12.42"],"there":["12.42"],"it":["12.43","15.15","22.51"],"can":["12.43","13.34"],"play":["12.43"],"rendering":["12.44"],"this":["12.46","13.34","22.11"],"is":["12.46","12.58","13.4","13.6","13.7","13.8","13.9","13.10","13.11","13.12","13.13","13.14","13.16","13.17","13.18","13.19","13.20","13.21","13.22","13.23","13.25","13.26","13.27","15.15","15.42","20.6","21.1","22.2","22.5","22.21"],"sent":["12.46"],"stopped":["12.47","12.62"],"because":["12.47"],"while":["12.48","12.54"],"fetching":["12.48"],"first":["12.49"],"frame":["12.49","15.18","15.19"],"has":["12.50","12.51","12.52","12.62"],"start":["12.53"],"after":["12.53","14.0","15.4"],"triggered":["12.54"],"playback":["12.55","15.13","15.23","22.3","22.8"],"trying":["12.58"],"data":["12.59","24.8","24.16"],"indicated":["12.60"],"volume":["12.61","22.22"],"mounted":["13.0"],"in":["13.1","13.12","13.13","13.15","13.34","15.5","15.7","15.26","22.2","22.11","22.14","22.15","22.16","22.18","22.23","22.24","22.25","22.34"],"events":["13.1"],"of":["13.1","15.29","22.12","22.36","22.40"],"text":["13.2","19.2","19.5","19.6","22.34"],"pixels":["13.6","13.7"],"feature":["13.11","22.46"],"seconds":["13.12","15.6","15.7","22.34"],"milliseconds":["13.13","13.15"],"a":["13.14","22.22"],"connection":["13.14"],"error":["13.14","13.15"],"occurs":["13.14","13.15"],"bottom":["13.16","22.20","22.23","22.24"],"pause":["13.19","13.20"],"false":["13.20"],"automatic":["13.21"],"screen":["13.21"],"rotation":["13.21"],"during":["13.23","13.24","13.31"],"long":["13.23","13.24"],"press":["13.23","13.24"],"swiping":["13.25"],"right":["13.25"],"vertical":["13.30","15.30"],"defaults":["13.31"],"smooth":["13.33"],"progress":["13.33","15.13","22.6","22.8"],"enabled":["13.34"],"reduce":["13.34"],"resource":["13.34"],"usage":["13.34"],"single":["13.34","15.5"],"page":["13.34","15.5","15.21","22.21"],"applications":["13.34","15.5"],"also":["14.0","20.12"],"remove":["15.4"],"s":["15.4","15.24","20.13","22.27"],"resources":["15.5"],"or":["15.5","22.51"],"reinitialize":["15.5"],"tag":["15.5"],"performs":["15.11"],"some":["15.11","22.49"],"optimization":["15.11"],"operations":["15.11"],"retains":["15.13"],"previous":["15.13"],"similar":["15.15","22.4"],"optional":["15.17"],"parameter":["15.17","20.10"],"specifies":["15.17"],"filename":["15.17"],"returns":["15.18","15.19"],"promise":["15.18","15.19","24.6"],"state":["15.21"],"visible":["15.23","24.18"],"before":["15.23","22.27"],"starts":["15.23"],"normal":["15.26","15.30"],"mini":["15.26"],"window":["15.26"],"pip":["15.26"],"picture":["15.26"],"automatically":["15.27","22.11"],"correspond":["15.29"],"fields":["15.29"],"same":["15.29"],"values":["15.30"],"horizontal":["15.30"],"rate":["15.31"],"ratio":["15.32"],"often":["15.38","15.40","22.11"],"with":["15.38","15.40"],"typically":["15.39"],"alongside":["15.39"],"loaded":["15.39"],"display":["15.39","17.1"],"detailed":["15.39"],"removed":["15.41"],"destroyed":["15.41"],"scoped":["15.42"],"current":["15.42","20.5","23.5"],"instance":["15.42"],"css":["16.1","18.1","26.11"],"class":["16.1","18.1","20.3"],"priority":["17.1"],"items":["19.1"],"playbackrate":["19.1"],"aspectratio":["19.1"],"width":["19.2","22.36","26.36"],"list":["19.2"],"onswitch":["19.5"],"completion":["19.6"],"onchange":["19.6"],"change":["19.6"],"install":["20.1","23.1"],"body":["20.3"],"if":["20.5","23.5"],"typeof":["20.5","23.5"],"ts":["20.6","22.40"],"from":["20.8","20.9","20.13","21.2","23.8","23.11"],"let":["20.10"],"null":["20.10"],"use":["20.11"],"file":["20.11"],"which":["20.11"],"compatibility":["20.11"],"down":["20.11"],"ie":["20.11","23.11"],"plugins":["20.12","24.14","24.18"],"provide":["20.12"],"an":["20.12"],"mjs":["20.12","23.12"],"ui":["20.13"],"changing":["20.13"],"therefore":["20.13"],"starting":["20.13"],"core":["21.0"],"will":["21.0","22.22"],"include":["21.0"],"no":["21.1"],"manual":["21.1"],"import":["21.1","21.2","23.11"],"dist":["21.2","23.12"],"group":["21.2"],"id":["21.2"],"sometimes":["22.2","22.40"],"not":["22.2","22.5"],"known":["22.2"],"immediately":["22.2"],"such":["22.2"],"cases":["22.2"],"resumption":["22.3"],"autoplayback":["22.3"],"initialized":["22.5"],"and":["22.5","22.6","22.8","22.22","22.26"],"resulting":["22.11"],"black":["22.11"],"bars":["22.11"],"option":["22.11"],"scrolls":["22.12"],"out":["22.12"],"looping":["22.13"],"currently":["22.14","22.49"],"appears":["22.14","22.15","22.16"],"panel":["22.14","22.15","22.16","22.18","22.22","22.25"],"functionality":["22.15","22.16"],"button":["22.20","22.23","22.24"],"one":["22.21"],"context":["22.22"],"menu":["22.22"],"apply":["22.22"],"loses":["22.26"],"focus":["22.26"],"required":["22.27"],"mounting":["22.27"],"mobile":["22.28","22.44","22.45","22.48"],"devices":["22.28","22.44"],"layer":["22.29","26.29"],"boolean":["22.33"],"string":["22.33","22.34"],"myplugin":["22.35","26.35"],"column":["22.36"],"columns":["22.36"],"encoding":["22.37","26.37"],"better":["22.38"],"loading":["22.38"],"experience":["22.38"],"more":["22.38"],"attributes":["22.38"],"these":["22.38"],"e":["22.40"],"g":["22.40"],"m3u8":["22.40"],"mkv":["22.40"],"however":["22.40"],"lacks":["22.40"],"party":["22.41"],"programs":["22.41"],"handler":["22.41"],"receives":["22.41"],"three":["22.41"],"parameters":["22.41"],"supported":["22.42"],"en":["22.42"],"zh":["22.42","25.2"],"cn":["22.42","26.42"],"hide":["22.44"],"fast":["22.46"],"forward":["22.46"],"web":["22.48"],"based":["22.48"],"browsers":["22.49"],"support":["22.49"],"htmlvideoelement":["22.51"],"example":["22.51"],"demo":["23.3"],"meta":["23.3"],"charset":["23.3"],"ref":["23.4"],"时会自动导入的":["23.6"],"param":["23.10"],"getinstance":["23.10"],"可以兼容到":["23.11"],"和所有插件还会提供一个":["23.12"],"版本的":["23.12"],"如":["23.12"],"globalthis":["23.13"],"custom":["23.13"],"agent":["23.13"],"全局变量":["23.13"],"plugin":["24.2","24.3","24.8","24.16"],"danmuku":["24.2","24.7","24.10","24.16"],"npm":["24.3"],"弹幕时间":["24.4"],"默认为当前播放器时间":["24.4"],"默认弹幕模式":["24.5"],"滚动":["24.5"],"顶部":["24.5"],"底部":["24.5"],"modes":["24.5"],"弹幕可见的模式":["24.5"],"fontsize":["24.5"],"danmu":["24.6","24.18"],"return":["24.6"],"resolve":["24.6"],"settimeout":["24.6"],"libs":["24.8","24.16"],"uncompiled":["24.8","24.16"],"artplayerplugindanmuku":["24.14","24.18"],"xml":["24.18"],"显示弹幕":["24.18"],"版本开始":["25.0"],"核心代码除了包含":["25.0"],"zhtw":["25.2"],"tw":["25.2"],"高亮元素":["26.6"],"上":["26.6"],"类似":["26.11"],"的":["26.11"],"fit":["26.11"],"里":["26.14","26.15","26.16","26.25"],"音量条等浮层会应用":["26.22"],"filter":["26.22"],"毛玻璃效果":["26.22"],"看起来更通透":["26.22"],"访问到播放器所需的":["26.27"],"画质地址":["26.33"],"预览图列数":["26.36"],"预览图宽度":["26.36"],"height":["26.36"],"预览图高度":["26.36"],"scale":["26.36"],"字幕样式":["26.37"],"字幕编码":["26.37"],"默认":["26.37"],"utf":["26.37"],"auto":["26.38"],"以提升加载体验":["26.38"],"更多视频属性":["26.38"],"这些属性将直接写入视频元素里":["26.38"],"所以需要特别指明":["26.40"],"元素":["26.41"],"视频地址":["26.41"],"当前实例":["26.41"],"dom元素":["26.51"]},{"0":["13.25","19.6","24.4"],"1":["3.29","9.3","13.29","19.3"],"2":["3.29","9.6","19.6","20.13","26.3"],"3":["9.6"],"4":["9.1","20.13","21.1","22.17","22.34","22.50","23.10","26.5","26.7","26.8","26.9","26.13","26.17","26.21","26.25","26.26","26.33","26.34","26.40","26.42","26.45","26.46"],"5":["13.14","13.25","20.13"],"6":["2.41","5.42","5.43","12.1","12.3","12.4","12.5","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","23.10"],"7":["5.4","5.6","5.7","5.10","5.17","5.18","5.19","5.24","5.38","5.39","5.40","12.19","12.21","12.23","12.25","12.26","15.10","22.39"],"8":["5.9","5.15","5.25","5.27","5.30","5.41","12.17","15.1","15.9","15.14","15.21","15.25","15.30","15.31","15.32","15.34","15.35","15.36","15.41","22.37","23.3","26.37"],"9":["5.11","5.13","15.11","15.13","15.23"],"10":["5.8","5.41","7.3","7.4","12.6","12.18","12.24","15.8","15.12","15.41","17.3","17.4","19.6"],"11":["15.3","15.21","20.11"],"14":["26.33"],"22":["9.9","19.9"],"25":["22.34","26.34"],"40":["3.7"],"100":["3.10"],"150":["9.4","19.4"],"300":["3.5","3.6"],"500":["3.8","3.9","3.17"],"1000":["13.15","13.24"],"3000":["13.16"],"实例":["0.0","5.0"],"artplayer":["0.1","0.3","0.5","0.6","0.8","0.9","0.10","0.13","0.15","1.1","2.1","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","3.1","3.3","3.4","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.15","3.16","3.17","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.28","3.31","3.32","3.33","5.1","5.2","5.3","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.16","5.18","5.19","5.20","5.21","5.22","5.25","5.28","5.30","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.41","5.44","5.46","5.47","9.1","9.2","9.5","10.3","10.4","10.5","10.6","10.7","10.14","10.17","12.2","12.6","12.17","12.18","12.20","12.22","12.24","12.28","12.29","12.30","12.31","13.5","13.6","13.7","13.8","13.9","13.17","13.28","13.29","13.30","15.2","15.3","15.5","15.28","15.33","15.34","15.37","15.41","15.44","15.46","15.47","19.2","19.5","20.2","22.4","22.7","22.17","22.27","22.31","22.39","23.2","23.13","25.1","26.10","26.19","26.31","26.34","26.39","26.40","26.47","26.50"],"container":["0.1","0.5","0.6","0.7","0.8","0.9","0.10","0.13","0.15","0.16","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","5.2","5.3","5.9","5.11","5.13","5.14","5.16","5.20","5.21","5.22","5.23","5.28","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.41","5.44","5.46","5.47","9.2","9.5","10.1","10.3","10.4","10.5","10.6","10.7","10.14","10.17","12.2","12.20","12.22","12.28","12.29","12.30","12.31","15.2","15.22","15.28","15.41","15.44","15.46","19.5","20.9","21.3","22.4","22.7","22.17","22.31","22.32","22.39","24.9","24.10","24.15","24.17","25.1","25.2","26.10","26.19","26.31","26.34","26.39","26.47"],"app":["0.1","0.3","0.5","0.6","0.7","0.8","0.9","0.10","0.16","0.17","2.2","2.6","2.17","2.18","2.20","2.22","2.24","2.28","2.29","2.30","2.31","5.12","5.16","5.20","5.22","5.23","5.28","5.33","5.34","5.44","9.5","10.1","10.4","10.5","10.6","10.14","12.28","12.31","15.20","15.22","15.28","15.33","15.41","15.44","19.5","20.5","20.9","21.3","22.4","22.7","22.10","22.31","22.32","22.43","23.9","24.6","24.10","25.2","25.3","26.1","26.19","26.31","26.32","26.39","26.47"],"assets":["0.2","0.6","0.7","0.10","0.14","0.16","0.17","2.2","2.22","2.28","2.31","5.12","5.23","5.44","9.5","10.1","10.4","10.6","10.14","15.12","15.16","15.20","15.22","15.33","15.45","21.4","22.1","22.4","22.7","22.10","22.19","22.31","22.32","22.43","23.9","24.6","24.10","24.11","25.2","25.3","25.4","26.1","26.4","26.31","26.32"],"sample":["0.2","0.6","0.14","0.16","0.17","2.2","2.28","5.12","5.23","9.5","9.7","10.1","10.4","10.6","10.14","15.12","15.16","15.20","15.22","15.33","15.45","19.7","21.4","22.1","22.4","22.10","22.19","22.31","22.32","22.43","22.47","23.9","24.6","24.11","24.12","25.2","25.4","26.4","26.32"],"video":["0.2","0.14","0.16","0.17","5.12","7.4","8.4","9.5","9.7","10.4","10.6","10.14","15.20","15.22","15.45","17.4","18.4","19.7","21.4","22.1","22.10","22.19","22.29","22.30","22.32","22.43","22.47","22.48","22.51","24.6","24.11","24.12","25.2","25.4","26.4","26.29","26.30","26.32","26.43"],"mp4":["0.2","0.14","0.17","5.12","5.45","6.2","7.4","8.4","9.5","9.7","10.4","10.6","10.14","15.12","15.16","15.20","15.22","15.33","15.45","16.2","17.4","18.4","19.7","21.4","22.1","22.4","22.10","22.19","22.29","22.30","22.32","22.43","22.47","24.6","24.11","24.12","24.13","25.2","25.4","26.4","26.29","26.30","26.43"],"console":["0.2","0.4","1.6","7.2","10.2","11.6","15.16","17.2","22.35","26.35"],"info":["0.2","0.4","1.1","7.2","10.2","11.6","17.2","22.35","26.35"],"queryselector":["0.3","5.41","10.3","15.41","22.1","24.16","26.1"],"art":["0.3","0.8","0.9","0.11","0.13","0.15","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.13","2.14","2.15","2.19","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.40","2.41","3.5","3.6","3.7","3.30","5.1","5.2","5.3","5.6","5.7","5.8","5.9","5.10","5.14","5.15","5.17","5.18","5.19","5.21","5.24","5.25","5.27","5.30","5.31","5.32","5.34","5.35","5.36","5.37","5.39","5.46","5.47","9.1","9.2","10.4","10.6","10.7","10.12","10.14","10.17","12.2","12.3","12.4","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.26","12.27","12.28","12.29","12.30","12.39","12.40","12.41","15.1","15.2","15.3","15.8","15.9","15.10","15.14","15.23","15.28","15.31","15.32","15.34","15.35","15.36","15.37","15.41","15.46","15.47","19.2","19.5","21.2","22.4","22.17","22.35","22.39","22.50","24.7","24.9","24.10","24.15","24.17","26.5","26.7","26.10","26.17","26.33","26.34","26.40","26.50"],"new":["0.3","0.5","0.8","0.9","0.10","0.11","0.13","0.15","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.19","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.5","3.30","5.1","5.2","5.3","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.16","5.17","5.18","5.19","5.20","5.21","5.22","5.25","5.27","5.28","5.30","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.46","5.47","9.1","9.2","9.5","10.4","10.5","10.6","10.7","10.14","10.17","12.2","12.6","12.7","12.8","12.10","12.17","12.18","12.20","12.22","12.24","12.26","12.28","12.29","12.30","12.31","15.1","15.2","15.3","15.23","15.28","15.32","15.34","15.35","15.37","15.44","15.46","15.47","19.2","19.5","20.13","22.4","22.7","22.17","22.39","24.9","24.10","24.15","24.17","25.1","25.2","26.7","26.10","26.19","26.34","26.39","26.40","26.47","26.50"],"url":["0.6","0.7","0.9","0.10","0.14","0.16","0.17","2.2","2.18","2.22","2.24","2.28","2.29","2.30","2.31","5.20","5.23","5.33","5.44","8.4","9.5","10.1","10.4","10.5","10.6","10.14","15.20","15.22","15.33","15.44","15.45","18.4","21.3","21.4","22.1","22.4","22.7","22.10","22.19","22.31","22.32","22.41","22.43","23.9","24.6","24.10","24.11","25.2","25.3","25.4","26.1","26.4","26.31","26.32","26.39","26.47"],"js":["0.11","0.12","1.6","3.1","3.4","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.31","3.32","3.33","5.4","5.6","5.7","5.15","5.24","5.26","5.30","5.38","5.39","5.40","5.42","5.43","9.2","10.3","10.4","10.7","10.17","11.6","12.1","12.3","12.4","12.5","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.19","12.21","12.23","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.22","13.28","13.29","13.30","15.7","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.23","15.25","15.27","15.30","15.31","15.32","15.34","15.35","15.36","15.41","15.43","15.47","19.2","19.5","21.1","22.17","22.25","22.34","22.42","22.50","24.8","26.3","26.5","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.27","26.28","26.33","26.40","26.42","26.44","26.45","26.46","26.48","26.49"],"var":["0.11","0.12","1.1","2.41","3.5","3.6","3.7","3.17","3.30","5.1","5.6","5.7","5.8","5.9","5.10","5.11","5.13","5.15","5.17","5.18","5.19","5.21","5.24","5.25","5.27","5.30","5.38","5.39","5.40","5.41","5.43","5.47","9.1","9.2","10.3","10.4","10.7","10.17","12.2","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.23","12.24","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","15.1","15.2","15.3","15.8","15.9","15.10","15.14","15.23","15.25","15.28","15.31","15.32","15.34","15.35","15.36","15.37","15.41","15.46","15.47","19.2","19.5","21.1","21.2","22.4","22.17","22.34","22.39","22.50","24.7","24.15","24.16","24.17","26.3","26.5","26.7","26.17","26.25","26.33","26.34","26.40","26.50"],"function":["0.14","6.5","16.5","17.1","20.10","26.37"],"构造函数":["1.0"],"code":["1.11","3.34","5.5","5.26","5.29","9.6","10.3","11.1","13.2","13.3","13.4","13.6","13.7","13.8","13.9","13.10","13.11","13.12","13.13","13.14","13.15","13.16","13.17","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.28","13.31","13.32","13.33","15.6","15.7","15.11","15.13","15.17","15.18","15.19","15.24","15.30","15.38","15.39","15.40","19.1","19.2","19.5","20.11","22.3","22.5","22.8","22.9","22.13","22.25","22.28","22.33","22.34","22.40","22.42","22.45","23.11","26.6","26.11","26.14","26.15","26.16","26.22","26.27","26.36","26.38","26.41","26.51"],"once":["2.0"],"不必停下来进一步缓冲内容":["2.42"],"media":["2.46","2.47","12.43"],"已经加载完成":["2.46"],"操作完成":["2.56"],"操作开始":["2.57"],"agent":["2.58"],"的":["3.0"],"false":["3.3","3.34","20.5","23.5","24.5","24.14"],"div":["3.34","5.5","5.29","9.6","10.3","10.13","10.15","11.1","11.2","11.3","11.4","11.7","11.8","11.10","11.11","11.12","13.1","13.12","13.13","13.14","13.15","13.16","13.21","13.23","13.24","13.25","13.31","13.33","15.4","15.15","15.17","15.26","15.38","15.39","15.40","15.42","19.1","20.5","22.3","22.5","22.6","22.8","22.12","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.33","22.40","22.44","22.45","22.46","22.49","22.51","23.3","23.5","26.11","26.22","26.36"],"classname":["3.34","5.5","5.29","9.6","10.3","11.1","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","13.1","13.12","13.13","13.14","13.15","13.16","13.19","13.20","13.21","13.23","13.24","13.25","13.31","13.33","15.4","15.15","15.17","15.26","15.38","15.39","15.40","19.1","22.3","22.5","22.6","22.8","22.12","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.28","22.33","22.40","22.44","22.45","22.46","22.49","26.11","26.22","26.36","26.41"],"run":["3.34","5.5","5.26","5.29","9.6","10.3","11.1","11.2","11.3","11.4","11.5","11.7","11.9","11.10","11.12","13.1","13.2","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","15.6","15.11","15.13","15.15","15.17","15.18","15.19","15.24","15.38","15.39","15.40","19.1","19.2","19.5","22.3","22.5","22.6","22.8","22.12","22.14","22.15","22.16","22.20","22.23","22.24","22.25","22.26","22.28","22.33","22.40","22.42","22.45","22.46","22.49","26.11","26.22","26.27","26.36","26.38","26.41"],"add":["4.0","6.3","8.3","14.0","16.3","18.3","24.2"],"例如我想写一个在视频暂停后":["4.0"],"显示一个图片广告的插件":["4.0"],"on":["5.12","15.12","15.16","15.33"],"播放器当前可见宽高":["5.29"],"document":["5.41","10.3","15.41","24.16","26.1"],"default":["5.45","7.5","15.45","17.5","19.3","23.10"],"true":["5.45","7.5","9.7","13.31","15.4","15.45","17.5","19.7","22.4","22.10","22.30","22.47","24.5","26.4","26.30","26.37"],"html":["5.45","6.1","6.2","6.3","6.4","6.5","7.3","7.5","8.1","8.2","8.3","8.5","9.8","15.45","16.1","16.2","16.3","16.4","16.5","17.3","17.5","18.1","18.2","18.3","18.5","19.8","22.29","22.30","22.37","23.13","24.14","26.29","26.30","26.37"],"sd":["5.45"],"480p":["5.45"],"组件索引":["6.1","8.1"],"用于显示的优先级":["6.1","8.1"],"contextmenu":["6.2","6.3","16.2","16.3"],"name":["6.2","6.3","6.4","7.3","7.4","8.2","8.3","8.4","8.5","9.8","15.29","16.2","16.3","16.4","17.3","17.4","18.2","18.3","18.4","18.5","19.8","22.29","22.35","26.29","26.35"],"your":["6.2","6.3","6.4","6.5","7.3","16.2","16.3","16.4","16.5","17.3","22.47","26.43"],"menu":["6.2","6.3","6.4","6.5","16.2","16.3","16.4","16.5","22.14","22.15","22.16"],"click":["6.4","6.5","16.4","16.5","17.1","24.14"],"args":["6.5","16.5"],"组件的":["7.1"],"dom":["7.1","17.1","22.41","22.51"],"元素":["7.1"],"style":["7.1","8.2","8.3","8.5","17.1","18.2","18.3","18.5","19.3","20.4","22.29"],"object":["7.1","17.1"],"mounted":["7.2","17.2"],"subtitle":["7.2","7.5","17.2","17.5"],"button1":["7.3","7.4","17.3","17.4"],"index":["7.3","7.4","17.3","17.4","24.8"],"position":["7.3","15.20","15.22","17.3","24.13","24.14"],"left":["7.3","17.3"],"controls":["7.4","15.20","15.22","17.4","24.13","24.14"],"right":["7.5","17.5","24.14"],"selector":["7.5","17.5","22.30","26.30"],"01":["7.5","17.5","19.4"],"layers":["8.2","8.3","8.4","8.5","18.2","18.3","18.4","18.5"],"potser":["8.2","8.3","8.5","18.2","18.3","18.5","22.29","26.29"],"width":["8.2","8.3","8.5","9.4","9.9","18.2","18.3","18.5","19.4","19.9","22.29"],"100px":["8.2","8.3","8.5","18.2","18.3","18.5"],"src":["8.2","8.5","9.9","18.2","18.5","19.9"],"color":["9.3","19.3"],"red":["9.3","19.3"],"srt":["9.3","19.3"],"id":["9.3","19.3","22.47"],"yellow":["9.3"],"02":["9.3"],"setting":["9.5","9.7","19.7","22.30","26.30"],"max":["9.6","19.6"],"step":["9.6"],"settings":["9.8","19.8"],"slider":["9.8","19.8"],"tooltip":["9.8","19.8"],"5x":["9.8","19.8"],"icon":["9.8","19.8"],"img":["9.9","19.9"],"height":["9.9","19.9","22.36"],"state":["9.9","19.9"],"svg":["9.9","19.9"],"secondary":["10.0"],"custom":["10.3"],"test":["10.4"],"foo":["10.4"],"bar":["10.4","22.18","22.20","22.23","22.24","22.44"],"set":["10.8","10.9","10.10","22.2"],"whether":["10.8","10.9","10.10","22.37"],"all":["10.8","10.9","10.10","10.16"],"are":["10.8","13.34","21.0"],"visible":["10.8"],"toggle":["10.8","10.9","10.10","10.16"],"display":["10.9","10.10","10.16","16.1","18.1"],"options":["10.11"],"texttrack":["10.11"],"gets":["10.11"],"text":["10.11"],"track":["10.11"],"activecues":["10.11"],"list":["10.11"],"via":["10.12","22.27"],"show":["10.12"],"triggered":["10.12"],"event":["10.12","15.38","15.40"],"is":["10.12","12.44","13.1","13.15","13.24","22.26"],"named":["10.12"],"of":["10.13","10.15","12.49"],"level":["11.0","15.0"],"simultaneously":["11.1"],"isn":["12.42"],"t":["12.42"],"enough":["12.42"],"value":["12.45","19.6"],"when":["12.46","15.5"],"the":["12.47","12.54","20.3","22.38"],"data":["12.48","23.10"],"or":["12.48","13.34"],"been":["12.50","12.51","12.53"],"begun":["12.52"],"having":["12.53"],"rate":["12.55"],"operation":["12.56","12.57"],"to":["12.58","22.11","22.21","22.37"],"fetch":["12.58"],"loading":["12.59"],"by":["12.60"],"has":["12.61"],"due":["12.62"],"constructor":["13.0"],"property":["13.0","20.10"],"names":["13.0","15.42"],"off":["13.1"],"effects":["13.33"],"scenarios":["13.34"],"where":["13.34"],"players":["13.34"],"frequently":["13.34"],"created":["13.34"],"destroyed":["13.34"],"if":["13.34"],"you":["13.34","22.1","22.2"],"wish":["13.34"],"preserve":["13.34"],"for":["14.0"],"example":["14.0"],"let":["14.0"],"say":["14.0"],"first":["15.0"],"destruction":["15.4"],"defaults":["15.4"],"note":["15.5","20.3"],"global":["15.5","20.13"],"configuration":["15.5"],"remove":["15.5"],"destroy":["15.5","20.5","23.5"],"will":["15.5","22.38"],"also":["15.5"],"ready":["15.12","15.16"],"seek":["15.12"],"settimeout":["15.12"],"does":["15.15"],"not":["15.15"],"trigger":["15.15"],"additional":["15.15"],"events":["15.15"],"fullscreen":["15.26"],"fullscreenweb":["15.26"],"webpage":["15.26"],"in":["15.29"],"domrect":["15.29"],"player":["15.29","20.3"],"s":["15.29","17.1"],"current":["15.29"],"timeupdate":["15.38","15.40"],"buffering":["15.39"],"progress":["15.39"],"preventing":["15.42"],"errors":["15.42"],"from":["15.42","20.11"],"duplicate":["15.42"],"class":["15.42"],"priority":["16.1","18.1"],"subtitleoffset":["19.1"],"span":["19.3"],"min":["19.6"],"yarn":["20.1","23.1","24.2"],"npm":["20.2","23.2"],"dist":["20.2","20.12","23.2","24.3"],"warning":["20.3","22.47"],"option":["20.4","23.4"],"return":["20.5","22.35","23.5","23.10","26.35"],"ref":["20.5","23.5"],"automatically":["20.6"],"const":["20.8","23.8"],"param":["20.10"],"getinstance":["20.10"],"import":["20.11"],"group":["20.11","23.11"],"bash":["20.11","23.11"],"jsdelivr":["20.11","23.11"],"net":["20.11","23.11"],"such":["20.12"],"as":["20.12"],"plugin":["20.12","23.12"],"variable":["20.13"],"globalthis":["20.13"],"user":["20.13"],"simplified":["21.0"],"chinese":["21.0"],"and":["21.0","22.14","22.15","22.16","22.48"],"english":["21.0"],"other":["21.0"],"languages":["21.0"],"no":["21.0"],"longer":["21.0"],"required":["21.1"],"zhtw":["21.2"],"zh":["21.2"],"tw":["21.2"],"may":["22.1"],"can":["22.2","22.27"],"asynchronously":["22.2"],"muted":["22.4","26.4"],"yet":["22.5"],"playing":["22.5","22.26"],"highlighted":["22.6"],"elements":["22.6"],"time":["22.8","22.21"],"adjusts":["22.11"],"hide":["22.11"],"browser":["22.12"],"viewport":["22.12","22.48"],"context":["22.14","22.15","22.16"],"bottom":["22.18","22.44"],"control":["22.18","22.20","22.23","22.24","22.44"],"allowed":["22.21"],"play":["22.21","26.43"],"at":["22.21"],"a":["22.21"],"filter":["22.22"],"frosted":["22.22"],"glass":["22.22"],"more":["22.22"],"transparent":["22.22"],"appearance":["22.22"],"however":["22.22"],"access":["22.27"],"setting01":["22.30","26.30"],"scale":["22.36"],"utf":["22.37","23.3"],"escape":["22.37","26.37"],"boolean":["22.37","26.37"],"tags":["22.37"],"be":["22.38"],"directly":["22.38"],"written":["22.38"],"into":["22.38"],"correct":["22.40"],"so":["22.40"],"explicit":["22.40"],"specification":["22.40"],"necessary":["22.40"],"element":["22.41","22.51"],"lang":["22.43","26.43"],"devices":["22.45","22.46"],"mobile":["22.46"],"dimensions":["22.48"],"size":["22.48"],"this":["22.49"],"feature":["22.49"],"an":["22.51"],"existing":["22.51"],"body":["23.3"],"属性":["23.10"],"export":["23.10"],"https":["23.11"],"danmuku":["23.12","24.3","24.8"],"head":["23.13"],"title":["23.13"],"mode":["24.4"],"弹幕模式":["24.4"],"滚动":["24.4"],"弹幕字体大小":["24.5"],"antioverlap":["24.5"],"弹幕是否防重叠":["24.5"],"synchronousplayback":["24.5"],"是否同步播放速度":["24.5"],"mount":["24.5"],"undefined":["24.5"],"弹幕发射器挂载点":["24.5"],"默认为播放器控制栏中部":["24.5"],"heatmap":["24.5"],"plugins":["24.6","24.11","24.12","24.13"],"xml":["24.6","24.13","24.14"],"这是用户在输入框输入弹幕文本":["24.6"],"然后点击发送按钮后触发的函数":["24.6"],"artplayerplugindanmuku":["24.11","24.12","24.13"],"emitter":["24.14"],"重载":["24.14"],"danmu":["24.16"],"loaded":["24.18"],"danmus":["24.18"],"加载弹幕":["24.18"],"length":["24.18"],"简体中文":["25.0"],"和":["25.0"],"英文":["25.0"],"有时候":["26.2"],"地址没那么快知道":["26.2"],"这时候你可以异步设置":["26.2"],"cover":["26.11"],"但在部分低性能设备或老旧浏览器上可能会有性能或兼容性问题":["26.22"],"预览图缩放":["26.36"],"是否转义":["26.37"],"标签":["26.37"],"默认为":["26.37"],"onvttload":["26.37"],"用于修改":["26.37"]},{"0":["15.12","23.9"],"1":["3.25","9.9","19.9","24.4"],"2":["3.26","9.3","13.29","19.3","22.3","24.4"],"3":["3.28","13.28","19.6","26.1"],"4":["3.28","13.28","19.1","20.10","22.5","22.8","22.9","22.13","22.14","22.15","22.16","22.23","22.24","22.25","22.28","22.33","22.36","22.40","22.42","22.45","22.46","22.49","26.6","26.11","26.12","26.14","26.15","26.16","26.18","26.20","26.22","26.23","26.24","26.28","26.36","26.37","26.38","26.41","26.44","26.48","26.49","26.51"],"5":["3.23","3.29","9.9","13.29","19.9","22.7"],"6":["3.29","13.29","15.43","20.10","22.2","26.2"],"7":["5.29","15.6","15.7","15.17","15.18","15.19","15.24","15.38","15.39","15.40","26.27","26.38"],"8":["5.26","15.15","15.26","15.27","22.36","23.13","26.36","26.41"],"9":["5.5"],"10":["3.12","3.14","3.27","5.12","9.9","19.9"],"12":["24.13"],"14":["22.33"],"20":["3.11"],"22":["9.5"],"40":["13.7"],"50":["24.13"],"100":["13.10"],"300":["13.5","13.6"],"500":["3.21","13.8","13.9","13.17"],"512":["24.5"],"2000":["3.22","3.24","13.22"],"3000":["3.15","15.12"],"5000":["3.4","3.13","3.16"],"的":["0.0","0.4","1.0","5.0"],"url":["0.1","0.3","0.5","0.8","0.12","0.13","0.15","2.1","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.19","2.20","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.5","3.30","5.1","5.2","5.3","5.8","5.9","5.13","5.14","5.15","5.16","5.17","5.18","5.19","5.21","5.22","5.25","5.28","5.30","5.31","5.32","5.34","5.35","5.36","5.37","5.46","5.47","9.1","9.2","9.6","10.3","10.7","10.17","12.6","12.7","12.8","12.10","12.12","12.16","12.17","12.18","12.20","12.22","12.24","12.26","12.28","12.29","12.30","12.31","15.2","15.3","15.8","15.9","15.14","15.23","15.28","15.31","15.32","15.34","15.35","15.36","15.37","15.41","15.46","15.47","19.2","19.5","20.5","20.9","21.2","22.17","22.34","22.39","24.9","24.15","24.17","25.1","26.7","26.10","26.19","26.34","26.40","26.50"],"assets":["0.1","0.3","0.5","0.8","0.9","0.11","0.13","0.15","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.23","2.24","2.25","2.26","2.27","2.29","2.30","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","3.30","5.2","5.3","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.16","5.18","5.19","5.20","5.21","5.22","5.25","5.28","5.30","5.31","5.32","5.33","5.34","5.35","5.36","5.37","5.46","5.47","9.1","9.2","9.6","10.3","10.5","10.7","10.17","12.2","12.6","12.17","12.18","12.20","12.22","12.24","12.28","12.29","12.30","12.31","15.2","15.3","15.9","15.14","15.23","15.28","15.31","15.32","15.34","15.35","15.37","15.41","15.44","15.46","15.47","19.2","19.5","20.9","21.2","21.3","22.17","22.34","22.39","22.40","24.9","24.15","24.17","25.1","26.10","26.19","26.33","26.34","26.39","26.40","26.47","26.50"],"sample":["0.1","0.3","0.5","0.7","0.8","0.9","0.10","0.11","0.13","0.15","2.6","2.11","2.12","2.16","2.17","2.18","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.29","2.30","2.31","2.39","5.2","5.3","5.9","5.11","5.13","5.14","5.15","5.16","5.18","5.19","5.20","5.21","5.22","5.28","5.30","5.31","5.32","5.33","5.34","5.35","5.36","5.44","5.46","5.47","9.2","9.6","10.3","10.5","10.7","10.17","12.2","12.18","12.20","12.22","12.24","12.28","12.29","12.30","12.31","15.2","15.23","15.28","15.34","15.41","15.44","15.46","19.2","19.5","20.9","21.2","21.3","22.7","22.17","22.34","22.39","22.40","24.9","24.10","24.15","24.17","25.3","26.1","26.10","26.19","26.31","26.33","26.34","26.39","26.40","26.47"],"video":["0.1","0.3","0.5","0.6","0.7","0.8","0.9","0.10","0.13","0.15","2.2","2.6","2.12","2.17","2.18","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.28","2.29","2.30","2.31","5.2","5.3","5.9","5.11","5.13","5.14","5.16","5.20","5.22","5.23","5.28","5.31","5.32","5.33","5.35","5.36","5.44","5.46","9.2","9.6","10.1","10.3","10.5","10.7","10.17","12.2","12.22","12.28","12.29","12.30","12.31","15.28","15.41","15.44","15.46","19.2","19.5","20.9","21.2","21.3","22.7","22.31","22.39","23.9","24.9","24.10","24.15","24.17","25.3","26.1","26.10","26.19","26.31","26.34","26.39","26.40","26.47"],"mp4":["0.3","0.5","0.6","0.7","0.8","0.9","0.10","0.16","2.2","2.17","2.18","2.20","2.22","2.24","2.28","2.29","2.30","2.31","5.16","5.20","5.22","5.23","5.28","5.32","5.33","5.34","5.44","5.46","9.2","10.1","10.3","10.5","10.7","10.17","12.2","12.28","12.29","12.30","12.31","15.23","15.28","15.41","15.44","19.2","19.5","20.9","21.2","21.3","22.7","22.17","22.31","22.39","23.9","24.9","24.10","24.17","25.3","26.1","26.10","26.19","26.31","26.32","26.34","26.39","26.47"],"warning":["0.4","10.2","10.4","11.6","15.12","15.16","15.22","15.33","20.4","22.7","22.10","25.0"],"提示":["0.4"],"默认所有播放器实例都是共享同一个":["0.4"],"localstorage":["0.4"],"而且默认的":["0.4"],"是":["0.4"],"settings":["0.4","9.2","9.5","19.5"],"如果你想不同的播放器使用不同的":["0.4"],"console":["0.6","0.14","0.17","6.2","6.3","6.4","6.5","9.3","9.4","10.1","10.4","10.5","10.6","10.14","11.1","16.2","16.3","16.4","16.5","19.3","19.4","22.30"],"info":["0.6","0.14","0.17","1.6","6.2","6.3","6.4","6.5","9.3","9.4","10.1","10.4","10.5","10.6","10.14","11.1","15.16","16.2","16.3","16.4","16.5","19.3","19.4","22.30"],"play":["0.6","10.6","12.42","22.43","26.4"],"on":["0.7","0.8","0.9","0.10","2.2","2.22","5.33","5.44","7.5","8.5","9.9","10.7","10.14","11.0","15.0","15.28","15.44","17.5","18.5","19.9","20.3","22.22"],"ready":["0.9","0.10","2.2","5.12","5.44","7.5","10.14","15.33","17.5"],"artplayer":["0.11","0.12","1.6","2.41","3.34","5.4","5.6","5.7","5.17","5.24","5.26","5.27","5.29","5.38","5.39","5.40","5.42","5.43","9.6","11.6","12.1","12.3","12.4","12.5","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.19","12.21","12.23","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.3","13.4","13.10","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","15.1","15.7","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.23","15.24","15.25","15.27","15.30","15.31","15.32","15.35","15.36","15.43","19.1","19.6","20.13","21.1","22.25","22.33","22.34","22.40","22.42","22.50","26.3","26.5","26.7","26.8","26.9","26.13","26.14","26.15","26.16","26.17","26.21","26.25","26.26","26.33","26.36","26.42","26.45","26.46"],"container":["0.11","0.12","1.1","2.1","2.3","2.4","2.14","2.41","3.5","3.6","3.7","3.8","3.9","3.10","3.17","3.29","3.30","5.1","5.4","5.6","5.7","5.8","5.10","5.15","5.17","5.18","5.19","5.24","5.25","5.26","5.27","5.30","5.38","5.39","5.40","5.42","5.43","9.1","9.6","12.1","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.21","12.23","12.24","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.30","15.1","15.3","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.23","15.25","15.30","15.31","15.32","15.34","15.35","15.36","15.37","15.47","19.2","19.6","21.1","21.2","22.25","22.33","22.34","22.40","22.42","22.50","24.7","24.16","26.5","26.7","26.17","26.25","26.27","26.33","26.40","26.42","26.50"],"app":["0.11","0.12","0.13","0.15","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.19","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.5","3.6","3.7","3.30","5.1","5.2","5.3","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.17","5.18","5.19","5.21","5.25","5.27","5.30","5.31","5.32","5.35","5.36","5.37","5.39","5.41","5.46","5.47","9.1","9.2","9.6","10.3","10.7","10.17","12.2","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.29","12.30","12.39","12.40","12.41","15.1","15.2","15.3","15.8","15.9","15.10","15.11","15.13","15.14","15.21","15.23","15.30","15.31","15.32","15.34","15.35","15.36","15.37","15.46","15.47","19.2","21.2","22.17","22.34","22.39","22.40","22.50","23.3","23.5","24.7","24.9","24.15","24.16","24.17","25.1","26.7","26.10","26.17","26.25","26.27","26.33","26.34","26.40","26.50"],"new":["0.12","1.1","3.3","3.6","3.7","3.8","3.9","3.10","3.11","3.17","3.22","3.28","3.29","3.33","5.4","5.5","5.6","5.7","5.24","5.26","5.29","5.38","5.39","5.40","5.41","5.42","5.43","9.6","10.3","10.16","12.1","12.3","12.4","12.5","12.9","12.11","12.12","12.13","12.14","12.15","12.16","12.19","12.21","12.23","12.25","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.6","13.7","13.8","13.9","13.17","13.30","15.6","15.7","15.8","15.9","15.10","15.11","15.13","15.14","15.15","15.17","15.18","15.19","15.21","15.24","15.25","15.27","15.30","15.31","15.36","15.41","15.43","19.1","19.6","21.1","21.2","22.9","22.13","22.25","22.33","22.34","22.40","22.42","22.50","24.7","24.8","24.16","26.3","26.5","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.17","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.28","26.33","26.36","26.38","26.42","26.44","26.45","26.46","26.48","26.49","26.51"],"hotkeyevent":["0.14","10.14"],"event":["0.14","9.3","9.4","10.14","17.1","19.4"],"click":["0.14","6.2","6.3","7.1","7.3","10.14","15.20","15.22","16.2","16.3","17.3","22.31","24.12"],"true":["0.16","2.28","3.1","3.20","3.33","7.2","9.2","9.5","17.2","19.2","19.5","22.17","22.37"],"flip":["0.16"],"playbackrate":["0.16"],"aspectratio":["0.16"],"function":["0.17","6.2","6.3","6.4","7.1","7.3","9.4","10.14","10.17","15.20","15.22","16.2","16.3","16.4","17.3","19.4","22.30","22.37","24.12","24.14","26.30"],"myplugin":["0.17","10.17"],"art":["1.1","3.1","3.3","3.4","3.8","3.9","3.10","3.11","3.12","3.13","3.17","3.18","3.21","3.22","3.23","3.24","3.27","3.28","3.29","3.32","3.33","5.4","5.5","5.26","5.29","5.38","5.40","5.41","5.42","5.43","9.6","10.3","10.16","12.1","12.5","12.14","12.15","12.25","12.32","12.33","12.34","12.35","12.36","12.37","12.38","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.29","13.30","15.6","15.7","15.15","15.17","15.18","15.19","15.21","15.24","15.25","15.27","15.30","15.38","15.39","15.40","15.43","19.1","19.6","20.8","21.1","22.9","22.13","22.25","22.28","22.33","22.34","22.40","22.41","22.42","23.8","24.8","24.16","26.3","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.23","26.24","26.25","26.26","26.28","26.36","26.38","26.42","26.44","26.45","26.46","26.48","26.49","26.51"],"js":["1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.12","3.2","3.34","5.5","5.29","10.8","10.9","10.10","10.13","10.15","10.16","11.1","13.1","13.3","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","15.4","15.6","15.15","15.17","15.24","15.26","15.38","15.39","15.40","15.42","19.1","20.2","22.3","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.27","22.28","22.33","22.36","22.40","22.44","22.45","22.46","22.49","23.2","24.3","26.6","26.11","26.22","26.36","26.37","26.38","26.41","26.51"],"手动触发事件":["2.0"],"subtitle":["2.28","2.29","2.30","2.31","12.31"],"或者部分加载完成":["2.46"],"则发送此事件":["2.46"],"已经到达结束点":["2.47"],"正在尝试获取媒体数据":["2.58"],"一级属性":["3.0"],"var":["3.1","3.3","3.4","3.8","3.9","3.10","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.28","3.29","3.31","3.32","3.33","5.4","5.5","5.26","5.29","5.42","9.6","10.13","10.15","10.16","12.1","13.3","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.22","13.28","13.29","13.30","15.6","15.7","15.11","15.13","15.15","15.17","15.18","15.19","15.21","15.24","15.26","15.27","15.30","15.38","15.39","15.40","15.43","19.1","19.6","22.3","22.5","22.9","22.13","22.25","22.28","22.33","22.40","22.42","24.8","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.22","26.23","26.24","26.26","26.27","26.28","26.36","26.38","26.41","26.42","26.44","26.45","26.46","26.48","26.49","26.51"],"false":["3.18","3.19","3.31","3.32","6.5","13.3","13.32","16.5"],"adsplugin":["4.0","14.0"],"option":["4.0","14.0","24.18"],"layers":["4.0","14.0"],"ads":["4.0","14.0"],"html":["4.0","7.4","8.4","9.7","15.20","15.22","17.4","18.4","19.7","20.13","22.31","22.32","24.11","24.12","24.13","26.31","26.32"],"img":["4.0","9.5","9.8","19.8","26.39"],"style":["4.0","6.1","7.3","8.1","8.4","16.1","17.3","18.1","18.4","23.4","26.29"],"width":["4.0","8.4","9.5","9.8","18.4","19.8","24.5","26.29"],"100px":["4.0","8.4","18.4","22.29","26.29"],"src":["4.0","8.3","8.4","9.8","18.3","18.4","19.8","22.29","26.29"],"display":["4.0"],"none":["4.0"],"position":["4.0","5.20","7.4","8.2","8.3","8.5","17.4","18.2","18.3","18.5","22.29","22.32","24.11","24.12","26.29","26.32"],"absolute":["4.0","8.2","8.3","8.5","18.2","18.3","18.5","22.29","26.29"],"top":["4.0","8.2","8.3","8.5","18.2","18.3","18.5","22.29","26.29"],"20px":["4.0","22.29","26.29"],"right":["4.0","7.2","7.4","8.2","8.5","15.20","15.22","17.2","17.4","18.2","18.5","22.29","24.11","24.12","24.13"],"seek":["5.12","22.19"],"settimeout":["5.12","7.5","17.5","22.2"],"controls":["5.20","5.22","24.11","24.12"],"jpg":["5.23"],"hd":["5.45","15.45"],"720p":["5.45","15.45"],"element":["6.1","8.1","13.34","16.1","18.1","22.38"],"组件的":["6.1","8.1"],"dom":["6.1","8.1","9.4","16.1","18.1","19.4"],"元素":["6.1","8.1"],"args":["6.2","6.3","6.4","16.2","16.3","16.4","22.30","26.30"],"show":["6.5","9.7","9.9","16.5","19.7","19.9"],"组件样式对象":["7.1"],"组件点击事件":["7.1"],"mounted":["7.1","11.0","15.0","17.1"],"selector":["7.2","17.2"],"default":["7.2","10.4","17.2","20.10","21.0","21.4","25.4"],"span":["7.2","17.2"],"01":["7.2","17.2","22.30","26.30"],"button":["7.3","7.4","17.3","17.4"],"tooltip":["7.3","7.4","8.2","8.3","17.3","17.4","18.2","18.3","22.32"],"color":["7.3","17.3"],"red":["7.3","17.3"],"your":["7.4","17.4","22.31","22.32","26.31","26.32","26.47"],"02":["7.5","9.4","17.5","19.3","19.4","22.30","26.30"],"update":["7.5","17.5"],"the":["7.5","12.48","17.5","21.4","22.10","25.4"],"tip":["8.2","8.3","18.2","18.3"],"50px":["8.2","8.3","8.5","18.2","18.3","18.5"],"potser":["8.4","18.4"],"setting":["9.2","19.2","19.5"],"item":["9.3","9.4","19.3","19.4"],"onselect":["9.4","19.4","22.30","26.30"],"pip":["9.5","19.5"],"mode":["9.5","19.5"],"close":["9.5","19.5"],"height":["9.5","9.8","19.8"],"add":["9.7","20.1","23.1"],"slider":["9.7","19.7"],"state":["9.8","13.34","19.8"],"range":["9.9","19.9","24.13"],"attached":["10.0"],"note":["10.2","10.4","15.12","15.16","15.33","22.7","22.10","22.47"],"to":["10.2","12.42","12.43","12.62","14.0","22.1"],"easily":["10.2"],"distinguish":["10.2"],"between":["10.2"],"and":["10.2","15.29"],"const":["10.4","24.6"],"by":["10.4","21.0","22.47"],"zh":["10.6"],"cn":["10.6"],"visibility":["10.8"],"of":["10.8","10.9","10.10","10.16","12.45","20.3","22.1"],"div":["10.8","10.9","10.10","10.11","10.12","10.16","15.5","15.29","19.6","22.21","22.27","22.36","22.37","22.38","22.41","22.48","26.37"],"classname":["10.8","10.9","10.10","10.12","10.13","10.15","10.16","15.5","15.29","15.42","19.6","22.21","22.27","22.36","22.37","22.38","22.41","22.48","22.51","26.37"],"run":["10.8","10.9","10.10","10.12","10.13","10.15","10.16","11.8","11.11","15.4","15.5","15.26","15.29","15.42","19.6","22.18","22.21","22.27","22.36","22.37","22.38","22.41","22.44","22.48","22.51","26.37"],"code":["10.8","10.9","10.10","10.12","10.13","10.15","10.16","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","13.1","15.4","15.15","15.26","15.29","15.42","19.6","22.6","22.12","22.14","22.15","22.16","22.18","22.20","22.21","22.23","22.24","22.26","22.27","22.36","22.37","22.38","22.41","22.44","22.46","22.48","22.49","22.51","26.37"],"currently":["10.11"],"active":["10.11"],"cues":["10.11"],"overall":["10.11"],"see":["10.12"],"documentation":["10.12"],"for":["10.12","22.1","22.37"],"details":["10.12"],"all":["11.6","13.0"],"manually":["12.0","21.0"],"trigger":["12.0"],"data":["12.42","12.58","20.10"],"through":["12.42","12.43"],"already":["12.46"],"been":["12.46","20.13"],"loaded":["12.46","12.50"],"or":["12.46","12.53","22.22"],"media":["12.47","12.49","12.58"],"resource":["12.48"],"type":["12.48","24.13"],"paused":["12.51","12.53","14.0"],"browser":["12.54"],"is":["12.54","14.0","15.5","17.1"],"has":["12.55","12.56","12.57","12.59","20.13"],"but":["12.58"],"currenttime":["12.60"],"attribute":["12.60"],"changed":["12.61"],"are":["13.0"],"in":["13.0"],"uppercase":["13.0"],"they":["13.0"],"only":["13.34"],"ui":["13.34"],"set":["13.34"],"i":["14.0","24.6"],"want":["14.0","22.10"],"write":["14.0"],"a":["14.0"],"that":["14.0"],"displays":["14.0"],"an":["14.0","22.43"],"image":["14.0"],"ad":["14.0"],"when":["14.0"],"automatically":["15.5"],"execute":["15.5"],"similar":["15.5","22.11"],"logic":["15.5"],"called":["15.5"],"t":["15.12"],"some":["15.16","22.22"],"videos":["15.16"],"may":["15.16","22.22"],"not":["15.16"],"switch":["15.20"],"visible":["15.29"],"resize":["15.33"],"sd":["15.45"],"480p":["15.45"],"object":["16.1","18.1","22.11"],"handler":["17.1"],"triggered":["17.1"],"after":["17.1"],"yellow":["19.3"],"step":["19.6","24.13"],"unpkg":["20.2","20.11","23.2","24.3"],"s":["20.3"],"dimensions":["20.3"],"depend":["20.3"],"size":["20.3","22.1"],"get":["20.4","23.4"],"instance":["20.4","22.41"],"getinstance":["20.4"],"imported":["20.6","21.0"],"useref":["20.8","23.8"],"export":["20.10"],"return":["20.10"],"https":["20.11"],"cdn":["20.11","23.11"],"npm":["20.11","23.11"],"dist":["20.11","23.11"],"danmuku":["20.12"],"doctype":["20.12","23.12"],"agent":["20.13"],"added":["20.13"],"head":["20.13"],"title":["20.13"],"demo":["20.13","23.13"],"must":["21.0"],"be":["21.0"],"as":["21.0","22.47"],"change":["21.4","25.4"],"language":["21.4","25.4"],"need":["22.1"],"initialize":["22.1"],"example":["22.1"],"this":["22.4","22.22","26.4"],"equivalent":["22.4"],"muted":["22.10"],"if":["22.10","24.6"],"you":["22.10"],"fit":["22.11"],"cover":["22.11"],"css":["22.11","26.1"],"description":["22.19"],"increase":["22.19"],"volume":["22.19","23.9"],"decrease":["22.19"],"forward":["22.19"],"backward":["22.19"],"cause":["22.22"],"performance":["22.22"],"compatibility":["22.22"],"issues":["22.22"],"low":["22.22"],"left":["22.32","26.32"],"something":["22.35","26.35"],"dosomething":["22.35","26.35"],"onvttload":["22.37"],"modifying":["22.37"],"text":["22.37","24.6","24.12"],"loading":["22.39","26.39"],"current":["22.41"],"modify":["22.43"],"existing":["22.43"],"player":["22.47"],"uses":["22.47"],"class":["23.3"],"d":["23.6"],"选项":["23.10"],"lang":["23.12","25.2","25.3"],"meta":["23.13"],"charset":["23.13"],"utf":["23.13"],"com":["24.3"],"默认":["24.4"],"顶部":["24.4"],"底部":["24.4"],"是否开启热力图":["24.5"],"当播放器宽度小于此值时":["24.5"],"弹幕发射器置于播放器底部":["24.5"],"points":["24.5"],"热力图数据":["24.5"],"filter":["24.5"],"弹幕载入前的过滤器":["24.5"],"只支持返回布尔值":["24.5"],"beforeemit":["24.5"],"弹幕发送前的过滤器":["24.5"],"支持返回":["24.5"],"你可以对弹幕做合法校验":["24.6"],"或者做存库处理":["24.6"],"当返回true后才表示把弹幕加入到弹幕队列":["24.6"],"async":["24.6"],"isdirty":["24.6"],"fuck":["24.6"],"test":["24.6"],"plugins":["24.10"],"artplayerplugindanmuku":["24.10"],"xml":["24.11","24.12"],"隐藏弹幕":["24.11"],"发送弹幕":["24.12"],"弹幕大小":["24.13"],"input":["24.13"],"min":["24.13"],"max":["24.13"],"重新加载当前弹幕库":["24.14"],"切换":["24.14"],"error":["24.18"],"加载错误":["24.18"],"config":["24.18"],"配置变化":["24.18"],"外":["25.0"],"不再捆绑其它多国语言":["25.0"],"需要自行导入需要的语言":["25.0"],"您可能需要初始化容器元素的大小":["26.1"],"如":["26.1"],"等同于":["26.4"],"document":["26.27"],"queryselector":["26.27"],"menu":["26.31"],"control":["26.32"],"文本的函数":["26.37"],"修改现有的语言":["26.43"],"id":["26.47"]},{"0":["5.12","20.5","20.9"],"1":["9.8","13.25","19.8","24.13"],"2":["13.26"],"3":["22.1"],"4":["22.6","22.12","22.18","22.20","22.21","22.26","22.37","22.38","22.41","22.44","22.48","22.51"],"5":["9.8","13.23","19.8","20.9","23.9"],"6":["15.42"],"7":["15.4","15.29","22.27","22.38"],"8":["12.0","20.12","20.13","22.41","23.12"],"9":["15.5","22.29","26.29"],"10":["9.8","13.12","13.14","13.27","19.8"],"11":["22.43","26.43"],"12":["22.37","26.37"],"20":["13.11"],"22":["9.2","9.6","9.7","19.2","19.5","19.7"],"25":["24.13"],"32":["0.14","10.14"],"60":["22.34","26.34"],"120":["26.34"],"150":["9.3","19.3"],"200":["24.5"],"404":["2.11","12.11"],"500":["13.21"],"1000":["22.2"],"2000":["13.24"],"3000":["5.12","13.15"],"5000":["13.4","13.13","13.16"],"二级属性":["0.0"],"mp4":["0.1","0.11","0.12","0.13","0.15","2.1","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.19","2.21","2.23","2.25","2.26","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.5","3.6","3.7","3.29","3.30","5.1","5.2","5.3","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.17","5.18","5.19","5.21","5.25","5.26","5.30","5.31","5.35","5.36","5.37","5.39","5.41","5.47","9.1","9.6","10.8","10.9","10.10","10.16","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.39","12.41","13.30","15.1","15.2","15.3","15.8","15.9","15.10","15.11","15.13","15.14","15.18","15.19","15.21","15.25","15.30","15.31","15.32","15.34","15.35","15.36","15.37","15.46","15.47","19.6","20.5","22.33","22.34","22.50","23.5","24.15","24.16","25.1","26.7","26.25","26.33","26.36","26.50"],"console":["0.1","0.3","0.5","1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.11","1.12","3.2","5.9","5.14","5.15","5.16","5.23","5.28","5.30","5.31","5.32","5.34","5.35","5.36","5.44","7.3","8.2","8.3","10.3","10.17","13.2","15.28","15.32","15.34","15.41","15.44","17.3","18.2","18.3","22.29","22.31","26.29","26.30","26.31"],"info":["0.1","0.3","0.5","1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.12","5.9","5.14","5.16","5.23","5.28","5.31","5.32","5.34","5.35","5.36","7.3","8.2","8.3","10.3","10.17","15.28","15.34","15.41","17.3","18.2","18.3","22.29","22.31","26.29","26.30","26.31"],"warning":["0.2","1.6","5.12","10.1","10.5","10.6","15.20","15.41","21.0","22.2","22.4","22.17","22.19","22.40","23.3","23.4","26.10","26.40","26.47"],"提示":["0.2","5.12","23.3","26.47"],"为了方便区别":["0.2"],"元素和普通对象":["0.2"],"播放器里的所有":["0.2"],"click":["0.3","5.20","5.22","6.1","8.1","8.2","8.3","10.3","15.41","16.1","18.1","18.2","18.3","22.29","22.32","24.10","24.11","26.29","26.31","26.32"],"event":["0.3","24.11"],"你可以修改":["0.4"],"即可":["0.4"],"zh":["0.6"],"cn":["0.6","21.4","25.4"],"your":["0.6","10.6","15.33","20.3","21.3","21.4","22.3","25.3","25.4","26.3"],"ready":["0.7","0.8","0.11","0.13","0.14","0.15","0.16","2.6","2.18","2.22","2.24","5.9","5.11","5.13","5.14","5.15","5.16","5.18","5.19","5.23","5.28","5.30","5.31","5.32","5.33","5.34","5.35","5.36","5.45","5.46","6.5","8.5","9.9","10.7","12.2","12.18","12.22","12.24","15.9","15.11","15.13","15.14","15.23","15.28","15.31","15.32","15.34","15.35","15.36","15.44","15.45","15.46","16.5","18.5","19.9"],"html":["0.8","0.9","0.10","5.20","5.22","14.0","24.10"],"some":["0.8","0.9","0.10"],"text":["0.8","0.9","0.10","17.1"],"position":["0.9","5.22","5.37","7.1","8.4","14.0","17.1","18.4","24.10"],"video":["0.11","0.12","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.13","2.14","2.15","2.16","2.19","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.5","3.6","3.7","3.28","3.29","3.30","5.1","5.6","5.7","5.8","5.10","5.15","5.17","5.18","5.19","5.21","5.24","5.25","5.26","5.27","5.29","5.30","5.37","5.39","5.41","5.47","9.1","10.8","10.9","10.10","10.16","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.12","12.13","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.23","12.24","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","15.21","15.30","15.31","15.32","15.36","15.37","15.47","19.6","20.5","22.25","22.33","22.34","22.42","22.50","23.5","24.7","24.16","25.1","26.7","26.17","26.25","26.33","26.36","26.50"],"on":["0.11","0.12","0.13","0.14","0.15","0.16","2.6","2.11","2.12","2.18","2.24","5.8","5.9","5.10","5.11","5.13","5.14","5.15","5.16","5.18","5.19","5.21","5.23","5.28","5.30","5.31","5.32","5.34","5.35","5.36","5.45","5.46","6.4","6.5","7.4","10.9","10.10","12.2","12.6","12.18","12.22","12.24","15.9","15.11","15.13","15.14","15.23","15.30","15.31","15.32","15.34","15.35","15.36","15.45","15.46","16.4","16.5","17.4","22.4"],"assets":["0.12","1.1","2.1","2.3","2.4","2.14","2.41","3.5","3.6","3.7","3.8","3.9","3.10","3.17","3.28","3.29","5.1","5.4","5.5","5.6","5.7","5.17","5.24","5.26","5.27","5.29","5.38","5.39","5.40","5.41","5.42","5.43","10.8","10.9","10.10","10.13","10.15","10.16","12.1","12.3","12.4","12.5","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.19","12.21","12.23","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.6","13.7","13.28","13.29","13.30","15.1","15.6","15.7","15.8","15.10","15.11","15.13","15.15","15.17","15.18","15.19","15.21","15.24","15.25","15.26","15.27","15.30","15.36","19.1","19.6","21.1","22.25","22.33","22.36","22.42","22.50","24.7","24.8","24.16","26.5","26.7","26.17","26.25","26.36","26.37","26.42"],"sample":["0.12","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.13","2.14","2.15","2.19","2.27","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.40","2.41","3.5","3.6","3.7","3.8","3.9","3.10","3.17","3.28","3.29","3.30","5.1","5.6","5.7","5.8","5.10","5.17","5.24","5.25","5.26","5.27","5.29","5.37","5.38","5.39","5.40","5.41","5.42","9.1","10.8","10.9","10.10","10.13","10.15","10.16","12.1","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.19","12.21","12.23","12.25","12.26","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.6","13.7","13.29","13.30","15.1","15.3","15.8","15.9","15.10","15.11","15.13","15.14","15.15","15.18","15.19","15.21","15.25","15.30","15.31","15.32","15.35","15.36","15.37","15.47","19.1","19.6","21.1","22.25","22.33","22.36","22.42","22.50","24.7","24.16","25.1","26.5","26.7","26.17","26.25","26.36","26.37","26.42","26.50"],"subtitleoffset":["0.16"],"return":["0.17","9.3","9.4","10.17","19.3","19.4","24.9","24.12"],"name":["0.17","10.17"],"something":["0.17"],"dosomething":["0.17"],"一级属性":["1.0","5.0"],"app":["1.1","3.3","3.8","3.9","3.10","3.11","3.12","3.13","3.17","3.22","3.23","3.28","3.29","3.33","5.4","5.5","5.6","5.7","5.24","5.26","5.29","5.38","5.40","5.42","5.43","10.8","10.9","10.10","10.13","10.15","10.16","12.1","12.3","12.4","12.5","12.14","12.15","12.32","12.33","12.34","12.35","12.36","12.37","12.38","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.28","13.29","13.30","15.6","15.7","15.15","15.17","15.18","15.19","15.24","15.25","15.26","15.27","15.29","15.38","15.39","15.40","15.43","19.1","19.6","20.13","21.1","22.5","22.9","22.13","22.25","22.27","22.33","22.36","22.37","22.42","24.8","26.5","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.23","26.24","26.26","26.28","26.36","26.37","26.38","26.41","26.42","26.44","26.45","26.46","26.48","26.49","26.51"],"url":["1.1","3.6","3.7","3.8","3.9","3.10","3.17","3.22","3.28","3.29","5.4","5.5","5.6","5.7","5.24","5.26","5.27","5.29","5.38","5.39","5.40","5.41","5.42","5.43","10.8","10.9","10.10","10.13","10.15","10.16","12.1","12.3","12.4","12.5","12.9","12.11","12.13","12.14","12.15","12.19","12.21","12.23","12.25","12.27","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.28","13.29","13.30","15.1","15.6","15.7","15.15","15.17","15.21","15.24","15.25","15.26","15.27","15.30","15.38","15.39","15.40","15.43","19.1","19.6","21.1","22.3","22.25","22.42","22.50","23.5","24.7","24.8","24.16","26.3","26.5","26.8","26.9","26.13","26.14","26.15","26.16","26.17","26.21","26.25","26.26","26.38","26.42","26.45","26.46","26.51"],"全部工具函数请参考以下地址":["1.6"],"js":["1.11","10.11","10.12","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","13.2","13.34","15.5","15.29","22.11","22.21","22.37","22.38","22.41","22.48","22.51"],"emit":["2.0","12.0"],"focus":["2.0","12.0"],"移除事件":["2.0"],"true":["2.16","2.17","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.39","3.30","5.2","5.3","5.21","6.2","6.4","6.5","9.1","9.6","10.16","12.17","12.20","12.28","13.1","13.20","13.33","15.2","15.3","16.2","16.4","16.5","19.6","24.16","26.10","26.33","26.47"],"setting":["2.17","2.20","2.28","3.30","9.1","9.6","12.17","12.20","13.30","19.6"],"fullscreen":["2.22"],"srt":["2.28","2.29","2.30","2.31","12.31"],"并调用":["2.46"],"但数据意外未出现":["2.58"],"属性名字全部都是大写的形式":["3.0"],"未来容易发生变动":["3.0"],"new":["3.1","3.4","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.23","3.24","3.25","3.26","3.27","3.31","3.32","3.34","10.8","10.9","10.10","10.11","10.12","10.13","10.15","11.1","13.1","13.3","13.4","13.10","13.11","13.12","13.13","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.26","13.27","13.28","13.29","13.31","13.32","13.33","15.4","15.5","15.26","15.29","15.38","15.39","15.40","15.42","22.3","22.5","22.6","22.8","22.12","22.14","22.15","22.16","22.18","22.20","22.21","22.23","22.24","22.26","22.28","22.35","22.36","22.37","22.38","22.41","22.44","22.45","22.46","22.48","22.49","22.51","23.9","26.6","26.11","26.22","26.35","26.37","26.41"],"container":["3.1","3.3","3.4","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.28","3.31","3.32","3.33","3.34","5.5","5.29","10.8","10.9","10.10","10.11","10.12","10.13","10.15","10.16","11.1","13.3","13.6","13.7","13.8","13.9","13.10","13.11","13.17","13.22","13.28","13.29","15.4","15.5","15.6","15.7","15.15","15.17","15.24","15.26","15.27","15.29","15.38","15.39","15.40","15.42","15.43","19.1","20.3","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.20","22.23","22.24","22.26","22.27","22.28","22.36","22.37","22.45","22.46","22.49","22.51","23.10","24.8","26.3","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.22","26.23","26.24","26.26","26.28","26.36","26.37","26.38","26.41","26.44","26.45","26.46","26.48","26.49","26.51"],"log":["3.2","5.44","15.44"],"art":["3.14","3.15","3.16","3.19","3.20","3.25","3.26","3.31","3.34","10.8","10.9","10.10","10.11","10.13","10.15","11.1","13.1","13.3","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.28","13.31","13.32","13.33","15.4","15.5","15.26","15.29","15.42","20.9","22.3","22.5","22.6","22.8","22.12","22.14","22.15","22.16","22.18","22.20","22.21","22.23","22.24","22.26","22.36","22.37","22.38","22.44","22.45","22.46","22.48","22.49","22.51","23.9","26.11","26.22","26.27","26.37"],"var":["3.34","10.8","10.9","10.10","10.11","10.12","11.1","13.1","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","15.4","15.5","15.29","15.42","22.6","22.8","22.12","22.14","22.15","22.16","22.18","22.20","22.21","22.23","22.24","22.26","22.27","22.35","22.36","22.37","22.38","22.41","22.44","22.45","22.46","22.48","22.49","22.51","26.11","26.35","26.37"],"show":["4.0","6.2","6.3","6.4","14.0","16.2","16.3","16.4"],"block":["4.0","14.0"],"hide":["4.0","14.0"],"controls":["4.0","5.37","15.37","24.10"],"tooltip":["4.0","7.1","9.7","17.1","19.7","26.32"],"muted":["5.2","5.3","5.25","15.2","15.3","26.10"],"seek":["5.11","5.13"],"t":["5.12"],"right":["5.20","5.22","8.3","8.4","14.0","17.1","18.3","18.4","24.10","26.29"],"switch":["5.20","15.12"],"function":["5.20","5.22","6.1","8.1","8.2","8.3","11.0","16.1","18.1","18.2","18.3","22.29","22.31","22.32","24.9","24.11","24.13","26.29","26.31"],"theme":["5.44","15.44"],"settimeout":["5.45","6.5","8.5","9.9","10.14","15.45","16.5","18.5","19.9","26.2"],"subtitle":["5.47","12.29","12.30"],"object":["6.1","8.1"],"组件样式对象":["6.1","8.1"],"false":["6.2","6.3","6.4","9.5","13.18","13.19","13.31","13.34","16.2","16.3","16.4","19.5","24.6"],"update":["6.5","8.5","9.9"],"组件挂载后触发":["7.1"],"组件的提示文本":["7.1"],"yellow":["7.2","17.2"],"02":["7.2","17.2"],"onselect":["7.2","17.2"],"item":["7.2","9.5","17.2"],"dom":["7.2","17.2"],"args":["7.3","8.2","8.3","17.3","18.2","18.3","22.29","22.31","22.32","26.29","26.31"],"mounted":["7.3","8.2","8.3","17.3","18.2","18.3","24.13"],"style":["7.4","14.0","17.4","20.5","22.32","23.5","24.13","26.32"],"color":["7.4","17.4","22.32","24.4","26.32"],"red":["7.4","17.4"],"control":["7.5","17.5"],"by":["7.5","8.5","9.9","17.5","18.5","19.9","22.2"],"absolute":["8.4","14.0","18.4"],"top":["8.4","14.0","18.4"],"50px":["8.4","18.4"],"the":["8.5","9.9","18.5","19.9"],"button":["9.2","19.2"],"img":["9.2","9.6","9.7","14.0","19.2","19.5","19.7","22.39"],"height":["9.2","9.6","19.2","19.5","20.5","22.1","23.5","26.1"],"src":["9.2","9.5","14.0","19.2","19.5","22.39","26.39"],"quality":["9.3","19.3"],"1080p":["9.3","19.3"],"state":["9.5","22.39","24.6","26.39"],"svg":["9.5","9.8","19.5","19.8"],"settings":["9.6","10.4","19.2","19.6"],"slider":["9.6"],"5x":["9.6","9.7","19.6","19.7"],"width":["9.6","9.7","14.0","19.5","19.7","20.5","22.1","23.5","26.1"],"icon":["9.7","19.7"],"range":["9.8","19.8"],"instance":["10.0","23.4"],"which":["10.0","11.0"],"note":["10.1","15.20","15.22","15.41","22.2","22.4","22.17","22.19"],"if":["10.1","10.4","15.41","20.11","22.47","24.11","24.12"],"you":["10.1","10.4","15.41"],"directly":["10.1","20.4"],"regular":["10.2"],"objects":["10.2"],"within":["10.2"],"are":["10.2"],"mouseenter":["10.3"],"instances":["10.4"],"share":["10.4"],"same":["10.4","15.12","22.47"],"localstorage":["10.4"],"and":["10.4","12.46","15.12"],"want":["10.4"],"different":["10.4"],"players":["10.4"],"use":["10.4"],"loading":["10.5","12.54"],"this":["10.5","22.40"],"is":["10.5","12.48","15.33","20.4"],"using":["10.6"],"can":["10.6","22.40"],"only":["10.6","22.40"],"to":["10.7","11.6","15.20","15.22","20.5","23.5"],"artplayer":["10.8","10.9","10.10","10.11","10.12","10.13","10.15","10.16","11.1","13.1","13.34","15.4","15.6","15.15","15.17","15.26","15.29","15.38","15.39","15.40","15.42","22.3","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.28","22.35","22.36","22.37","22.38","22.44","22.45","22.46","22.49","22.51","26.6","26.11","26.12","26.18","26.20","26.22","26.23","26.24","26.28","26.35","26.37","26.38","26.41","26.44","26.48","26.49","26.51"],"classname":["10.11","13.34","22.11","22.22"],"run":["10.11","13.34","22.11","22.22"],"code":["10.11","13.34","15.5","22.11","22.22"],"flip":["10.16"],"playbackrate":["10.16"],"constructor":["11.0"],"please":["11.6"],"refer":["11.6"],"remove":["12.0"],"listener":["12.0"],"end":["12.42","12.43"],"without":["12.42","12.43"],"duration":["12.45"],"partially":["12.46"],"reached":["12.47"],"its":["12.47","20.3"],"not":["12.48","20.4"],"has":["12.49","12.60"],"delayed":["12.53"],"due":["12.53","15.20","15.22","22.17"],"changed":["12.55"],"completed":["12.56"],"begun":["12.57"],"been":["12.59"],"temporary":["12.62"],"lack":["12.62"],"subject":["13.0"],"change":["13.0"],"div":["13.34","20.13","22.11","22.22","23.13"],"100px":["14.0"],"display":["14.0","24.13"],"none":["14.0"],"20px":["14.0"],"have":["15.12","15.16"],"functionality":["15.12"],"a":["15.16","21.0"],"such":["15.16"],"as":["15.16"],"live":["15.16"],"streams":["15.16"],"or":["15.16","17.1","22.1"],"browser":["15.20","15.22","22.17"],"security":["15.20","15.22","22.17"],"mechanisms":["15.20","15.22","22.17"],"page":["15.20","15.22","22.10"],"must":["15.22","20.3"],"jpg":["15.23"],"json":["15.28"],"stringify":["15.28"],"useful":["15.33"],"but":["15.33"],"need":["15.41"],"left":["17.1"],"pnpm":["20.1","23.1","24.2"],"com":["20.2","20.11","23.2","23.11"],"so":["20.3"],"reactive":["20.4"],"modifying":["20.4"],"path":["20.5","23.5"],"600px":["20.5","23.5"],"400px":["20.5","22.1","26.1"],"margin":["20.5"],"60px":["20.5"],"auto":["20.5"],"when":["20.6","21.0"],"importing":["20.6"],"null":["20.8","23.8"],"volume":["20.9"],"option":["20.10","23.10"],"tip":["20.11"],"lang":["20.12","21.2","21.3"],"en":["20.12","23.12"],"head":["20.12","23.12"],"meta":["20.12","20.13","23.12"],"charset":["20.12","20.13","23.12"],"utf":["20.12","20.13","23.12"],"body":["20.13","23.13"],"class":["20.13","23.13"],"needed":["21.0"],"cannot":["21.0"],"matched":["21.0"],"script":["21.2","25.2"],"play":["21.4","22.19","25.4"],"css":["22.1"],"300px":["22.1","26.1"],"three":["22.2"],"file":["22.2"],"formats":["22.2"],"caches":["22.7"],"last":["22.7"],"level":["22.7"],"immediately":["22.10"],"upon":["22.10"],"load":["22.10"],"space":["22.19"],"toggle":["22.19"],"pause":["22.19"],"these":["22.19"],"devices":["22.22"],"older":["22.22"],"browsers":["22.22"],"document":["22.27"],"queryselector":["22.27"],"opacity":["22.29","26.29"],"setting02":["22.30","26.30"],"green":["22.32","26.32"],"one":["22.34","26.34"],"more":["22.34","26.34"],"chance":["22.34","26.34"],"ploading":["22.39","26.39"],"gif":["22.39","26.39"],"recognition":["22.40"],"player":["22.40"],"parse":["22.40"],"suffixes":["22.40"],"like":["22.40"],"key":["22.47"],"cache":["22.47"],"progress":["22.47"],"however":["22.47"],"播放器的尺寸依赖于容器":["23.3"],"getinstance":["23.4"],"ts":["23.6"],"types":["23.10"],"const":["23.10"],"unpkg":["23.11"],"title":["23.12"],"ffffff":["24.4"],"弹幕颜色":["24.4"],"默认为白色":["24.4"],"promise":["24.5"],"beforevisible":["24.5"],"弹幕显示前的过滤器":["24.5"],"visible":["24.5"],"弹幕层是否可见":["24.5"],"emitter":["24.5"],"是否开启弹幕发射器":["24.5"],"maxlength":["24.5"],"弹幕输入框最大长度":["24.5"],"await":["24.6"],"这里是所有弹幕的过滤器":["24.6"],"包含来自服务端的和来自用户输入的":["24.6"],"plugins":["24.9","24.15","24.16","24.17"],"artplayerplugindanmuku":["24.9","24.15","24.16","24.17"],"xml":["24.10"],"隐藏弹幕":["24.10"],"prompt":["24.12"],"请输入弹幕文本":["24.12"],"弹幕测试文本":["24.12"],"trim":["24.12"],"value":["24.13"],"flex":["24.13"],"alignitems":["24.13"],"center":["24.13"],"切换到新的弹幕库":["24.14"],"config":["24.14"],"v2":["24.14"],"fullscreenweb":["24.16"],"stop":["24.18"],"弹幕停止":["24.18"],"start":["24.18"],"弹幕开始":["24.18"],"当无法匹配到语言时":["25.0"],"会默认显示英文":["25.0"],"i18n":["25.0","25.3"],"或者使用":["26.1"],"aspect":["26.1"],"热键":["26.19"],"描述":["26.19"],"增加音量":["26.19"],"降低音量":["26.19"],"innerhtml":["26.27"],"sd":["26.33"],"后缀的识别":["26.40"],"播放器只能解析这种后缀":["26.40"],"因为播放器默认使用":["26.47"]},{"0":["23.5"],"2":["5.31"],"4":["22.11","22.22"],"5":["5.8","5.9","5.15","15.8","26.7"],"8":["2.0"],"9":["5.32","22.1"],"10":["5.11","5.13","15.11","15.13"],"16":["5.32","15.32","22.1","24.12","26.1"],"22":["19.6"],"60":["22.36","24.5","26.36"],"120":["22.34"],"180":["22.34","26.34"],"200":["24.6"],"240":["26.34"],"360":["9.3"],"720":["9.3","19.3"],"1000":["0.8","0.9","0.10","0.16","10.8","24.5","26.2"],"1080":["9.3","19.3"],"5000":["0.14","10.14"],"比较少用":["0.0"],"warning":["0.1","0.5","0.6","0.7","0.8","5.16","5.20","5.22","5.28","5.33","5.41","10.3","10.7","10.14","15.28","20.5","20.13","22.29","22.30","22.31","22.32","22.39","22.42","22.50","23.13","26.2","26.4","26.7","26.17","26.19","26.31","26.32","26.39","26.42","26.50"],"提示":["0.1","5.16","5.20","5.22","5.33","26.2","26.7","26.10","26.17"],"假如直接修改这个":["0.1"],"元素都是以":["0.2"],"开头命名的":["0.2"],"这是所有":["0.2"],"元素的定义":["0.2"],"mouseenter":["0.3"],"mouseleave":["0.3","10.3"],"loading":["0.5","12.49"],"这是所有图标的定义":["0.5"],"types":["0.5","1.6","11.6","25.0","26.50"],"使用":["0.6","24.9"],"只能更新实例化之后的":["0.6"],"to":["0.7","22.2"],"play":["0.7","4.0","5.2","10.7","15.2","21.3","22.2","25.3"],"如果想马上隐藏":["0.7"],"settimeout":["0.8","0.9","0.10","0.12","0.13","0.14","0.15","0.16","5.2","5.3","5.8","5.11","5.13","5.21","6.4","7.4","8.4","9.8","10.8","10.9","10.10","10.16","15.2","15.8","15.11","15.13","16.4","17.4","18.4","19.8"],"false":["0.8","0.9","0.10","0.15","0.16","10.8","22.29","22.31","24.4","26.29","26.31"],"left":["0.9","7.1","10.9"],"true":["0.10","0.12","0.13","2.19","3.5","3.6","3.7","3.28","3.29","5.1","5.14","5.25","5.34","6.3","10.10","12.16","12.19","12.21","12.22","12.23","12.24","12.25","12.26","12.39","13.5","13.6","13.7","13.28","13.29","13.30","15.1","15.21","15.25","15.34","16.3","19.1","22.25","22.33","26.17","26.25"],"srt":["0.11","5.47","12.28","12.29","12.30","15.47"],"ready":["0.12","5.2","5.3","5.5","5.6","5.7","5.8","5.10","5.17","5.21","5.24","5.25","5.26","5.27","5.29","6.4","7.4","8.4","9.8","10.8","10.9","10.10","10.11","10.12","10.13","10.15","10.16","12.0","12.6","15.2","15.3","15.5","15.8","15.10","15.15","15.17","15.18","15.19","15.21","15.25","15.26","15.29","15.30","16.4","17.4","18.4","19.8","24.17"],"on":["0.17","2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.13","2.14","2.15","2.16","2.17","2.19","2.20","2.21","2.23","2.25","2.26","2.27","2.28","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.8","3.9","3.10","3.17","5.1","5.2","5.3","5.4","5.5","5.6","5.7","5.17","5.24","5.25","5.26","5.27","5.29","5.38","5.39","5.40","5.47","8.4","9.8","10.8","10.11","10.12","10.13","10.15","10.16","12.1","12.3","12.4","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.17","12.19","12.20","12.21","12.23","12.25","12.26","12.27","12.28","12.29","12.30","12.31","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.8","13.9","13.10","13.17","15.1","15.2","15.3","15.5","15.6","15.7","15.8","15.10","15.15","15.17","15.18","15.19","15.21","15.24","15.25","15.26","15.27","15.29","15.38","15.39","15.40","15.47","18.4","19.8","24.15","24.17","26.4"],"非常少使用":["1.0"],"sample":["1.1","3.1","3.3","3.4","3.11","3.12","3.13","3.18","3.21","3.22","3.23","3.24","3.27","3.31","3.32","3.33","3.34","5.4","5.5","5.43","10.11","10.12","11.1","13.8","13.9","13.10","13.11","13.12","13.13","13.17","13.21","13.22","13.23","13.28","13.33","13.34","15.4","15.5","15.6","15.7","15.17","15.24","15.26","15.27","15.29","15.38","15.39","15.40","15.42","15.43","20.10","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.28","22.35","22.37","22.38","22.41","22.44","22.45","22.46","22.49","22.51","23.10","24.8","26.6","26.8","26.9","26.11","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.22","26.23","26.24","26.26","26.28","26.35","26.38","26.41","26.44","26.45","26.46","26.48","26.49","26.51"],"video":["1.1","3.8","3.9","3.10","3.11","3.12","3.13","3.17","3.21","3.22","3.23","3.24","3.31","3.33","5.4","5.5","5.42","10.11","10.13","10.15","11.1","12.1","12.14","13.6","13.7","13.8","13.9","13.10","13.17","13.22","13.28","15.4","15.24","15.26","15.29","15.39","15.42","19.1","20.10","21.1","22.9","22.28","22.36","23.10","24.8","26.5","26.6","26.8","26.9","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.22","26.23","26.24","26.26","26.28","26.37","26.38","26.42","26.44","26.45","26.46","26.48","26.49"],"mp4":["1.1","3.8","3.9","3.10","3.17","3.22","3.28","3.34","5.4","5.5","5.6","5.7","5.24","5.27","5.29","5.38","5.40","5.42","5.43","10.11","10.12","10.13","10.15","12.1","12.3","12.4","12.5","12.14","12.15","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.40","13.5","13.6","13.7","13.8","13.9","13.10","13.17","13.22","13.28","13.29","15.4","15.5","15.6","15.7","15.15","15.17","15.24","15.26","15.27","15.29","15.38","15.39","15.40","15.42","15.43","19.1","20.10","21.1","22.5","22.14","22.15","22.16","22.25","22.36","22.37","22.38","22.42","23.10","24.7","24.8","26.5","26.8","26.9","26.13","26.14","26.15","26.16","26.17","26.21","26.26","26.37","26.38","26.42","26.45","26.46","26.51"],"artplayer":["1.2","1.3","1.4","1.5","1.7","1.8","1.9","1.10","1.11","1.12","3.2","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","13.2","22.11","22.21","22.22","22.41","22.48"],"d":["1.6"],"info":["1.11","2.12","5.15","5.26","5.29","5.30","5.41","5.42","9.5","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","15.9","15.14","15.15","15.23","15.26","15.29","15.30","15.31","15.32","15.35","15.36","19.5","22.32","24.17","26.32"],"const":["2.0","5.18","5.19","9.5","12.0","15.18","15.19","19.5","20.10","24.13"],"onready":["2.0","12.0"],"console":["2.1","2.3","2.4","2.5","2.7","2.8","2.9","2.10","2.11","2.12","2.13","2.14","2.15","2.16","2.17","2.18","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.29","2.30","2.31","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.40","2.41","5.25","5.26","5.29","5.39","5.41","5.42","5.43","9.5","11.2","11.3","11.4","11.5","11.7","11.8","11.9","11.10","11.11","11.12","12.7","12.8","12.9","12.10","12.12","12.13","12.27","12.31","12.41","15.9","15.14","15.15","15.23","15.26","15.29","15.30","15.31","15.35","15.36","15.42","15.43","19.5","20.5","22.32","23.5","24.17","26.32"],"event":["2.5","2.7","2.8","2.9","2.10","2.12","2.13","2.22","2.41","5.41","9.2","9.5","12.5","12.7","12.8","12.9","12.10","12.12","12.13","12.22","12.41","16.1","18.1"],"reconnecttime":["2.11","12.11"],"state":["2.12","2.15","2.16","2.21","2.23","2.24","2.25","2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","9.2","9.6","9.7","12.12","12.15","12.21","12.23","12.24","12.25","12.32","12.33","12.34","12.35","12.36","12.37","12.38","19.2","19.7"],"height":["2.18","9.7","19.6","19.7"],"datauri":["2.26","12.26"],"currenttime":["2.27","12.27"],"offset":["2.28"],"cues":["2.29","2.30","2.31","12.29","12.30","12.31"],"option":["2.31","12.31"],"load":["2.46","12.46"],"方法重新加载它":["2.46"],"基本上用不到":["3.0"],"app":["3.1","3.4","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.24","3.25","3.26","3.27","3.31","3.32","3.34","10.11","10.12","11.1","13.1","13.3","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","13.34","15.4","15.5","15.42","20.10","22.3","22.6","22.8","22.11","22.12","22.14","22.15","22.16","22.18","22.20","22.21","22.22","22.23","22.24","22.26","22.28","22.35","22.38","22.41","22.44","22.45","22.46","22.48","22.49","22.51","23.10","23.13","26.3","26.11","26.22","26.35"],"url":["3.1","3.3","3.4","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.23","3.24","3.25","3.26","3.27","3.31","3.32","3.33","3.34","10.12","11.1","13.1","13.3","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.22","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","13.34","15.4","15.5","15.29","15.42","20.10","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.21","22.22","22.23","22.24","22.26","22.28","22.35","22.38","22.44","22.45","22.46","22.48","22.49","22.51","23.10","26.6","26.11","26.12","26.18","26.20","26.22","26.23","26.24","26.27","26.28","26.35","26.44","26.48","26.49"],"assets":["3.1","3.3","3.4","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.22","3.23","3.24","3.25","3.26","3.27","3.31","3.32","3.33","3.34","10.11","10.12","11.1","13.3","13.4","13.8","13.9","13.10","13.11","13.12","13.13","13.17","13.18","13.21","13.22","13.23","13.24","13.26","13.27","13.31","13.32","13.33","13.34","15.4","15.5","15.29","15.38","15.39","15.40","15.42","15.43","20.10","22.5","22.6","22.8","22.9","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.21","22.22","22.23","22.24","22.26","22.28","22.35","22.37","22.38","22.41","22.44","22.45","22.46","22.48","22.49","22.51","23.10","26.3","26.6","26.8","26.9","26.11","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.21","26.22","26.23","26.24","26.26","26.27","26.28","26.35","26.38","26.41","26.44","26.45","26.46","26.48","26.49","26.51"],"loop":["3.5","3.6","3.7","13.5","13.6","13.7"],"flip":["3.5","3.6","3.7","13.5","13.6","13.7"],"dblclick":["3.17"],"setting":["3.28","3.29","12.28","13.28","13.29","19.1","24.13"],"playbackrate":["3.28","13.28"],"contextmenu":["3.28","3.29","3.30","13.29","13.30"],"aspectratio":["3.29","10.16","13.29"],"show":["3.29","3.30","9.8","13.30","19.8","22.29","22.31","24.11","24.18","26.29","26.31"],"click":["4.0","5.37","5.41","14.0","15.37"],"marginright":["4.0","14.0"],"比较常用":["5.0"],"muted":["5.1","15.1","15.25"],"seek":["5.8","15.8","15.11","15.13"],"switch":["5.12"],"和":["5.12","7.1","24.5"],"的功能是一样的":["5.12"],"只是":["5.12"],"有的视频是没有时长的":["5.16"],"async":["5.18","5.19","15.18","15.19"],"await":["5.18","5.19","15.18","15.19"],"t":["5.23"],"json":["5.28"],"stringify":["5.28"],"resize":["5.33","24.15"],"当你的容器只有宽度":["5.33"],"playsinline":["5.34","15.34"],"m3u8":["5.35","22.2","26.41"],"000":["5.36"],"right":["5.37","7.1","15.37"],"html":["5.37","10.8","10.9","10.10","15.37","20.1","23.1"],"timeupdate":["5.39"],"green":["5.44","15.44"],"1080p":["5.45","15.45"],"png":["5.46","15.46","22.36","22.39","26.36","26.39"],"组件点击事件":["6.1","8.1"],"mounted":["6.1","8.1","16.1","18.1","22.29","26.29"],"组件挂载后触发":["6.1","8.1"],"get":["6.2","6.3","7.2","7.3","8.2","8.3","16.2","16.3","17.2","17.3","18.2","18.3"],"the":["6.2","6.3","6.4","6.5","7.2","7.3","7.4","8.2","8.3","8.4","9.8","16.2","16.3","16.4","16.5","17.2","17.3","17.4","18.2","18.3","18.4","19.8","22.19"],"element":["6.2","6.3","7.2","7.3","8.2","8.3","16.2","16.3","17.2","17.3","18.2","18.3"],"of":["6.2","6.3","7.2","7.3","8.2","8.3","10.5","12.53","12.62","15.41","16.2","16.3","17.1","17.2","17.3","18.2","18.3"],"by":["6.2","6.3","6.4","6.5","7.2","7.4","8.4","16.2","16.3","16.4","16.5","17.2","17.4","18.4"],"delete":["6.4","7.4","8.4","9.8","16.4","17.4","18.4","19.8"],"控制控制器出现的左右位置":["7.1"],"selector":["7.1","17.1"],"array":["7.1","17.1"],"return":["7.2","17.2"],"control":["7.2","7.3","7.4","17.2","17.3","17.4"],"200px":["8.5","18.5"],"svg":["9.2","9.6","9.7","19.2","19.6","19.7"],"item":["9.2","9.6","19.2"],"720p":["9.3","19.3"],"360p":["9.3","19.3"],"nextstate":["9.5","19.5"],"src":["9.6","9.7","19.6","19.7"],"pip":["9.9","19.9"],"mode":["9.9","19.9"],"close":["9.9","19.9"],"are":["10.0","11.0","15.0","22.2"],"less":["10.0"],"commonly":["10.0","15.0"],"modify":["10.1","10.4","20.11","20.13"],"this":["10.1","10.2"],"object":["10.1"],"named":["10.2"],"with":["10.2","20.12","23.12"],"a":["10.2","12.48","15.12"],"prefix":["10.2"],"is":["10.2","15.12","20.5"],"definition":["10.2","10.5"],"note":["10.3","10.14","15.28","20.13"],"if":["10.3","10.6","10.7","22.4","22.17"],"you":["10.3","10.6","10.7","15.33","22.47"],"need":["10.3","20.11","20.13","22.47"],"that":["10.3","15.16"],"only":["10.3","10.14","15.5","15.41","22.19"],"exist":["10.3","15.41"],"during":["10.3"],"can":["10.4"],"after":["10.6","10.14","16.1","18.1","22.19"],"instantiation":["10.6"],"want":["10.6","10.7"],"before":["10.6","20.13"],"hide":["10.7","24.18"],"some":["10.8","10.9","10.10"],"text":["10.8","10.9","10.10","24.7","24.9"],"position":["10.9","15.37"],"these":["10.14","15.16"],"take":["10.14","22.19"],"effect":["10.14","22.19"],"subtitleoffset":["10.16"],"something":["10.17"],"dosomething":["10.17"],"very":["11.0"],"rarely":["11.0"],"following":["11.6","20.11"],"address":["11.6"],"off":["12.0"],"having":["12.42"],"stop":["12.42"],"for":["12.42","21.0","22.10","22.30","22.31","22.32"],"stopping":["12.43"],"buffer":["12.43"],"property":["12.45"],"changes":["12.45"],"method":["12.46","15.12"],"called":["12.46"],"end":["12.47"],"point":["12.47"],"supported":["12.48","22.2"],"finished":["12.49"],"lack":["12.53"],"resource":["12.54"],"unexpectedly":["12.58"],"not":["12.58","20.5"],"suspended":["12.59"],"been":["12.60","15.16"],"updated":["12.60"],"future":["13.0"],"and":["13.0","20.11"],"container":["13.1","13.4","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","13.34","20.10","22.3","22.18","22.21","22.22","22.35","22.38","22.41","22.44","22.48","23.3","26.35"],"log":["13.2","20.5","23.5"],"new":["13.14","13.15","13.16","13.25","13.34","20.8","20.9","22.11","22.22","22.27","23.8","26.27"],"var":["13.34","22.11","22.22"],"art":["13.34","22.11","22.22","22.27"],"controls":["14.0","17.1"],"tooltip":["14.0"],"which":["15.0"],"returns":["15.12"],"promise":["15.12","24.9"],"it":["15.12","15.33","15.41","20.13"],"resolve":["15.12"],"s":["15.12","15.41","22.47"],"fully":["15.16"],"decoded":["15.16"],"in":["15.16","20.4"],"must":["15.20","22.10"],"have":["15.20","15.22","20.3"],"prior":["15.20","15.22"],"user":["15.20","15.22"],"interaction":["15.20","15.22"],"e":["15.20","15.22","22.7"],"g":["15.20","15.22","22.7"],"has":["15.20","15.22","22.47"],"clicked":["15.22"],"dimension":["15.28"],"an":["15.33","22.4"],"unknown":["15.33"],"calculates":["15.33"],"duration":["15.41"],"lifecycle":["15.41"],"triggered":["16.1","18.1"],"mount":["16.1","18.1"],"list":["17.1"],"objects":["17.1"],"img":["19.6"],"width":["19.6"],"defined":["20.3"],"tip":["20.3","20.9","23.9","23.11"],"see":["20.3"],"more":["20.3","22.10","22.42"],"will":["20.4"],"current":["20.8","23.8"],"full":["20.9"],"typescript":["20.9","23.9"],"support":["20.11"],"even":["20.11"],"older":["20.11"],"configuration":["20.11","22.31","22.32"],"title":["20.12"],"import":["20.12","23.12"],"map":["20.12","23.12"],"displayed":["21.0"],"i18n":["21.0","21.3"],"implementation":["21.0"],"lang":["21.1","25.1"],"window":["21.2","25.2"],"imported":["21.4","25.4"],"use":["22.1"],"aspect":["22.1"],"ratio":["22.1","26.1"],"ogg":["22.2","26.2"],"webm":["22.2","26.2"],"other":["22.2"],"like":["22.2"],"or":["22.2"],"flv":["22.2"],"inside":["22.4"],"callback":["22.4"],"refers":["22.4"],"instance":["22.4"],"however":["22.4"],"arrow":["22.4"],"upon":["22.7"],"next":["22.7"],"initialization":["22.7"],"page":["22.7"],"refresh":["22.7"],"be":["22.10"],"set":["22.10"],"capture":["22.17"],"may":["22.17"],"fail":["22.17"],"source":["22.17"],"player":["22.19"],"gains":["22.19"],"focus":["22.19"],"js":["22.22"],"innerhtml":["22.27"],"component":["22.31","22.32"],"sd":["22.33"],"480p":["22.33","26.33"],"谁でもいいはずなのに":["22.34","26.34"],"夏の想い出がまわる":["22.34","26.34"],"all":["22.39"],"icon":["22.39"],"but":["22.40"],"cannot":["22.40"],"zh":["22.43","26.43"],"cn":["22.43","26.43"],"different":["22.47"],"variable":["22.50"],"reference":["22.50"],"的尺寸":["23.3"],"所以你的容器":["23.3"],"必须是有尺寸的":["23.3"],"非响应式":["23.4"],"在":["23.4"],"400px":["23.5"],"margin":["23.5"],"60px":["23.5"],"auto":["23.5"],"全部":["23.9"],"定义":["23.9"],"volume":["23.10"],"假如你要兼容更古老的浏览器时":["23.11"],"请修改以下配置然后自行构建":["23.11"],"body":["23.12"],"border":["24.4"],"弹幕是否有描边":["24.4"],"默认为":["24.4"],"locktime":["24.5"],"输入框锁定时间":["24.5"],"theme":["24.5"],"dark":["24.5","24.16"],"弹幕主题":["24.5"],"支持":["24.5"],"length":["24.6"],"这是弹幕即将显示的时触发的函数":["24.6"],"当返回true后才表示可以马上发送到播放器里":["24.6"],"弹幕已经出现在播放器里":["24.6"],"你可以访问到弹幕的dom元素里":["24.6"],"plugins":["24.7","24.8"],"artplayerplugindanmuku":["24.7","24.8"],"resovle":["24.9"],"function":["24.10","26.32"],"target":["24.11"],"innertext":["24.11"],"else":["24.11"],"color":["24.12"],"math":["24.12"],"floor":["24.12"],"random":["24.12"],"0xffffff":["24.12"],"tostring":["24.12"],"queryselector":["24.13"],"addeventlistener":["24.13"],"追加":["24.14"],"追加新的弹幕库":["24.14"],"参数类型和option":["24.14"],"danmuku相同":["24.14"],"xml":["24.15","24.17"],"弹幕隐藏":["24.18"],"弹幕显示":["24.18"],"写法参考":["25.0","26.50"],"默认支持三种视频文件格式":["26.2"],"播放器会缓存最后一次音量的大小":["26.7"],"假如希望默认进入页面就能自动播放视频":["26.10"],"必需为":["26.10"],"视频快进":["26.19"],"视频快退":["26.19"],"space":["26.19"],"切换播放":["26.19"],"暂停":["26.19"],"subtitle":["26.25"],"args":["26.32"],"hd":["26.33"],"webkit":["26.38"],"全部图标的定义":["26.39"],"但无法解析这种后缀":["26.40"],"作为":["26.47"],"key":["26.47"],"来缓存播放进度的":["26.47"],"但假如你的同一个视频的":["26.47"]},{"0":["5.10","5.11","5.13","5.16","5.23","15.10","15.11","15.13","15.16","15.23","20.10","23.10"],"1":["5.47","9.7","15.47","19.7","24.7","24.9"],"2":["5.8","15.8","15.31"],"5":["5.6","5.7","9.7","15.6","15.7","15.9","15.15","19.7","20.10","23.10"],"9":["15.32","26.1"],"10":["5.46","9.7","15.46","19.7","22.36","26.36"],"60":["5.46","15.46"],"240":["22.34"],"300":["22.34","26.34"],"360":["19.3"],"404":["3.14","3.15","13.14","13.15"],"1000":["0.13","0.15","10.9","10.10","10.13","10.15","10.16"],"3000":["0.12","5.2","5.3","5.8","5.11","5.13","5.21","5.45","6.4","6.5","7.4","7.5","8.4","8.5","9.8","9.9","10.12","15.2","15.3","15.8","15.11","15.13","15.21","15.45","16.4","16.5","17.4","17.5","18.4","18.5","19.8","19.9"],"对象":["0.1"],"播放器不会马上做出响应":["0.1"],"types":["0.2","2.0","10.2","10.5","20.9","21.0","22.39","22.50","23.9","26.39"],"d":["0.2","0.5","2.0","10.2","10.5","11.6","12.0","21.0","22.39","22.50","25.0","26.39","26.50"],"ts":["0.2","0.5","1.6","2.0","10.2","10.5","11.6","12.0","21.0","22.39","22.50","25.0","26.39","26.50"],"warning":["0.3","0.9","0.10","0.14","0.16","2.0","10.8","10.9","10.10","10.16","12.0","22.1","22.36","22.43","23.5","26.1","26.29","26.30","26.36","26.43"],"提示":["0.3","0.14","5.28","5.41","23.13","26.1","26.4","26.19"],"假如你需要一些":["0.3","5.41"],"事件只存在于播放器的生命周期上时":["0.3","5.41"],"强烈建议使用这些函数":["0.3"],"以避免造成内存泄漏":["0.3","5.41"],"your":["0.4","5.17","10.4","15.17"],"假如想在实例化之前更新":["0.6"],"请使用基础选项的":["0.6"],"来更新":["0.6"],"的显示":["0.7"],"组件配置":["0.8","0.9","0.10","26.29","26.31","26.32"],"请参考以下地址":["0.8","0.9","0.10","0.16","26.29","26.30","26.31","26.32"],"component":["0.8","0.9","0.10","0.16","10.8","10.9","10.10","10.16","22.29","22.30","26.29","26.30","26.31","26.32"],"color":["0.11","10.11","22.37","26.37"],"red":["0.11","10.11"],"false":["0.12","0.13","5.21","9.9","10.9","10.10","10.12","10.13","10.15","10.16","15.21","19.9","22.22","22.45","26.22","26.45"],"只在播放器获得焦点后":["0.14","26.19"],"如点击了播放器后":["0.14","26.19"],"这些快捷键才会生效":["0.14","26.19"],"true":["0.15","3.11","3.12","3.13","3.21","3.22","3.23","3.24","5.24","10.12","10.13","10.15","13.11","13.12","13.13","13.21","13.22","13.23","13.24","15.14","15.24","22.8","22.9","22.11","22.12","22.13","22.14","22.15","22.16","22.18","22.20","22.23","22.24","22.26","22.27","22.38","22.44","22.46","22.48","22.49","24.12","26.8","26.9","26.11","26.12","26.13","26.14","26.15","26.16","26.18","26.20","26.23","26.24","26.26","26.27","26.38","26.44","26.46","26.48","26.49"],"设置面板":["0.16"],"html":["0.16","10.16","22.42","22.43","24.2","26.42","26.43"],"ready":["0.17","2.0","5.1","5.4","5.47","10.17","15.1","15.4","15.6","15.7","15.24","15.27","15.47"],"off":["2.0"],"全部事件请参考以下地址":["2.0"],"events":["2.0"],"info":["2.1","2.2","2.3","2.4","2.5","2.6","2.7","2.8","2.9","2.10","2.11","2.13","2.14","2.15","2.16","2.17","2.18","2.19","2.20","2.21","2.22","2.23","2.24","2.25","2.26","2.27","2.28","2.29","2.30","2.31","5.18","5.19","5.25","5.38","5.39","5.40","5.43","9.2","9.6","12.1","12.2","12.3","12.4","12.5","12.6","12.7","12.8","12.9","12.10","12.11","12.12","12.13","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.27","12.28","12.29","12.30","12.31","15.18","15.19","15.25","15.38","15.39","15.40","15.42","15.43","19.2","19.6"],"console":["2.2","2.6","2.19","2.28","2.39","3.8","3.9","3.10","3.17","5.18","5.19","5.38","5.40","9.2","9.6","12.1","12.2","12.3","12.4","12.5","12.6","12.11","12.14","12.15","12.16","12.17","12.18","12.19","12.20","12.21","12.22","12.23","12.24","12.25","12.26","12.28","12.29","12.30","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","13.8","13.9","13.10","13.17","15.18","15.19","15.25","15.38","15.39","15.40","19.2","19.6"],"log":["2.32","2.33","2.34","2.35","2.36","2.37","2.38","2.39","2.40","2.41","3.8","3.9","3.10","3.17","12.32","12.33","12.34","12.35","12.36","12.37","12.38","12.39","12.40","12.41","13.8","13.9","13.10","13.17"],"video":["3.1","3.3","3.4","3.16","3.18","3.19","3.20","3.25","3.26","3.27","3.32","13.3","13.4","13.11","13.12","13.13","13.16","13.18","13.19","13.20","13.21","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","22.3","22.6","22.8","22.11","22.12","22.18","22.20","22.21","22.22","22.23","22.24","22.26","22.27","22.35","22.44","22.49","26.3","26.11","26.27","26.35"],"mp4":["3.1","3.3","3.4","3.11","3.12","3.13","3.14","3.15","3.16","3.18","3.19","3.20","3.21","3.23","3.24","3.25","3.26","3.27","3.31","3.32","3.33","11.1","13.1","13.3","13.4","13.11","13.12","13.13","13.14","13.15","13.16","13.18","13.19","13.20","13.21","13.23","13.24","13.25","13.26","13.27","13.31","13.32","13.33","13.34","22.3","22.6","22.8","22.9","22.11","22.12","22.13","22.18","22.20","22.21","22.22","22.23","22.24","22.26","22.27","22.28","22.35","22.44","22.45","22.46","22.48","22.49","22.51","26.3","26.6","26.11","26.12","26.18","26.20","26.22","26.23","26.24","26.27","26.28","26.35","26.44","26.48","26.49"],"playbackrate":["3.5","3.6","3.7","13.5","13.6","13.7"],"aspectratio":["3.5","3.6","3.7","13.5","13.6","13.7"],"autoplayback":["3.11","3.12","3.13","13.11","13.12","13.13"],"sample":["3.14","3.15","3.16","3.19","3.20","3.25","3.26","13.1","13.3","13.4","13.14","13.15","13.16","13.18","13.19","13.20","13.24","13.25","13.26","13.27","13.31","13.32","22.3","22.11","22.21","22.22","22.27","22.48","26.3","26.27"],"autoorientation":["3.21","13.21"],"show":["3.22","3.28","13.22","13.28","13.29"],"fastforward":["3.23","3.24","13.23","13.24"],"fullscreenweb":["3.31","13.31"],"miniprogressbar":["3.33","13.33"],"只销毁界面":["3.34"],"不主动清空":["3.34"],"pause":["4.0","14.0"],"layer":["4.0","14.0"],"png":["4.0","14.0"],"仅重置":["5.5"],"不移除界面":["5.5"],"t":["5.10","5.11","5.13","15.10","15.11","15.13","15.23"],"方法会返回":["5.12"],"promise":["5.12"],"当":["5.12"],"resolve":["5.12"],"时表示新地址是可以播放":["5.12"],"reject":["5.12","15.12"],"时表示新地址加载错误":["5.12"],"例如直播中的视频或者没被解码完成的视频":["5.16"],"这个时候获取的时长会是":["5.16"],"name":["5.17","15.17"],"由于浏览器安全机制":["5.20","5.22","26.17"],"触发窗口全屏前":["5.20"],"页面必须先存在交互":["5.20","5.22"],"例如用户点击过页面":["5.20","5.22"],"触发画中画前":["5.22"],"默认":["5.26"],"尺寸和坐标信息是通过":["5.28"],"getboundingclientrect":["5.28","15.28"],"获取的":["5.28"],"但不知道具体高度时":["5.33"],"这个属性很有用":["5.33"],"它能自动计算出视频的高度":["5.33"],"但你需要确定设置这个属性的时机":["5.33"],"强烈建议使用该函数":["5.41"],"4k":["5.45","15.45"],"number":["5.46","15.46","24.13"],"column":["5.46","15.46"],"tooltip":["6.1","8.1","16.1","18.1"],"组件的提示文本":["6.1","8.1"],"remove":["6.4","7.4","8.4","9.8","16.4","17.4","18.4"],"选择列表的对象数组":["7.1"],"onselect":["7.1","17.1"],"选择列表的元素被点击时触发的函数":["7.1"],"by":["7.3","8.2","8.3","9.8","17.3","18.2","18.3","19.8","22.19"],"left":["8.5","18.5","22.2"],"return":["9.2","9.5","9.6","19.2","19.5","19.6"],"switchquality":["9.3","19.3"],"open":["9.5","19.5"],"event":["9.6"],"x":["9.6","19.6"],"range":["9.7","19.7"],"switch":["9.9","19.9"],"used":["10.0","11.0","13.0","15.0","22.4"],"will":["10.1","15.16","20.5","22.4","22.7"],"not":["10.1","13.0","13.34","15.5","22.4"],"respond":["10.1"],"immediately":["10.1","10.7"],"s":["10.3"],"lifecycle":["10.3"],"strongly":["10.3","15.41"],"recommended":["10.3","15.41"],"use":["10.3","10.6","15.41","22.40"],"these":["10.3"],"functions":["10.3"],"avoid":["10.3","15.41"],"memory":["10.3","15.41"],"leaks":["10.3","15.41"],"please":["10.6","10.9","10.10","10.16","12.0","22.2","22.10","22.29","22.30","22.31","22.32"],"option":["10.6"],"in":["10.6","20.5"],"basic":["10.6"],"options":["10.6","22.1"],"refer":["10.8","10.9","10.10","10.16","12.0","22.2","22.29","22.30","22.31","22.32"],"following":["10.8","20.3"],"address":["10.8"],"for":["10.8","10.9","10.10","10.16","12.0","22.4","22.29","22.47"],"configuration":["10.8","10.9","10.10","22.29"],"srt":["10.11","22.25","26.25"],"settimeout":["10.12","10.13","10.15","15.3","15.21"],"gains":["10.14"],"focus":["10.14"],"e":["10.14","22.19"],"g":["10.14","22.19"],"clicking":["10.14","22.19"],"on":["10.17","15.4","15.20","15.22","22.2","22.19","24.6"],"a":["12.0"],"complete":["12.0"],"list":["12.0"],"of":["12.0"],"state":["12.39"],"further":["12.42"],"buffering":["12.42"],"content":["12.43"],"to":["12.46","15.33","22.29","22.30","22.31","22.32"],"reload":["12.46"],"it":["12.46","20.11"],"format":["12.48"],"data":["12.53","12.62"],"forthcoming":["12.58"],"generally":["13.0"],"assets":["13.1","13.14","13.15","13.16","13.19","13.20","13.25","22.3","22.11","22.27"],"dblclick":["13.17"],"contextmenu":["13.28"],"destroys":["13.34"],"does":["13.34"],"clear":["13.34"],"play":["14.0"],"do":["15.5"],"interface":["15.5"],"playable":["15.12"],"fails":["15.12"],"load":["15.12"],"cases":["15.16"],"obtained":["15.16","15.28"],"be":["15.16"],"clicked":["15.20","17.1"],"before":["15.20","15.22"],"triggering":["15.20","15.22"],"default":["15.26"],"is":["15.28","22.17"],"via":["15.28"],"need":["15.33"],"determine":["15.33"],"appropriate":["15.33"],"timing":["15.33"],"m3u8":["15.35","22.41","26.2"],"000":["15.36"],"timeupdate":["15.39"],"this":["15.41","22.7"],"text":["16.1","18.1"],"when":["17.1"],"item":["17.1"],"script":["20.1","23.1","24.2"],"examples":["20.3"],"at":["20.3"],"link":["20.3"],"example":["20.3","23.3"],"update":["20.4","20.5"],"the":["20.4","20.5"],"player":["20.4","20.12","23.12"],"reactive":["20.5"],"directly":["20.5"],"modifying":["20.5"],"definitions":["20.9","22.39"],"packages":["20.9","23.9"],"volume":["20.10"],"art8":["20.10","23.10"],"new":["20.10","23.10"],"yourself":["20.11"],"scripts":["20.11","23.11"],"reference":["20.11","21.0"],"documentation":["20.11"],"browserslist":["20.11","23.11"],"body":["20.12"],"div":["20.12","23.12"],"id":["20.12","23.12"],"importing":["20.13"],"dependency":["20.13"],"take":["20.13"],"effect":["20.13"],"see":["21.0"],"or":["21.1","25.1"],"note":["22.1"],"among":["22.1"],"all":["22.1"],"only":["22.1"],"required":["22.1"],"third":["22.2"],"party":["22.2"],"libraries":["22.2"],"section":["22.2"],"point":["22.4"],"jpg":["22.5","26.5"],"ffad00":["22.6","26.6"],"read":["22.7","22.10"],"cached":["22.7"],"value":["22.7"],"information":["22.10"],"policy":["22.10","26.10"],"changes":["22.10","26.10"],"url":["22.11","22.27"],"setting":["22.14","22.15","22.16","22.25","26.14","26.15","26.16","26.25"],"cross":["22.17"],"origin":["22.17"],"with":["22.17"],"website":["22.17"],"disable":["22.22"],"hd":["22.33"],"720p":["22.33","26.33"],"こんなとこにあるはずもないのに":["22.34","26.34"],"终わり":["22.34","26.34"],"generate":["22.36"],"online":["22.36"],"tool":["22.36","26.36"],"03a9f4":["22.37","26.37"],"font":["22.37","24.5","26.37"],"size":["22.37","24.5","26.37"],"30px":["22.37","26.37"],"webkit":["22.38"],"playsinline":["22.38","26.38"],"therefore":["22.40"],"if":["22.40"],"you":["22.40"],"best":["22.40"],"also":["22.40"],"settings":["22.42","22.43"],"start":["22.42","22.43","26.42","26.43"],"i18n":["22.42","26.42"],"tw":["22.43","26.43"],"more":["22.43"],"identify":["22.47"],"unique":["22.47"],"document":["22.51","26.51"],"createelement":["22.51","26.51"],"tip":["23.3"],"以下链接可以看到更多的使用例子":["23.3"],"里直接修改":["23.4","23.5"],"是不会改变播放器的":["23.4","23.5"],"非响应式":["23.5"],"在":["23.5"],"构建配置":["23.11"],"build":["23.11"],"参考文档":["23.11"],"你需要在引入":["23.13"],"依赖前来修改它才会生效":["23.13"],"style":["24.4"],"弹幕自定义样式":["24.4"],"默认为空对象":["24.4"],"light":["24.5"],"只在自定义挂载时生效":["24.5"],"不透明度配置项":["24.5"],"弹幕字号配置项":["24.5"],"显示区域配置项":["24.5"],"弹幕速度配置项":["24.5"],"颜色列表配置项":["24.5"],"ref":["24.6"],"innerhtml":["24.6"],"ଘ":["24.6"],"੭ˊᵕˋ":["24.6"],"੭":["24.6"],"使用数组":["24.7"],"time":["24.7","24.9"],"异步返回":["24.9"],"显示弹幕":["24.10","24.11"],"hide":["24.11"],"border":["24.12"],"change":["24.13"],"fontsize":["24.13"],"const":["24.14"],"target":["24.14"],"xml":["24.16"],"也可以手动挂载":["24.16"],"reset":["24.18"],"弹幕重置":["24.18"],"destroy":["24.18"],"弹幕销毁":["24.18"],"全部选项里":["26.1"],"只有":["26.1"],"是必填的":["26.1"],"如需要播放":["26.2"],"或者":["26.2"],"flv":["26.2"],"等其它格式":["26.2"],"请参考左侧的":["26.2"],"第三方库":["26.2"],"回调函数里的":["26.4"],"就是播放器实例":["26.4"],"但回调函数假如使用了箭头函数":["26.4"],"则不会指向播放器实例":["26.4"],"下次初始化时":["26.7"],"如刷新页面":["26.7"],"播放器会读取该缓存值":["26.7"],"更多信息请阅读":["26.10"],"假如视频源地址和网站是跨域的":["26.17"],"可能会出现截图失败":["26.17"],"关闭毛玻璃效果":["26.22"],"在线生成预览图":["26.36"],"thumbnail":["26.36"],"所以假如你使用了":["26.40"],"最好同时要指明":["26.40"],"function":["26.41"],"更多的语言设置":["26.42","26.43"],"是不同的话":["26.47"],"那么你需要使用":["26.47"],"来标识视频的唯一":["26.47"]}]'},t={"0.0":{t:"# 高级属性",p:`这里的 高级属性 是指挂载在 实例 的 二级属性,比较少用
+`,l:"advanced/built-in.html",a:"高级属性"},"0.1":{t:"`option`",p:`播放器的选项
+<div className="run-code">▶ Run Code< ...`,l:"advanced/built-in.html#option",a:"option"},"0.2":{t:"`template`",p:`管理播放器所有的 DOM 元素
+<div className="run-code">▶ Ru ...`,l:"advanced/built-in.html#template",a:"template"},"0.3":{t:"`events`",p:"管理播放器所有的 DOM 事件,实质上是代理了 addEventListener 和 removeEventListener ...",l:"advanced/built-in.html#events",a:"events"},"0.4":{t:"`storage`",p:`管理播放器的本地存储
 
 name 属性用于设置缓存的 key
 set 方法用于设置缓存
 get 方法用于获取缓存
-del 方 ...`,l:"advanced/built-in.html#storage",a:"storage"},"0.5":{t:"`icons`\r",p:`管理播放器所有的 svg 图标
-<div className="run-code">▶ Ru ...`,l:"advanced/built-in.html#icons",a:"icons"},"0.6":{t:"`i18n`\r",p:`管理播放器的 i18n
+del 方 ...`,l:"advanced/built-in.html#storage",a:"storage"},"0.5":{t:"`icons`",p:`管理播放器所有的 svg 图标
+<div className="run-code">▶ Ru ...`,l:"advanced/built-in.html#icons",a:"icons"},"0.6":{t:"`i18n`",p:`管理播放器的 i18n
 
 get 方法用于获取 i18n 的值
 update 方法用于更新 i18n 对象
 
-<div ...`,l:"advanced/built-in.html#i18n",a:"i18n"},"0.7":{t:"`notice`\r",p:`管理播放器的提示语,只有一个 show 属性用于显示提示语
-<div className="run-code ...`,l:"advanced/built-in.html#notice",a:"notice"},"0.8":{t:"`layers`\r",p:`管理播放器的层
+<div ...`,l:"advanced/built-in.html#i18n",a:"i18n"},"0.7":{t:"`notice`",p:`管理播放器的提示语,只有一个 show 属性用于显示提示语
+<div className="run-code ...`,l:"advanced/built-in.html#notice",a:"notice"},"0.8":{t:"`layers`",p:`管理播放器的层
 
 add 方法用于动态添加层
 remove 方法用于动态删除层
 update 方法用于动态更新层
-show  ...`,l:"advanced/built-in.html#layers",a:"layers"},"0.9":{t:"`controls`\r",p:`管理播放器的控制器
+show  ...`,l:"advanced/built-in.html#layers",a:"layers"},"0.9":{t:"`controls`",p:`管理播放器的控制器
 
 add 方法用于动态添加控制器
 remove 方法用于动态删除控制器
-update 方法用于动态更新控 ...`,l:"advanced/built-in.html#controls",a:"controls"},"0.10":{t:"`contextmenu`\r",p:`管理播放器的右键菜单
+update 方法用于动态更新控 ...`,l:"advanced/built-in.html#controls",a:"controls"},"0.10":{t:"`contextmenu`",p:`管理播放器的右键菜单
 
 add 方法用于动态添加菜单
 remove 方法用于动态删除菜单
-update 方法用于动态更新菜单 ...`,l:"advanced/built-in.html#contextmenu",a:"contextmenu"},"0.11":{t:"`subtitle`\r",p:`管理播放器的字幕功能
+update 方法用于动态更新菜单 ...`,l:"advanced/built-in.html#contextmenu",a:"contextmenu"},"0.11":{t:"`subtitle`",p:`管理播放器的字幕功能
 
 url 属性设置和返回当前字幕地址
 style 方法设置当前字幕的样式
-switch 方法设置当前字 ...`,l:"advanced/built-in.html#subtitle",a:"subtitle"},"0.12":{t:"`info`\r",p:`管理播放器的信息面板,常用于查看当前播放器和视频的运行状态,例如版本号、分辨率、时长等。
+switch 方法设置当前字 ...`,l:"advanced/built-in.html#subtitle",a:"subtitle"},"0.12":{t:"`info`",p:`管理播放器的信息面板,常用于查看当前播放器和视频的运行状态,例如版本号、分辨率、时长等。
 
-通过 art.info.show ...`,l:"advanced/built-in.html#info",a:"info"},"0.13":{t:"`loading`\r",p:`管理播放器的加载层
+通过 art.info.show ...`,l:"advanced/built-in.html#info",a:"info"},"0.13":{t:"`loading`",p:`管理播放器的加载层
 
 show 属性用于设置是否显示加载层
 toggle 属性用于切换是否显示加载层
 
-<div cl ...`,l:"advanced/built-in.html#loading",a:"loading"},"0.14":{t:"`hotkey`\r",p:`管理播放器的快捷键功能
+<div cl ...`,l:"advanced/built-in.html#loading",a:"loading"},"0.14":{t:"`hotkey`",p:`管理播放器的快捷键功能
 
 add 方法用于添加快捷键
 remove 方法用于删除快捷键
 
-<div className ...`,l:"advanced/built-in.html#hotkey",a:"hotkey"},"0.15":{t:"`mask`\r",p:`管理播放器的遮罩层
+<div className ...`,l:"advanced/built-in.html#hotkey",a:"hotkey"},"0.15":{t:"`mask`",p:`管理播放器的遮罩层
 
 show 属性用于设置是否显示遮罩层
 toggle 属性用于切换是否显示遮罩层
 
-<div cl ...`,l:"advanced/built-in.html#mask",a:"mask"},"0.16":{t:"`setting`\r",p:`管理播放器的设置面板
+<div cl ...`,l:"advanced/built-in.html#mask",a:"mask"},"0.16":{t:"`setting`",p:`管理播放器的设置面板
 
 add 方法用于动态添加设置项
 remove 方法用于动态删除设置项
-update 方法用于动态更新 ...`,l:"advanced/built-in.html#setting",a:"setting"},"0.17":{t:"`plugins`\r",p:`管理播放器的插件功能,只有一个方法 add 用于动态添加插件
-<div className="run-cod ...`,l:"advanced/built-in.html#plugins",a:"plugins"},"1.0":{t:"# 静态属性\r",p:`这里的 静态属性 是指挂载在 构造函数 的 一级属性,非常少使用
-`,l:"advanced/class.html",a:"静态属性"},"1.1":{t:"`instances`\r",p:`返回全部播放器实例的数组,假如你想同时管理多个播放器的时候,可以用到该属性
-<div className=" ...`,l:"advanced/class.html#instances",a:"instances"},"1.2":{t:"`version`\r",p:`返回播放器的版本信息
-<div className="run-code">▶ Run Cod ...`,l:"advanced/class.html#version",a:"version"},"1.3":{t:"`env`\r",p:`返回播放器的环境变量
-<div className="run-code">▶ Run Cod ...`,l:"advanced/class.html#env",a:"env"},"1.4":{t:"`build`\r",p:`返回播放器的打包时间
-<div className="run-code">▶ Run Cod ...`,l:"advanced/class.html#build",a:"build"},"1.5":{t:"`config`\r",p:`返回视频的默认配置
-<div className="run-code">▶ Run Code ...`,l:"advanced/class.html#config",a:"config"},"1.6":{t:"`utils`\r",p:`返回播放器的工具函数集合
-<div className="run-code">▶ Run C ...`,l:"advanced/class.html#utils",a:"utils"},"1.7":{t:"`scheme`\r",p:`返回播放器选项的校验方案
-<div className="run-code">▶ Run C ...`,l:"advanced/class.html#scheme",a:"scheme"},"1.8":{t:"`Emitter`\r",p:`返回事件分发器的构造函数
-<div className="run-code">▶ Run C ...`,l:"advanced/class.html#emitter",a:"emitter"},"1.9":{t:"`validator`\r",p:`返回选项的校验函数
-<div className="run-code">▶ Run Code ...`,l:"advanced/class.html#validator",a:"validator"},"1.10":{t:"`kindOf`\r",p:`返回类型检测的函数工具
-<div className="run-code">▶ Run Co ...`,l:"advanced/class.html#kindof",a:"kindof"},"1.11":{t:"`html`\r",p:`返回播放器所需的 html 字符串
-<div className="run-code">▶  ...`,l:"advanced/class.html#html",a:"html"},"1.12":{t:"`option`\r",p:`返回播放器的默认选项
-<div className="run-code">▶ Run Cod ...`,l:"advanced/class.html#option",a:"option"},"2.0":{t:"# 实例事件\r",p:`播放器的事件分为两种,一种视频的 原生事件 (前缀 video:),另外一种是 自定义事件
+update 方法用于动态更新 ...`,l:"advanced/built-in.html#setting",a:"setting"},"0.17":{t:"`plugins`",p:`管理播放器的插件功能,只有一个方法 add 用于动态添加插件
+<div className="run-cod ...`,l:"advanced/built-in.html#plugins",a:"plugins"},"1.0":{t:"# 静态属性",p:`这里的 静态属性 是指挂载在 构造函数 的 一级属性,非常少使用
+`,l:"advanced/class.html",a:"静态属性"},"1.1":{t:"`instances`",p:`返回全部播放器实例的数组,假如你想同时管理多个播放器的时候,可以用到该属性
+<div className=" ...`,l:"advanced/class.html#instances",a:"instances"},"1.2":{t:"`version`",p:`返回播放器的版本信息
+<div className="run-code">▶ Run Cod ...`,l:"advanced/class.html#version",a:"version"},"1.3":{t:"`env`",p:`返回播放器的环境变量
+<div className="run-code">▶ Run Cod ...`,l:"advanced/class.html#env",a:"env"},"1.4":{t:"`build`",p:`返回播放器的打包时间
+<div className="run-code">▶ Run Cod ...`,l:"advanced/class.html#build",a:"build"},"1.5":{t:"`config`",p:`返回视频的默认配置
+<div className="run-code">▶ Run Code ...`,l:"advanced/class.html#config",a:"config"},"1.6":{t:"`utils`",p:`返回播放器的工具函数集合
+<div className="run-code">▶ Run C ...`,l:"advanced/class.html#utils",a:"utils"},"1.7":{t:"`scheme`",p:`返回播放器选项的校验方案
+<div className="run-code">▶ Run C ...`,l:"advanced/class.html#scheme",a:"scheme"},"1.8":{t:"`Emitter`",p:`返回事件分发器的构造函数
+<div className="run-code">▶ Run C ...`,l:"advanced/class.html#emitter",a:"emitter"},"1.9":{t:"`validator`",p:`返回选项的校验函数
+<div className="run-code">▶ Run Code ...`,l:"advanced/class.html#validator",a:"validator"},"1.10":{t:"`kindOf`",p:`返回类型检测的函数工具
+<div className="run-code">▶ Run Co ...`,l:"advanced/class.html#kindof",a:"kindof"},"1.11":{t:"`html`",p:`返回播放器所需的 html 字符串
+<div className="run-code">▶  ...`,l:"advanced/class.html#html",a:"html"},"1.12":{t:"`option`",p:`返回播放器的默认选项
+<div className="run-code">▶ Run Cod ...`,l:"advanced/class.html#option",a:"option"},"2.0":{t:"# 实例事件",p:`播放器的事件分为两种,一种视频的 原生事件 (前缀 video:),另外一种是 自定义事件
 监听事件:
-<div cl ...`,l:"advanced/event.html",a:"实例事件"},"2.1":{t:"`ready`\r",p:`当播放器首次可以播放器时触发
-<div className="run-code">▶ Run ...`,l:"advanced/event.html#ready",a:"ready"},"2.2":{t:"`restart`\r",p:`当播放器切换地址后并可以播放时触发
-<div className="run-code">▶  ...`,l:"advanced/event.html#restart",a:"restart"},"2.3":{t:"`pause`\r",p:`当播放器暂停时触发
-<div className="run-code">▶ Run Code ...`,l:"advanced/event.html#pause",a:"pause"},"2.4":{t:"`play`\r",p:`当播放器播放时触发
-<div className="run-code">▶ Run Code ...`,l:"advanced/event.html#play",a:"play"},"2.5":{t:"`hotkey`\r",p:`当播放器热键被按下时触发
-<div className="run-code">▶ Run C ...`,l:"advanced/event.html#hotkey",a:"hotkey"},"2.6":{t:"`destroy`\r",p:`当播放器销毁时触发
-<div className="run-code">▶ Run Code ...`,l:"advanced/event.html#destroy",a:"destroy"},"2.7":{t:"`focus`\r",p:`当播放器获得焦点时触发
-<div className="run-code">▶ Run Co ...`,l:"advanced/event.html#focus",a:"focus"},"2.8":{t:"`blur`\r",p:`当播放器失去焦点时触发
-<div className="run-code">▶ Run Co ...`,l:"advanced/event.html#blur",a:"blur"},"2.9":{t:"`dblclick`\r",p:`当播放器被双击时触发
-<div className="run-code">▶ Run Cod ...`,l:"advanced/event.html#dblclick",a:"dblclick"},"2.10":{t:"`click`\r",p:`当播放器被单击时触发
-<div className="run-code">▶ Run Cod ...`,l:"advanced/event.html#click",a:"click"},"2.11":{t:"`error`\r",p:`当播放器加载视频发生错误时触发
-<div className="run-code">▶ Ru ...`,l:"advanced/event.html#error",a:"error"},"2.12":{t:"`hover`\r",p:`当播放器被鼠标移出或者移入时触发
-<div className="run-code">▶ R ...`,l:"advanced/event.html#hover",a:"hover"},"2.13":{t:"`mousemove`\r",p:`当播放器被鼠标经过时触发
-<div className="run-code">▶ Run C ...`,l:"advanced/event.html#mousemove",a:"mousemove"},"2.14":{t:"`resize`\r",p:`当播放器尺寸变化时触发
-<div className="run-code">▶ Run Co ...`,l:"advanced/event.html#resize",a:"resize"},"2.15":{t:"`view`\r",p:`当播放器出现在视口时触发
-<div className="run-code">▶ Run C ...`,l:"advanced/event.html#view",a:"view"},"2.16":{t:"`lock`\r",p:`在移动端,当锁定的状态发生变化时触发
-<div className="run-code">▶ ...`,l:"advanced/event.html#lock",a:"lock"},"2.17":{t:"`aspectRatio`\r",p:`当播放器长宽比变化时触发
-<div className="run-code">▶ Run C ...`,l:"advanced/event.html#aspectratio",a:"aspectratio"},"2.18":{t:"`autoHeight`\r",p:`当播放器自动设置高度时触发
-<div className="run-code">▶ Run  ...`,l:"advanced/event.html#autoheight",a:"autoheight"},"2.19":{t:"`autoSize`\r",p:`当播放器自动设置尺寸时触发
-<div className="run-code">▶ Run  ...`,l:"advanced/event.html#autosize",a:"autosize"},"2.20":{t:"`flip`\r",p:`当播放器发生翻转时触发
-<div className="run-code">▶ Run Co ...`,l:"advanced/event.html#flip",a:"flip"},"2.21":{t:"`fullscreen`\r",p:`当播放器发生窗口全屏时触发
-<div className="run-code">▶ Run  ...`,l:"advanced/event.html#fullscreen",a:"fullscreen"},"2.22":{t:"`fullscreenError`\r",p:`当播放器发生窗口全屏错误时触发
-<div className="run-code">▶ Ru ...`,l:"advanced/event.html#fullscreenerror",a:"fullscreenerror"},"2.23":{t:"`fullscreenWeb`\r",p:`当播放器发生网页全屏时触发
-<div className="run-code">▶ Run  ...`,l:"advanced/event.html#fullscreenweb",a:"fullscreenweb"},"2.24":{t:"`mini`\r",p:`当播放器进入迷你模式时触发
-<div className="run-code">▶ Run  ...`,l:"advanced/event.html#mini",a:"mini"},"2.25":{t:"`pip`\r",p:`当播放器进入画中画时触发
-<div className="run-code">▶ Run C ...`,l:"advanced/event.html#pip",a:"pip"},"2.26":{t:"`screenshot`\r",p:`当播放器被截图时触发
-<div className="run-code">▶ Run Cod ...`,l:"advanced/event.html#screenshot",a:"screenshot"},"2.27":{t:"`seek`\r",p:`当播放器发生时间跳转时触发
-<div className="run-code">▶ Run  ...`,l:"advanced/event.html#seek",a:"seek"},"2.28":{t:"`subtitleOffset`\r",p:`当播放器发生字幕偏移时触发
-<div className="run-code">▶ Run  ...`,l:"advanced/event.html#subtitleoffset",a:"subtitleoffset"},"2.29":{t:"`subtitleBeforeUpdate`\r",p:`当字幕更新前触发
-<div className="run-code">▶ Run Code& ...`,l:"advanced/event.html#subtitlebeforeupdate",a:"subtitlebeforeupdate"},"2.30":{t:"`subtitleAfterUpdate`\r",p:`当字幕更新后触发
-<div className="run-code">▶ Run Code& ...`,l:"advanced/event.html#subtitleafterupdate",a:"subtitleafterupdate"},"2.31":{t:"`subtitleLoad`\r",p:`当字幕加载时触发
-<div className="run-code">▶ Run Code& ...`,l:"advanced/event.html#subtitleload",a:"subtitleload"},"2.32":{t:"`info`\r",p:`当信息面板显示或隐藏时触发
-<div className="run-code">▶ Run  ...`,l:"advanced/event.html#info",a:"info"},"2.33":{t:"`layer`\r",p:`当自定义层显示或隐藏时触发
-<div className="run-code">▶ Run  ...`,l:"advanced/event.html#layer",a:"layer"},"2.34":{t:"`loading`\r",p:`当加载器显示或隐藏时触发
-<div className="run-code">▶ Run C ...`,l:"advanced/event.html#loading",a:"loading"},"2.35":{t:"`mask`\r",p:`当遮罩层显示或隐藏时触发
-<div className="run-code">▶ Run C ...`,l:"advanced/event.html#mask",a:"mask"},"2.36":{t:"`subtitle`\r",p:`当字幕层显示或隐藏时触发
-<div className="run-code">▶ Run C ...`,l:"advanced/event.html#subtitle",a:"subtitle"},"2.37":{t:"`contextmenu`\r",p:`当右键菜单显示或隐藏时触发
-<div className="run-code">▶ Run  ...`,l:"advanced/event.html#contextmenu",a:"contextmenu"},"2.38":{t:"`control`\r",p:`当控制器显示或隐藏时触发
-<div className="run-code">▶ Run C ...`,l:"advanced/event.html#control",a:"control"},"2.39":{t:"`setting`\r",p:`当设置面板显示或隐藏时触发
-<div className="run-code">▶ Run  ...`,l:"advanced/event.html#setting",a:"setting"},"2.40":{t:"`muted`\r",p:`当静音的状态变化时触发
-<div className="run-code">▶ Run Co ...`,l:"advanced/event.html#muted",a:"muted"},"2.41":{t:"`keydown`\r",p:`监听来自 document 的 keydown 事件
-<div className="run-code&qu ...`,l:"advanced/event.html#keydown",a:"keydown"},"2.42":{t:"`video:canplay`\r",p:`浏览器可以播放媒体文件了,但估计没有足够的数据来支撑播放到结束,不必停下来进一步缓冲内容
-`,l:"advanced/event.html#video-canplay",a:"video-canplay"},"2.43":{t:"`video:canplaythrough`\r",p:`浏览器估计它可以在不停止内容缓冲的情况下播放媒体直到结束
-`,l:"advanced/event.html#video-canplaythrough",a:"video-canplaythrough"},"2.44":{t:"`video:complete`\r",p:`OfflineAudioContext 渲染完成
-`,l:"advanced/event.html#video-complete",a:"video-complete"},"2.45":{t:"`video:durationchange`\r",p:`duration 属性的值改变时触发
-`,l:"advanced/event.html#video-durationchange",a:"video-durationchange"},"2.46":{t:"`video:emptied`\r",p:"媒体内容变为空;例如,当这个 media 已经加载完成(或者部分加载完成),则发送此事件,并调用 load() 方法重新加载 ...",l:"advanced/event.html#video-emptied",a:"video-emptied"},"2.47":{t:"`video:ended`\r",p:`视频停止播放,因为 media 已经到达结束点
-`,l:"advanced/event.html#video-ended",a:"video-ended"},"2.48":{t:"`video:error`\r",p:`获取媒体数据时出错,或者资源类型不是受支持的媒体格式
-`,l:"advanced/event.html#video-error",a:"video-error"},"2.49":{t:"`video:loadeddata`\r",p:`media 中的首帧已经完成加载
-`,l:"advanced/event.html#video-loadeddata",a:"video-loadeddata"},"2.50":{t:"`video:loadedmetadata`\r",p:`已加载元数据
-`,l:"advanced/event.html#video-loadedmetadata",a:"video-loadedmetadata"},"2.51":{t:"`video:pause`\r",p:`播放已暂停
-`,l:"advanced/event.html#video-pause",a:"video-pause"},"2.52":{t:"`video:play`\r",p:`播放已开始
-`,l:"advanced/event.html#video-play",a:"video-play"},"2.53":{t:"`video:playing`\r",p:`由于缺乏数据而暂停或延迟后,播放准备开始
-`,l:"advanced/event.html#video-playing",a:"video-playing"},"2.54":{t:"`video:progress`\r",p:`在浏览器加载资源时周期性触发
-`,l:"advanced/event.html#video-progress",a:"video-progress"},"2.55":{t:"`video:ratechange`\r",p:`播放速率发生变化
-`,l:"advanced/event.html#video-ratechange",a:"video-ratechange"},"2.56":{t:"`video:seeked`\r",p:`跳帧(seek)操作完成
-`,l:"advanced/event.html#video-seeked",a:"video-seeked"},"2.57":{t:"`video:seeking`\r",p:`跳帧(seek)操作开始
-`,l:"advanced/event.html#video-seeking",a:"video-seeking"},"2.58":{t:"`video:stalled`\r",p:`用户代理(user agent)正在尝试获取媒体数据,但数据意外未出现
-`,l:"advanced/event.html#video-stalled",a:"video-stalled"},"2.59":{t:"`video:suspend`\r",p:`媒体数据加载已暂停
-`,l:"advanced/event.html#video-suspend",a:"video-suspend"},"2.60":{t:"`video:timeupdate`\r",p:`currentTime 属性指定的时间发生变化
-`,l:"advanced/event.html#video-timeupdate",a:"video-timeupdate"},"2.61":{t:"`video:volumechange`\r",p:`音量发生变化
-`,l:"advanced/event.html#video-volumechange",a:"video-volumechange"},"2.62":{t:"`video:waiting`\r",p:`由于暂时缺少数据,播放已停止
-`,l:"advanced/event.html#video-waiting",a:"video-waiting"},"3.0":{t:"# 全局属性\r",p:`这里的 全局属性 也是指挂载在 构造函数 的 一级属性,属性名字全部都是大写的形式,未来容易发生变动,基本上用不到
-`,l:"advanced/global.html",a:"全局属性"},"3.1":{t:"DEBUG\r",p:`是否开始 debug 模式,可以打印出视频全部的内置事件,默认关闭
-<div className="run- ...`,l:"advanced/global.html#debug",a:"debug"},"3.2":{t:"STYLE\r",p:`返回播放器样式文本
-<div className="run-code">▶ Run Code ...`,l:"advanced/global.html#style",a:"style"},"3.3":{t:"CONTEXTMENU\r",p:`是否开启右键菜单,默认开启
-<div className="run-code">▶ Run  ...`,l:"advanced/global.html#contextmenu",a:"contextmenu"},"3.4":{t:"NOTICE_TIME\r",p:`提示信息的显示时长,单位为毫秒,默认为 2000
-<div className="run-code" ...`,l:"advanced/global.html#notice-time",a:"notice-time"},"3.5":{t:"SETTING_WIDTH\r",p:`设置面板的默认宽度,单位为像素,默认为 250
-<div className="run-code" ...`,l:"advanced/global.html#setting-width",a:"setting-width"},"3.6":{t:"SETTING_ITEM_WIDTH\r",p:`设置面板的设置项的默认宽度,单位为像素,默认为 200
-<div className="run-code&q ...`,l:"advanced/global.html#setting-item-width",a:"setting-item-width"},"3.7":{t:"SETTING_ITEM_HEIGHT\r",p:`设置面板的设置项的默认高度,单位为像素,默认为 35
-<div className="run-code&qu ...`,l:"advanced/global.html#setting-item-height",a:"setting-item-height"},"3.8":{t:"RESIZE_TIME\r",p:`resize 事件的节流时间,单位为毫秒,默认为 200
-<div className="run-code& ...`,l:"advanced/global.html#resize-time",a:"resize-time"},"3.9":{t:"SCROLL_TIME\r",p:`scroll 事件的节流时间,单位为毫秒,默认为 200
-<div className="run-code& ...`,l:"advanced/global.html#scroll-time",a:"scroll-time"},"3.10":{t:"SCROLL_GAP\r",p:`view 事件的边界容差距离,单位为像素,默认为 50
-<div className="run-code&q ...`,l:"advanced/global.html#scroll-gap",a:"scroll-gap"},"3.11":{t:"AUTO_PLAYBACK_MAX\r",p:`自动回放功能的最大记录数,默认为 10
-<div className="run-code"> ...`,l:"advanced/global.html#auto-playback-max",a:"auto-playback-max"},"3.12":{t:"AUTO_PLAYBACK_MIN\r",p:`自动回放功能的最小记录时长,单位为秒,默认为 5
-<div className="run-code" ...`,l:"advanced/global.html#auto-playback-min",a:"auto-playback-min"},"3.13":{t:"AUTO_PLAYBACK_TIMEOUT\r",p:`自动回放功能的隐藏延迟时长,单位为毫秒,默认为 3000
-<div className="run-code& ...`,l:"advanced/global.html#auto-playback-timeout",a:"auto-playback-timeout"},"3.14":{t:"RECONNECT_TIME_MAX\r",p:`发生连接错误时,自动连接的最大次数,默认为 5
-<div className="run-code" ...`,l:"advanced/global.html#reconnect-time-max",a:"reconnect-time-max"},"3.15":{t:"RECONNECT_SLEEP_TIME\r",p:`发生连接错误时,自动连接的延迟时间,单位为毫秒,默认为 1000
-<div className="run-c ...`,l:"advanced/global.html#reconnect-sleep-time",a:"reconnect-sleep-time"},"3.16":{t:"CONTROL_HIDE_TIME\r",p:`底部控制栏的自动隐藏的延迟时间,单位为毫秒,默认为 3000
-<div className="run-cod ...`,l:"advanced/global.html#control-hide-time",a:"control-hide-time"},"3.17":{t:"DBCLICK_TIME\r",p:`双击事件的延迟事件,单位为毫秒,默认为 300
-<div className="run-code" ...`,l:"advanced/global.html#dbclick-time",a:"dbclick-time"},"3.18":{t:"DBCLICK_FULLSCREEN\r",p:`在桌面端,是否双击切换全屏,默认为 true
-<div className="run-code"& ...`,l:"advanced/global.html#dbclick-fullscreen",a:"dbclick-fullscreen"},"3.19":{t:"MOBILE_DBCLICK_PLAY\r",p:`在移动端,是否双击切换播放暂停,默认为 true
-<div className="run-code" ...`,l:"advanced/global.html#mobile-dbclick-play",a:"mobile-dbclick-play"},"3.20":{t:"MOBILE_CLICK_PLAY\r",p:`在移动端,是否单击切换播放暂停,默认为 false
-<div className="run-code&quo ...`,l:"advanced/global.html#mobile-click-play",a:"mobile-click-play"},"3.21":{t:"AUTO_ORIENTATION_TIME\r",p:`在移动端,自动旋屏的延迟时间,单位为毫秒,默认为 200
-<div className="run-code& ...`,l:"advanced/global.html#auto-orientation-time",a:"auto-orientation-time"},"3.22":{t:"INFO_LOOP_TIME\r",p:`信息面板的刷新时间,单位为毫秒,默认为 1000
-<div className="run-code" ...`,l:"advanced/global.html#info-loop-time",a:"info-loop-time"},"3.23":{t:"FAST_FORWARD_VALUE\r",p:`在移动端,长按加速的速率倍数,默认为 3
-<div className="run-code"> ...`,l:"advanced/global.html#fast-forward-value",a:"fast-forward-value"},"3.24":{t:"FAST_FORWARD_TIME\r",p:`在移动端,长按加速的延迟时间,单位为毫秒,默认为 1000
-<div className="run-code ...`,l:"advanced/global.html#fast-forward-time",a:"fast-forward-time"},"3.25":{t:"TOUCH_MOVE_RATIO\r",p:`在移动端,左右滑动进度的速率倍数,默认为 0.5
-<div className="run-code" ...`,l:"advanced/global.html#touch-move-ratio",a:"touch-move-ratio"},"3.26":{t:"VOLUME_STEP\r",p:`快捷键调节音量的幅度比例,默认为 0.1
-<div className="run-code"> ...`,l:"advanced/global.html#volume-step",a:"volume-step"},"3.27":{t:"SEEK_STEP\r",p:`快捷键调节播放进度的幅度,单位为秒,默认为 5
-<div className="run-code" ...`,l:"advanced/global.html#seek-step",a:"seek-step"},"3.28":{t:"PLAYBACK_RATE\r",p:`内置播放速率的列表,默认为 [0.5, 0.75, 1, 1.25, 1.5, 2]
-<div className=& ...`,l:"advanced/global.html#playback-rate",a:"playback-rate"},"3.29":{t:"ASPECT_RATIO\r",p:`内置视频长宽比的列表,默认为 ['default', '4:3', '16:9']
-<div className=&q ...`,l:"advanced/global.html#aspect-ratio",a:"aspect-ratio"},"3.30":{t:"FLIP\r",p:`内置视频翻转的列表,默认为 ['normal', 'horizontal', 'vertical']
-<div cla ...`,l:"advanced/global.html#flip",a:"flip"},"3.31":{t:"FULLSCREEN_WEB_IN_BODY\r",p:`网页全屏时,是否把播放器挂在在 body 元素下,默认为 true
-<div className="run- ...`,l:"advanced/global.html#fullscreen-web-in-body",a:"fullscreen-web-in-body"},"3.32":{t:"LOG_VERSION\r",p:`设置是否打印播放器版本,默认为 true
-<div className="run-code"> ...`,l:"advanced/global.html#log-version",a:"log-version"},"3.33":{t:"USE_RAF\r",p:`设置是否使用 requestAnimationFrame ,默认为 false,目前主要用于进度条的平滑效果
-<div ...`,l:"advanced/global.html#use-raf",a:"use-raf"},"3.34":{t:"REMOVE_SRC_WHEN_DESTROY\r",p:`在销毁播放器时,是否同时移除视频的 src 属性并调用 load() 以主动释放媒体资源,默认为 true。
-开启后可以在单 ...`,l:"advanced/global.html#remove-src-when-destroy",a:"remove-src-when-destroy"},"4.0":{t:"# 编写插件\r",p:`但你已经知道播放器的属性, 方法和事件后,再编写插件是非常简单的事
+<div cl ...`,l:"advanced/event.html",a:"实例事件"},"2.1":{t:"`ready`",p:`当播放器首次可以播放器时触发
+<div className="run-code">▶ Run ...`,l:"advanced/event.html#ready",a:"ready"},"2.2":{t:"`restart`",p:`当播放器切换地址后并可以播放时触发
+<div className="run-code">▶  ...`,l:"advanced/event.html#restart",a:"restart"},"2.3":{t:"`pause`",p:`当播放器暂停时触发
+<div className="run-code">▶ Run Code ...`,l:"advanced/event.html#pause",a:"pause"},"2.4":{t:"`play`",p:`当播放器播放时触发
+<div className="run-code">▶ Run Code ...`,l:"advanced/event.html#play",a:"play"},"2.5":{t:"`hotkey`",p:`当播放器热键被按下时触发
+<div className="run-code">▶ Run C ...`,l:"advanced/event.html#hotkey",a:"hotkey"},"2.6":{t:"`destroy`",p:`当播放器销毁时触发
+<div className="run-code">▶ Run Code ...`,l:"advanced/event.html#destroy",a:"destroy"},"2.7":{t:"`focus`",p:`当播放器获得焦点时触发
+<div className="run-code">▶ Run Co ...`,l:"advanced/event.html#focus",a:"focus"},"2.8":{t:"`blur`",p:`当播放器失去焦点时触发
+<div className="run-code">▶ Run Co ...`,l:"advanced/event.html#blur",a:"blur"},"2.9":{t:"`dblclick`",p:`当播放器被双击时触发
+<div className="run-code">▶ Run Cod ...`,l:"advanced/event.html#dblclick",a:"dblclick"},"2.10":{t:"`click`",p:`当播放器被单击时触发
+<div className="run-code">▶ Run Cod ...`,l:"advanced/event.html#click",a:"click"},"2.11":{t:"`error`",p:`当播放器加载视频发生错误时触发
+<div className="run-code">▶ Ru ...`,l:"advanced/event.html#error",a:"error"},"2.12":{t:"`hover`",p:`当播放器被鼠标移出或者移入时触发
+<div className="run-code">▶ R ...`,l:"advanced/event.html#hover",a:"hover"},"2.13":{t:"`mousemove`",p:`当播放器被鼠标经过时触发
+<div className="run-code">▶ Run C ...`,l:"advanced/event.html#mousemove",a:"mousemove"},"2.14":{t:"`resize`",p:`当播放器尺寸变化时触发
+<div className="run-code">▶ Run Co ...`,l:"advanced/event.html#resize",a:"resize"},"2.15":{t:"`view`",p:`当播放器出现在视口时触发
+<div className="run-code">▶ Run C ...`,l:"advanced/event.html#view",a:"view"},"2.16":{t:"`lock`",p:`在移动端,当锁定的状态发生变化时触发
+<div className="run-code">▶ ...`,l:"advanced/event.html#lock",a:"lock"},"2.17":{t:"`aspectRatio`",p:`当播放器长宽比变化时触发
+<div className="run-code">▶ Run C ...`,l:"advanced/event.html#aspectratio",a:"aspectratio"},"2.18":{t:"`autoHeight`",p:`当播放器自动设置高度时触发
+<div className="run-code">▶ Run  ...`,l:"advanced/event.html#autoheight",a:"autoheight"},"2.19":{t:"`autoSize`",p:`当播放器自动设置尺寸时触发
+<div className="run-code">▶ Run  ...`,l:"advanced/event.html#autosize",a:"autosize"},"2.20":{t:"`flip`",p:`当播放器发生翻转时触发
+<div className="run-code">▶ Run Co ...`,l:"advanced/event.html#flip",a:"flip"},"2.21":{t:"`fullscreen`",p:`当播放器发生窗口全屏时触发
+<div className="run-code">▶ Run  ...`,l:"advanced/event.html#fullscreen",a:"fullscreen"},"2.22":{t:"`fullscreenError`",p:`当播放器发生窗口全屏错误时触发
+<div className="run-code">▶ Ru ...`,l:"advanced/event.html#fullscreenerror",a:"fullscreenerror"},"2.23":{t:"`fullscreenWeb`",p:`当播放器发生网页全屏时触发
+<div className="run-code">▶ Run  ...`,l:"advanced/event.html#fullscreenweb",a:"fullscreenweb"},"2.24":{t:"`mini`",p:`当播放器进入迷你模式时触发
+<div className="run-code">▶ Run  ...`,l:"advanced/event.html#mini",a:"mini"},"2.25":{t:"`pip`",p:`当播放器进入画中画时触发
+<div className="run-code">▶ Run C ...`,l:"advanced/event.html#pip",a:"pip"},"2.26":{t:"`screenshot`",p:`当播放器被截图时触发
+<div className="run-code">▶ Run Cod ...`,l:"advanced/event.html#screenshot",a:"screenshot"},"2.27":{t:"`seek`",p:`当播放器发生时间跳转时触发
+<div className="run-code">▶ Run  ...`,l:"advanced/event.html#seek",a:"seek"},"2.28":{t:"`subtitleOffset`",p:`当播放器发生字幕偏移时触发
+<div className="run-code">▶ Run  ...`,l:"advanced/event.html#subtitleoffset",a:"subtitleoffset"},"2.29":{t:"`subtitleBeforeUpdate`",p:`当字幕更新前触发
+<div className="run-code">▶ Run Code& ...`,l:"advanced/event.html#subtitlebeforeupdate",a:"subtitlebeforeupdate"},"2.30":{t:"`subtitleAfterUpdate`",p:`当字幕更新后触发
+<div className="run-code">▶ Run Code& ...`,l:"advanced/event.html#subtitleafterupdate",a:"subtitleafterupdate"},"2.31":{t:"`subtitleLoad`",p:`当字幕加载时触发
+<div className="run-code">▶ Run Code& ...`,l:"advanced/event.html#subtitleload",a:"subtitleload"},"2.32":{t:"`info`",p:`当信息面板显示或隐藏时触发
+<div className="run-code">▶ Run  ...`,l:"advanced/event.html#info",a:"info"},"2.33":{t:"`layer`",p:`当自定义层显示或隐藏时触发
+<div className="run-code">▶ Run  ...`,l:"advanced/event.html#layer",a:"layer"},"2.34":{t:"`loading`",p:`当加载器显示或隐藏时触发
+<div className="run-code">▶ Run C ...`,l:"advanced/event.html#loading",a:"loading"},"2.35":{t:"`mask`",p:`当遮罩层显示或隐藏时触发
+<div className="run-code">▶ Run C ...`,l:"advanced/event.html#mask",a:"mask"},"2.36":{t:"`subtitle`",p:`当字幕层显示或隐藏时触发
+<div className="run-code">▶ Run C ...`,l:"advanced/event.html#subtitle",a:"subtitle"},"2.37":{t:"`contextmenu`",p:`当右键菜单显示或隐藏时触发
+<div className="run-code">▶ Run  ...`,l:"advanced/event.html#contextmenu",a:"contextmenu"},"2.38":{t:"`control`",p:`当控制器显示或隐藏时触发
+<div className="run-code">▶ Run C ...`,l:"advanced/event.html#control",a:"control"},"2.39":{t:"`setting`",p:`当设置面板显示或隐藏时触发
+<div className="run-code">▶ Run  ...`,l:"advanced/event.html#setting",a:"setting"},"2.40":{t:"`muted`",p:`当静音的状态变化时触发
+<div className="run-code">▶ Run Co ...`,l:"advanced/event.html#muted",a:"muted"},"2.41":{t:"`keydown`",p:`监听来自 document 的 keydown 事件
+<div className="run-code&qu ...`,l:"advanced/event.html#keydown",a:"keydown"},"2.42":{t:"`video:canplay`",p:`浏览器可以播放媒体文件了,但估计没有足够的数据来支撑播放到结束,不必停下来进一步缓冲内容
+`,l:"advanced/event.html#video-canplay",a:"video-canplay"},"2.43":{t:"`video:canplaythrough`",p:`浏览器估计它可以在不停止内容缓冲的情况下播放媒体直到结束
+`,l:"advanced/event.html#video-canplaythrough",a:"video-canplaythrough"},"2.44":{t:"`video:complete`",p:`OfflineAudioContext 渲染完成
+`,l:"advanced/event.html#video-complete",a:"video-complete"},"2.45":{t:"`video:durationchange`",p:`duration 属性的值改变时触发
+`,l:"advanced/event.html#video-durationchange",a:"video-durationchange"},"2.46":{t:"`video:emptied`",p:"媒体内容变为空;例如,当这个 media 已经加载完成(或者部分加载完成),则发送此事件,并调用 load() 方法重新加载 ...",l:"advanced/event.html#video-emptied",a:"video-emptied"},"2.47":{t:"`video:ended`",p:`视频停止播放,因为 media 已经到达结束点
+`,l:"advanced/event.html#video-ended",a:"video-ended"},"2.48":{t:"`video:error`",p:`获取媒体数据时出错,或者资源类型不是受支持的媒体格式
+`,l:"advanced/event.html#video-error",a:"video-error"},"2.49":{t:"`video:loadeddata`",p:`media 中的首帧已经完成加载
+`,l:"advanced/event.html#video-loadeddata",a:"video-loadeddata"},"2.50":{t:"`video:loadedmetadata`",p:`已加载元数据
+`,l:"advanced/event.html#video-loadedmetadata",a:"video-loadedmetadata"},"2.51":{t:"`video:pause`",p:`播放已暂停
+`,l:"advanced/event.html#video-pause",a:"video-pause"},"2.52":{t:"`video:play`",p:`播放已开始
+`,l:"advanced/event.html#video-play",a:"video-play"},"2.53":{t:"`video:playing`",p:`由于缺乏数据而暂停或延迟后,播放准备开始
+`,l:"advanced/event.html#video-playing",a:"video-playing"},"2.54":{t:"`video:progress`",p:`在浏览器加载资源时周期性触发
+`,l:"advanced/event.html#video-progress",a:"video-progress"},"2.55":{t:"`video:ratechange`",p:`播放速率发生变化
+`,l:"advanced/event.html#video-ratechange",a:"video-ratechange"},"2.56":{t:"`video:seeked`",p:`跳帧(seek)操作完成
+`,l:"advanced/event.html#video-seeked",a:"video-seeked"},"2.57":{t:"`video:seeking`",p:`跳帧(seek)操作开始
+`,l:"advanced/event.html#video-seeking",a:"video-seeking"},"2.58":{t:"`video:stalled`",p:`用户代理(user agent)正在尝试获取媒体数据,但数据意外未出现
+`,l:"advanced/event.html#video-stalled",a:"video-stalled"},"2.59":{t:"`video:suspend`",p:`媒体数据加载已暂停
+`,l:"advanced/event.html#video-suspend",a:"video-suspend"},"2.60":{t:"`video:timeupdate`",p:`currentTime 属性指定的时间发生变化
+`,l:"advanced/event.html#video-timeupdate",a:"video-timeupdate"},"2.61":{t:"`video:volumechange`",p:`音量发生变化
+`,l:"advanced/event.html#video-volumechange",a:"video-volumechange"},"2.62":{t:"`video:waiting`",p:`由于暂时缺少数据,播放已停止
+`,l:"advanced/event.html#video-waiting",a:"video-waiting"},"3.0":{t:"# 全局属性",p:`这里的 全局属性 也是指挂载在 构造函数 的 一级属性,属性名字全部都是大写的形式,未来容易发生变动,基本上用不到
+`,l:"advanced/global.html",a:"全局属性"},"3.1":{t:"DEBUG",p:`是否开始 debug 模式,可以打印出视频全部的内置事件,默认关闭
+<div className="run- ...`,l:"advanced/global.html#debug",a:"debug"},"3.2":{t:"STYLE",p:`返回播放器样式文本
+<div className="run-code">▶ Run Code ...`,l:"advanced/global.html#style",a:"style"},"3.3":{t:"CONTEXTMENU",p:`是否开启右键菜单,默认开启
+<div className="run-code">▶ Run  ...`,l:"advanced/global.html#contextmenu",a:"contextmenu"},"3.4":{t:"NOTICE_TIME",p:`提示信息的显示时长,单位为毫秒,默认为 2000
+<div className="run-code" ...`,l:"advanced/global.html#notice-time",a:"notice-time"},"3.5":{t:"SETTING_WIDTH",p:`设置面板的默认宽度,单位为像素,默认为 250
+<div className="run-code" ...`,l:"advanced/global.html#setting-width",a:"setting-width"},"3.6":{t:"SETTING_ITEM_WIDTH",p:`设置面板的设置项的默认宽度,单位为像素,默认为 200
+<div className="run-code&q ...`,l:"advanced/global.html#setting-item-width",a:"setting-item-width"},"3.7":{t:"SETTING_ITEM_HEIGHT",p:`设置面板的设置项的默认高度,单位为像素,默认为 35
+<div className="run-code&qu ...`,l:"advanced/global.html#setting-item-height",a:"setting-item-height"},"3.8":{t:"RESIZE_TIME",p:`resize 事件的节流时间,单位为毫秒,默认为 200
+<div className="run-code& ...`,l:"advanced/global.html#resize-time",a:"resize-time"},"3.9":{t:"SCROLL_TIME",p:`scroll 事件的节流时间,单位为毫秒,默认为 200
+<div className="run-code& ...`,l:"advanced/global.html#scroll-time",a:"scroll-time"},"3.10":{t:"SCROLL_GAP",p:`view 事件的边界容差距离,单位为像素,默认为 50
+<div className="run-code&q ...`,l:"advanced/global.html#scroll-gap",a:"scroll-gap"},"3.11":{t:"AUTO_PLAYBACK_MAX",p:`自动回放功能的最大记录数,默认为 10
+<div className="run-code"> ...`,l:"advanced/global.html#auto-playback-max",a:"auto-playback-max"},"3.12":{t:"AUTO_PLAYBACK_MIN",p:`自动回放功能的最小记录时长,单位为秒,默认为 5
+<div className="run-code" ...`,l:"advanced/global.html#auto-playback-min",a:"auto-playback-min"},"3.13":{t:"AUTO_PLAYBACK_TIMEOUT",p:`自动回放功能的隐藏延迟时长,单位为毫秒,默认为 3000
+<div className="run-code& ...`,l:"advanced/global.html#auto-playback-timeout",a:"auto-playback-timeout"},"3.14":{t:"RECONNECT_TIME_MAX",p:`发生连接错误时,自动连接的最大次数,默认为 5
+<div className="run-code" ...`,l:"advanced/global.html#reconnect-time-max",a:"reconnect-time-max"},"3.15":{t:"RECONNECT_SLEEP_TIME",p:`发生连接错误时,自动连接的延迟时间,单位为毫秒,默认为 1000
+<div className="run-c ...`,l:"advanced/global.html#reconnect-sleep-time",a:"reconnect-sleep-time"},"3.16":{t:"CONTROL_HIDE_TIME",p:`底部控制栏的自动隐藏的延迟时间,单位为毫秒,默认为 3000
+<div className="run-cod ...`,l:"advanced/global.html#control-hide-time",a:"control-hide-time"},"3.17":{t:"DBCLICK_TIME",p:`双击事件的延迟事件,单位为毫秒,默认为 300
+<div className="run-code" ...`,l:"advanced/global.html#dbclick-time",a:"dbclick-time"},"3.18":{t:"DBCLICK_FULLSCREEN",p:`在桌面端,是否双击切换全屏,默认为 true
+<div className="run-code"& ...`,l:"advanced/global.html#dbclick-fullscreen",a:"dbclick-fullscreen"},"3.19":{t:"MOBILE_DBCLICK_PLAY",p:`在移动端,是否双击切换播放暂停,默认为 true
+<div className="run-code" ...`,l:"advanced/global.html#mobile-dbclick-play",a:"mobile-dbclick-play"},"3.20":{t:"MOBILE_CLICK_PLAY",p:`在移动端,是否单击切换播放暂停,默认为 false
+<div className="run-code&quo ...`,l:"advanced/global.html#mobile-click-play",a:"mobile-click-play"},"3.21":{t:"AUTO_ORIENTATION_TIME",p:`在移动端,自动旋屏的延迟时间,单位为毫秒,默认为 200
+<div className="run-code& ...`,l:"advanced/global.html#auto-orientation-time",a:"auto-orientation-time"},"3.22":{t:"INFO_LOOP_TIME",p:`信息面板的刷新时间,单位为毫秒,默认为 1000
+<div className="run-code" ...`,l:"advanced/global.html#info-loop-time",a:"info-loop-time"},"3.23":{t:"FAST_FORWARD_VALUE",p:`在移动端,长按加速的速率倍数,默认为 3
+<div className="run-code"> ...`,l:"advanced/global.html#fast-forward-value",a:"fast-forward-value"},"3.24":{t:"FAST_FORWARD_TIME",p:`在移动端,长按加速的延迟时间,单位为毫秒,默认为 1000
+<div className="run-code ...`,l:"advanced/global.html#fast-forward-time",a:"fast-forward-time"},"3.25":{t:"TOUCH_MOVE_RATIO",p:`在移动端,左右滑动进度的速率倍数,默认为 0.5
+<div className="run-code" ...`,l:"advanced/global.html#touch-move-ratio",a:"touch-move-ratio"},"3.26":{t:"VOLUME_STEP",p:`快捷键调节音量的幅度比例,默认为 0.1
+<div className="run-code"> ...`,l:"advanced/global.html#volume-step",a:"volume-step"},"3.27":{t:"SEEK_STEP",p:`快捷键调节播放进度的幅度,单位为秒,默认为 5
+<div className="run-code" ...`,l:"advanced/global.html#seek-step",a:"seek-step"},"3.28":{t:"PLAYBACK_RATE",p:`内置播放速率的列表,默认为 [0.5, 0.75, 1, 1.25, 1.5, 2]
+<div className=& ...`,l:"advanced/global.html#playback-rate",a:"playback-rate"},"3.29":{t:"ASPECT_RATIO",p:`内置视频长宽比的列表,默认为 ['default', '4:3', '16:9']
+<div className=&q ...`,l:"advanced/global.html#aspect-ratio",a:"aspect-ratio"},"3.30":{t:"FLIP",p:`内置视频翻转的列表,默认为 ['normal', 'horizontal', 'vertical']
+<div cla ...`,l:"advanced/global.html#flip",a:"flip"},"3.31":{t:"FULLSCREEN_WEB_IN_BODY",p:`网页全屏时,是否把播放器挂在在 body 元素下,默认为 true
+<div className="run- ...`,l:"advanced/global.html#fullscreen-web-in-body",a:"fullscreen-web-in-body"},"3.32":{t:"LOG_VERSION",p:`设置是否打印播放器版本,默认为 true
+<div className="run-code"> ...`,l:"advanced/global.html#log-version",a:"log-version"},"3.33":{t:"USE_RAF",p:`设置是否使用 requestAnimationFrame ,默认为 false,目前主要用于进度条的平滑效果
+<div ...`,l:"advanced/global.html#use-raf",a:"use-raf"},"3.34":{t:"REMOVE_SRC_WHEN_DESTROY",p:`在销毁播放器时,是否同时移除视频的 src 属性并调用 load() 以主动释放媒体资源,默认为 true。
+开启后可以在单 ...`,l:"advanced/global.html#remove-src-when-destroy",a:"remove-src-when-destroy"},"4.0":{t:"# 编写插件",p:`但你已经知道播放器的属性, 方法和事件后,再编写插件是非常简单的事
 可以在实例化的时候加载插件的函数
-<div cla ...`,l:"advanced/plugin.html",a:"编写插件"},"5.0":{t:"# 实例属性\r",p:`这里的 实例属性 是指挂载在 实例 的 一级属性,比较常用
-`,l:"advanced/property.html",a:"实例属性"},"5.1":{t:"`play`\r",p:`
+<div cla ...`,l:"advanced/plugin.html",a:"编写插件"},"5.0":{t:"# 实例属性",p:`这里的 实例属性 是指挂载在 实例 的 一级属性,比较常用
+`,l:"advanced/property.html",a:"实例属性"},"5.1":{t:"`play`",p:`
 Type: Function
 
 播放视频
-<div className="run-code"&g ...`,l:"advanced/property.html#play",a:"play"},"5.2":{t:"`pause`\r",p:`
+<div className="run-code"&g ...`,l:"advanced/property.html#play",a:"play"},"5.2":{t:"`pause`",p:`
 Type: Function
 
 暂停视频
-<div className="run-code"&g ...`,l:"advanced/property.html#pause",a:"pause"},"5.3":{t:"`toggle`\r",p:`
+<div className="run-code"&g ...`,l:"advanced/property.html#pause",a:"pause"},"5.3":{t:"`toggle`",p:`
 Type: Function
 
 切换视频的播放和暂停
-<div className="run-code&q ...`,l:"advanced/property.html#toggle",a:"toggle"},"5.4":{t:"`destroy`\r",p:`
+<div className="run-code&q ...`,l:"advanced/property.html#toggle",a:"toggle"},"5.4":{t:"`destroy`",p:`
 Type: Function
 Parameter: Boolean
 
-销毁播放器,接受一个参数表示是否销毁后同时移除播放器 ...`,l:"advanced/property.html#destroy",a:"destroy"},"5.5":{t:"`reset`\r",p:`
+销毁播放器,接受一个参数表示是否销毁后同时移除播放器 ...`,l:"advanced/property.html#destroy",a:"destroy"},"5.5":{t:"`reset`",p:`
 Type: Function
 
-重置播放器的视频元素:会移除当前 src 并调用一次 load(),常用于在单页应用中手动 ...`,l:"advanced/property.html#reset",a:"reset"},"5.6":{t:"`seek`\r",p:`
+重置播放器的视频元素:会移除当前 src 并调用一次 load(),常用于在单页应用中手动 ...`,l:"advanced/property.html#reset",a:"reset"},"5.6":{t:"`seek`",p:`
 Type: Setter
 Parameter: Number
 
 视频时间跳转,单位秒
-<div className= ...`,l:"advanced/property.html#seek",a:"seek"},"5.7":{t:"`forward`\r",p:`
+<div className= ...`,l:"advanced/property.html#seek",a:"seek"},"5.7":{t:"`forward`",p:`
 Type: Setter
 Parameter: Number
 
 视频时间快进,单位秒
-<div className= ...`,l:"advanced/property.html#forward",a:"forward"},"5.8":{t:"`backward`\r",p:`
+<div className= ...`,l:"advanced/property.html#forward",a:"forward"},"5.8":{t:"`backward`",p:`
 Type: Setter
 Parameter: Number
 
 视频时间快退,单位秒
-<div className= ...`,l:"advanced/property.html#backward",a:"backward"},"5.9":{t:"`volume`\r",p:`
+<div className= ...`,l:"advanced/property.html#backward",a:"backward"},"5.9":{t:"`volume`",p:`
 Type: Setter/Getter
 Parameter: Number
 
 设置和获取视频音量,范围在:[0, 1]
-& ...`,l:"advanced/property.html#volume",a:"volume"},"5.10":{t:"`url`\r",p:`
+& ...`,l:"advanced/property.html#volume",a:"volume"},"5.10":{t:"`url`",p:`
 Type: Setter/Getter
 Parameter: String
 
 设置和获取视频地址
-<div clas ...`,l:"advanced/property.html#url",a:"url"},"5.11":{t:"`switch`\r",p:`
+<div clas ...`,l:"advanced/property.html#url",a:"url"},"5.11":{t:"`switch`",p:`
 Type: Setter
 Parameter: String
 
-设置视频地址,设置时和 art.url 类似,但会执行一些 ...`,l:"advanced/property.html#switch",a:"switch"},"5.12":{t:"`switchUrl`\r",p:`
+设置视频地址,设置时和 art.url 类似,但会执行一些 ...`,l:"advanced/property.html#switch",a:"switch"},"5.12":{t:"`switchUrl`",p:`
 Type: Function
 Parameter: String
 
-设置视频地址,设置时和 art.url 类似,但会执行 ...`,l:"advanced/property.html#switchurl",a:"switchurl"},"5.13":{t:"`switchQuality`\r",p:`
+设置视频地址,设置时和 art.url 类似,但会执行 ...`,l:"advanced/property.html#switchurl",a:"switchurl"},"5.13":{t:"`switchQuality`",p:`
 Type: Function
 Parameter: String
 
-设置视频画质地址,和 art.switchUrl 类似 ...`,l:"advanced/property.html#switchquality",a:"switchquality"},"5.14":{t:"`muted`\r",p:`
+设置视频画质地址,和 art.switchUrl 类似 ...`,l:"advanced/property.html#switchquality",a:"switchquality"},"5.14":{t:"`muted`",p:`
 Type: Setter/Getter
 Parameter: Boolean
 
 设置和获取视频是否静音
-<div c ...`,l:"advanced/property.html#muted",a:"muted"},"5.15":{t:"`currentTime`\r",p:`
+<div c ...`,l:"advanced/property.html#muted",a:"muted"},"5.15":{t:"`currentTime`",p:`
 Type: Setter/Getter
 Parameter: Number
 
-设置和获取视频当前时间,设置时间时和 see ...`,l:"advanced/property.html#currenttime",a:"currenttime"},"5.16":{t:"`duration`\r",p:`
+设置和获取视频当前时间,设置时间时和 see ...`,l:"advanced/property.html#currenttime",a:"currenttime"},"5.16":{t:"`duration`",p:`
 Type: Getter
 
 获取视频时长
-<div className="run-code"&g ...`,l:"advanced/property.html#duration",a:"duration"},"5.17":{t:"`screenshot`\r",p:`
+<div className="run-code"&g ...`,l:"advanced/property.html#duration",a:"duration"},"5.17":{t:"`screenshot`",p:`
 Type: Function
 
 下载当前视频帧的截图, 可选参数为截图名字
-<div className=" ...`,l:"advanced/property.html#screenshot",a:"screenshot"},"5.18":{t:"`getDataURL`\r",p:`
+<div className=" ...`,l:"advanced/property.html#screenshot",a:"screenshot"},"5.18":{t:"`getDataURL`",p:`
 Type: Function
 
 获取当前视频帧的截图的base64地址,返回的是一个 Promise
-<div cl ...`,l:"advanced/property.html#getdataurl",a:"getdataurl"},"5.19":{t:"`getBlobUrl`\r",p:`
+<div cl ...`,l:"advanced/property.html#getdataurl",a:"getdataurl"},"5.19":{t:"`getBlobUrl`",p:`
 Type: Function
 
 获取当前视频帧的截图的blob地址,返回的是一个 Promise
-<div clas ...`,l:"advanced/property.html#getbloburl",a:"getbloburl"},"5.20":{t:"`fullscreen`\r",p:`
+<div clas ...`,l:"advanced/property.html#getbloburl",a:"getbloburl"},"5.20":{t:"`fullscreen`",p:`
 Type: Setter/Getter
 Parameter: Boolean
 
 设置和获取播放器窗口全屏
-<div  ...`,l:"advanced/property.html#fullscreen",a:"fullscreen"},"5.21":{t:"`fullscreenWeb`\r",p:`
+<div  ...`,l:"advanced/property.html#fullscreen",a:"fullscreen"},"5.21":{t:"`fullscreenWeb`",p:`
 Type: Setter/Getter
 Parameter: Boolean
 
 设置和获取播放器网页全屏
-<div  ...`,l:"advanced/property.html#fullscreenweb",a:"fullscreenweb"},"5.22":{t:"`pip`\r",p:`
+<div  ...`,l:"advanced/property.html#fullscreenweb",a:"fullscreenweb"},"5.22":{t:"`pip`",p:`
 Type: Setter/Getter
 Parameter: Boolean
 
 设置和获取播放器画中画模式
-<div ...`,l:"advanced/property.html#pip",a:"pip"},"5.23":{t:"`poster`\r",p:`
+<div ...`,l:"advanced/property.html#pip",a:"pip"},"5.23":{t:"`poster`",p:`
 Type: Setter/Getter
 Parameter: String
 
-设置和获取视频海报,只有在视频播放前才能看到 ...`,l:"advanced/property.html#poster",a:"poster"},"5.24":{t:"`mini`\r",p:`
+设置和获取视频海报,只有在视频播放前才能看到 ...`,l:"advanced/property.html#poster",a:"poster"},"5.24":{t:"`mini`",p:`
 Type: Setter/Getter
 Parameter: Boolean
 
 设置和获取播放器迷你模式
-<div  ...`,l:"advanced/property.html#mini",a:"mini"},"5.25":{t:"`playing`\r",p:`
+<div  ...`,l:"advanced/property.html#mini",a:"mini"},"5.25":{t:"`playing`",p:`
 Type: Getter
 Parameter: Boolean
 
 获取视频是否正在播放中
-<div classNam ...`,l:"advanced/property.html#playing",a:"playing"},"5.26":{t:"`state`\r",p:`
+<div classNam ...`,l:"advanced/property.html#playing",a:"playing"},"5.26":{t:"`state`",p:`
 Type: Setter/Getter
 Parameter: String
 
-获取或设置播放器当前状态,支持:standa ...`,l:"advanced/property.html#state",a:"state"},"5.27":{t:"`autoSize`\r",p:`
+获取或设置播放器当前状态,支持:standa ...`,l:"advanced/property.html#state",a:"state"},"5.27":{t:"`autoSize`",p:`
 Type: Function
 
 设置视频是否自适应尺寸
-<div className="run-code& ...`,l:"advanced/property.html#autosize",a:"autosize"},"5.28":{t:"`rect`\r",p:`
+<div className="run-code& ...`,l:"advanced/property.html#autosize",a:"autosize"},"5.28":{t:"`rect`",p:`
 Type: Getter
 
 获取播放器的尺寸和坐标信息
-<div className="run-code& ...`,l:"advanced/property.html#rect",a:"rect"},"5.29":{t:"`bottom` / `top` / `left` / `right` / `x` / `y` / `width` / `height`\r",p:`
+<div className="run-code& ...`,l:"advanced/property.html#rect",a:"rect"},"5.29":{t:"`bottom` / `top` / `left` / `right` / `x` / `y` / `width` / `height`",p:`
 Type: Getter
 
 这些属性是对 rect 的快捷访问:
 
-bottom, top, left, right, x ...`,l:"advanced/property.html#bottom-top-left-right-x-y-width-height",a:"bottom-top-left-right-x-y-width-height"},"5.30":{t:"`flip`\r",p:`
+bottom, top, left, right, x ...`,l:"advanced/property.html#bottom-top-left-right-x-y-width-height",a:"bottom-top-left-right-x-y-width-height"},"5.30":{t:"`flip`",p:`
 Type: Setter/Getter
 Parameter: String
 
-设置和获取播放器翻转,支持normal,   ...`,l:"advanced/property.html#flip",a:"flip"},"5.31":{t:"`playbackRate`\r",p:`
+设置和获取播放器翻转,支持normal,   ...`,l:"advanced/property.html#flip",a:"flip"},"5.31":{t:"`playbackRate`",p:`
 Type: Setter/Getter
 Parameter: Number
 
 设置和获取播放器播放速度
-<div c ...`,l:"advanced/property.html#playbackrate",a:"playbackrate"},"5.32":{t:"`aspectRatio`\r",p:`
+<div c ...`,l:"advanced/property.html#playbackrate",a:"playbackrate"},"5.32":{t:"`aspectRatio`",p:`
 Type: Setter/Getter
 Parameter: String
 
 设置和获取播放器长宽比
-<div cl ...`,l:"advanced/property.html#aspectratio",a:"aspectratio"},"5.33":{t:"`autoHeight`\r",p:`
+<div cl ...`,l:"advanced/property.html#aspectratio",a:"aspectratio"},"5.33":{t:"`autoHeight`",p:`
 Type: Function
 
 当容器只有宽度,该属性可以自动计算出并设置视频的高度
-<div className= ...`,l:"advanced/property.html#autoheight",a:"autoheight"},"5.34":{t:"`attr`\r",p:`
+<div className= ...`,l:"advanced/property.html#autoheight",a:"autoheight"},"5.34":{t:"`attr`",p:`
 Type: Function
 Parameter: String
 
 动态获取和设置 video 元素的属性
-<div ...`,l:"advanced/property.html#attr",a:"attr"},"5.35":{t:"`type`\r",p:`
+<div ...`,l:"advanced/property.html#attr",a:"attr"},"5.35":{t:"`type`",p:`
 Type: Setter/Getter
 Parameter: String
 
 动态获取和设置视频类型
-<div cl ...`,l:"advanced/property.html#type",a:"type"},"5.36":{t:"`theme`\r",p:`
+<div cl ...`,l:"advanced/property.html#type",a:"type"},"5.36":{t:"`theme`",p:`
 Type: Setter/Getter
 Parameter: String
 
 动态获取和设置播放器主题颜色
-<div ...`,l:"advanced/property.html#theme",a:"theme"},"5.37":{t:"`airplay`\r",p:`
+<div ...`,l:"advanced/property.html#theme",a:"theme"},"5.37":{t:"`airplay`",p:`
 Type: Function
 
 开启隔空播放
-<div className="run-code" ...`,l:"advanced/property.html#airplay",a:"airplay"},"5.38":{t:"`loaded`\r",p:`
+<div className="run-code" ...`,l:"advanced/property.html#airplay",a:"airplay"},"5.38":{t:"`loaded`",p:`
 Type: Getter
 
 视频缓存的比例,范围是 [0, 1],常配合 video:timeupdate 事件使用
-&l ...`,l:"advanced/property.html#loaded",a:"loaded"},"5.39":{t:"`loadedTime`\r",p:`
+&l ...`,l:"advanced/property.html#loaded",a:"loaded"},"5.39":{t:"`loadedTime`",p:`
 Type: Getter
 
 已缓存的媒体时长,单位为秒。通常与 loaded 一起使用,用于展示缓冲进度细节。
-<d ...`,l:"advanced/property.html#loadedtime",a:"loadedtime"},"5.40":{t:"`played`\r",p:`
+<d ...`,l:"advanced/property.html#loadedtime",a:"loadedtime"},"5.40":{t:"`played`",p:`
 Type: Getter
 
 视频播放的比例,范围是 [0, 1],常配合 video:timeupdate 事件使用
-&l ...`,l:"advanced/property.html#played",a:"played"},"5.41":{t:"`proxy`\r",p:`
+&l ...`,l:"advanced/property.html#played",a:"played"},"5.41":{t:"`proxy`",p:`
 Type: Function
 
-DOM 事件的代理函数,实质上代理了 addEventListener 和 removeE ...`,l:"advanced/property.html#proxy",a:"proxy"},"5.42":{t:"`query`\r",p:`
+DOM 事件的代理函数,实质上代理了 addEventListener 和 removeE ...`,l:"advanced/property.html#proxy",a:"proxy"},"5.42":{t:"`query`",p:`
 Type: Function
 
-DOM 的查询函数,类似 document.querySelector,但被查询的对象局限 ...`,l:"advanced/property.html#query",a:"query"},"5.43":{t:"`video`\r",p:`
+DOM 的查询函数,类似 document.querySelector,但被查询的对象局限 ...`,l:"advanced/property.html#query",a:"query"},"5.43":{t:"`video`",p:`
 Type: Element
 
 快捷返回播放器的 video 元素
-<div className="run- ...`,l:"advanced/property.html#video",a:"video"},"5.44":{t:"`cssVar`\r",p:`
+<div className="run- ...`,l:"advanced/property.html#video",a:"video"},"5.44":{t:"`cssVar`",p:`
 Type: Function
 
 动态获取或设置 css 变量
-<div className="run-co ...`,l:"advanced/property.html#cssvar",a:"cssvar"},"5.45":{t:"`quality`\r",p:`
+<div className="run-co ...`,l:"advanced/property.html#cssvar",a:"cssvar"},"5.45":{t:"`quality`",p:`
 Type: Setter
 Parameter: Array
 
 动态设置画质列表
-<div className=&qu ...`,l:"advanced/property.html#quality",a:"quality"},"5.46":{t:"`thumbnails`\r",p:`
+<div className=&qu ...`,l:"advanced/property.html#quality",a:"quality"},"5.46":{t:"`thumbnails`",p:`
 Type: Setter/Getter
 Parameter: Object
 
 动态设置缩略图
-<div classN ...`,l:"advanced/property.html#thumbnails",a:"thumbnails"},"5.47":{t:"`subtitleOffset`\r",p:`
+<div classN ...`,l:"advanced/property.html#thumbnails",a:"thumbnails"},"5.47":{t:"`subtitleOffset`",p:`
 Type: Setter/Getter
 Parameter: Number
 
 动态设置字幕偏移
-<div class ...`,l:"advanced/property.html#subtitleoffset",a:"subtitleoffset"},"6.0":{t:"# 右键菜单\r",p:"\r",l:"component/contextmenu.html",a:"右键菜单"},"6.1":{t:"配置\r",p:`
+<div class ...`,l:"advanced/property.html#subtitleoffset",a:"subtitleoffset"},"6.0":{t:"# 右键菜单",p:"",l:"component/contextmenu.html",a:"右键菜单"},"6.1":{t:"配置",p:`
 
 
 属性
@@ -388,7 +388,7 @@ Boolean
 
 name
 String
-组件唯一名称,用于 ...`,l:"component/contextmenu.html#配置",a:"配置"},"6.2":{t:"创建\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/contextmenu.html#创建",a:"创建"},"6.3":{t:"添加\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/contextmenu.html#添加",a:"添加"},"6.4":{t:"删除\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/contextmenu.html#删除",a:"删除"},"6.5":{t:"更新\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/contextmenu.html#更新",a:"更新"},"7.0":{t:"# 控制器\r",p:"\r",l:"component/controls.html",a:"控制器"},"7.1":{t:"配置\r",p:`
+组件唯一名称,用于 ...`,l:"component/contextmenu.html#配置",a:"配置"},"6.2":{t:"创建",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/contextmenu.html#创建",a:"创建"},"6.3":{t:"添加",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/contextmenu.html#添加",a:"添加"},"6.4":{t:"删除",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/contextmenu.html#删除",a:"删除"},"6.5":{t:"更新",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/contextmenu.html#更新",a:"更新"},"7.0":{t:"# 控制器",p:"",l:"component/controls.html",a:"控制器"},"7.1":{t:"配置",p:`
 
 
 属性
@@ -405,7 +405,7 @@ Boolean
 
 name
 String
-组件唯一名称,用于 ...`,l:"component/controls.html#配置",a:"配置"},"7.2":{t:"创建\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/controls.html#创建",a:"创建"},"7.3":{t:"添加\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/controls.html#添加",a:"添加"},"7.4":{t:"删除\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/controls.html#删除",a:"删除"},"7.5":{t:"更新\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/controls.html#更新",a:"更新"},"8.0":{t:"# 业务层\r",p:"\r",l:"component/layers.html",a:"业务层"},"8.1":{t:"配置\r",p:`
+组件唯一名称,用于 ...`,l:"component/controls.html#配置",a:"配置"},"7.2":{t:"创建",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/controls.html#创建",a:"创建"},"7.3":{t:"添加",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/controls.html#添加",a:"添加"},"7.4":{t:"删除",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/controls.html#删除",a:"删除"},"7.5":{t:"更新",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/controls.html#更新",a:"更新"},"8.0":{t:"# 业务层",p:"",l:"component/layers.html",a:"业务层"},"8.1":{t:"配置",p:`
 
 
 属性
@@ -422,7 +422,7 @@ Boolean
 
 name
 String
-组件唯一名称,用于 ...`,l:"component/layers.html#配置",a:"配置"},"8.2":{t:"创建\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/layers.html#创建",a:"创建"},"8.3":{t:"添加\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/layers.html#添加",a:"添加"},"8.4":{t:"删除\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/layers.html#删除",a:"删除"},"8.5":{t:"更新\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/layers.html#更新",a:"更新"},"9.0":{t:"# 设置面板\r",p:"\r",l:"component/setting.html",a:"设置面板"},"9.1":{t:"内置\r",p:"须先打开设置面板,然后自带四个内置项:flip, playbackRate, aspectRatio, subtitleOf ...",l:"component/setting.html#内置",a:"内置"},"9.2":{t:"创建 - 按钮\r",p:`
+组件唯一名称,用于 ...`,l:"component/layers.html#配置",a:"配置"},"8.2":{t:"创建",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/layers.html#创建",a:"创建"},"8.3":{t:"添加",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/layers.html#添加",a:"添加"},"8.4":{t:"删除",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/layers.html#删除",a:"删除"},"8.5":{t:"更新",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/layers.html#更新",a:"更新"},"9.0":{t:"# 设置面板",p:"",l:"component/setting.html",a:"设置面板"},"9.1":{t:"内置",p:"须先打开设置面板,然后自带四个内置项:flip, playbackRate, aspectRatio, subtitleOf ...",l:"component/setting.html#内置",a:"内置"},"9.2":{t:"创建 - 按钮",p:`
 
 
 属性
@@ -438,7 +438,7 @@ String, Element
 
 
 icon
-String, El ...`,l:"component/setting.html#创建-按钮",a:"创建-按钮"},"9.3":{t:"创建 - 选择列表\r",p:`
+String, El ...`,l:"component/setting.html#创建-按钮",a:"创建-按钮"},"9.3":{t:"创建 - 选择列表",p:`
 
 
 属性
@@ -454,7 +454,7 @@ String, Element
 
 
 icon
-String, El ...`,l:"component/setting.html#创建-选择列表",a:"创建-选择列表"},"9.4":{t:"创建 - 列表嵌套\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/setting.html#创建-列表嵌套",a:"创建-列表嵌套"},"9.5":{t:"创建 - 切换按钮\r",p:`
+String, El ...`,l:"component/setting.html#创建-选择列表",a:"创建-选择列表"},"9.4":{t:"创建 - 列表嵌套",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/setting.html#创建-列表嵌套",a:"创建-列表嵌套"},"9.5":{t:"创建 - 切换按钮",p:`
 
 
 属性
@@ -470,7 +470,7 @@ String, Element
 
 
 icon
-String, ...`,l:"component/setting.html#创建-切换按钮",a:"创建-切换按钮"},"9.6":{t:"创建 - 范围滑块\r",p:`
+String, ...`,l:"component/setting.html#创建-切换按钮",a:"创建-切换按钮"},"9.6":{t:"创建 - 范围滑块",p:`
 
 
 属性
@@ -486,271 +486,271 @@ String, Element
 
 
 icon
-String, ...`,l:"component/setting.html#创建-范围滑块",a:"创建-范围滑块"},"9.7":{t:"添加\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/setting.html#添加",a:"添加"},"9.8":{t:"删除\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/setting.html#删除",a:"删除"},"9.9":{t:"更新\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/setting.html#更新",a:"更新"},"10.0":{t:"# Advanced Properties\r",p:"The Advanced Properties here refer to the secondary properties ...",l:"en/advanced/built-in.html",a:"advanced-properties"},"10.1":{t:"`option`\r",p:`The player's options.
-<div className="run-code"&g ...`,l:"en/advanced/built-in.html#option",a:"option"},"10.2":{t:"`template`\r",p:`Manages all DOM elements of the player.
-<div className=&quo ...`,l:"en/advanced/built-in.html#template",a:"template"},"10.3":{t:"`events`\r",p:"Manages all DOM events for the player. It essentially proxies  ...",l:"en/advanced/built-in.html#events",a:"events"},"10.4":{t:"`storage`\r",p:`Manages the player's local storage.
+String, ...`,l:"component/setting.html#创建-范围滑块",a:"创建-范围滑块"},"9.7":{t:"添加",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/setting.html#添加",a:"添加"},"9.8":{t:"删除",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/setting.html#删除",a:"删除"},"9.9":{t:"更新",p:"<div className="run-code">▶ Run Code</div&g ...",l:"component/setting.html#更新",a:"更新"},"10.0":{t:"# Advanced Properties",p:"The Advanced Properties here refer to the secondary properties ...",l:"en/advanced/built-in.html",a:"advanced-properties"},"10.1":{t:"`option`",p:`The player's options.
+<div className="run-code"&g ...`,l:"en/advanced/built-in.html#option",a:"option"},"10.2":{t:"`template`",p:`Manages all DOM elements of the player.
+<div className=&quo ...`,l:"en/advanced/built-in.html#template",a:"template"},"10.3":{t:"`events`",p:"Manages all DOM events for the player. It essentially proxies  ...",l:"en/advanced/built-in.html#events",a:"events"},"10.4":{t:"`storage`",p:`Manages the player's local storage.
 
-The name property is used ...`,l:"en/advanced/built-in.html#storage",a:"storage"},"10.5":{t:"`icons`\r",p:`Manages all svg icons for the player.
-<div className=" ...`,l:"en/advanced/built-in.html#icons",a:"icons"},"10.6":{t:"`i18n`\r",p:`Manages the player's i18n.
+The name property is used ...`,l:"en/advanced/built-in.html#storage",a:"storage"},"10.5":{t:"`icons`",p:`Manages all svg icons for the player.
+<div className=" ...`,l:"en/advanced/built-in.html#icons",a:"icons"},"10.6":{t:"`i18n`",p:`Manages the player's i18n.
 
-The get method is used to get an i ...`,l:"en/advanced/built-in.html#i18n",a:"i18n"},"10.7":{t:"`notice`\r",p:"Manages the player's notifications. It only has a show propert ...",l:"en/advanced/built-in.html#notice",a:"notice"},"10.8":{t:"`layers`\r",p:`Manages the player's layers.
+The get method is used to get an i ...`,l:"en/advanced/built-in.html#i18n",a:"i18n"},"10.7":{t:"`notice`",p:"Manages the player's notifications. It only has a show propert ...",l:"en/advanced/built-in.html#notice",a:"notice"},"10.8":{t:"`layers`",p:`Manages the player's layers.
 
-The add method is used to dynami ...`,l:"en/advanced/built-in.html#layers",a:"layers"},"10.9":{t:"`controls`\r",p:`Manages the player's controls.
+The add method is used to dynami ...`,l:"en/advanced/built-in.html#layers",a:"layers"},"10.9":{t:"`controls`",p:`Manages the player's controls.
 
 
-The add method is used to dyn ...`,l:"en/advanced/built-in.html#controls",a:"controls"},"10.10":{t:"`contextmenu`\r",p:`Manages the player's context menu
+The add method is used to dyn ...`,l:"en/advanced/built-in.html#controls",a:"controls"},"10.10":{t:"`contextmenu`",p:`Manages the player's context menu
 
-The add method is used to d ...`,l:"en/advanced/built-in.html#contextmenu",a:"contextmenu"},"10.11":{t:"`subtitle`\r",p:`Manages the player's subtitle functionality
+The add method is used to d ...`,l:"en/advanced/built-in.html#contextmenu",a:"contextmenu"},"10.11":{t:"`subtitle`",p:`Manages the player's subtitle functionality
 
-The url property  ...`,l:"en/advanced/built-in.html#subtitle",a:"subtitle"},"10.12":{t:"`info`\r",p:"Manages the player's information panel, commonly used to view  ...",l:"en/advanced/built-in.html#info",a:"info"},"10.13":{t:"`loading`\r",p:`Manages the player's loading layer
+The url property  ...`,l:"en/advanced/built-in.html#subtitle",a:"subtitle"},"10.12":{t:"`info`",p:"Manages the player's information panel, commonly used to view  ...",l:"en/advanced/built-in.html#info",a:"info"},"10.13":{t:"`loading`",p:`Manages the player's loading layer
 
-The show property is used  ...`,l:"en/advanced/built-in.html#loading",a:"loading"},"10.14":{t:"`hotkey`\r",p:`Manages the player's hotkey functionality
+The show property is used  ...`,l:"en/advanced/built-in.html#loading",a:"loading"},"10.14":{t:"`hotkey`",p:`Manages the player's hotkey functionality
 
-The add method is u ...`,l:"en/advanced/built-in.html#hotkey",a:"hotkey"},"10.15":{t:"`mask`\r",p:`Manages the player's mask layer
+The add method is u ...`,l:"en/advanced/built-in.html#hotkey",a:"hotkey"},"10.15":{t:"`mask`",p:`Manages the player's mask layer
 
-The show property is used to  ...`,l:"en/advanced/built-in.html#mask",a:"mask"},"10.16":{t:"`setting`\r",p:`Manages the player's settings panel
+The show property is used to  ...`,l:"en/advanced/built-in.html#mask",a:"mask"},"10.16":{t:"`setting`",p:`Manages the player's settings panel
 
-The add method is used to ...`,l:"en/advanced/built-in.html#setting",a:"setting"},"10.17":{t:"`plugins`\r",p:"Manages the player's plugin functionality, with only the add m ...",l:"en/advanced/built-in.html#plugins",a:"plugins"},"11.0":{t:"# Static Properties\r",p:"Here, Static Properties refer to the top-level properties moun ...",l:"en/advanced/class.html",a:"static-properties"},"11.1":{t:"`instances`\r",p:"Returns an array of all player instances. This property can be ...",l:"en/advanced/class.html#instances",a:"instances"},"11.2":{t:"`version`\r",p:`Returns the version information of the player.
-<div classNa ...`,l:"en/advanced/class.html#version",a:"version"},"11.3":{t:"`env`\r",p:`Returns the environment variables of the player.
-<div class ...`,l:"en/advanced/class.html#env",a:"env"},"11.4":{t:"`build`\r",p:`Returns the build time of the player.
-<div className=" ...`,l:"en/advanced/class.html#build",a:"build"},"11.5":{t:"`config`\r",p:`Returns the default configuration for videos.
-<div classNam ...`,l:"en/advanced/class.html#config",a:"config"},"11.6":{t:"`utils`\r",p:`Returns the collection of utility functions for the player.
-&l ...`,l:"en/advanced/class.html#utils",a:"utils"},"11.7":{t:"`scheme`\r",p:`Returns the validation schema for player options.
-<div clas ...`,l:"en/advanced/class.html#scheme",a:"scheme"},"11.8":{t:"`Emitter`\r",p:`Returns the constructor function for the event emitter.
-<di ...`,l:"en/advanced/class.html#emitter",a:"emitter"},"11.9":{t:"`validator`\r",p:`Returns the validation function for options.
-<div className ...`,l:"en/advanced/class.html#validator",a:"validator"},"11.10":{t:"`kindOf`\r",p:`Returns the utility function for type detection.
-<div class ...`,l:"en/advanced/class.html#kindof",a:"kindof"},"11.11":{t:"`html`\r",p:`Returns the html string required by the player.
-<div classN ...`,l:"en/advanced/class.html#html",a:"html"},"11.12":{t:"`option`\r",p:`Returns the default options for the player.
-<div className= ...`,l:"en/advanced/class.html#option",a:"option"},"12.0":{t:"# Instance Events\r",p:"Player events are divided into two types: native events (prefi ...",l:"en/advanced/event.html",a:"instance-events"},"12.1":{t:"`ready`\r",p:`Triggered when the player is ready for the first time
-<div  ...`,l:"en/advanced/event.html#ready",a:"ready"},"12.2":{t:"`restart`\r",p:`Triggered when the player switches URL and becomes playable
-&l ...`,l:"en/advanced/event.html#restart",a:"restart"},"12.3":{t:"`pause`\r",p:`Triggered when the player is paused
-<div className="ru ...`,l:"en/advanced/event.html#pause",a:"pause"},"12.4":{t:"`play`\r",p:`Triggered when the player starts playing
-<div className=&qu ...`,l:"en/advanced/event.html#play",a:"play"},"12.5":{t:"`hotkey`\r",p:`Triggered when a hotkey is pressed on the player
-<div class ...`,l:"en/advanced/event.html#hotkey",a:"hotkey"},"12.6":{t:"`destroy`\r",p:`Triggered when the player is destroyed
-<div className=" ...`,l:"en/advanced/event.html#destroy",a:"destroy"},"12.7":{t:"`focus`\r",p:`Triggered when the player gains focus
-<div className=" ...`,l:"en/advanced/event.html#focus",a:"focus"},"12.8":{t:"`blur`\r",p:`Triggered when the player loses focus
-<div className=" ...`,l:"en/advanced/event.html#blur",a:"blur"},"12.9":{t:"`dblclick`\r",p:`Triggered when the player is double-clicked
-<div className= ...`,l:"en/advanced/event.html#dblclick",a:"dblclick"},"12.10":{t:"`click`\r",p:`Triggered when the player is clicked
-<div className="r ...`,l:"en/advanced/event.html#click",a:"click"},"12.11":{t:"`error`\r",p:`Triggered when an error occurs while loading the video
-<div ...`,l:"en/advanced/event.html#error",a:"error"},"12.12":{t:"`hover`\r",p:`Triggered when the mouse enters or leaves the player
-<div c ...`,l:"en/advanced/event.html#hover",a:"hover"},"12.13":{t:"`mousemove`\r",p:`Triggered when the mouse moves over the player
-<div classNa ...`,l:"en/advanced/event.html#mousemove",a:"mousemove"},"12.14":{t:"`resize`\r",p:`Triggered when the player's dimensions change
-<div classNam ...`,l:"en/advanced/event.html#resize",a:"resize"},"12.15":{t:"`view`\r",p:`Triggered when the player enters or leaves the viewport
-<di ...`,l:"en/advanced/event.html#view",a:"view"},"12.16":{t:"`lock`\r",p:`Triggered when the lock state changes on mobile devices
-<di ...`,l:"en/advanced/event.html#lock",a:"lock"},"12.17":{t:"`aspectRatio`\r",p:`Triggered when the player's aspect ratio changes
-<div class ...`,l:"en/advanced/event.html#aspectratio",a:"aspectratio"},"12.18":{t:"`autoHeight`\r",p:`Triggered when the player automatically adjusts its height
-< ...`,l:"en/advanced/event.html#autoheight",a:"autoheight"},"12.19":{t:"`autoSize`\r",p:`Triggered when the player automatically adjusts its size
-<d ...`,l:"en/advanced/event.html#autosize",a:"autosize"},"12.20":{t:"`flip`\r",p:`Triggered when the player is flipped
-<div className="r ...`,l:"en/advanced/event.html#flip",a:"flip"},"12.21":{t:"`fullscreen`\r",p:"Triggered when the player enters or exits window fullscreen mo ...",l:"en/advanced/event.html#fullscreen",a:"fullscreen"},"12.22":{t:"`fullscreenError`\r",p:`Triggered when a window fullscreen error occurs
-<div classN ...`,l:"en/advanced/event.html#fullscreenerror",a:"fullscreenerror"},"12.23":{t:"`fullscreenWeb`\r",p:`Triggered when the player enters or exits web fullscreen mode
- ...`,l:"en/advanced/event.html#fullscreenweb",a:"fullscreenweb"},"12.24":{t:"`mini`\r",p:`Triggered when the player enters or exits mini mode
-<div cl ...`,l:"en/advanced/event.html#mini",a:"mini"},"12.25":{t:"`pip`\r",p:"Triggered when the player enters or exits picture-in-picture m ...",l:"en/advanced/event.html#pip",a:"pip"},"12.26":{t:"`screenshot`\r",p:`Triggered when the player captures a screenshot
-<div classN ...`,l:"en/advanced/event.html#screenshot",a:"screenshot"},"12.27":{t:"`seek`\r",p:`Triggered when the player performs a time seek
-<div classNa ...`,l:"en/advanced/event.html#seek",a:"seek"},"12.28":{t:"`subtitleOffset`\r",p:`Triggered when subtitle offset changes in the player
-<div c ...`,l:"en/advanced/event.html#subtitleoffset",a:"subtitleoffset"},"12.29":{t:"`subtitleBeforeUpdate`\r",p:`Triggered before subtitles are updated
-<div className=" ...`,l:"en/advanced/event.html#subtitlebeforeupdate",a:"subtitlebeforeupdate"},"12.30":{t:"`subtitleAfterUpdate`\r",p:`Triggered after subtitles are updated
-<div className=" ...`,l:"en/advanced/event.html#subtitleafterupdate",a:"subtitleafterupdate"},"12.31":{t:"`subtitleLoad`\r",p:`Triggered when subtitles are loaded
-<div className="ru ...`,l:"en/advanced/event.html#subtitleload",a:"subtitleload"},"12.32":{t:"`info`\r",p:`Triggered when the info panel is shown or hidden
-<div class ...`,l:"en/advanced/event.html#info",a:"info"},"12.33":{t:"`layer`\r",p:`Triggered when custom layers are shown or hidden
-<div class ...`,l:"en/advanced/event.html#layer",a:"layer"},"12.34":{t:"`loading`\r",p:`Triggered when the loader is shown or hidden
-<div className ...`,l:"en/advanced/event.html#loading",a:"loading"},"12.35":{t:"`mask`\r",p:`Triggered when the mask layer is shown or hidden
-<div class ...`,l:"en/advanced/event.html#mask",a:"mask"},"12.36":{t:"`subtitle`\r",p:`Triggered when the subtitle layer is shown or hidden
-<div c ...`,l:"en/advanced/event.html#subtitle",a:"subtitle"},"12.37":{t:"`contextmenu`\r",p:`Triggered when the context menu is shown or hidden
-<div cla ...`,l:"en/advanced/event.html#contextmenu",a:"contextmenu"},"12.38":{t:"`control`\r",p:`Triggered when the controls are shown or hidden
-<div classN ...`,l:"en/advanced/event.html#control",a:"control"},"12.39":{t:"`setting`\r",p:`Triggered when the settings panel is shown or hidden
-<div c ...`,l:"en/advanced/event.html#setting",a:"setting"},"12.40":{t:"`muted`\r",p:`Triggered when the mute state changes
-<div className=" ...`,l:"en/advanced/event.html#muted",a:"muted"},"12.41":{t:"`keydown`\r",p:`Listens for keydown events from the document
-<div className ...`,l:"en/advanced/event.html#keydown",a:"keydown"},"12.42":{t:"`video:canplay`\r",p:"The browser can start playing the media, but estimates there i ...",l:"en/advanced/event.html#video-canplay",a:"video-canplay"},"12.43":{t:"`video:canplaythrough`\r",p:"The browser estimates it can play the media through to the end ...",l:"en/advanced/event.html#video-canplaythrough",a:"video-canplaythrough"},"12.44":{t:"`video:complete`\r",p:`OfflineAudioContext rendering is complete
-`,l:"en/advanced/event.html#video-complete",a:"video-complete"},"12.45":{t:"`video:durationchange`\r",p:`Triggered when the value of the duration property changes
-`,l:"en/advanced/event.html#video-durationchange",a:"video-durationchange"},"12.46":{t:"`video:emptied`\r",p:"The media has become empty; for example, this event is sent wh ...",l:"en/advanced/event.html#video-emptied",a:"video-emptied"},"12.47":{t:"`video:ended`\r",p:"Playback has stopped because the media has reached its end poi ...",l:"en/advanced/event.html#video-ended",a:"video-ended"},"12.48":{t:"`video:error`\r",p:"An error occurred while fetching media data, or the resource t ...",l:"en/advanced/event.html#video-error",a:"video-error"},"12.49":{t:"`video:loadeddata`\r",p:`The first frame of the media has finished loading
-`,l:"en/advanced/event.html#video-loadeddata",a:"video-loadeddata"},"12.50":{t:"`video:loadedmetadata`\r",p:`Metadata has been loaded
-`,l:"en/advanced/event.html#video-loadedmetadata",a:"video-loadedmetadata"},"12.51":{t:"`video:pause`\r",p:`Playback has been paused
-`,l:"en/advanced/event.html#video-pause",a:"video-pause"},"12.52":{t:"`video:play`\r",p:`Playback has begun
-`,l:"en/advanced/event.html#video-play",a:"video-play"},"12.53":{t:"`video:playing`\r",p:"Playback is ready to start after having been paused or delayed ...",l:"en/advanced/event.html#video-playing",a:"video-playing"},"12.54":{t:"`video:progress`\r",p:"Periodically triggered while the browser is loading the resour ...",l:"en/advanced/event.html#video-progress",a:"video-progress"},"12.55":{t:"`video:ratechange`\r",p:`The playback rate has changed
-`,l:"en/advanced/event.html#video-ratechange",a:"video-ratechange"},"12.56":{t:"`video:seeked`\r",p:`A seek operation has completed
-`,l:"en/advanced/event.html#video-seeked",a:"video-seeked"},"12.57":{t:"`video:seeking`\r",p:`A seek operation has begun
-`,l:"en/advanced/event.html#video-seeking",a:"video-seeking"},"12.58":{t:"`video:stalled`\r",p:"The user agent is trying to fetch media data, but data is unex ...",l:"en/advanced/event.html#video-stalled",a:"video-stalled"},"12.59":{t:"`video:suspend`\r",p:`Media data loading has been suspended
-`,l:"en/advanced/event.html#video-suspend",a:"video-suspend"},"12.60":{t:"`video:timeupdate`\r",p:"The time indicated by the currentTime attribute has been updat ...",l:"en/advanced/event.html#video-timeupdate",a:"video-timeupdate"},"12.61":{t:"`video:volumechange`\r",p:`The volume has changed
-`,l:"en/advanced/event.html#video-volumechange",a:"video-volumechange"},"12.62":{t:"`video:waiting`\r",p:`Playback has stopped due to temporary lack of data
-`,l:"en/advanced/event.html#video-waiting",a:"video-waiting"},"13.0":{t:"# Global Properties\r",p:"These global properties refer to the top-level properties moun ...",l:"en/advanced/global.html",a:"global-properties"},"13.1":{t:"DEBUG\r",p:"Whether to enable debug mode, which can print all built-in eve ...",l:"en/advanced/global.html#debug",a:"debug"},"13.2":{t:"STYLE\r",p:`Returns the player style text.
-<div className="run-cod ...`,l:"en/advanced/global.html#style",a:"style"},"13.3":{t:"CONTEXTMENU\r",p:`Whether to enable the context menu. Default is on.
-<div cla ...`,l:"en/advanced/global.html#contextmenu",a:"contextmenu"},"13.4":{t:"NOTICE_TIME\r",p:"The display duration for notification messages, in millisecond ...",l:"en/advanced/global.html#notice-time",a:"notice-time"},"13.5":{t:"SETTING_WIDTH\r",p:"The default width of the settings panel, in pixels. Default is ...",l:"en/advanced/global.html#setting-width",a:"setting-width"},"13.6":{t:"SETTING_ITEM_WIDTH\r",p:"The default width of settings items in the settings panel, in  ...",l:"en/advanced/global.html#setting-item-width",a:"setting-item-width"},"13.7":{t:"SETTING_ITEM_HEIGHT\r",p:"The default height of settings items in the settings panel, in ...",l:"en/advanced/global.html#setting-item-height",a:"setting-item-height"},"13.8":{t:"RESIZE_TIME\r",p:"The throttle time for the resize event, in milliseconds. Defau ...",l:"en/advanced/global.html#resize-time",a:"resize-time"},"13.9":{t:"SCROLL_TIME\r",p:"The throttle time for the scroll event, in milliseconds. Defau ...",l:"en/advanced/global.html#scroll-time",a:"scroll-time"},"13.10":{t:"SCROLL_GAP\r",p:"The boundary tolerance distance for the view event, in pixels. ...",l:"en/advanced/global.html#scroll-gap",a:"scroll-gap"},"13.11":{t:"AUTO_PLAYBACK_MAX\r",p:"The maximum record count for the auto-playback feature. Defaul ...",l:"en/advanced/global.html#auto-playback-max",a:"auto-playback-max"},"13.12":{t:"AUTO_PLAYBACK_MIN\r",p:"The minimum record duration for the auto-playback feature, in  ...",l:"en/advanced/global.html#auto-playback-min",a:"auto-playback-min"},"13.13":{t:"AUTO_PLAYBACK_TIMEOUT\r",p:"The hide delay duration for the auto-playback feature, in mill ...",l:"en/advanced/global.html#auto-playback-timeout",a:"auto-playback-timeout"},"13.14":{t:"RECONNECT_TIME_MAX\r",p:"The maximum number of automatic reconnection attempts when a c ...",l:"en/advanced/global.html#reconnect-time-max",a:"reconnect-time-max"},"13.15":{t:"RECONNECT_SLEEP_TIME\r",p:"The delay time for automatic reconnection when a connection er ...",l:"en/advanced/global.html#reconnect-sleep-time",a:"reconnect-sleep-time"},"13.16":{t:"CONTROL_HIDE_TIME\r",p:"The delay time in milliseconds for auto-hiding the bottom cont ...",l:"en/advanced/global.html#control-hide-time",a:"control-hide-time"},"13.17":{t:"DBCLICK_TIME\r",p:"The delay time in milliseconds for double-click events. Defaul ...",l:"en/advanced/global.html#dbclick-time",a:"dbclick-time"},"13.18":{t:"DBCLICK_FULLSCREEN\r",p:"On desktop, whether double-click toggles fullscreen mode. Defa ...",l:"en/advanced/global.html#dbclick-fullscreen",a:"dbclick-fullscreen"},"13.19":{t:"MOBILE_DBCLICK_PLAY\r",p:"On mobile devices, whether double-click toggles play/pause. De ...",l:"en/advanced/global.html#mobile-dbclick-play",a:"mobile-dbclick-play"},"13.20":{t:"MOBILE_CLICK_PLAY\r",p:"On mobile devices, whether single-click toggles play/pause. De ...",l:"en/advanced/global.html#mobile-click-play",a:"mobile-click-play"},"13.21":{t:"AUTO_ORIENTATION_TIME\r",p:"On mobile devices, the delay time in milliseconds for automati ...",l:"en/advanced/global.html#auto-orientation-time",a:"auto-orientation-time"},"13.22":{t:"INFO_LOOP_TIME\r",p:"The refresh interval in milliseconds for the information panel ...",l:"en/advanced/global.html#info-loop-time",a:"info-loop-time"},"13.23":{t:"FAST_FORWARD_VALUE\r",p:"On mobile devices, the speed multiplier for fast-forward durin ...",l:"en/advanced/global.html#fast-forward-value",a:"fast-forward-value"},"13.24":{t:"FAST_FORWARD_TIME\r",p:"On mobile devices, the delay time in milliseconds for activati ...",l:"en/advanced/global.html#fast-forward-time",a:"fast-forward-time"},"13.25":{t:"TOUCH_MOVE_RATIO\r",p:"On mobile devices, the speed multiplier for seeking when swipi ...",l:"en/advanced/global.html#touch-move-ratio",a:"touch-move-ratio"},"13.26":{t:"VOLUME_STEP\r",p:"The volume adjustment step for keyboard shortcuts. Default is  ...",l:"en/advanced/global.html#volume-step",a:"volume-step"},"13.27":{t:"SEEK_STEP\r",p:"The seeking step in seconds for keyboard shortcuts. Default is ...",l:"en/advanced/global.html#seek-step",a:"seek-step"},"13.28":{t:"PLAYBACK_RATE\r",p:"The built-in list of playback rates. Default is [0.5, 0.75, 1, ...",l:"en/advanced/global.html#playback-rate",a:"playback-rate"},"13.29":{t:"ASPECT_RATIO\r",p:"The built-in list of video aspect ratios. Default is ['default ...",l:"en/advanced/global.html#aspect-ratio",a:"aspect-ratio"},"13.30":{t:"FLIP\r",p:"The built-in list of video flip modes. Default is ['normal', ' ...",l:"en/advanced/global.html#flip",a:"flip"},"13.31":{t:"FULLSCREEN_WEB_IN_BODY\r",p:"Determines whether to mount the player under the body element  ...",l:"en/advanced/global.html#fullscreen-web-in-body",a:"fullscreen-web-in-body"},"13.32":{t:"LOG_VERSION\r",p:`Sets whether to print the player version. Defaults to true.
-&l ...`,l:"en/advanced/global.html#log-version",a:"log-version"},"13.33":{t:"USE_RAF\r",p:"Sets whether to use requestAnimationFrame. Defaults to false.  ...",l:"en/advanced/global.html#use-raf",a:"use-raf"},"13.34":{t:"REMOVE_SRC_WHEN_DESTROY\r",p:"Determines whether to remove the video's src attribute and cal ...",l:"en/advanced/global.html#remove-src-when-destroy",a:"remove-src-when-destroy"},"14.0":{t:"# Writing Plugins\r",p:"Once you are familiar with the player's properties, methods, a ...",l:"en/advanced/plugin.html",a:"writing-plugins"},"15.0":{t:"# Instance Properties\r",p:"Here, Instance Properties refer to the first-level properties  ...",l:"en/advanced/property.html",a:"instance-properties"},"15.1":{t:"`play`\r",p:`
+The add method is used to ...`,l:"en/advanced/built-in.html#setting",a:"setting"},"10.17":{t:"`plugins`",p:"Manages the player's plugin functionality, with only the add m ...",l:"en/advanced/built-in.html#plugins",a:"plugins"},"11.0":{t:"# Static Properties",p:"Here, Static Properties refer to the top-level properties moun ...",l:"en/advanced/class.html",a:"static-properties"},"11.1":{t:"`instances`",p:"Returns an array of all player instances. This property can be ...",l:"en/advanced/class.html#instances",a:"instances"},"11.2":{t:"`version`",p:`Returns the version information of the player.
+<div classNa ...`,l:"en/advanced/class.html#version",a:"version"},"11.3":{t:"`env`",p:`Returns the environment variables of the player.
+<div class ...`,l:"en/advanced/class.html#env",a:"env"},"11.4":{t:"`build`",p:`Returns the build time of the player.
+<div className=" ...`,l:"en/advanced/class.html#build",a:"build"},"11.5":{t:"`config`",p:`Returns the default configuration for videos.
+<div classNam ...`,l:"en/advanced/class.html#config",a:"config"},"11.6":{t:"`utils`",p:`Returns the collection of utility functions for the player.
+&l ...`,l:"en/advanced/class.html#utils",a:"utils"},"11.7":{t:"`scheme`",p:`Returns the validation schema for player options.
+<div clas ...`,l:"en/advanced/class.html#scheme",a:"scheme"},"11.8":{t:"`Emitter`",p:`Returns the constructor function for the event emitter.
+<di ...`,l:"en/advanced/class.html#emitter",a:"emitter"},"11.9":{t:"`validator`",p:`Returns the validation function for options.
+<div className ...`,l:"en/advanced/class.html#validator",a:"validator"},"11.10":{t:"`kindOf`",p:`Returns the utility function for type detection.
+<div class ...`,l:"en/advanced/class.html#kindof",a:"kindof"},"11.11":{t:"`html`",p:`Returns the html string required by the player.
+<div classN ...`,l:"en/advanced/class.html#html",a:"html"},"11.12":{t:"`option`",p:`Returns the default options for the player.
+<div className= ...`,l:"en/advanced/class.html#option",a:"option"},"12.0":{t:"# Instance Events",p:"Player events are divided into two types: native events (prefi ...",l:"en/advanced/event.html",a:"instance-events"},"12.1":{t:"`ready`",p:`Triggered when the player is ready for the first time
+<div  ...`,l:"en/advanced/event.html#ready",a:"ready"},"12.2":{t:"`restart`",p:`Triggered when the player switches URL and becomes playable
+&l ...`,l:"en/advanced/event.html#restart",a:"restart"},"12.3":{t:"`pause`",p:`Triggered when the player is paused
+<div className="ru ...`,l:"en/advanced/event.html#pause",a:"pause"},"12.4":{t:"`play`",p:`Triggered when the player starts playing
+<div className=&qu ...`,l:"en/advanced/event.html#play",a:"play"},"12.5":{t:"`hotkey`",p:`Triggered when a hotkey is pressed on the player
+<div class ...`,l:"en/advanced/event.html#hotkey",a:"hotkey"},"12.6":{t:"`destroy`",p:`Triggered when the player is destroyed
+<div className=" ...`,l:"en/advanced/event.html#destroy",a:"destroy"},"12.7":{t:"`focus`",p:`Triggered when the player gains focus
+<div className=" ...`,l:"en/advanced/event.html#focus",a:"focus"},"12.8":{t:"`blur`",p:`Triggered when the player loses focus
+<div className=" ...`,l:"en/advanced/event.html#blur",a:"blur"},"12.9":{t:"`dblclick`",p:`Triggered when the player is double-clicked
+<div className= ...`,l:"en/advanced/event.html#dblclick",a:"dblclick"},"12.10":{t:"`click`",p:`Triggered when the player is clicked
+<div className="r ...`,l:"en/advanced/event.html#click",a:"click"},"12.11":{t:"`error`",p:`Triggered when an error occurs while loading the video
+<div ...`,l:"en/advanced/event.html#error",a:"error"},"12.12":{t:"`hover`",p:`Triggered when the mouse enters or leaves the player
+<div c ...`,l:"en/advanced/event.html#hover",a:"hover"},"12.13":{t:"`mousemove`",p:`Triggered when the mouse moves over the player
+<div classNa ...`,l:"en/advanced/event.html#mousemove",a:"mousemove"},"12.14":{t:"`resize`",p:`Triggered when the player's dimensions change
+<div classNam ...`,l:"en/advanced/event.html#resize",a:"resize"},"12.15":{t:"`view`",p:`Triggered when the player enters or leaves the viewport
+<di ...`,l:"en/advanced/event.html#view",a:"view"},"12.16":{t:"`lock`",p:`Triggered when the lock state changes on mobile devices
+<di ...`,l:"en/advanced/event.html#lock",a:"lock"},"12.17":{t:"`aspectRatio`",p:`Triggered when the player's aspect ratio changes
+<div class ...`,l:"en/advanced/event.html#aspectratio",a:"aspectratio"},"12.18":{t:"`autoHeight`",p:`Triggered when the player automatically adjusts its height
+< ...`,l:"en/advanced/event.html#autoheight",a:"autoheight"},"12.19":{t:"`autoSize`",p:`Triggered when the player automatically adjusts its size
+<d ...`,l:"en/advanced/event.html#autosize",a:"autosize"},"12.20":{t:"`flip`",p:`Triggered when the player is flipped
+<div className="r ...`,l:"en/advanced/event.html#flip",a:"flip"},"12.21":{t:"`fullscreen`",p:"Triggered when the player enters or exits window fullscreen mo ...",l:"en/advanced/event.html#fullscreen",a:"fullscreen"},"12.22":{t:"`fullscreenError`",p:`Triggered when a window fullscreen error occurs
+<div classN ...`,l:"en/advanced/event.html#fullscreenerror",a:"fullscreenerror"},"12.23":{t:"`fullscreenWeb`",p:`Triggered when the player enters or exits web fullscreen mode
+ ...`,l:"en/advanced/event.html#fullscreenweb",a:"fullscreenweb"},"12.24":{t:"`mini`",p:`Triggered when the player enters or exits mini mode
+<div cl ...`,l:"en/advanced/event.html#mini",a:"mini"},"12.25":{t:"`pip`",p:"Triggered when the player enters or exits picture-in-picture m ...",l:"en/advanced/event.html#pip",a:"pip"},"12.26":{t:"`screenshot`",p:`Triggered when the player captures a screenshot
+<div classN ...`,l:"en/advanced/event.html#screenshot",a:"screenshot"},"12.27":{t:"`seek`",p:`Triggered when the player performs a time seek
+<div classNa ...`,l:"en/advanced/event.html#seek",a:"seek"},"12.28":{t:"`subtitleOffset`",p:`Triggered when subtitle offset changes in the player
+<div c ...`,l:"en/advanced/event.html#subtitleoffset",a:"subtitleoffset"},"12.29":{t:"`subtitleBeforeUpdate`",p:`Triggered before subtitles are updated
+<div className=" ...`,l:"en/advanced/event.html#subtitlebeforeupdate",a:"subtitlebeforeupdate"},"12.30":{t:"`subtitleAfterUpdate`",p:`Triggered after subtitles are updated
+<div className=" ...`,l:"en/advanced/event.html#subtitleafterupdate",a:"subtitleafterupdate"},"12.31":{t:"`subtitleLoad`",p:`Triggered when subtitles are loaded
+<div className="ru ...`,l:"en/advanced/event.html#subtitleload",a:"subtitleload"},"12.32":{t:"`info`",p:`Triggered when the info panel is shown or hidden
+<div class ...`,l:"en/advanced/event.html#info",a:"info"},"12.33":{t:"`layer`",p:`Triggered when custom layers are shown or hidden
+<div class ...`,l:"en/advanced/event.html#layer",a:"layer"},"12.34":{t:"`loading`",p:`Triggered when the loader is shown or hidden
+<div className ...`,l:"en/advanced/event.html#loading",a:"loading"},"12.35":{t:"`mask`",p:`Triggered when the mask layer is shown or hidden
+<div class ...`,l:"en/advanced/event.html#mask",a:"mask"},"12.36":{t:"`subtitle`",p:`Triggered when the subtitle layer is shown or hidden
+<div c ...`,l:"en/advanced/event.html#subtitle",a:"subtitle"},"12.37":{t:"`contextmenu`",p:`Triggered when the context menu is shown or hidden
+<div cla ...`,l:"en/advanced/event.html#contextmenu",a:"contextmenu"},"12.38":{t:"`control`",p:`Triggered when the controls are shown or hidden
+<div classN ...`,l:"en/advanced/event.html#control",a:"control"},"12.39":{t:"`setting`",p:`Triggered when the settings panel is shown or hidden
+<div c ...`,l:"en/advanced/event.html#setting",a:"setting"},"12.40":{t:"`muted`",p:`Triggered when the mute state changes
+<div className=" ...`,l:"en/advanced/event.html#muted",a:"muted"},"12.41":{t:"`keydown`",p:`Listens for keydown events from the document
+<div className ...`,l:"en/advanced/event.html#keydown",a:"keydown"},"12.42":{t:"`video:canplay`",p:"The browser can start playing the media, but estimates there i ...",l:"en/advanced/event.html#video-canplay",a:"video-canplay"},"12.43":{t:"`video:canplaythrough`",p:"The browser estimates it can play the media through to the end ...",l:"en/advanced/event.html#video-canplaythrough",a:"video-canplaythrough"},"12.44":{t:"`video:complete`",p:`OfflineAudioContext rendering is complete
+`,l:"en/advanced/event.html#video-complete",a:"video-complete"},"12.45":{t:"`video:durationchange`",p:`Triggered when the value of the duration property changes
+`,l:"en/advanced/event.html#video-durationchange",a:"video-durationchange"},"12.46":{t:"`video:emptied`",p:"The media has become empty; for example, this event is sent wh ...",l:"en/advanced/event.html#video-emptied",a:"video-emptied"},"12.47":{t:"`video:ended`",p:"Playback has stopped because the media has reached its end poi ...",l:"en/advanced/event.html#video-ended",a:"video-ended"},"12.48":{t:"`video:error`",p:"An error occurred while fetching media data, or the resource t ...",l:"en/advanced/event.html#video-error",a:"video-error"},"12.49":{t:"`video:loadeddata`",p:`The first frame of the media has finished loading
+`,l:"en/advanced/event.html#video-loadeddata",a:"video-loadeddata"},"12.50":{t:"`video:loadedmetadata`",p:`Metadata has been loaded
+`,l:"en/advanced/event.html#video-loadedmetadata",a:"video-loadedmetadata"},"12.51":{t:"`video:pause`",p:`Playback has been paused
+`,l:"en/advanced/event.html#video-pause",a:"video-pause"},"12.52":{t:"`video:play`",p:`Playback has begun
+`,l:"en/advanced/event.html#video-play",a:"video-play"},"12.53":{t:"`video:playing`",p:"Playback is ready to start after having been paused or delayed ...",l:"en/advanced/event.html#video-playing",a:"video-playing"},"12.54":{t:"`video:progress`",p:"Periodically triggered while the browser is loading the resour ...",l:"en/advanced/event.html#video-progress",a:"video-progress"},"12.55":{t:"`video:ratechange`",p:`The playback rate has changed
+`,l:"en/advanced/event.html#video-ratechange",a:"video-ratechange"},"12.56":{t:"`video:seeked`",p:`A seek operation has completed
+`,l:"en/advanced/event.html#video-seeked",a:"video-seeked"},"12.57":{t:"`video:seeking`",p:`A seek operation has begun
+`,l:"en/advanced/event.html#video-seeking",a:"video-seeking"},"12.58":{t:"`video:stalled`",p:"The user agent is trying to fetch media data, but data is unex ...",l:"en/advanced/event.html#video-stalled",a:"video-stalled"},"12.59":{t:"`video:suspend`",p:`Media data loading has been suspended
+`,l:"en/advanced/event.html#video-suspend",a:"video-suspend"},"12.60":{t:"`video:timeupdate`",p:"The time indicated by the currentTime attribute has been updat ...",l:"en/advanced/event.html#video-timeupdate",a:"video-timeupdate"},"12.61":{t:"`video:volumechange`",p:`The volume has changed
+`,l:"en/advanced/event.html#video-volumechange",a:"video-volumechange"},"12.62":{t:"`video:waiting`",p:`Playback has stopped due to temporary lack of data
+`,l:"en/advanced/event.html#video-waiting",a:"video-waiting"},"13.0":{t:"# Global Properties",p:"These global properties refer to the top-level properties moun ...",l:"en/advanced/global.html",a:"global-properties"},"13.1":{t:"DEBUG",p:"Whether to enable debug mode, which can print all built-in eve ...",l:"en/advanced/global.html#debug",a:"debug"},"13.2":{t:"STYLE",p:`Returns the player style text.
+<div className="run-cod ...`,l:"en/advanced/global.html#style",a:"style"},"13.3":{t:"CONTEXTMENU",p:`Whether to enable the context menu. Default is on.
+<div cla ...`,l:"en/advanced/global.html#contextmenu",a:"contextmenu"},"13.4":{t:"NOTICE_TIME",p:"The display duration for notification messages, in millisecond ...",l:"en/advanced/global.html#notice-time",a:"notice-time"},"13.5":{t:"SETTING_WIDTH",p:"The default width of the settings panel, in pixels. Default is ...",l:"en/advanced/global.html#setting-width",a:"setting-width"},"13.6":{t:"SETTING_ITEM_WIDTH",p:"The default width of settings items in the settings panel, in  ...",l:"en/advanced/global.html#setting-item-width",a:"setting-item-width"},"13.7":{t:"SETTING_ITEM_HEIGHT",p:"The default height of settings items in the settings panel, in ...",l:"en/advanced/global.html#setting-item-height",a:"setting-item-height"},"13.8":{t:"RESIZE_TIME",p:"The throttle time for the resize event, in milliseconds. Defau ...",l:"en/advanced/global.html#resize-time",a:"resize-time"},"13.9":{t:"SCROLL_TIME",p:"The throttle time for the scroll event, in milliseconds. Defau ...",l:"en/advanced/global.html#scroll-time",a:"scroll-time"},"13.10":{t:"SCROLL_GAP",p:"The boundary tolerance distance for the view event, in pixels. ...",l:"en/advanced/global.html#scroll-gap",a:"scroll-gap"},"13.11":{t:"AUTO_PLAYBACK_MAX",p:"The maximum record count for the auto-playback feature. Defaul ...",l:"en/advanced/global.html#auto-playback-max",a:"auto-playback-max"},"13.12":{t:"AUTO_PLAYBACK_MIN",p:"The minimum record duration for the auto-playback feature, in  ...",l:"en/advanced/global.html#auto-playback-min",a:"auto-playback-min"},"13.13":{t:"AUTO_PLAYBACK_TIMEOUT",p:"The hide delay duration for the auto-playback feature, in mill ...",l:"en/advanced/global.html#auto-playback-timeout",a:"auto-playback-timeout"},"13.14":{t:"RECONNECT_TIME_MAX",p:"The maximum number of automatic reconnection attempts when a c ...",l:"en/advanced/global.html#reconnect-time-max",a:"reconnect-time-max"},"13.15":{t:"RECONNECT_SLEEP_TIME",p:"The delay time for automatic reconnection when a connection er ...",l:"en/advanced/global.html#reconnect-sleep-time",a:"reconnect-sleep-time"},"13.16":{t:"CONTROL_HIDE_TIME",p:"The delay time in milliseconds for auto-hiding the bottom cont ...",l:"en/advanced/global.html#control-hide-time",a:"control-hide-time"},"13.17":{t:"DBCLICK_TIME",p:"The delay time in milliseconds for double-click events. Defaul ...",l:"en/advanced/global.html#dbclick-time",a:"dbclick-time"},"13.18":{t:"DBCLICK_FULLSCREEN",p:"On desktop, whether double-click toggles fullscreen mode. Defa ...",l:"en/advanced/global.html#dbclick-fullscreen",a:"dbclick-fullscreen"},"13.19":{t:"MOBILE_DBCLICK_PLAY",p:"On mobile devices, whether double-click toggles play/pause. De ...",l:"en/advanced/global.html#mobile-dbclick-play",a:"mobile-dbclick-play"},"13.20":{t:"MOBILE_CLICK_PLAY",p:"On mobile devices, whether single-click toggles play/pause. De ...",l:"en/advanced/global.html#mobile-click-play",a:"mobile-click-play"},"13.21":{t:"AUTO_ORIENTATION_TIME",p:"On mobile devices, the delay time in milliseconds for automati ...",l:"en/advanced/global.html#auto-orientation-time",a:"auto-orientation-time"},"13.22":{t:"INFO_LOOP_TIME",p:"The refresh interval in milliseconds for the information panel ...",l:"en/advanced/global.html#info-loop-time",a:"info-loop-time"},"13.23":{t:"FAST_FORWARD_VALUE",p:"On mobile devices, the speed multiplier for fast-forward durin ...",l:"en/advanced/global.html#fast-forward-value",a:"fast-forward-value"},"13.24":{t:"FAST_FORWARD_TIME",p:"On mobile devices, the delay time in milliseconds for activati ...",l:"en/advanced/global.html#fast-forward-time",a:"fast-forward-time"},"13.25":{t:"TOUCH_MOVE_RATIO",p:"On mobile devices, the speed multiplier for seeking when swipi ...",l:"en/advanced/global.html#touch-move-ratio",a:"touch-move-ratio"},"13.26":{t:"VOLUME_STEP",p:"The volume adjustment step for keyboard shortcuts. Default is  ...",l:"en/advanced/global.html#volume-step",a:"volume-step"},"13.27":{t:"SEEK_STEP",p:"The seeking step in seconds for keyboard shortcuts. Default is ...",l:"en/advanced/global.html#seek-step",a:"seek-step"},"13.28":{t:"PLAYBACK_RATE",p:"The built-in list of playback rates. Default is [0.5, 0.75, 1, ...",l:"en/advanced/global.html#playback-rate",a:"playback-rate"},"13.29":{t:"ASPECT_RATIO",p:"The built-in list of video aspect ratios. Default is ['default ...",l:"en/advanced/global.html#aspect-ratio",a:"aspect-ratio"},"13.30":{t:"FLIP",p:"The built-in list of video flip modes. Default is ['normal', ' ...",l:"en/advanced/global.html#flip",a:"flip"},"13.31":{t:"FULLSCREEN_WEB_IN_BODY",p:"Determines whether to mount the player under the body element  ...",l:"en/advanced/global.html#fullscreen-web-in-body",a:"fullscreen-web-in-body"},"13.32":{t:"LOG_VERSION",p:`Sets whether to print the player version. Defaults to true.
+&l ...`,l:"en/advanced/global.html#log-version",a:"log-version"},"13.33":{t:"USE_RAF",p:"Sets whether to use requestAnimationFrame. Defaults to false.  ...",l:"en/advanced/global.html#use-raf",a:"use-raf"},"13.34":{t:"REMOVE_SRC_WHEN_DESTROY",p:"Determines whether to remove the video's src attribute and cal ...",l:"en/advanced/global.html#remove-src-when-destroy",a:"remove-src-when-destroy"},"14.0":{t:"# Writing Plugins",p:"Once you are familiar with the player's properties, methods, a ...",l:"en/advanced/plugin.html",a:"writing-plugins"},"15.0":{t:"# Instance Properties",p:"Here, Instance Properties refer to the first-level properties  ...",l:"en/advanced/property.html",a:"instance-properties"},"15.1":{t:"`play`",p:`
 Type: Function
 
 Play the video.
-<div className="run-c ...`,l:"en/advanced/property.html#play",a:"play"},"15.2":{t:"`pause`\r",p:`
+<div className="run-c ...`,l:"en/advanced/property.html#play",a:"play"},"15.2":{t:"`pause`",p:`
 Type: Function
 
 Pause the video.
-<div className="run- ...`,l:"en/advanced/property.html#pause",a:"pause"},"15.3":{t:"`toggle`\r",p:`
+<div className="run- ...`,l:"en/advanced/property.html#pause",a:"pause"},"15.3":{t:"`toggle`",p:`
 Type: Function
 
 Toggle video playback and pause.
-<div clas ...`,l:"en/advanced/property.html#toggle",a:"toggle"},"15.4":{t:"`destroy`\r",p:`
+<div clas ...`,l:"en/advanced/property.html#toggle",a:"toggle"},"15.4":{t:"`destroy`",p:`
 Type: Function
 Parameter: Boolean
 
-Destroy the player. Accept ...`,l:"en/advanced/property.html#destroy",a:"destroy"},"15.5":{t:"`reset`\r",p:`
+Destroy the player. Accept ...`,l:"en/advanced/property.html#destroy",a:"destroy"},"15.5":{t:"`reset`",p:`
 Type: Function
 
-Reset the player's video element: removes the ...`,l:"en/advanced/property.html#reset",a:"reset"},"15.6":{t:"`seek`\r",p:`
+Reset the player's video element: removes the ...`,l:"en/advanced/property.html#reset",a:"reset"},"15.6":{t:"`seek`",p:`
 Type: Setter
 Parameter: Number
 
-Seek to a specific time in th ...`,l:"en/advanced/property.html#seek",a:"seek"},"15.7":{t:"`forward`\r",p:`
+Seek to a specific time in th ...`,l:"en/advanced/property.html#seek",a:"seek"},"15.7":{t:"`forward`",p:`
 Type: Setter
 Parameter: Number
 
-Fast forward the video time,  ...`,l:"en/advanced/property.html#forward",a:"forward"},"15.8":{t:"`backward`\r",p:`
+Fast forward the video time,  ...`,l:"en/advanced/property.html#forward",a:"forward"},"15.8":{t:"`backward`",p:`
 Type: Setter
 Parameter: Number
 
-Rewind the video time, in sec ...`,l:"en/advanced/property.html#backward",a:"backward"},"15.9":{t:"`volume`\r",p:`
+Rewind the video time, in sec ...`,l:"en/advanced/property.html#backward",a:"backward"},"15.9":{t:"`volume`",p:`
 Type: Setter/Getter
 Parameter: Number
 
-Set and get the video  ...`,l:"en/advanced/property.html#volume",a:"volume"},"15.10":{t:"`url`\r",p:`
+Set and get the video  ...`,l:"en/advanced/property.html#volume",a:"volume"},"15.10":{t:"`url`",p:`
 Type: Setter/Getter
 Parameter: String
 
-Set and get the video  ...`,l:"en/advanced/property.html#url",a:"url"},"15.11":{t:"`switch`\r",p:`
+Set and get the video  ...`,l:"en/advanced/property.html#url",a:"url"},"15.11":{t:"`switch`",p:`
 Type: Setter
 Parameter: String
 
-Set the video URL. Similar to ...`,l:"en/advanced/property.html#switch",a:"switch"},"15.12":{t:"`switchUrl`\r",p:`
+Set the video URL. Similar to ...`,l:"en/advanced/property.html#switch",a:"switch"},"15.12":{t:"`switchUrl`",p:`
 Type: Function
 Parameter: String
 
-Set the video URL. Similar  ...`,l:"en/advanced/property.html#switchurl",a:"switchurl"},"15.13":{t:"`switchQuality`\r",p:`
+Set the video URL. Similar  ...`,l:"en/advanced/property.html#switchurl",a:"switchurl"},"15.13":{t:"`switchQuality`",p:`
 Type: Function
 Parameter: String
 
-Sets the video quality URL. ...`,l:"en/advanced/property.html#switchquality",a:"switchquality"},"15.14":{t:"`muted`\r",p:`
+Sets the video quality URL. ...`,l:"en/advanced/property.html#switchquality",a:"switchquality"},"15.14":{t:"`muted`",p:`
 Type: Setter/Getter
 Parameter: Boolean
 
-Sets and gets whether ...`,l:"en/advanced/property.html#muted",a:"muted"},"15.15":{t:"`currentTime`\r",p:`
+Sets and gets whether ...`,l:"en/advanced/property.html#muted",a:"muted"},"15.15":{t:"`currentTime`",p:`
 Type: Setter/Getter
 Parameter: Number
 
-Sets and gets the curr ...`,l:"en/advanced/property.html#currenttime",a:"currenttime"},"15.16":{t:"`duration`\r",p:`
+Sets and gets the curr ...`,l:"en/advanced/property.html#currenttime",a:"currenttime"},"15.16":{t:"`duration`",p:`
 Type: Getter
 
 Gets the duration of the video.
-<div classNa ...`,l:"en/advanced/property.html#duration",a:"duration"},"15.17":{t:"`screenshot`\r",p:`
+<div classNa ...`,l:"en/advanced/property.html#duration",a:"duration"},"15.17":{t:"`screenshot`",p:`
 Type: Function
 
-Downloads a screenshot of the current video f ...`,l:"en/advanced/property.html#screenshot",a:"screenshot"},"15.18":{t:"`getDataURL`\r",p:`
+Downloads a screenshot of the current video f ...`,l:"en/advanced/property.html#screenshot",a:"screenshot"},"15.18":{t:"`getDataURL`",p:`
 Type: Function
 
-Gets the base64 URL of a screenshot of the cu ...`,l:"en/advanced/property.html#getdataurl",a:"getdataurl"},"15.19":{t:"`getBlobUrl`\r",p:`
+Gets the base64 URL of a screenshot of the cu ...`,l:"en/advanced/property.html#getdataurl",a:"getdataurl"},"15.19":{t:"`getBlobUrl`",p:`
 Type: Function
 
-Gets the blob URL of a screenshot of the curr ...`,l:"en/advanced/property.html#getbloburl",a:"getbloburl"},"15.20":{t:"`fullscreen`\r",p:`
+Gets the blob URL of a screenshot of the curr ...`,l:"en/advanced/property.html#getbloburl",a:"getbloburl"},"15.20":{t:"`fullscreen`",p:`
 Type: Setter/Getter
 Parameter: Boolean
 
-Sets and gets the pla ...`,l:"en/advanced/property.html#fullscreen",a:"fullscreen"},"15.21":{t:"`fullscreenWeb`\r",p:`
+Sets and gets the pla ...`,l:"en/advanced/property.html#fullscreen",a:"fullscreen"},"15.21":{t:"`fullscreenWeb`",p:`
 Type: Setter/Getter
 Parameter: Boolean
 
-Sets and gets the pla ...`,l:"en/advanced/property.html#fullscreenweb",a:"fullscreenweb"},"15.22":{t:"`pip`\r",p:`
+Sets and gets the pla ...`,l:"en/advanced/property.html#fullscreenweb",a:"fullscreenweb"},"15.22":{t:"`pip`",p:`
 Type: Setter/Getter
 Parameter: Boolean
 
-Sets and gets the pla ...`,l:"en/advanced/property.html#pip",a:"pip"},"15.23":{t:"`poster`\r",p:`
+Sets and gets the pla ...`,l:"en/advanced/property.html#pip",a:"pip"},"15.23":{t:"`poster`",p:`
 Type: Setter/Getter
 Parameter: String
 
-Sets and gets the vide ...`,l:"en/advanced/property.html#poster",a:"poster"},"15.24":{t:"`mini`\r",p:`
+Sets and gets the vide ...`,l:"en/advanced/property.html#poster",a:"poster"},"15.24":{t:"`mini`",p:`
 Type: Setter/Getter
 Parameter: Boolean
 
-Sets and gets the pla ...`,l:"en/advanced/property.html#mini",a:"mini"},"15.25":{t:"`playing`\r",p:`
+Sets and gets the pla ...`,l:"en/advanced/property.html#mini",a:"mini"},"15.25":{t:"`playing`",p:`
 Type: Getter
 Parameter: Boolean
 
-Gets whether the video is cu ...`,l:"en/advanced/property.html#playing",a:"playing"},"15.26":{t:"`state`\r",p:`
+Gets whether the video is cu ...`,l:"en/advanced/property.html#playing",a:"playing"},"15.26":{t:"`state`",p:`
 Type: Setter/Getter
 Parameter: String
 
-Gets or sets the playe ...`,l:"en/advanced/property.html#state",a:"state"},"15.27":{t:"`autoSize`\r",p:`
+Gets or sets the playe ...`,l:"en/advanced/property.html#state",a:"state"},"15.27":{t:"`autoSize`",p:`
 Type: Function
 
-Sets whether the video adapts its size automa ...`,l:"en/advanced/property.html#autosize",a:"autosize"},"15.28":{t:"`rect`\r",p:`
+Sets whether the video adapts its size automa ...`,l:"en/advanced/property.html#autosize",a:"autosize"},"15.28":{t:"`rect`",p:`
 Type: Getter
 
-Gets the player's dimensions and coordinate inf ...`,l:"en/advanced/property.html#rect",a:"rect"},"15.29":{t:"`bottom` / `top` / `left` / `right` / `x` / `y` / `width` / `height`\r",p:`
+Gets the player's dimensions and coordinate inf ...`,l:"en/advanced/property.html#rect",a:"rect"},"15.29":{t:"`bottom` / `top` / `left` / `right` / `x` / `y` / `width` / `height`",p:`
 Type: Getter
 
-These properties provide shortcut access to rec ...`,l:"en/advanced/property.html#bottom-top-left-right-x-y-width-height",a:"bottom-top-left-right-x-y-width-height"},"15.30":{t:"`flip`\r",p:`
+These properties provide shortcut access to rec ...`,l:"en/advanced/property.html#bottom-top-left-right-x-y-width-height",a:"bottom-top-left-right-x-y-width-height"},"15.30":{t:"`flip`",p:`
 Type: Setter/Getter
 Parameter: String
 
-Sets and gets the play ...`,l:"en/advanced/property.html#flip",a:"flip"},"15.31":{t:"`playbackRate`\r",p:`
+Sets and gets the play ...`,l:"en/advanced/property.html#flip",a:"flip"},"15.31":{t:"`playbackRate`",p:`
 Type: Setter/Getter
 Parameter: Number
 
-Sets and gets the play ...`,l:"en/advanced/property.html#playbackrate",a:"playbackrate"},"15.32":{t:"`aspectRatio`\r",p:`
+Sets and gets the play ...`,l:"en/advanced/property.html#playbackrate",a:"playbackrate"},"15.32":{t:"`aspectRatio`",p:`
 Type: Setter/Getter
 Parameter: String
 
-Sets and gets the play ...`,l:"en/advanced/property.html#aspectratio",a:"aspectratio"},"15.33":{t:"`autoHeight`\r",p:`
+Sets and gets the play ...`,l:"en/advanced/property.html#aspectratio",a:"aspectratio"},"15.33":{t:"`autoHeight`",p:`
 Type: Function
 
-When the container only has a defined width,  ...`,l:"en/advanced/property.html#autoheight",a:"autoheight"},"15.34":{t:"`attr`\r",p:`
+When the container only has a defined width,  ...`,l:"en/advanced/property.html#autoheight",a:"autoheight"},"15.34":{t:"`attr`",p:`
 Type: Function
 Parameter: String
 
-Dynamically gets and sets a ...`,l:"en/advanced/property.html#attr",a:"attr"},"15.35":{t:"`type`\r",p:`
+Dynamically gets and sets a ...`,l:"en/advanced/property.html#attr",a:"attr"},"15.35":{t:"`type`",p:`
 Type: Setter/Getter
 Parameter: String
 
-Dynamically gets and s ...`,l:"en/advanced/property.html#type",a:"type"},"15.36":{t:"`theme`\r",p:`
+Dynamically gets and s ...`,l:"en/advanced/property.html#type",a:"type"},"15.36":{t:"`theme`",p:`
 Type: Setter/Getter
 Parameter: String
 
-Dynamically gets and s ...`,l:"en/advanced/property.html#theme",a:"theme"},"15.37":{t:"`airplay`\r",p:`
+Dynamically gets and s ...`,l:"en/advanced/property.html#theme",a:"theme"},"15.37":{t:"`airplay`",p:`
 Type: Function
 
 Initiates AirPlay.
-<div className="ru ...`,l:"en/advanced/property.html#airplay",a:"airplay"},"15.38":{t:"`loaded`\r",p:`
+<div className="ru ...`,l:"en/advanced/property.html#airplay",a:"airplay"},"15.38":{t:"`loaded`",p:`
 Type: Getter
 
-The proportion of the video that has been buffe ...`,l:"en/advanced/property.html#loaded",a:"loaded"},"15.39":{t:"`loadedTime`\r",p:`
+The proportion of the video that has been buffe ...`,l:"en/advanced/property.html#loaded",a:"loaded"},"15.39":{t:"`loadedTime`",p:`
 Type: Getter
 
-The amount of media that has been buffered, in  ...`,l:"en/advanced/property.html#loadedtime",a:"loadedtime"},"15.40":{t:"`played`\r",p:`
+The amount of media that has been buffered, in  ...`,l:"en/advanced/property.html#loadedtime",a:"loadedtime"},"15.40":{t:"`played`",p:`
 Type: Getter
 
-The proportion of the video that has been playe ...`,l:"en/advanced/property.html#played",a:"played"},"15.41":{t:"`proxy`\r",p:`
+The proportion of the video that has been playe ...`,l:"en/advanced/property.html#played",a:"played"},"15.41":{t:"`proxy`",p:`
 Type: Function
 
-A proxy function for DOM events, essentially  ...`,l:"en/advanced/property.html#proxy",a:"proxy"},"15.42":{t:"`query`\r",p:`
+A proxy function for DOM events, essentially  ...`,l:"en/advanced/property.html#proxy",a:"proxy"},"15.42":{t:"`query`",p:`
 Type: Function
 
-A DOM query function, similar to document.que ...`,l:"en/advanced/property.html#query",a:"query"},"15.43":{t:"`video`\r",p:`
+A DOM query function, similar to document.que ...`,l:"en/advanced/property.html#query",a:"query"},"15.43":{t:"`video`",p:`
 Type: Element
 
 Quickly returns the player's video element.
-&l ...`,l:"en/advanced/property.html#video",a:"video"},"15.44":{t:"`cssVar`\r",p:`
+&l ...`,l:"en/advanced/property.html#video",a:"video"},"15.44":{t:"`cssVar`",p:`
 Type: Function
 
 Dynamically gets or sets CSS variables.
-<d ...`,l:"en/advanced/property.html#cssvar",a:"cssvar"},"15.45":{t:"`quality`\r",p:`
+<d ...`,l:"en/advanced/property.html#cssvar",a:"cssvar"},"15.45":{t:"`quality`",p:`
 Type: Setter
 Parameter: Array
 
-Dynamically sets the list of a ...`,l:"en/advanced/property.html#quality",a:"quality"},"15.46":{t:"`thumbnails`\r",p:`
+Dynamically sets the list of a ...`,l:"en/advanced/property.html#quality",a:"quality"},"15.46":{t:"`thumbnails`",p:`
 Type: Setter/Getter
 Parameter: Object
 
-Dynamically set thumbn ...`,l:"en/advanced/property.html#thumbnails",a:"thumbnails"},"15.47":{t:"`subtitleOffset`\r",p:`
+Dynamically set thumbn ...`,l:"en/advanced/property.html#thumbnails",a:"thumbnails"},"15.47":{t:"`subtitleOffset`",p:`
 Type: Setter/Getter
 Parameter: Number
 
-Dynamically set subtit ...`,l:"en/advanced/property.html#subtitleoffset",a:"subtitleoffset"},"16.0":{t:"# Context Menu\r",p:"\r",l:"en/component/contextmenu.html",a:"context-menu"},"16.1":{t:"Configuration\r",p:`
+Dynamically set subtit ...`,l:"en/advanced/property.html#subtitleoffset",a:"subtitleoffset"},"16.0":{t:"# Context Menu",p:"",l:"en/component/contextmenu.html",a:"context-menu"},"16.1":{t:"Configuration",p:`
 
 
 Property
@@ -762,7 +762,7 @@ Description
 
 disable
 Boolean
-Whether to di ...`,l:"en/component/contextmenu.html#configuration",a:"configuration"},"16.2":{t:"Creation\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/contextmenu.html#creation",a:"creation"},"16.3":{t:"Addition\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/contextmenu.html#addition",a:"addition"},"16.4":{t:"Removal\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/contextmenu.html#removal",a:"removal"},"16.5":{t:"Update\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/contextmenu.html#update",a:"update"},"17.0":{t:"# Controls\r",p:"\r",l:"en/component/controls.html",a:"controls"},"17.1":{t:"Configuration\r",p:`
+Whether to di ...`,l:"en/component/contextmenu.html#configuration",a:"configuration"},"16.2":{t:"Creation",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/contextmenu.html#creation",a:"creation"},"16.3":{t:"Addition",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/contextmenu.html#addition",a:"addition"},"16.4":{t:"Removal",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/contextmenu.html#removal",a:"removal"},"16.5":{t:"Update",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/contextmenu.html#update",a:"update"},"17.0":{t:"# Controls",p:"",l:"en/component/controls.html",a:"controls"},"17.1":{t:"Configuration",p:`
 
 
 Property
@@ -774,7 +774,7 @@ Description
 
 disable
 Boolean
-Whether to di ...`,l:"en/component/controls.html#configuration",a:"configuration"},"17.2":{t:"Creation\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/controls.html#creation",a:"creation"},"17.3":{t:"Adding\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/controls.html#adding",a:"adding"},"17.4":{t:"Removal\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/controls.html#removal",a:"removal"},"17.5":{t:"Updating\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/controls.html#updating",a:"updating"},"18.0":{t:"# Layer\r",p:"\r",l:"en/component/layers.html",a:"layer"},"18.1":{t:"Configuration\r",p:`
+Whether to di ...`,l:"en/component/controls.html#configuration",a:"configuration"},"17.2":{t:"Creation",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/controls.html#creation",a:"creation"},"17.3":{t:"Adding",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/controls.html#adding",a:"adding"},"17.4":{t:"Removal",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/controls.html#removal",a:"removal"},"17.5":{t:"Updating",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/controls.html#updating",a:"updating"},"18.0":{t:"# Layer",p:"",l:"en/component/layers.html",a:"layer"},"18.1":{t:"Configuration",p:`
 
 
 Property
@@ -786,7 +786,7 @@ Description
 
 disable
 Boolean
-Whether to di ...`,l:"en/component/layers.html#configuration",a:"configuration"},"18.2":{t:"Creation\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/layers.html#creation",a:"creation"},"18.3":{t:"Addition\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/layers.html#addition",a:"addition"},"18.4":{t:"Removal\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/layers.html#removal",a:"removal"},"18.5":{t:"Update\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/layers.html#update",a:"update"},"19.0":{t:"# Settings Panel\r",p:"\r",l:"en/component/setting.html",a:"settings-panel"},"19.1":{t:"Built-in\r",p:"First, you need to open the settings panel. It comes with four ...",l:"en/component/setting.html#built-in",a:"built-in"},"19.2":{t:"Creating - Buttons\r",p:`
+Whether to di ...`,l:"en/component/layers.html#configuration",a:"configuration"},"18.2":{t:"Creation",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/layers.html#creation",a:"creation"},"18.3":{t:"Addition",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/layers.html#addition",a:"addition"},"18.4":{t:"Removal",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/layers.html#removal",a:"removal"},"18.5":{t:"Update",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/layers.html#update",a:"update"},"19.0":{t:"# Settings Panel",p:"",l:"en/component/setting.html",a:"settings-panel"},"19.1":{t:"Built-in",p:"First, you need to open the settings panel. It comes with four ...",l:"en/component/setting.html#built-in",a:"built-in"},"19.2":{t:"Creating - Buttons",p:`
 
 
 Property
@@ -798,7 +798,7 @@ Description
 
 html
 String, Element
-Element  ...`,l:"en/component/setting.html#creating-buttons",a:"creating-buttons"},"19.3":{t:"Creating - Selection Lists\r",p:`
+Element  ...`,l:"en/component/setting.html#creating-buttons",a:"creating-buttons"},"19.3":{t:"Creating - Selection Lists",p:`
 
 
 Property
@@ -810,7 +810,7 @@ Description
 
 html
 String, Element
-Element  ...`,l:"en/component/setting.html#creating-selection-lists",a:"creating-selection-lists"},"19.4":{t:"Creating - Nested Lists\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/setting.html#creating-nested-lists",a:"creating-nested-lists"},"19.5":{t:"Create - Toggle Button\r",p:`
+Element  ...`,l:"en/component/setting.html#creating-selection-lists",a:"creating-selection-lists"},"19.4":{t:"Creating - Nested Lists",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/setting.html#creating-nested-lists",a:"creating-nested-lists"},"19.5":{t:"Create - Toggle Button",p:`
 
 
 Property
@@ -822,7 +822,7 @@ Description
 
 html
 String, Element
-DOM elem ...`,l:"en/component/setting.html#create-toggle-button",a:"create-toggle-button"},"19.6":{t:"Create - Range Slider\r",p:`
+DOM elem ...`,l:"en/component/setting.html#create-toggle-button",a:"create-toggle-button"},"19.6":{t:"Create - Range Slider",p:`
 
 
 Property
@@ -834,449 +834,449 @@ Description
 
 html
 String, Element
-DOM elem ...`,l:"en/component/setting.html#create-range-slider",a:"create-range-slider"},"19.7":{t:"Add\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/setting.html#add",a:"add"},"19.8":{t:"Remove\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/setting.html#remove",a:"remove"},"19.9":{t:"Update\r",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/setting.html#update",a:"update"},"20.0":{t:"# Installation & Usage\r",p:"\r",l:"en/index.html",a:"installation-usage"},"20.1":{t:"Installation\r",p:`::: code-group
+DOM elem ...`,l:"en/component/setting.html#create-range-slider",a:"create-range-slider"},"19.7":{t:"Add",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/setting.html#add",a:"add"},"19.8":{t:"Remove",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/setting.html#remove",a:"remove"},"19.9":{t:"Update",p:"<div className="run-code">▶ Run Code</div&g ...",l:"en/component/setting.html#update",a:"update"},"20.0":{t:"# Installation & Usage",p:"",l:"en/index.html",a:"installation-usage"},"20.1":{t:"Installation",p:`::: code-group
 npm install artplayer
 
 yarn add artplayer
 
-pnpm ...`,l:"en/index.html#installation",a:"installation"},"20.2":{t:"`CDN`\r",p:`::: code-group
-https://cdn.jsdelivr.net/npm/artplayer/dist/art ...`,l:"en/index.html#cdn",a:"cdn"},"20.3":{t:"Usage\r",p:`::: code-group
+pnpm ...`,l:"en/index.html#installation",a:"installation"},"20.2":{t:"`CDN`",p:`::: code-group
+https://cdn.jsdelivr.net/npm/artplayer/dist/art ...`,l:"en/index.html#cdn",a:"cdn"},"20.3":{t:"Usage",p:`::: code-group
 <html>
     <head>
-        <title ...`,l:"en/index.html#usage",a:"usage"},"20.4":{t:"`Vue.js`\r",p:`::: code-group
+        <title ...`,l:"en/index.html#usage",a:"usage"},"20.4":{t:"`Vue.js`",p:`::: code-group
 <template>
-  <div ref="$container ...`,l:"en/index.html#vue-js",a:"vue-js"},"20.5":{t:"`React.js`\r",p:`::: code-group
+  <div ref="$container ...`,l:"en/index.html#vue-js",a:"vue-js"},"20.5":{t:"`React.js`",p:`::: code-group
 import Artplayer from 'artplayer'
-import { useE ...`,l:"en/index.html#react-js",a:"react-js"},"20.6":{t:"TypeScript\r",p:"artplayer.d.ts is automatically imported when importing Artpla ...",l:"en/index.html#typescript",a:"typescript"},"20.7":{t:"Vue.js\r",p:`
+import { useE ...`,l:"en/index.html#react-js",a:"react-js"},"20.6":{t:"TypeScript",p:"artplayer.d.ts is automatically imported when importing Artpla ...",l:"en/index.html#typescript",a:"typescript"},"20.7":{t:"Vue.js",p:`
 
-`,l:"en/index.html#vue-js",a:"vue-js"},"20.8":{t:"React.js\r",p:`import Artplayer from 'artplayer';
-const art = useRef<Artpl ...`,l:"en/index.html#react-js",a:"react-js"},"20.9":{t:"Option\r",p:`You can also use the option type.
-import Artplayer, { type Opt ...`,l:"en/index.html#option",a:"option"},"20.10":{t:"JavaScript\r",p:"Sometimes your js files may lose TypeScript type hints. In suc ...",l:"en/index.html#javascript",a:"javascript"},"20.11":{t:"Legacy Browsers\r",p:"The production build artplayer.js only supports the latest maj ...",l:"en/index.html#legacy-browsers",a:"legacy-browsers"},"20.12":{t:"ECMAScript Module\r",p:`::: tip ESM Demo:
+`,l:"en/index.html#vue-js",a:"vue-js"},"20.8":{t:"React.js",p:`import Artplayer from 'artplayer';
+const art = useRef<Artpl ...`,l:"en/index.html#react-js",a:"react-js"},"20.9":{t:"Option",p:`You can also use the option type.
+import Artplayer, { type Opt ...`,l:"en/index.html#option",a:"option"},"20.10":{t:"JavaScript",p:"Sometimes your js files may lose TypeScript type hints. In suc ...",l:"en/index.html#javascript",a:"javascript"},"20.11":{t:"Legacy Browsers",p:"The production build artplayer.js only supports the latest maj ...",l:"en/index.html#legacy-browsers",a:"legacy-browsers"},"20.12":{t:"ECMAScript Module",p:`::: tip ESM Demo:
 https://artplayer.org/esm.html
 :::
-Starting  ...`,l:"en/index.html#ecmascript-module",a:"ecmascript-module"},"20.13":{t:"Custom userAgent\r",p:"Currently, the detection for whether a device is mobile is not ...",l:"en/index.html#custom-useragent",a:"custom-useragent"},"21.0":{t:"# Language Settings\r",p:`::: danger
-Due to the increasing number of bundled multilingua ...`,l:"en/start/i18n.html",a:"language-settings"},"21.1":{t:"Default Languages\r",p:"The default languages are: en, zh-cn. No manual import is requ ...",l:"en/start/i18n.html#default-languages",a:"default-languages"},"21.2":{t:"Importing Languages\r",p:"Language files before bundling are located at: artplayer/src/i ...",l:"en/start/i18n.html#importing-languages",a:"importing-languages"},"21.3":{t:"Adding a New Language\r",p:`var art = new Artplayer({
+Starting  ...`,l:"en/index.html#ecmascript-module",a:"ecmascript-module"},"20.13":{t:"Custom userAgent",p:"Currently, the detection for whether a device is mobile is not ...",l:"en/index.html#custom-useragent",a:"custom-useragent"},"21.0":{t:"# Language Settings",p:`::: danger
+Due to the increasing number of bundled multilingua ...`,l:"en/start/i18n.html",a:"language-settings"},"21.1":{t:"Default Languages",p:"The default languages are: en, zh-cn. No manual import is requ ...",l:"en/start/i18n.html#default-languages",a:"default-languages"},"21.2":{t:"Importing Languages",p:"Language files before bundling are located at: artplayer/src/i ...",l:"en/start/i18n.html#importing-languages",a:"importing-languages"},"21.3":{t:"Adding a New Language",p:`var art = new Artplayer({
     container: '.artplayer-app',
-    ...`,l:"en/start/i18n.html#adding-a-new-language",a:"adding-a-new-language"},"21.4":{t:"Modifying Languages\r",p:`import zhTw from 'artplayer/i18n/zh-tw';
+    ...`,l:"en/start/i18n.html#adding-a-new-language",a:"adding-a-new-language"},"21.4":{t:"Modifying Languages",p:`import zhTw from 'artplayer/i18n/zh-tw';
 
-var art = new Artpla ...`,l:"en/start/i18n.html#modifying-languages",a:"modifying-languages"},"22.0":{t:"# Basic Options\r",p:"\r",l:"en/start/option.html",a:"basic-options"},"22.1":{t:"`container`\r",p:`
+var art = new Artpla ...`,l:"en/start/i18n.html#modifying-languages",a:"modifying-languages"},"22.0":{t:"# Basic Options",p:"",l:"en/start/option.html",a:"basic-options"},"22.1":{t:"`container`",p:`
 Type: String, Element
 Default: #artplayer
 
-The DOM container  ...`,l:"en/start/option.html#container",a:"container"},"22.2":{t:"`url`\r",p:`
+The DOM container  ...`,l:"en/start/option.html#container",a:"container"},"22.2":{t:"`url`",p:`
 Type: String
 Default: ''
 
 The video source URL.
-<div class ...`,l:"en/start/option.html#url",a:"url"},"22.3":{t:"`id`\r",p:`
+<div class ...`,l:"en/start/option.html#url",a:"url"},"22.3":{t:"`id`",p:`
 Type: String
 Default: ''
 
-The unique identifier for the playe ...`,l:"en/start/option.html#id",a:"id"},"22.4":{t:"`onReady`\r",p:`
+The unique identifier for the playe ...`,l:"en/start/option.html#id",a:"id"},"22.4":{t:"`onReady`",p:`
 Type: Function
 Default: undefined
 
-The constructor accepts a  ...`,l:"en/start/option.html#onready",a:"onready"},"22.5":{t:"`poster`\r",p:`
+The constructor accepts a  ...`,l:"en/start/option.html#onready",a:"onready"},"22.5":{t:"`poster`",p:`
 Type: String
 Default: ''
 
-The video poster image, which only  ...`,l:"en/start/option.html#poster",a:"poster"},"22.6":{t:"`theme`\r",p:`
+The video poster image, which only  ...`,l:"en/start/option.html#poster",a:"poster"},"22.6":{t:"`theme`",p:`
 Type: String
 Default: #f00
 
-The player's theme color, current ...`,l:"en/start/option.html#theme",a:"theme"},"22.7":{t:"`volume`\r",p:`
+The player's theme color, current ...`,l:"en/start/option.html#theme",a:"theme"},"22.7":{t:"`volume`",p:`
 Type: Number
 Default: 0.7
 
 The default volume of the player.
- ...`,l:"en/start/option.html#volume",a:"volume"},"22.8":{t:"`isLive`\r",p:`
+ ...`,l:"en/start/option.html#volume",a:"volume"},"22.8":{t:"`isLive`",p:`
 Type: Boolean
 Default: false
 
-Enable live streaming mode, whi ...`,l:"en/start/option.html#islive",a:"islive"},"22.9":{t:"`muted`\r",p:`
+Enable live streaming mode, whi ...`,l:"en/start/option.html#islive",a:"islive"},"22.9":{t:"`muted`",p:`
 Type: Boolean
 Default: false
 
 Whether to mute by default.
-< ...`,l:"en/start/option.html#muted",a:"muted"},"22.10":{t:"`autoplay`\r",p:`
+< ...`,l:"en/start/option.html#muted",a:"muted"},"22.10":{t:"`autoplay`",p:`
 Type: Boolean
 Default: false
 
 Whether to autoplay.
-<div cl ...`,l:"en/start/option.html#autoplay",a:"autoplay"},"22.11":{t:"`autoSize`\r",p:`
+<div cl ...`,l:"en/start/option.html#autoplay",a:"autoplay"},"22.11":{t:"`autoSize`",p:`
 Type: Boolean
 Default: false
 
-By default, the player's dimens ...`,l:"en/start/option.html#autosize",a:"autosize"},"22.12":{t:"`autoMini`\r",p:`
+By default, the player's dimens ...`,l:"en/start/option.html#autosize",a:"autosize"},"22.12":{t:"`autoMini`",p:`
 Type: Boolean
 Default: false
 
-Automatically enters mini playe ...`,l:"en/start/option.html#automini",a:"automini"},"22.13":{t:"`loop`\r",p:`
+Automatically enters mini playe ...`,l:"en/start/option.html#automini",a:"automini"},"22.13":{t:"`loop`",p:`
 Type: Boolean
 Default: false
 
-Whether to enable video looping ...`,l:"en/start/option.html#loop",a:"loop"},"22.14":{t:"`flip`\r",p:`
+Whether to enable video looping ...`,l:"en/start/option.html#loop",a:"loop"},"22.14":{t:"`flip`",p:`
 Type: Boolean
 Default: false
 
-Whether to display the video fl ...`,l:"en/start/option.html#flip",a:"flip"},"22.15":{t:"`playbackRate`\r",p:`
+Whether to display the video fl ...`,l:"en/start/option.html#flip",a:"flip"},"22.15":{t:"`playbackRate`",p:`
 Type: Boolean
 Default: false
 
-Whether to display the video pl ...`,l:"en/start/option.html#playbackrate",a:"playbackrate"},"22.16":{t:"`aspectRatio`\r",p:`
+Whether to display the video pl ...`,l:"en/start/option.html#playbackrate",a:"playbackrate"},"22.16":{t:"`aspectRatio`",p:`
 Type: Boolean
 Default: false
 
-Whether to display the video as ...`,l:"en/start/option.html#aspectratio",a:"aspectratio"},"22.17":{t:"`screenshot`\r",p:`
+Whether to display the video as ...`,l:"en/start/option.html#aspectratio",a:"aspectratio"},"22.17":{t:"`screenshot`",p:`
 Type: Boolean
 Default: false
 
-Whether to display the Video Sc ...`,l:"en/start/option.html#screenshot",a:"screenshot"},"22.18":{t:"`setting`\r",p:`
+Whether to display the Video Sc ...`,l:"en/start/option.html#screenshot",a:"screenshot"},"22.18":{t:"`setting`",p:`
 Type: Boolean
 Default: false
 
-Whether to display the toggle b ...`,l:"en/start/option.html#setting",a:"setting"},"22.19":{t:"`hotkey`\r",p:`
+Whether to display the toggle b ...`,l:"en/start/option.html#setting",a:"setting"},"22.19":{t:"`hotkey`",p:`
 Type: Boolean
 Default: true
 
 Whether to enable hotkeys.
-<d ...`,l:"en/start/option.html#hotkey",a:"hotkey"},"22.20":{t:"`pip`\r",p:`
+<d ...`,l:"en/start/option.html#hotkey",a:"hotkey"},"22.20":{t:"`pip`",p:`
 Type: Boolean
 Default: false
 
-Whether to display the Picture- ...`,l:"en/start/option.html#pip",a:"pip"},"22.21":{t:"`mutex`\r",p:`
+Whether to display the Picture- ...`,l:"en/start/option.html#pip",a:"pip"},"22.21":{t:"`mutex`",p:`
 Type: Boolean
 Default: true
 
-If multiple players exist simult ...`,l:"en/start/option.html#mutex",a:"mutex"},"22.22":{t:"`backdrop`\r",p:`
+If multiple players exist simult ...`,l:"en/start/option.html#mutex",a:"mutex"},"22.22":{t:"`backdrop`",p:`
 Type: Boolean
 Default: true
 
-Whether to enable the backdrop b ...`,l:"en/start/option.html#backdrop",a:"backdrop"},"22.23":{t:"`fullscreen`\r",p:`
+Whether to enable the backdrop b ...`,l:"en/start/option.html#backdrop",a:"backdrop"},"22.23":{t:"`fullscreen`",p:`
 Type: Boolean
 Default: false
 
-Whether to display the player W ...`,l:"en/start/option.html#fullscreen",a:"fullscreen"},"22.24":{t:"`fullscreenWeb`\r",p:`
+Whether to display the player W ...`,l:"en/start/option.html#fullscreen",a:"fullscreen"},"22.24":{t:"`fullscreenWeb`",p:`
 Type: Boolean
 Default: false
 
-Whether to display the player W ...`,l:"en/start/option.html#fullscreenweb",a:"fullscreenweb"},"22.25":{t:"`subtitleOffset`\r",p:`
+Whether to display the player W ...`,l:"en/start/option.html#fullscreenweb",a:"fullscreenweb"},"22.25":{t:"`subtitleOffset`",p:`
 Type: Boolean
 Default: false
 
-Subtitle timing offset, range w ...`,l:"en/start/option.html#subtitleoffset",a:"subtitleoffset"},"22.26":{t:"`miniProgressBar`\r",p:`
+Subtitle timing offset, range w ...`,l:"en/start/option.html#subtitleoffset",a:"subtitleoffset"},"22.26":{t:"`miniProgressBar`",p:`
 Type: Boolean
 Default: false
 
-Mini progress bar that appears  ...`,l:"en/start/option.html#miniprogressbar",a:"miniprogressbar"},"22.27":{t:"`useSSR`\r",p:`
+Mini progress bar that appears  ...`,l:"en/start/option.html#miniprogressbar",a:"miniprogressbar"},"22.27":{t:"`useSSR`",p:`
 Type: Boolean
 Default: false
 
-Whether to use SSR mount mode.  ...`,l:"en/start/option.html#usessr",a:"usessr"},"22.28":{t:"`playsInline`\r",p:`
+Whether to use SSR mount mode.  ...`,l:"en/start/option.html#usessr",a:"usessr"},"22.28":{t:"`playsInline`",p:`
 Type: Boolean
 Default: true
 
-Whether to use playsInline mode  ...`,l:"en/start/option.html#playsinline",a:"playsinline"},"22.29":{t:"`layers`\r",p:`
+Whether to use playsInline mode  ...`,l:"en/start/option.html#playsinline",a:"playsinline"},"22.29":{t:"`layers`",p:`
 Type: Array
 Default: []
 
 Initialize custom layers.
-<div cl ...`,l:"en/start/option.html#layers",a:"layers"},"22.30":{t:"`settings`\r",p:`
+<div cl ...`,l:"en/start/option.html#layers",a:"layers"},"22.30":{t:"`settings`",p:`
 Type: Array
 Default: []
 
 Initialize custom settings panel.
-&l ...`,l:"en/start/option.html#settings",a:"settings"},"22.31":{t:"`contextmenu`\r",p:`
+&l ...`,l:"en/start/option.html#settings",a:"settings"},"22.31":{t:"`contextmenu`",p:`
 Type: Array
 Default: []
 
 Initialize custom context menu.
-< ...`,l:"en/start/option.html#contextmenu",a:"contextmenu"},"22.32":{t:"`controls`\r",p:`
+< ...`,l:"en/start/option.html#contextmenu",a:"contextmenu"},"22.32":{t:"`controls`",p:`
 Type: Array
 Default: []
 
-Initialize custom bottom control bar ...`,l:"en/start/option.html#controls",a:"controls"},"22.33":{t:"`quality`\r",p:`
+Initialize custom bottom control bar ...`,l:"en/start/option.html#controls",a:"controls"},"22.33":{t:"`quality`",p:`
 Type: Array
 Default: []
 
-Whether to display the Quality Selec ...`,l:"en/start/option.html#quality",a:"quality"},"22.34":{t:"`highlight`\r",p:`
+Whether to display the Quality Selec ...`,l:"en/start/option.html#quality",a:"quality"},"22.34":{t:"`highlight`",p:`
 Type: Array
 Default: []
 
-Display Highlight Information on the ...`,l:"en/start/option.html#highlight",a:"highlight"},"22.35":{t:"`plugins`\r",p:`
+Display Highlight Information on the ...`,l:"en/start/option.html#highlight",a:"highlight"},"22.35":{t:"`plugins`",p:`
 Type: Array
 Default: []
 
 Initialize custom plugins.
-<div c ...`,l:"en/start/option.html#plugins",a:"plugins"},"22.36":{t:"`thumbnails`\r",p:`
+<div c ...`,l:"en/start/option.html#plugins",a:"plugins"},"22.36":{t:"`thumbnails`",p:`
 Type: Object
 Default: {}
 
-Set Preview Thumbnails on the progr ...`,l:"en/start/option.html#thumbnails",a:"thumbnails"},"22.37":{t:"`subtitle`\r",p:`
+Set Preview Thumbnails on the progr ...`,l:"en/start/option.html#thumbnails",a:"thumbnails"},"22.37":{t:"`subtitle`",p:`
 Type: Object
 Default: {}
 
-Set the video subtitle. Supported s ...`,l:"en/start/option.html#subtitle",a:"subtitle"},"22.38":{t:"`moreVideoAttr`\r",p:`
+Set the video subtitle. Supported s ...`,l:"en/start/option.html#subtitle",a:"subtitle"},"22.38":{t:"`moreVideoAttr`",p:`
 Type: Object
-Default: {'controls': false, 'preload': 'metadat ...`,l:"en/start/option.html#morevideoattr",a:"morevideoattr"},"22.39":{t:"`icons`\r",p:`
+Default: {'controls': false, 'preload': 'metadat ...`,l:"en/start/option.html#morevideoattr",a:"morevideoattr"},"22.39":{t:"`icons`",p:`
 Type: Object
 Default: {}
 
-Used to replace default icons, supp ...`,l:"en/start/option.html#icons",a:"icons"},"22.40":{t:"`type`\r",p:`
+Used to replace default icons, supp ...`,l:"en/start/option.html#icons",a:"icons"},"22.40":{t:"`type`",p:`
 Type: String
 Default: ''
 
-Used to specify the video format. I ...`,l:"en/start/option.html#type",a:"type"},"22.41":{t:"`customType`\r",p:`
+Used to specify the video format. I ...`,l:"en/start/option.html#type",a:"type"},"22.41":{t:"`customType`",p:`
 Type: Object
 Default: {}
 
-Matches based on the video's type a ...`,l:"en/start/option.html#customtype",a:"customtype"},"22.42":{t:"`lang`\r",p:`
+Matches based on the video's type a ...`,l:"en/start/option.html#customtype",a:"customtype"},"22.42":{t:"`lang`",p:`
 Type: String
 Default: navigator.language.toLowerCase()
 
-The d ...`,l:"en/start/option.html#lang",a:"lang"},"22.43":{t:"`i18n`\r",p:`
+The d ...`,l:"en/start/option.html#lang",a:"lang"},"22.43":{t:"`i18n`",p:`
 Type: Object
 Default: {}
 
-Custom i18n configuration. This con ...`,l:"en/start/option.html#i18n",a:"i18n"},"22.44":{t:"`lock`\r",p:`
+Custom i18n configuration. This con ...`,l:"en/start/option.html#i18n",a:"i18n"},"22.44":{t:"`lock`",p:`
 Type: Boolean
 Default: false
 
-Whether to display a lock butto ...`,l:"en/start/option.html#lock",a:"lock"},"22.45":{t:"`gesture`\r",p:`
+Whether to display a lock butto ...`,l:"en/start/option.html#lock",a:"lock"},"22.45":{t:"`gesture`",p:`
 Type: Boolean
 Default: true
 
-Whether to enable gesture events ...`,l:"en/start/option.html#gesture",a:"gesture"},"22.46":{t:"`fastForward`\r",p:`
+Whether to enable gesture events ...`,l:"en/start/option.html#gesture",a:"gesture"},"22.46":{t:"`fastForward`",p:`
 Type: Boolean
 Default: false
 
-Whether to add a long-press vid ...`,l:"en/start/option.html#fastforward",a:"fastforward"},"22.47":{t:"`autoPlayback`\r",p:`
+Whether to add a long-press vid ...`,l:"en/start/option.html#fastforward",a:"fastforward"},"22.47":{t:"`autoPlayback`",p:`
 Type: Boolean
 Default: false
 
-Whether to use the automatic pl ...`,l:"en/start/option.html#autoplayback",a:"autoplayback"},"22.48":{t:"`autoOrientation`\r",p:`
+Whether to use the automatic pl ...`,l:"en/start/option.html#autoplayback",a:"autoplayback"},"22.48":{t:"`autoOrientation`",p:`
 Type: Boolean
 Default: false
 
-Whether to rotate the player du ...`,l:"en/start/option.html#autoorientation",a:"autoorientation"},"22.49":{t:"`airplay`\r",p:`
+Whether to rotate the player du ...`,l:"en/start/option.html#autoorientation",a:"autoorientation"},"22.49":{t:"`airplay`",p:`
 Type: Boolean
 Default: false
 
-Whether to display the airplay  ...`,l:"en/start/option.html#airplay",a:"airplay"},"22.50":{t:"`cssVar`\r",p:`
+Whether to display the airplay  ...`,l:"en/start/option.html#airplay",a:"airplay"},"22.50":{t:"`cssVar`",p:`
 Type: Object
 Default: {}
 
-Used to modify built-in CSS variabl ...`,l:"en/start/option.html#cssvar",a:"cssvar"},"22.51":{t:"`proxy`\r",p:`
+Used to modify built-in CSS variabl ...`,l:"en/start/option.html#cssvar",a:"cssvar"},"22.51":{t:"`proxy`",p:`
 Type: function
 Default: undefined
 
-The function can return a  ...`,l:"en/start/option.html#proxy",a:"proxy"},"23.0":{t:"# 安装使用\r",p:"\r",l:"index.html",a:"安装使用"},"23.1":{t:"安装\r",p:`::: code-group
+The function can return a  ...`,l:"en/start/option.html#proxy",a:"proxy"},"23.0":{t:"# 安装使用",p:"",l:"index.html",a:"安装使用"},"23.1":{t:"安装",p:`::: code-group
 npm install artplayer
 
 yarn add artplayer
 
-pnpm ...`,l:"index.html#安装",a:"安装"},"23.2":{t:"`CDN`\r",p:`::: code-group
-https://cdn.jsdelivr.net/npm/artplayer/dist/art ...`,l:"index.html#cdn",a:"cdn"},"23.3":{t:"使用\r",p:`::: code-group
+pnpm ...`,l:"index.html#安装",a:"安装"},"23.2":{t:"`CDN`",p:`::: code-group
+https://cdn.jsdelivr.net/npm/artplayer/dist/art ...`,l:"index.html#cdn",a:"cdn"},"23.3":{t:"使用",p:`::: code-group
 <html>
     <head>
-        <title ...`,l:"index.html#使用",a:"使用"},"23.4":{t:"`Vue.js`\r",p:`::: code-group
+        <title ...`,l:"index.html#使用",a:"使用"},"23.4":{t:"`Vue.js`",p:`::: code-group
 <template>
-  <div ref="$container ...`,l:"index.html#vue-js",a:"vue-js"},"23.5":{t:"`React.js`\r",p:`::: code-group
+  <div ref="$container ...`,l:"index.html#vue-js",a:"vue-js"},"23.5":{t:"`React.js`",p:`::: code-group
 import Artplayer from 'artplayer'
-import { useE ...`,l:"index.html#react-js",a:"react-js"},"23.6":{t:"TypeScript\r",p:`导入 Artplayer 时会自动导入的 artplayer.d.ts
-`,l:"index.html#typescript",a:"typescript"},"23.7":{t:"Vue.js\r",p:`
+import { useE ...`,l:"index.html#react-js",a:"react-js"},"23.6":{t:"TypeScript",p:`导入 Artplayer 时会自动导入的 artplayer.d.ts
+`,l:"index.html#typescript",a:"typescript"},"23.7":{t:"Vue.js",p:`
 
-`,l:"index.html#vue-js",a:"vue-js"},"23.8":{t:"React.js\r",p:`import Artplayer from 'artplayer';
-const art = useRef<Artpl ...`,l:"index.html#react-js",a:"react-js"},"23.9":{t:"Option\r",p:`你也可以使用选项的类型
-import Artplayer, { type Option } from 'artplayer' ...`,l:"index.html#option",a:"option"},"23.10":{t:"JavaScript\r",p:`有时你的 js 文件会丢失 TypeScript 的类型提示,这时候你可以手动导入类型
+`,l:"index.html#vue-js",a:"vue-js"},"23.8":{t:"React.js",p:`import Artplayer from 'artplayer';
+const art = useRef<Artpl ...`,l:"index.html#react-js",a:"react-js"},"23.9":{t:"Option",p:`你也可以使用选项的类型
+import Artplayer, { type Option } from 'artplayer' ...`,l:"index.html#option",a:"option"},"23.10":{t:"JavaScript",p:`有时你的 js 文件会丢失 TypeScript 的类型提示,这时候你可以手动导入类型
 变量:
 /**
- * @type { ...`,l:"index.html#javascript",a:"javascript"},"23.11":{t:"古老的浏览器\r",p:`生产构建的 artplayer.js 只兼容最新一个主版本的 Chrome:last 1 Chrome version
-对于 ...`,l:"index.html#古老的浏览器",a:"古老的浏览器"},"23.12":{t:"ECMAScript Module\r",p:`::: tip ESM Demo:
+ * @type { ...`,l:"index.html#javascript",a:"javascript"},"23.11":{t:"古老的浏览器",p:`生产构建的 artplayer.js 只兼容最新一个主版本的 Chrome:last 1 Chrome version
+对于 ...`,l:"index.html#古老的浏览器",a:"古老的浏览器"},"23.12":{t:"ECMAScript Module",p:`::: tip ESM Demo:
 https://artplayer.org/esm.html
 :::
-从 5.2.6 开 ...`,l:"index.html#ecmascript-module",a:"ecmascript-module"},"23.13":{t:"自定义 userAgent\r",p:"目前对于是否移动设备的判断并不准确,有时候希望通过改变 userAgent 来调整播放器的UI, 所以在 5.2.4 开始新 ...",l:"index.html#自定义-useragent",a:"自定义-useragent"},"24.0":{t:"# 弹幕库\r",p:"\r",l:"plugin/danmuku.html",a:"弹幕库"},"24.1":{t:"演示\r",p:`👉 查看完整演示
-`,l:"plugin/danmuku.html#演示",a:"演示"},"24.2":{t:"安装\r",p:`::: code-group
+从 5.2.6 开 ...`,l:"index.html#ecmascript-module",a:"ecmascript-module"},"23.13":{t:"自定义 userAgent",p:"目前对于是否移动设备的判断并不准确,有时候希望通过改变 userAgent 来调整播放器的UI, 所以在 5.2.4 开始新 ...",l:"index.html#自定义-useragent",a:"自定义-useragent"},"24.0":{t:"# 弹幕库",p:"",l:"plugin/danmuku.html",a:"弹幕库"},"24.1":{t:"演示",p:`👉 查看完整演示
+`,l:"plugin/danmuku.html#演示",a:"演示"},"24.2":{t:"安装",p:`::: code-group
 npm install artplayer-plugin-danmuku
 
-yarn add  ...`,l:"plugin/danmuku.html#安装",a:"安装"},"24.3":{t:"CDN\r",p:`::: code-group
-https://cdn.jsdelivr.net/npm/artplayer-plugin-d ...`,l:"plugin/danmuku.html#cdn",a:"cdn"},"24.4":{t:"弹幕结构\r",p:`每一个弹幕是一个对象,多个弹幕组成的数组就是弹幕库,通常只需要text就可以发送一个弹幕,其余都是非必要参数
+yarn add  ...`,l:"plugin/danmuku.html#安装",a:"安装"},"24.3":{t:"CDN",p:`::: code-group
+https://cdn.jsdelivr.net/npm/artplayer-plugin-d ...`,l:"plugin/danmuku.html#cdn",a:"cdn"},"24.4":{t:"弹幕结构",p:`每一个弹幕是一个对象,多个弹幕组成的数组就是弹幕库,通常只需要text就可以发送一个弹幕,其余都是非必要参数
 {
-    t ...`,l:"plugin/danmuku.html#弹幕结构",a:"弹幕结构"},"24.5":{t:"全部选项\r",p:`只有danmuku是必须的参数,其余都是非必填
+    t ...`,l:"plugin/danmuku.html#弹幕结构",a:"弹幕结构"},"24.5":{t:"全部选项",p:`只有danmuku是必须的参数,其余都是非必填
 {
     danmuku: [], // 弹幕数据
-    speed:  ...`,l:"plugin/danmuku.html#全部选项",a:"全部选项"},"24.6":{t:"生命周期\r",p:`来自用户输入的弹幕:
-beforeEmit -> filter -> beforeVisible -> a ...`,l:"plugin/danmuku.html#生命周期",a:"生命周期"},"24.7":{t:"使用弹幕数组\r",p:"<div className="run-code" data-libs="./uncom ...",l:"plugin/danmuku.html#使用弹幕数组",a:"使用弹幕数组"},"24.8":{t:"使用弹幕 XML\r",p:`弹幕 XML 文件,和 Bilibili 网站的弹幕格式一致
-<div className="run-cod ...`,l:"plugin/danmuku.html#使用弹幕-xml",a:"使用弹幕-xml"},"24.9":{t:"使用异步返回\r",p:"<div className="run-code" data-libs="./uncom ...",l:"plugin/danmuku.html#使用异步返回",a:"使用异步返回"},"24.10":{t:"`hide/show`\r",p:`通过方法 hide 和 show 进行隐藏或者显示弹幕
-<div className="run-code&q ...`,l:"plugin/danmuku.html#hide-show",a:"hide-show"},"24.11":{t:"`isHide`\r",p:`通过属性 isHide 判断当前弹幕是隐藏或者显示
-<div className="run-code&quo ...`,l:"plugin/danmuku.html#ishide",a:"ishide"},"24.12":{t:"`emit`\r",p:`通过方法 emit 发送一条实时弹幕
-<div className="run-code" data ...`,l:"plugin/danmuku.html#emit",a:"emit"},"24.13":{t:"`config`\r",p:`通过方法 config 实时改变弹幕配置
-<div className="run-code" da ...`,l:"plugin/danmuku.html#config",a:"config"},"24.14":{t:"`load`\r",p:`通过 load 方法可以重载弹幕库,或者切换新弹幕库,或者追加新的弹幕库
-<div className="r ...`,l:"plugin/danmuku.html#load",a:"load"},"24.15":{t:"`reset`\r",p:`用于清空当前显示的弹幕
-<div className="run-code" data-libs=& ...`,l:"plugin/danmuku.html#reset",a:"reset"},"24.16":{t:"`mount`\r",p:`在初始化弹幕插件的时候,是可以指定弹幕发射器的挂载位置的,默认是挂载在控制栏的中部,你也可以把它挂载在播放器以外的地方。
-当 ...`,l:"plugin/danmuku.html#mount",a:"mount"},"24.17":{t:"`option`\r",p:`用于获取当前弹幕配置
-<div className="run-code" data-libs=&q ...`,l:"plugin/danmuku.html#option",a:"option"},"24.18":{t:"事件\r",p:"<div className="run-code" data-libs="./uncom ...",l:"plugin/danmuku.html#事件",a:"事件"},"25.0":{t:"# 语言设置\r",p:`::: danger
-鉴于捆绑的多国语言越来越多, 从 5.1.0 版本开始, artplayer.js 核心代码除了包含  ...`,l:"start/i18n.html",a:"语言设置"},"25.1":{t:"默认语言\r",p:`默认语言有: en, zh-cn, 无需手动导入
+    speed:  ...`,l:"plugin/danmuku.html#全部选项",a:"全部选项"},"24.6":{t:"生命周期",p:`来自用户输入的弹幕:
+beforeEmit -> filter -> beforeVisible -> a ...`,l:"plugin/danmuku.html#生命周期",a:"生命周期"},"24.7":{t:"使用弹幕数组",p:"<div className="run-code" data-libs="./uncom ...",l:"plugin/danmuku.html#使用弹幕数组",a:"使用弹幕数组"},"24.8":{t:"使用弹幕 XML",p:`弹幕 XML 文件,和 Bilibili 网站的弹幕格式一致
+<div className="run-cod ...`,l:"plugin/danmuku.html#使用弹幕-xml",a:"使用弹幕-xml"},"24.9":{t:"使用异步返回",p:"<div className="run-code" data-libs="./uncom ...",l:"plugin/danmuku.html#使用异步返回",a:"使用异步返回"},"24.10":{t:"`hide/show`",p:`通过方法 hide 和 show 进行隐藏或者显示弹幕
+<div className="run-code&q ...`,l:"plugin/danmuku.html#hide-show",a:"hide-show"},"24.11":{t:"`isHide`",p:`通过属性 isHide 判断当前弹幕是隐藏或者显示
+<div className="run-code&quo ...`,l:"plugin/danmuku.html#ishide",a:"ishide"},"24.12":{t:"`emit`",p:`通过方法 emit 发送一条实时弹幕
+<div className="run-code" data ...`,l:"plugin/danmuku.html#emit",a:"emit"},"24.13":{t:"`config`",p:`通过方法 config 实时改变弹幕配置
+<div className="run-code" da ...`,l:"plugin/danmuku.html#config",a:"config"},"24.14":{t:"`load`",p:`通过 load 方法可以重载弹幕库,或者切换新弹幕库,或者追加新的弹幕库
+<div className="r ...`,l:"plugin/danmuku.html#load",a:"load"},"24.15":{t:"`reset`",p:`用于清空当前显示的弹幕
+<div className="run-code" data-libs=& ...`,l:"plugin/danmuku.html#reset",a:"reset"},"24.16":{t:"`mount`",p:`在初始化弹幕插件的时候,是可以指定弹幕发射器的挂载位置的,默认是挂载在控制栏的中部,你也可以把它挂载在播放器以外的地方。
+当 ...`,l:"plugin/danmuku.html#mount",a:"mount"},"24.17":{t:"`option`",p:`用于获取当前弹幕配置
+<div className="run-code" data-libs=&q ...`,l:"plugin/danmuku.html#option",a:"option"},"24.18":{t:"事件",p:"<div className="run-code" data-libs="./uncom ...",l:"plugin/danmuku.html#事件",a:"事件"},"25.0":{t:"# 语言设置",p:`::: danger
+鉴于捆绑的多国语言越来越多, 从 5.1.0 版本开始, artplayer.js 核心代码除了包含  ...`,l:"start/i18n.html",a:"语言设置"},"25.1":{t:"默认语言",p:`默认语言有: en, zh-cn, 无需手动导入
 var art = new Artplayer({
-    contain ...`,l:"start/i18n.html#默认语言",a:"默认语言"},"25.2":{t:"导入语言\r",p:`打包前的语言文件存放于: artplayer/src/i18n/*.js, 欢迎来添加你的语言
-打包后的语言文件存放于: a ...`,l:"start/i18n.html#导入语言",a:"导入语言"},"25.3":{t:"新增语言\r",p:`var art = new Artplayer({
+    contain ...`,l:"start/i18n.html#默认语言",a:"默认语言"},"25.2":{t:"导入语言",p:`打包前的语言文件存放于: artplayer/src/i18n/*.js, 欢迎来添加你的语言
+打包后的语言文件存放于: a ...`,l:"start/i18n.html#导入语言",a:"导入语言"},"25.3":{t:"新增语言",p:`var art = new Artplayer({
     container: '.artplayer-app',
-    ...`,l:"start/i18n.html#新增语言",a:"新增语言"},"25.4":{t:"修改语言\r",p:`import zhTw from 'artplayer/i18n/zh-tw';
+    ...`,l:"start/i18n.html#新增语言",a:"新增语言"},"25.4":{t:"修改语言",p:`import zhTw from 'artplayer/i18n/zh-tw';
 
-var art = new Artpla ...`,l:"start/i18n.html#修改语言",a:"修改语言"},"26.0":{t:"# 基础选项\r",p:"\r",l:"start/option.html",a:"基础选项"},"26.1":{t:"`container`\r",p:`
+var art = new Artpla ...`,l:"start/i18n.html#修改语言",a:"修改语言"},"26.0":{t:"# 基础选项",p:"",l:"start/option.html",a:"基础选项"},"26.1":{t:"`container`",p:`
 Type: String, Element
 Default: #artplayer
 
 播放器挂载的 DOM 容器
-< ...`,l:"start/option.html#container",a:"container"},"26.2":{t:"`url`\r",p:`
+< ...`,l:"start/option.html#container",a:"container"},"26.2":{t:"`url`",p:`
 Type: String
 Default: ''
 
 视频源地址
-<div className="run-c ...`,l:"start/option.html#url",a:"url"},"26.3":{t:"`id`\r",p:`
+<div className="run-c ...`,l:"start/option.html#url",a:"url"},"26.3":{t:"`id`",p:`
 Type: String
 Default: ''
 
 播放器的唯一标识,目前只用于记忆播放 autoplayback
-< ...`,l:"start/option.html#id",a:"id"},"26.4":{t:"`onReady`\r",p:`
+< ...`,l:"start/option.html#id",a:"id"},"26.4":{t:"`onReady`",p:`
 Type: Function
 Default: undefined
 
-构造函数接受一个函数作为第二个参数,播放器初始化成功 ...`,l:"start/option.html#onready",a:"onready"},"26.5":{t:"`poster`\r",p:`
+构造函数接受一个函数作为第二个参数,播放器初始化成功 ...`,l:"start/option.html#onready",a:"onready"},"26.5":{t:"`poster`",p:`
 Type: String
 Default: ''
 
 视频的海报,只会出现在播放器初始化且未播放的状态下
-<div c ...`,l:"start/option.html#poster",a:"poster"},"26.6":{t:"`theme`\r",p:`
+<div c ...`,l:"start/option.html#poster",a:"poster"},"26.6":{t:"`theme`",p:`
 Type: String
 Default: #f00
 
 播放器主题颜色,目前用于 进度条 和 高亮元素 上
-<div ...`,l:"start/option.html#theme",a:"theme"},"26.7":{t:"`volume`\r",p:`
+<div ...`,l:"start/option.html#theme",a:"theme"},"26.7":{t:"`volume`",p:`
 Type: Number
 Default: 0.7
 
 播放器的默认音量
-<div className="r ...`,l:"start/option.html#volume",a:"volume"},"26.8":{t:"`isLive`\r",p:`
+<div className="r ...`,l:"start/option.html#volume",a:"volume"},"26.8":{t:"`isLive`",p:`
 Type: Boolean
 Default: false
 
 使用直播模式,会隐藏进度条和播放时间
-<div clas ...`,l:"start/option.html#islive",a:"islive"},"26.9":{t:"`muted`\r",p:`
+<div clas ...`,l:"start/option.html#islive",a:"islive"},"26.9":{t:"`muted`",p:`
 Type: Boolean
 Default: false
 
 是否默认静音
-<div className=" ...`,l:"start/option.html#muted",a:"muted"},"26.10":{t:"`autoplay`\r",p:`
+<div className=" ...`,l:"start/option.html#muted",a:"muted"},"26.10":{t:"`autoplay`",p:`
 Type: Boolean
 Default: false
 
 是否自动播放
-<div className=" ...`,l:"start/option.html#autoplay",a:"autoplay"},"26.11":{t:"`autoSize`\r",p:`
+<div className=" ...`,l:"start/option.html#autoplay",a:"autoplay"},"26.11":{t:"`autoSize`",p:`
 Type: Boolean
 Default: false
 
-播放器的尺寸默认会填充整个 container 容器尺寸,所以 ...`,l:"start/option.html#autosize",a:"autosize"},"26.12":{t:"`autoMini`\r",p:`
+播放器的尺寸默认会填充整个 container 容器尺寸,所以 ...`,l:"start/option.html#autosize",a:"autosize"},"26.12":{t:"`autoMini`",p:`
 Type: Boolean
 Default: false
 
 当播放器滚动到浏览器视口以外时,自动进入 迷你播放 模式
-&l ...`,l:"start/option.html#automini",a:"automini"},"26.13":{t:"`loop`\r",p:`
+&l ...`,l:"start/option.html#automini",a:"automini"},"26.13":{t:"`loop`",p:`
 Type: Boolean
 Default: false
 
 是否循环播放
-<div className=" ...`,l:"start/option.html#loop",a:"loop"},"26.14":{t:"`flip`\r",p:`
+<div className=" ...`,l:"start/option.html#loop",a:"loop"},"26.14":{t:"`flip`",p:`
 Type: Boolean
 Default: false
 
-是否显示视频翻转功能,目前只出现在 设置面板 和 右键菜单 里 ...`,l:"start/option.html#flip",a:"flip"},"26.15":{t:"`playbackRate`\r",p:`
+是否显示视频翻转功能,目前只出现在 设置面板 和 右键菜单 里 ...`,l:"start/option.html#flip",a:"flip"},"26.15":{t:"`playbackRate`",p:`
 Type: Boolean
 Default: false
 
-是否显示视频播放速度功能,会出现在 设置面板 和 右键菜单 里 ...`,l:"start/option.html#playbackrate",a:"playbackrate"},"26.16":{t:"`aspectRatio`\r",p:`
+是否显示视频播放速度功能,会出现在 设置面板 和 右键菜单 里 ...`,l:"start/option.html#playbackrate",a:"playbackrate"},"26.16":{t:"`aspectRatio`",p:`
 Type: Boolean
 Default: false
 
 是否显示视频长宽比功能,会出现在 设置面板 和 右键菜单 里
- ...`,l:"start/option.html#aspectratio",a:"aspectratio"},"26.17":{t:"`screenshot`\r",p:`
+ ...`,l:"start/option.html#aspectratio",a:"aspectratio"},"26.17":{t:"`screenshot`",p:`
 Type: Boolean
 Default: false
 
 是否在底部控制栏里显示 视频截图 功能
-<div cla ...`,l:"start/option.html#screenshot",a:"screenshot"},"26.18":{t:"`setting`\r",p:`
+<div cla ...`,l:"start/option.html#screenshot",a:"screenshot"},"26.18":{t:"`setting`",p:`
 Type: Boolean
 Default: false
 
 是否在底部控制栏里显示 设置面板 的开关按钮
-<div  ...`,l:"start/option.html#setting",a:"setting"},"26.19":{t:"`hotkey`\r",p:`
+<div  ...`,l:"start/option.html#setting",a:"setting"},"26.19":{t:"`hotkey`",p:`
 Type: Boolean
 Default: true
 
 是否使用快捷键
-<div className=" ...`,l:"start/option.html#hotkey",a:"hotkey"},"26.20":{t:"`pip`\r",p:`
+<div className=" ...`,l:"start/option.html#hotkey",a:"hotkey"},"26.20":{t:"`pip`",p:`
 Type: Boolean
 Default: false
 
 是否在底部控制栏里显示 画中画 的开关按钮
-<div c ...`,l:"start/option.html#pip",a:"pip"},"26.21":{t:"`mutex`\r",p:`
+<div c ...`,l:"start/option.html#pip",a:"pip"},"26.21":{t:"`mutex`",p:`
 Type: Boolean
 Default: true
 
 假如页面里同时存在多个播放器,是否只能让一个播放器播放
-< ...`,l:"start/option.html#mutex",a:"mutex"},"26.22":{t:"`backdrop`\r",p:`
+< ...`,l:"start/option.html#mutex",a:"mutex"},"26.22":{t:"`backdrop`",p:`
 Type: Boolean
 Default: true
 
-是否开启播放器 UI 的背景虚化效果。开启后,设置面板、右键菜单 ...`,l:"start/option.html#backdrop",a:"backdrop"},"26.23":{t:"`fullscreen`\r",p:`
+是否开启播放器 UI 的背景虚化效果。开启后,设置面板、右键菜单 ...`,l:"start/option.html#backdrop",a:"backdrop"},"26.23":{t:"`fullscreen`",p:`
 Type: Boolean
 Default: false
 
 是否在底部控制栏里显示播放器 窗口全屏 按钮
-<div  ...`,l:"start/option.html#fullscreen",a:"fullscreen"},"26.24":{t:"`fullscreenWeb`\r",p:`
+<div  ...`,l:"start/option.html#fullscreen",a:"fullscreen"},"26.24":{t:"`fullscreenWeb`",p:`
 Type: Boolean
 Default: false
 
 是否在底部控制栏里显示播放器 网页全屏 按钮
-<div  ...`,l:"start/option.html#fullscreenweb",a:"fullscreenweb"},"26.25":{t:"`subtitleOffset`\r",p:`
+<div  ...`,l:"start/option.html#fullscreenweb",a:"fullscreenweb"},"26.25":{t:"`subtitleOffset`",p:`
 Type: Boolean
 Default: false
 
-字幕时间偏移,范围在 [-5s, 5s],出现在 设置面板 里 ...`,l:"start/option.html#subtitleoffset",a:"subtitleoffset"},"26.26":{t:"`miniProgressBar`\r",p:`
+字幕时间偏移,范围在 [-5s, 5s],出现在 设置面板 里 ...`,l:"start/option.html#subtitleoffset",a:"subtitleoffset"},"26.26":{t:"`miniProgressBar`",p:`
 Type: Boolean
 Default: false
 
 迷你进度条,只在播放器失去焦点后且正在播放时出现
-<di ...`,l:"start/option.html#miniprogressbar",a:"miniprogressbar"},"26.27":{t:"`useSSR`\r",p:`
+<di ...`,l:"start/option.html#miniprogressbar",a:"miniprogressbar"},"26.27":{t:"`useSSR`",p:`
 Type: Boolean
 Default: false
 
-是否使用 SSR 挂载模式,假如你希望在播放器挂载前,就提前渲 ...`,l:"start/option.html#usessr",a:"usessr"},"26.28":{t:"`playsInline`\r",p:`
+是否使用 SSR 挂载模式,假如你希望在播放器挂载前,就提前渲 ...`,l:"start/option.html#usessr",a:"usessr"},"26.28":{t:"`playsInline`",p:`
 Type: Boolean
 Default: true
 
 在移动端是否使用 playsInline 模式
-<div  ...`,l:"start/option.html#playsinline",a:"playsinline"},"26.29":{t:"`layers`\r",p:`
+<div  ...`,l:"start/option.html#playsinline",a:"playsinline"},"26.29":{t:"`layers`",p:`
 Type: Array
 Default: []
 
 初始化自定义的 层
-<div className="ru ...`,l:"start/option.html#layers",a:"layers"},"26.30":{t:"`settings`\r",p:`
+<div className="ru ...`,l:"start/option.html#layers",a:"layers"},"26.30":{t:"`settings`",p:`
 Type: Array
 Default: []
 
 初始化自定义的 设置面板
-<div className=" ...`,l:"start/option.html#settings",a:"settings"},"26.31":{t:"`contextmenu`\r",p:`
+<div className=" ...`,l:"start/option.html#settings",a:"settings"},"26.31":{t:"`contextmenu`",p:`
 Type: Array
 Default: []
 
 初始化自定义的 右键菜单
-<div className=" ...`,l:"start/option.html#contextmenu",a:"contextmenu"},"26.32":{t:"`controls`\r",p:`
+<div className=" ...`,l:"start/option.html#contextmenu",a:"contextmenu"},"26.32":{t:"`controls`",p:`
 Type: Array
 Default: []
 
 初始化自定义的底部 控制栏
-<div className=&quo ...`,l:"start/option.html#controls",a:"controls"},"26.33":{t:"`quality`\r",p:`
+<div className=&quo ...`,l:"start/option.html#controls",a:"controls"},"26.33":{t:"`quality`",p:`
 Type: Array
 Default: []
 
@@ -1291,7 +1291,7 @@ Default: []
 
 
 
- ...`,l:"start/option.html#quality",a:"quality"},"26.34":{t:"`highlight`\r",p:`
+ ...`,l:"start/option.html#quality",a:"quality"},"26.34":{t:"`highlight`",p:`
 Type: Array
 Default: []
 
@@ -1307,12 +1307,12 @@ Default: []
 
 
 time
-Nu ...`,l:"start/option.html#highlight",a:"highlight"},"26.35":{t:"`plugins`\r",p:`
+Nu ...`,l:"start/option.html#highlight",a:"highlight"},"26.35":{t:"`plugins`",p:`
 Type: Array
 Default: []
 
 初始化自定义的 插件
-<div className="r ...`,l:"start/option.html#plugins",a:"plugins"},"26.36":{t:"`thumbnails`\r",p:`
+<div className="r ...`,l:"start/option.html#plugins",a:"plugins"},"26.36":{t:"`thumbnails`",p:`
 Type: Object
 Default: {}
 
@@ -1328,7 +1328,7 @@ Default: {}
 
 
 url
-Str ...`,l:"start/option.html#thumbnails",a:"thumbnails"},"26.37":{t:"`subtitle`\r",p:`
+Str ...`,l:"start/option.html#thumbnails",a:"thumbnails"},"26.37":{t:"`subtitle`",p:`
 Type: Object
 Default: {}
 
@@ -1337,66 +1337,66 @@ Default: {}
 
 
 属性
- ...`,l:"start/option.html#subtitle",a:"subtitle"},"26.38":{t:"`moreVideoAttr`\r",p:`
+ ...`,l:"start/option.html#subtitle",a:"subtitle"},"26.38":{t:"`moreVideoAttr`",p:`
 Type: Object
-Default: {'controls': false, 'preload': 'metadat ...`,l:"start/option.html#morevideoattr",a:"morevideoattr"},"26.39":{t:"`icons`\r",p:`
+Default: {'controls': false, 'preload': 'metadat ...`,l:"start/option.html#morevideoattr",a:"morevideoattr"},"26.39":{t:"`icons`",p:`
 Type: Object
 Default: {}
 
 用于替换默认图标,支持 Html 字符串和 HTMLElement
-& ...`,l:"start/option.html#icons",a:"icons"},"26.40":{t:"`type`\r",p:`
+& ...`,l:"start/option.html#icons",a:"icons"},"26.40":{t:"`type`",p:`
 Type: String
 Default: ''
 
-用于指明视频的格式,需要配合 customType 一起使用,默认视频 ...`,l:"start/option.html#type",a:"type"},"26.41":{t:"`customType`\r",p:`
+用于指明视频的格式,需要配合 customType 一起使用,默认视频 ...`,l:"start/option.html#type",a:"type"},"26.41":{t:"`customType`",p:`
 Type: Object
 Default: {}
 
-通过视频的 type 进行匹配,把视频解码权交给第三方程序进行处理,处 ...`,l:"start/option.html#customtype",a:"customtype"},"26.42":{t:"`lang`\r",p:`
+通过视频的 type 进行匹配,把视频解码权交给第三方程序进行处理,处 ...`,l:"start/option.html#customtype",a:"customtype"},"26.42":{t:"`lang`",p:`
 Type: String
 Default: navigator.language.toLowerCase()
 
-默认显示语 ...`,l:"start/option.html#lang",a:"lang"},"26.43":{t:"`i18n`\r",p:`
+默认显示语 ...`,l:"start/option.html#lang",a:"lang"},"26.43":{t:"`i18n`",p:`
 Type: Object
 Default: {}
 
 自定义 i18n 配置,该配置会和自带的 i18n 进行深度合并
-新增 ...`,l:"start/option.html#i18n",a:"i18n"},"26.44":{t:"`lock`\r",p:`
+新增 ...`,l:"start/option.html#i18n",a:"i18n"},"26.44":{t:"`lock`",p:`
 Type: Boolean
 Default: false
 
 是否在移动端显示一个 锁定按钮 ,用于隐藏底部 控制栏
-< ...`,l:"start/option.html#lock",a:"lock"},"26.45":{t:"`gesture`\r",p:`
+< ...`,l:"start/option.html#lock",a:"lock"},"26.45":{t:"`gesture`",p:`
 Type: Boolean
 Default: true
 
 是否在移动端启用视频元素上的手势事件
-<div class ...`,l:"start/option.html#gesture",a:"gesture"},"26.46":{t:"`fastForward`\r",p:`
+<div class ...`,l:"start/option.html#gesture",a:"gesture"},"26.46":{t:"`fastForward`",p:`
 Type: Boolean
 Default: false
 
 是否在移动端添加长按视频快进功能
-<div classN ...`,l:"start/option.html#fastforward",a:"fastforward"},"26.47":{t:"`autoPlayback`\r",p:`
+<div classN ...`,l:"start/option.html#fastforward",a:"fastforward"},"26.47":{t:"`autoPlayback`",p:`
 Type: Boolean
 Default: false
 
 是否使用自动 回放功能
-<div className=& ...`,l:"start/option.html#autoplayback",a:"autoplayback"},"26.48":{t:"`autoOrientation`\r",p:`
+<div className=& ...`,l:"start/option.html#autoplayback",a:"autoplayback"},"26.48":{t:"`autoOrientation`",p:`
 Type: Boolean
 Default: false
 
 是否在移动端的网页全屏时,根据视频尺寸和视口尺寸,旋转播放器
- ...`,l:"start/option.html#autoorientation",a:"autoorientation"},"26.49":{t:"`airplay`\r",p:`
+ ...`,l:"start/option.html#autoorientation",a:"autoorientation"},"26.49":{t:"`airplay`",p:`
 Type: Boolean
 Default: false
 
 是否显示 airplay 按钮,当前只有部分浏览器支持该功能
- ...`,l:"start/option.html#airplay",a:"airplay"},"26.50":{t:"`cssVar`\r",p:`
+ ...`,l:"start/option.html#airplay",a:"airplay"},"26.50":{t:"`cssVar`",p:`
 Type: Object
 Default: {}
 
 用于改变内置的css变量
-<div className=&quo ...`,l:"start/option.html#cssvar",a:"cssvar"},"26.51":{t:"`proxy`\r",p:`
+<div className=&quo ...`,l:"start/option.html#cssvar",a:"cssvar"},"26.51":{t:"`proxy`",p:`
 Type: function
 Default: undefined
 
diff --git a/docs/document/assets/component_contextmenu.md.lsIURdc3.js b/docs/document/assets/component_contextmenu.md.ClKmcIKr.js
similarity index 99%
rename from docs/document/assets/component_contextmenu.md.lsIURdc3.js
rename to docs/document/assets/component_contextmenu.md.ClKmcIKr.js
index 01e6e41e3..c96309777 100644
--- a/docs/document/assets/component_contextmenu.md.lsIURdc3.js
+++ b/docs/document/assets/component_contextmenu.md.ClKmcIKr.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"右键菜单","description":"","frontmatter":{},"headers":[],"relativePath":"component/contextmenu.md","filePath":"component/contextmenu.md","lastUpdated":1682229030000}'),e={name:"component/contextmenu.md"};function h(t,a,k,r,E,d){return l(),p("div",null,a[0]||(a[0]=[s('

右键菜单 ​

配置 ​

属性类型描述
disableBoolean是否禁用组件
nameString组件唯一名称,用于标记类名
indexNumber组件索引,用于显示的优先级
htmlString, Element组件的 DOM 元素
styleObject组件样式对象
clickFunction组件点击事件
mountedFunction组件挂载后触发
tooltipString组件的提示文本

创建 ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"右键菜单","description":"","frontmatter":{},"headers":[],"relativePath":"component/contextmenu.md","filePath":"component/contextmenu.md","lastUpdated":1682229030000}'),e={name:"component/contextmenu.md"};function h(t,a,k,r,E,d){return p(),l("div",null,a[0]||(a[0]=[s('

右键菜单 ​

配置 ​

属性类型描述
disableBoolean是否禁用组件
nameString组件唯一名称,用于标记类名
indexNumber组件索引,用于显示的优先级
htmlString, Element组件的 DOM 元素
styleObject组件样式对象
clickFunction组件点击事件
mountedFunction组件挂载后触发
tooltipString组件的提示文本

创建 ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
     contextmenu: [
diff --git a/docs/document/assets/component_contextmenu.md.lsIURdc3.lean.js b/docs/document/assets/component_contextmenu.md.ClKmcIKr.lean.js
similarity index 81%
rename from docs/document/assets/component_contextmenu.md.lsIURdc3.lean.js
rename to docs/document/assets/component_contextmenu.md.ClKmcIKr.lean.js
index 8b19b3abc..161fe2316 100644
--- a/docs/document/assets/component_contextmenu.md.lsIURdc3.lean.js
+++ b/docs/document/assets/component_contextmenu.md.ClKmcIKr.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"右键菜单","description":"","frontmatter":{},"headers":[],"relativePath":"component/contextmenu.md","filePath":"component/contextmenu.md","lastUpdated":1682229030000}'),e={name:"component/contextmenu.md"};function h(t,a,k,r,E,d){return l(),p("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(e,[["render",h]]);export{g as __pageData,y as default};
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"右键菜单","description":"","frontmatter":{},"headers":[],"relativePath":"component/contextmenu.md","filePath":"component/contextmenu.md","lastUpdated":1682229030000}'),e={name:"component/contextmenu.md"};function h(t,a,k,r,E,d){return p(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(e,[["render",h]]);export{g as __pageData,y as default};
diff --git a/docs/document/assets/component_controls.md.CKAl0l5Z.js b/docs/document/assets/component_controls.md.Cl62yW1F.js
similarity index 99%
rename from docs/document/assets/component_controls.md.CKAl0l5Z.js
rename to docs/document/assets/component_controls.md.Cl62yW1F.js
index 5698ca230..fd0050d2c 100644
--- a/docs/document/assets/component_controls.md.CKAl0l5Z.js
+++ b/docs/document/assets/component_controls.md.Cl62yW1F.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"控制器","description":"","frontmatter":{},"headers":[],"relativePath":"component/controls.md","filePath":"component/controls.md","lastUpdated":1682233868000}'),h={name:"component/controls.md"};function e(t,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s('

控制器 ​

配置 ​

属性类型描述
disableBoolean是否禁用组件
nameString组件唯一名称,用于标记类名
indexNumber组件索引,用于显示的优先级
htmlString, Element组件的 DOM 元素
styleObject组件样式对象
clickFunction组件点击事件
mountedFunction组件挂载后触发
tooltipString组件的提示文本
positionStringleft 和 right 控制控制器出现的左右位置
selectorArray选择列表的对象数组
onSelectFunction选择列表的元素被点击时触发的函数

创建 ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"控制器","description":"","frontmatter":{},"headers":[],"relativePath":"component/controls.md","filePath":"component/controls.md","lastUpdated":1682233868000}'),h={name:"component/controls.md"};function e(t,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s('

控制器 ​

配置 ​

属性类型描述
disableBoolean是否禁用组件
nameString组件唯一名称,用于标记类名
indexNumber组件索引,用于显示的优先级
htmlString, Element组件的 DOM 元素
styleObject组件样式对象
clickFunction组件点击事件
mountedFunction组件挂载后触发
tooltipString组件的提示文本
positionStringleft 和 right 控制控制器出现的左右位置
selectorArray选择列表的对象数组
onSelectFunction选择列表的元素被点击时触发的函数

创建 ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
     controls: [
diff --git a/docs/document/assets/component_controls.md.CKAl0l5Z.lean.js b/docs/document/assets/component_controls.md.Cl62yW1F.lean.js
similarity index 81%
rename from docs/document/assets/component_controls.md.CKAl0l5Z.lean.js
rename to docs/document/assets/component_controls.md.Cl62yW1F.lean.js
index 5786d458b..25201074e 100644
--- a/docs/document/assets/component_controls.md.CKAl0l5Z.lean.js
+++ b/docs/document/assets/component_controls.md.Cl62yW1F.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"控制器","description":"","frontmatter":{},"headers":[],"relativePath":"component/controls.md","filePath":"component/controls.md","lastUpdated":1682233868000}'),h={name:"component/controls.md"};function e(t,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(h,[["render",e]]);export{g as __pageData,y as default};
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"控制器","description":"","frontmatter":{},"headers":[],"relativePath":"component/controls.md","filePath":"component/controls.md","lastUpdated":1682233868000}'),h={name:"component/controls.md"};function e(t,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(h,[["render",e]]);export{g as __pageData,y as default};
diff --git a/docs/document/assets/component_layers.md.D34Y4OkH.js b/docs/document/assets/component_layers.md.Cys52VMi.js
similarity index 99%
rename from docs/document/assets/component_layers.md.D34Y4OkH.js
rename to docs/document/assets/component_layers.md.Cys52VMi.js
index 9a41f3dec..b05e845be 100644
--- a/docs/document/assets/component_layers.md.D34Y4OkH.js
+++ b/docs/document/assets/component_layers.md.Cys52VMi.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"业务层","description":"","frontmatter":{},"headers":[],"relativePath":"component/layers.md","filePath":"component/layers.md","lastUpdated":1682229030000}'),h={name:"component/layers.md"};function e(t,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s('

业务层 ​

配置 ​

属性类型描述
disableBoolean是否禁用组件
nameString组件唯一名称,用于标记类名
indexNumber组件索引,用于显示的优先级
htmlString, Element组件的 DOM 元素
styleObject组件样式对象
clickFunction组件点击事件
mountedFunction组件挂载后触发
tooltipString组件的提示文本

创建 ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var img = '/assets/sample/layer.png';
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"业务层","description":"","frontmatter":{},"headers":[],"relativePath":"component/layers.md","filePath":"component/layers.md","lastUpdated":1682229030000}'),h={name:"component/layers.md"};function e(t,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s('

业务层 ​

配置 ​

属性类型描述
disableBoolean是否禁用组件
nameString组件唯一名称,用于标记类名
indexNumber组件索引,用于显示的优先级
htmlString, Element组件的 DOM 元素
styleObject组件样式对象
clickFunction组件点击事件
mountedFunction组件挂载后触发
tooltipString组件的提示文本

创建 ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var img = '/assets/sample/layer.png';
 var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
diff --git a/docs/document/assets/component_layers.md.D34Y4OkH.lean.js b/docs/document/assets/component_layers.md.Cys52VMi.lean.js
similarity index 80%
rename from docs/document/assets/component_layers.md.D34Y4OkH.lean.js
rename to docs/document/assets/component_layers.md.Cys52VMi.lean.js
index c3ad54bdd..8084e2f1f 100644
--- a/docs/document/assets/component_layers.md.D34Y4OkH.lean.js
+++ b/docs/document/assets/component_layers.md.Cys52VMi.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"业务层","description":"","frontmatter":{},"headers":[],"relativePath":"component/layers.md","filePath":"component/layers.md","lastUpdated":1682229030000}'),h={name:"component/layers.md"};function e(t,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(h,[["render",e]]);export{c as __pageData,y as default};
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"业务层","description":"","frontmatter":{},"headers":[],"relativePath":"component/layers.md","filePath":"component/layers.md","lastUpdated":1682229030000}'),h={name:"component/layers.md"};function e(t,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(h,[["render",e]]);export{c as __pageData,y as default};
diff --git a/docs/document/assets/component_setting.md.BwCpY3NU.js b/docs/document/assets/component_setting.md.BP5674ir.js
similarity index 99%
rename from docs/document/assets/component_setting.md.BwCpY3NU.js
rename to docs/document/assets/component_setting.md.BP5674ir.js
index 63b738009..1a7ce69bd 100644
--- a/docs/document/assets/component_setting.md.BwCpY3NU.js
+++ b/docs/document/assets/component_setting.md.BP5674ir.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"设置面板","description":"","frontmatter":{},"headers":[],"relativePath":"component/setting.md","filePath":"component/setting.md","lastUpdated":1750384578000}'),t={name:"component/setting.md"};function h(e,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s('

设置面板 ​

内置 ​

须先打开设置面板,然后自带四个内置项:flip, playbackRate, aspectRatio, subtitleOffset

',3),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"设置面板","description":"","frontmatter":{},"headers":[],"relativePath":"component/setting.md","filePath":"component/setting.md","lastUpdated":1750384578000}'),t={name:"component/setting.md"};function h(e,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s('

设置面板 ​

内置 ​

须先打开设置面板,然后自带四个内置项:flip, playbackRate, aspectRatio, subtitleOffset

',3),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
 	setting: true,
diff --git a/docs/document/assets/component_setting.md.BwCpY3NU.lean.js b/docs/document/assets/component_setting.md.BP5674ir.lean.js
similarity index 86%
rename from docs/document/assets/component_setting.md.BwCpY3NU.lean.js
rename to docs/document/assets/component_setting.md.BP5674ir.lean.js
index 1aa3f0269..ccc446e0d 100644
--- a/docs/document/assets/component_setting.md.BwCpY3NU.lean.js
+++ b/docs/document/assets/component_setting.md.BP5674ir.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"设置面板","description":"","frontmatter":{},"headers":[],"relativePath":"component/setting.md","filePath":"component/setting.md","lastUpdated":1750384578000}'),t={name:"component/setting.md"};function h(e,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(t,[["render",h]]);export{c as __pageData,y as default};
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"设置面板","description":"","frontmatter":{},"headers":[],"relativePath":"component/setting.md","filePath":"component/setting.md","lastUpdated":1750384578000}'),t={name:"component/setting.md"};function h(e,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(t,[["render",h]]);export{c as __pageData,y as default};
diff --git a/docs/document/assets/en_advanced_built-in.md.DWw_qKdn.js b/docs/document/assets/en_advanced_built-in.md.XdT81JC0.js
similarity index 99%
rename from docs/document/assets/en_advanced_built-in.md.DWw_qKdn.js
rename to docs/document/assets/en_advanced_built-in.md.XdT81JC0.js
index bdb1d5e3e..1ed66397b 100644
--- a/docs/document/assets/en_advanced_built-in.md.DWw_qKdn.js
+++ b/docs/document/assets/en_advanced_built-in.md.XdT81JC0.js
@@ -1,4 +1,4 @@
-import{_ as n,o as e,c as l,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const o=JSON.parse('{"title":"Advanced Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/built-in.md","filePath":"en/advanced/built-in.md","lastUpdated":1764426402000}'),p={name:"en/advanced/built-in.md"};function t(h,a,k,r,E,d){return e(),l("div",null,a[0]||(a[0]=[s('

Advanced Properties ​

The Advanced Properties here refer to the secondary properties attached to the instance, which are less commonly used.

option ​

The player's options.

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as e,o as l,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const o=JSON.parse('{"title":"Advanced Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/built-in.md","filePath":"en/advanced/built-in.md","lastUpdated":1764426402000}'),p={name:"en/advanced/built-in.md"};function t(h,a,k,r,E,d){return l(),e("div",null,a[0]||(a[0]=[s('

Advanced Properties ​

The Advanced Properties here refer to the secondary properties attached to the instance, which are less commonly used.

option ​

The player's options.

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
 });
diff --git a/docs/document/assets/en_advanced_built-in.md.DWw_qKdn.lean.js b/docs/document/assets/en_advanced_built-in.md.XdT81JC0.lean.js
similarity index 91%
rename from docs/document/assets/en_advanced_built-in.md.DWw_qKdn.lean.js
rename to docs/document/assets/en_advanced_built-in.md.XdT81JC0.lean.js
index 4f2af006b..15736249a 100644
--- a/docs/document/assets/en_advanced_built-in.md.DWw_qKdn.lean.js
+++ b/docs/document/assets/en_advanced_built-in.md.XdT81JC0.lean.js
@@ -1 +1 @@
-import{_ as n,o as e,c as l,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const o=JSON.parse('{"title":"Advanced Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/built-in.md","filePath":"en/advanced/built-in.md","lastUpdated":1764426402000}'),p={name:"en/advanced/built-in.md"};function t(h,a,k,r,E,d){return e(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const g=n(p,[["render",t]]);export{o as __pageData,g as default};
+import{_ as n,c as e,o as l,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const o=JSON.parse('{"title":"Advanced Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/built-in.md","filePath":"en/advanced/built-in.md","lastUpdated":1764426402000}'),p={name:"en/advanced/built-in.md"};function t(h,a,k,r,E,d){return l(),e("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const g=n(p,[["render",t]]);export{o as __pageData,g as default};
diff --git a/docs/document/assets/en_advanced_class.md.bWhe2FDl.js b/docs/document/assets/en_advanced_class.md.BLyA7rxa.js
similarity index 99%
rename from docs/document/assets/en_advanced_class.md.bWhe2FDl.js
rename to docs/document/assets/en_advanced_class.md.BLyA7rxa.js
index 60cec1af0..d03e14117 100644
--- a/docs/document/assets/en_advanced_class.md.bWhe2FDl.js
+++ b/docs/document/assets/en_advanced_class.md.BLyA7rxa.js
@@ -1,4 +1,4 @@
-import{_ as i,o as n,c as t,ak as s,j as a}from"./chunks/framework.xxfEszSJ.js";const u=JSON.parse('{"title":"Static Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/class.md","filePath":"en/advanced/class.md","lastUpdated":1764426402000}'),l={name:"en/advanced/class.md"};function r(p,e,d,h,o,c){return n(),t("div",null,e[0]||(e[0]=[s('

Static Properties ​

Here, Static Properties refer to the top-level properties mounted on the constructor function, which are very rarely used.

instances ​

Returns an array of all player instances. This property can be useful when you need to manage multiple player instances simultaneously.

',4),a("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
console.info([...Artplayer.instances]);
+import{_ as i,c as n,o as t,ak as s,j as a}from"./chunks/framework.xxfEszSJ.js";const u=JSON.parse('{"title":"Static Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/class.md","filePath":"en/advanced/class.md","lastUpdated":1764426402000}'),l={name:"en/advanced/class.md"};function r(p,e,d,h,o,c){return t(),n("div",null,e[0]||(e[0]=[s('

Static Properties ​

Here, Static Properties refer to the top-level properties mounted on the constructor function, which are very rarely used.

instances ​

Returns an array of all player instances. This property can be useful when you need to manage multiple player instances simultaneously.

',4),a("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
console.info([...Artplayer.instances]);
 
 var art = new Artplayer({
     container: '.artplayer-app',
diff --git a/docs/document/assets/en_advanced_class.md.bWhe2FDl.lean.js b/docs/document/assets/en_advanced_class.md.BLyA7rxa.lean.js
similarity index 88%
rename from docs/document/assets/en_advanced_class.md.bWhe2FDl.lean.js
rename to docs/document/assets/en_advanced_class.md.BLyA7rxa.lean.js
index f6b17c1a3..e4223cad0 100644
--- a/docs/document/assets/en_advanced_class.md.bWhe2FDl.lean.js
+++ b/docs/document/assets/en_advanced_class.md.BLyA7rxa.lean.js
@@ -1 +1 @@
-import{_ as i,o as n,c as t,ak as s,j as a}from"./chunks/framework.xxfEszSJ.js";const u=JSON.parse('{"title":"Static Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/class.md","filePath":"en/advanced/class.md","lastUpdated":1764426402000}'),l={name:"en/advanced/class.md"};function r(p,e,d,h,o,c){return n(),t("div",null,e[0]||(e[0]=[s("",4),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",4),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const _=i(l,[["render",r]]);export{u as __pageData,_ as default};
+import{_ as i,c as n,o as t,ak as s,j as a}from"./chunks/framework.xxfEszSJ.js";const u=JSON.parse('{"title":"Static Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/class.md","filePath":"en/advanced/class.md","lastUpdated":1764426402000}'),l={name:"en/advanced/class.md"};function r(p,e,d,h,o,c){return t(),n("div",null,e[0]||(e[0]=[s("",4),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",4),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",3),a("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const _=i(l,[["render",r]]);export{u as __pageData,_ as default};
diff --git a/docs/document/assets/en_advanced_event.md.igITY2FO.js b/docs/document/assets/en_advanced_event.md.CtQl1IYg.js
similarity index 99%
rename from docs/document/assets/en_advanced_event.md.igITY2FO.js
rename to docs/document/assets/en_advanced_event.md.CtQl1IYg.js
index 290607bf8..d30a20cdd 100644
--- a/docs/document/assets/en_advanced_event.md.igITY2FO.js
+++ b/docs/document/assets/en_advanced_event.md.CtQl1IYg.js
@@ -1,4 +1,4 @@
-import{_ as l,o as e,c as p,j as s,a,ak as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"Instance Events","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/event.md","filePath":"en/advanced/event.md","lastUpdated":1764426402000}'),h={name:"en/advanced/event.md"};function t(k,n,r,E,d,g){return e(),p("div",null,n[0]||(n[0]=[s("h1",{id:"instance-events",tabindex:"-1"},[a("Instance Events "),s("a",{class:"header-anchor",href:"#instance-events","aria-label":'Permalink to "Instance Events"'},"​")],-1),s("p",null,[a("Player events are divided into two types: "),s("code",null,"native events"),a(" (prefixed with "),s("code",null,"video:"),a(") and "),s("code",null,"custom events"),a(".")],-1),s("p",null,"Listen to an event:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),i(`
js
var art = new Artplayer({
+import{_ as l,c as e,o as p,j as s,ak as i,a}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"Instance Events","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/event.md","filePath":"en/advanced/event.md","lastUpdated":1764426402000}'),h={name:"en/advanced/event.md"};function t(k,n,r,E,d,g){return p(),e("div",null,n[0]||(n[0]=[s("h1",{id:"instance-events",tabindex:"-1"},[a("Instance Events "),s("a",{class:"header-anchor",href:"#instance-events","aria-label":'Permalink to "Instance Events"'},"​")],-1),s("p",null,[a("Player events are divided into two types: "),s("code",null,"native events"),a(" (prefixed with "),s("code",null,"video:"),a(") and "),s("code",null,"custom events"),a(".")],-1),s("p",null,"Listen to an event:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),i(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
 });
diff --git a/docs/document/assets/en_advanced_event.md.igITY2FO.lean.js b/docs/document/assets/en_advanced_event.md.CtQl1IYg.lean.js
similarity index 96%
rename from docs/document/assets/en_advanced_event.md.igITY2FO.lean.js
rename to docs/document/assets/en_advanced_event.md.CtQl1IYg.lean.js
index 400051410..1851be6db 100644
--- a/docs/document/assets/en_advanced_event.md.igITY2FO.lean.js
+++ b/docs/document/assets/en_advanced_event.md.CtQl1IYg.lean.js
@@ -1 +1 @@
-import{_ as l,o as e,c as p,j as s,a,ak as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"Instance Events","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/event.md","filePath":"en/advanced/event.md","lastUpdated":1764426402000}'),h={name:"en/advanced/event.md"};function t(k,n,r,E,d,g){return e(),p("div",null,n[0]||(n[0]=[s("h1",{id:"instance-events",tabindex:"-1"},[a("Instance Events "),s("a",{class:"header-anchor",href:"#instance-events","aria-label":'Permalink to "Instance Events"'},"​")],-1),s("p",null,[a("Player events are divided into two types: "),s("code",null,"native events"),a(" (prefixed with "),s("code",null,"video:"),a(") and "),s("code",null,"custom events"),a(".")],-1),s("p",null,"Listen to an event:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",4),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",43)]))}const o=l(h,[["render",t]]);export{y as __pageData,o as default};
+import{_ as l,c as e,o as p,j as s,ak as i,a}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"Instance Events","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/event.md","filePath":"en/advanced/event.md","lastUpdated":1764426402000}'),h={name:"en/advanced/event.md"};function t(k,n,r,E,d,g){return p(),e("div",null,n[0]||(n[0]=[s("h1",{id:"instance-events",tabindex:"-1"},[a("Instance Events "),s("a",{class:"header-anchor",href:"#instance-events","aria-label":'Permalink to "Instance Events"'},"​")],-1),s("p",null,[a("Player events are divided into two types: "),s("code",null,"native events"),a(" (prefixed with "),s("code",null,"video:"),a(") and "),s("code",null,"custom events"),a(".")],-1),s("p",null,"Listen to an event:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",2),s("div",{className:"run-code"},"▶ Run Code",-1),i("",4),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",3),s("div",{className:"run-code"},"▶ Run Code",-1),i("",43)]))}const o=l(h,[["render",t]]);export{y as __pageData,o as default};
diff --git a/docs/document/assets/en_advanced_global.md.Bj0Agjzd.js b/docs/document/assets/en_advanced_global.md.D5Nz8wyo.js
similarity index 99%
rename from docs/document/assets/en_advanced_global.md.Bj0Agjzd.js
rename to docs/document/assets/en_advanced_global.md.D5Nz8wyo.js
index 1a5eaac51..f171482c8 100644
--- a/docs/document/assets/en_advanced_global.md.Bj0Agjzd.js
+++ b/docs/document/assets/en_advanced_global.md.D5Nz8wyo.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Global Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/global.md","filePath":"en/advanced/global.md","lastUpdated":1764426402000}'),p={name:"en/advanced/global.md"};function h(t,a,k,r,E,d){return l(),e("div",null,a[0]||(a[0]=[s('

Global Properties ​

These global properties refer to the top-level properties mounted on the constructor. The property names are all in uppercase. They are subject to change in the future and are generally not used.

DEBUG ​

Whether to enable debug mode, which can print all built-in events of the video. Default is off.

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
Artplayer.DEBUG = true;
+import{_ as n,c as l,o as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Global Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/global.md","filePath":"en/advanced/global.md","lastUpdated":1764426402000}'),p={name:"en/advanced/global.md"};function h(t,a,k,r,E,d){return e(),l("div",null,a[0]||(a[0]=[s('

Global Properties ​

These global properties refer to the top-level properties mounted on the constructor. The property names are all in uppercase. They are subject to change in the future and are generally not used.

DEBUG ​

Whether to enable debug mode, which can print all built-in events of the video. Default is off.

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
Artplayer.DEBUG = true;
 
 var art = new Artplayer({
     container: '.artplayer-app',
diff --git a/docs/document/assets/en_advanced_global.md.Bj0Agjzd.lean.js b/docs/document/assets/en_advanced_global.md.D5Nz8wyo.lean.js
similarity index 94%
rename from docs/document/assets/en_advanced_global.md.Bj0Agjzd.lean.js
rename to docs/document/assets/en_advanced_global.md.D5Nz8wyo.lean.js
index 509280eab..b6dcb3c79 100644
--- a/docs/document/assets/en_advanced_global.md.Bj0Agjzd.lean.js
+++ b/docs/document/assets/en_advanced_global.md.D5Nz8wyo.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Global Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/global.md","filePath":"en/advanced/global.md","lastUpdated":1764426402000}'),p={name:"en/advanced/global.md"};function h(t,a,k,r,E,d){return l(),e("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(p,[["render",h]]);export{g as __pageData,y as default};
+import{_ as n,c as l,o as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Global Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/global.md","filePath":"en/advanced/global.md","lastUpdated":1764426402000}'),p={name:"en/advanced/global.md"};function h(t,a,k,r,E,d){return e(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(p,[["render",h]]);export{g as __pageData,y as default};
diff --git a/docs/document/assets/en_advanced_plugin.md.IXiFhAGS.js b/docs/document/assets/en_advanced_plugin.md.BOuMu80J.js
similarity index 99%
rename from docs/document/assets/en_advanced_plugin.md.IXiFhAGS.js
rename to docs/document/assets/en_advanced_plugin.md.BOuMu80J.js
index 76587103a..2b848a7bf 100644
--- a/docs/document/assets/en_advanced_plugin.md.IXiFhAGS.js
+++ b/docs/document/assets/en_advanced_plugin.md.BOuMu80J.js
@@ -1,4 +1,4 @@
-import{_ as l,o as p,c as h,j as s,a as i,ak as a}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"Writing Plugins","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/plugin.md","filePath":"en/advanced/plugin.md","lastUpdated":1764426402000}'),e={name:"en/advanced/plugin.md"};function k(t,n,E,r,d,g){return p(),h("div",null,n[0]||(n[0]=[s("h1",{id:"writing-plugins",tabindex:"-1"},[i("Writing Plugins "),s("a",{class:"header-anchor",href:"#writing-plugins","aria-label":'Permalink to "Writing Plugins"'},"​")],-1),s("p",null,[i("Once you are familiar with the player's "),s("code",null,"properties"),i(", "),s("code",null,"methods"),i(", and "),s("code",null,"events"),i(", writing plugins becomes very straightforward.")],-1),s("p",null,"You can load plugin functions during instantiation:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),a(`
js
function myPlugin(art) {
+import{_ as l,c as p,o as h,j as s,ak as a,a as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"Writing Plugins","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/plugin.md","filePath":"en/advanced/plugin.md","lastUpdated":1764426402000}'),e={name:"en/advanced/plugin.md"};function k(t,n,E,r,d,g){return h(),p("div",null,n[0]||(n[0]=[s("h1",{id:"writing-plugins",tabindex:"-1"},[i("Writing Plugins "),s("a",{class:"header-anchor",href:"#writing-plugins","aria-label":'Permalink to "Writing Plugins"'},"​")],-1),s("p",null,[i("Once you are familiar with the player's "),s("code",null,"properties"),i(", "),s("code",null,"methods"),i(", and "),s("code",null,"events"),i(", writing plugins becomes very straightforward.")],-1),s("p",null,"You can load plugin functions during instantiation:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),a(`
js
function myPlugin(art) {
     console.info(art);
     return {
         name: 'myPlugin',
diff --git a/docs/document/assets/en_advanced_plugin.md.IXiFhAGS.lean.js b/docs/document/assets/en_advanced_plugin.md.BOuMu80J.lean.js
similarity index 88%
rename from docs/document/assets/en_advanced_plugin.md.IXiFhAGS.lean.js
rename to docs/document/assets/en_advanced_plugin.md.BOuMu80J.lean.js
index ab0b6ec3e..16e78d644 100644
--- a/docs/document/assets/en_advanced_plugin.md.IXiFhAGS.lean.js
+++ b/docs/document/assets/en_advanced_plugin.md.BOuMu80J.lean.js
@@ -1 +1 @@
-import{_ as l,o as p,c as h,j as s,a as i,ak as a}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"Writing Plugins","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/plugin.md","filePath":"en/advanced/plugin.md","lastUpdated":1764426402000}'),e={name:"en/advanced/plugin.md"};function k(t,n,E,r,d,g){return p(),h("div",null,n[0]||(n[0]=[s("h1",{id:"writing-plugins",tabindex:"-1"},[i("Writing Plugins "),s("a",{class:"header-anchor",href:"#writing-plugins","aria-label":'Permalink to "Writing Plugins"'},"​")],-1),s("p",null,[i("Once you are familiar with the player's "),s("code",null,"properties"),i(", "),s("code",null,"methods"),i(", and "),s("code",null,"events"),i(", writing plugins becomes very straightforward.")],-1),s("p",null,"You can load plugin functions during instantiation:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),a("",2),s("div",{className:"run-code"},"▶ Run Code",-1),a("",2),s("div",{className:"run-code"},"▶ Run Code",-1),a("",1)]))}const b=l(e,[["render",k]]);export{y as __pageData,b as default};
+import{_ as l,c as p,o as h,j as s,ak as a,a as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"Writing Plugins","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/plugin.md","filePath":"en/advanced/plugin.md","lastUpdated":1764426402000}'),e={name:"en/advanced/plugin.md"};function k(t,n,E,r,d,g){return h(),p("div",null,n[0]||(n[0]=[s("h1",{id:"writing-plugins",tabindex:"-1"},[i("Writing Plugins "),s("a",{class:"header-anchor",href:"#writing-plugins","aria-label":'Permalink to "Writing Plugins"'},"​")],-1),s("p",null,[i("Once you are familiar with the player's "),s("code",null,"properties"),i(", "),s("code",null,"methods"),i(", and "),s("code",null,"events"),i(", writing plugins becomes very straightforward.")],-1),s("p",null,"You can load plugin functions during instantiation:",-1),s("div",{className:"run-code"},"▶ Run Code",-1),a("",2),s("div",{className:"run-code"},"▶ Run Code",-1),a("",2),s("div",{className:"run-code"},"▶ Run Code",-1),a("",1)]))}const b=l(e,[["render",k]]);export{y as __pageData,b as default};
diff --git a/docs/document/assets/en_advanced_property.md.DQzShb4B.js b/docs/document/assets/en_advanced_property.md.urRMaqHe.js
similarity index 99%
rename from docs/document/assets/en_advanced_property.md.DQzShb4B.js
rename to docs/document/assets/en_advanced_property.md.urRMaqHe.js
index 908478018..8e57eb705 100644
--- a/docs/document/assets/en_advanced_property.md.DQzShb4B.js
+++ b/docs/document/assets/en_advanced_property.md.urRMaqHe.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Instance Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/property.md","filePath":"en/advanced/property.md","lastUpdated":1764426402000}'),p={name:"en/advanced/property.md"};function h(t,a,k,r,E,d){return l(),e("div",null,a[0]||(a[0]=[s('

Instance Properties ​

Here, Instance Properties refer to the first-level properties mounted on the instance, which are commonly used.

play ​

  • Type: Function

Play the video.

',5),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as l,o as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Instance Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/property.md","filePath":"en/advanced/property.md","lastUpdated":1764426402000}'),p={name:"en/advanced/property.md"};function h(t,a,k,r,E,d){return e(),l("div",null,a[0]||(a[0]=[s('

Instance Properties ​

Here, Instance Properties refer to the first-level properties mounted on the instance, which are commonly used.

play ​

  • Type: Function

Play the video.

',5),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
     muted: true,
diff --git a/docs/document/assets/en_advanced_property.md.DQzShb4B.lean.js b/docs/document/assets/en_advanced_property.md.urRMaqHe.lean.js
similarity index 95%
rename from docs/document/assets/en_advanced_property.md.DQzShb4B.lean.js
rename to docs/document/assets/en_advanced_property.md.urRMaqHe.lean.js
index 846ab0c6d..e6ac58a78 100644
--- a/docs/document/assets/en_advanced_property.md.DQzShb4B.lean.js
+++ b/docs/document/assets/en_advanced_property.md.urRMaqHe.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Instance Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/property.md","filePath":"en/advanced/property.md","lastUpdated":1764426402000}'),p={name:"en/advanced/property.md"};function h(t,a,k,r,E,d){return l(),e("div",null,a[0]||(a[0]=[s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(p,[["render",h]]);export{g as __pageData,y as default};
+import{_ as n,c as l,o as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Instance Properties","description":"","frontmatter":{},"headers":[],"relativePath":"en/advanced/property.md","filePath":"en/advanced/property.md","lastUpdated":1764426402000}'),p={name:"en/advanced/property.md"};function h(t,a,k,r,E,d){return e(),l("div",null,a[0]||(a[0]=[s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(p,[["render",h]]);export{g as __pageData,y as default};
diff --git a/docs/document/assets/en_component_contextmenu.md.3nvb8CSX.js b/docs/document/assets/en_component_contextmenu.md.COLfX45a.js
similarity index 99%
rename from docs/document/assets/en_component_contextmenu.md.3nvb8CSX.js
rename to docs/document/assets/en_component_contextmenu.md.COLfX45a.js
index 099a661c0..75f41b480 100644
--- a/docs/document/assets/en_component_contextmenu.md.3nvb8CSX.js
+++ b/docs/document/assets/en_component_contextmenu.md.COLfX45a.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Context Menu","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/contextmenu.md","filePath":"en/component/contextmenu.md","lastUpdated":1759888544000}'),p={name:"en/component/contextmenu.md"};function t(h,a,k,r,E,d){return l(),e("div",null,a[0]||(a[0]=[s('

Context Menu ​

Configuration ​

PropertyTypeDescription
disableBooleanWhether to disable the component
nameStringUnique component name for CSS class
indexNumberComponent index for display priority
htmlString, ElementComponent DOM element
styleObjectComponent style object
clickFunctionComponent click event
mountedFunctionTriggered after component mount
tooltipStringComponent tooltip text

Creation ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as l,o as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Context Menu","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/contextmenu.md","filePath":"en/component/contextmenu.md","lastUpdated":1759888544000}'),p={name:"en/component/contextmenu.md"};function t(h,a,k,r,E,d){return e(),l("div",null,a[0]||(a[0]=[s('

Context Menu ​

Configuration ​

PropertyTypeDescription
disableBooleanWhether to disable the component
nameStringUnique component name for CSS class
indexNumberComponent index for display priority
htmlString, ElementComponent DOM element
styleObjectComponent style object
clickFunctionComponent click event
mountedFunctionTriggered after component mount
tooltipStringComponent tooltip text

Creation ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
     contextmenu: [
diff --git a/docs/document/assets/en_component_contextmenu.md.3nvb8CSX.lean.js b/docs/document/assets/en_component_contextmenu.md.COLfX45a.lean.js
similarity index 81%
rename from docs/document/assets/en_component_contextmenu.md.3nvb8CSX.lean.js
rename to docs/document/assets/en_component_contextmenu.md.COLfX45a.lean.js
index 26861772a..5db4b2f9c 100644
--- a/docs/document/assets/en_component_contextmenu.md.3nvb8CSX.lean.js
+++ b/docs/document/assets/en_component_contextmenu.md.COLfX45a.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Context Menu","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/contextmenu.md","filePath":"en/component/contextmenu.md","lastUpdated":1759888544000}'),p={name:"en/component/contextmenu.md"};function t(h,a,k,r,E,d){return l(),e("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const o=n(p,[["render",t]]);export{g as __pageData,o as default};
+import{_ as n,c as l,o as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Context Menu","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/contextmenu.md","filePath":"en/component/contextmenu.md","lastUpdated":1759888544000}'),p={name:"en/component/contextmenu.md"};function t(h,a,k,r,E,d){return e(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const o=n(p,[["render",t]]);export{g as __pageData,o as default};
diff --git a/docs/document/assets/en_component_controls.md.s1SJ4fZd.js b/docs/document/assets/en_component_controls.md.BbQsn0wJ.js
similarity index 99%
rename from docs/document/assets/en_component_controls.md.s1SJ4fZd.js
rename to docs/document/assets/en_component_controls.md.BbQsn0wJ.js
index 7ac778e7a..12fdd3ecd 100644
--- a/docs/document/assets/en_component_controls.md.s1SJ4fZd.js
+++ b/docs/document/assets/en_component_controls.md.BbQsn0wJ.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Controls","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/controls.md","filePath":"en/component/controls.md","lastUpdated":1764426402000}'),h={name:"en/component/controls.md"};function e(t,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s('

Controls ​

Configuration ​

PropertyTypeDescription
disableBooleanWhether to disable the control
nameStringUnique control name for CSS class identification
indexNumberControl index for display priority
htmlString, ElementControl's DOM element
styleObjectControl style object
clickFunctionControl click event handler
mountedFunctionTriggered after control is mounted
tooltipStringControl tooltip text
positionStringleft or right - controls display position
selectorArrayArray of selector list objects
onSelectFunctionFunction triggered when selector item is clicked

Creation ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Controls","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/controls.md","filePath":"en/component/controls.md","lastUpdated":1764426402000}'),h={name:"en/component/controls.md"};function e(t,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s('

Controls ​

Configuration ​

PropertyTypeDescription
disableBooleanWhether to disable the control
nameStringUnique control name for CSS class identification
indexNumberControl index for display priority
htmlString, ElementControl's DOM element
styleObjectControl style object
clickFunctionControl click event handler
mountedFunctionTriggered after control is mounted
tooltipStringControl tooltip text
positionStringleft or right - controls display position
selectorArrayArray of selector list objects
onSelectFunctionFunction triggered when selector item is clicked

Creation ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
     controls: [
diff --git a/docs/document/assets/en_component_controls.md.s1SJ4fZd.lean.js b/docs/document/assets/en_component_controls.md.BbQsn0wJ.lean.js
similarity index 81%
rename from docs/document/assets/en_component_controls.md.s1SJ4fZd.lean.js
rename to docs/document/assets/en_component_controls.md.BbQsn0wJ.lean.js
index c00531dfc..46ad2eeb1 100644
--- a/docs/document/assets/en_component_controls.md.s1SJ4fZd.lean.js
+++ b/docs/document/assets/en_component_controls.md.BbQsn0wJ.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Controls","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/controls.md","filePath":"en/component/controls.md","lastUpdated":1764426402000}'),h={name:"en/component/controls.md"};function e(t,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(h,[["render",e]]);export{g as __pageData,y as default};
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Controls","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/controls.md","filePath":"en/component/controls.md","lastUpdated":1764426402000}'),h={name:"en/component/controls.md"};function e(t,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(h,[["render",e]]);export{g as __pageData,y as default};
diff --git a/docs/document/assets/en_component_layers.md.wLZPKN9j.js b/docs/document/assets/en_component_layers.md.CX93a7QS.js
similarity index 99%
rename from docs/document/assets/en_component_layers.md.wLZPKN9j.js
rename to docs/document/assets/en_component_layers.md.CX93a7QS.js
index 63a96fb0a..ebebccdae 100644
--- a/docs/document/assets/en_component_layers.md.wLZPKN9j.js
+++ b/docs/document/assets/en_component_layers.md.CX93a7QS.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Layer","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/layers.md","filePath":"en/component/layers.md","lastUpdated":1764426402000}'),h={name:"en/component/layers.md"};function e(t,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s('

Layer ​

Configuration ​

PropertyTypeDescription
disableBooleanWhether to disable the component
nameStringUnique component name for CSS class
indexNumberComponent index for display priority
htmlString, ElementComponent DOM element
styleObjectComponent style object
clickFunctionComponent click event
mountedFunctionTriggered after component mount
tooltipStringComponent tooltip text

Creation ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var img = '/assets/sample/layer.png';
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Layer","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/layers.md","filePath":"en/component/layers.md","lastUpdated":1764426402000}'),h={name:"en/component/layers.md"};function e(t,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s('

Layer ​

Configuration ​

PropertyTypeDescription
disableBooleanWhether to disable the component
nameStringUnique component name for CSS class
indexNumberComponent index for display priority
htmlString, ElementComponent DOM element
styleObjectComponent style object
clickFunctionComponent click event
mountedFunctionTriggered after component mount
tooltipStringComponent tooltip text

Creation ​

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var img = '/assets/sample/layer.png';
 var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
diff --git a/docs/document/assets/en_component_layers.md.wLZPKN9j.lean.js b/docs/document/assets/en_component_layers.md.CX93a7QS.lean.js
similarity index 81%
rename from docs/document/assets/en_component_layers.md.wLZPKN9j.lean.js
rename to docs/document/assets/en_component_layers.md.CX93a7QS.lean.js
index d86adfc40..5a5e6e3d1 100644
--- a/docs/document/assets/en_component_layers.md.wLZPKN9j.lean.js
+++ b/docs/document/assets/en_component_layers.md.CX93a7QS.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Layer","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/layers.md","filePath":"en/component/layers.md","lastUpdated":1764426402000}'),h={name:"en/component/layers.md"};function e(t,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(h,[["render",e]]);export{c as __pageData,y as default};
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Layer","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/layers.md","filePath":"en/component/layers.md","lastUpdated":1764426402000}'),h={name:"en/component/layers.md"};function e(t,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(h,[["render",e]]);export{c as __pageData,y as default};
diff --git a/docs/document/assets/en_component_setting.md.eqeWyMDt.js b/docs/document/assets/en_component_setting.md.C6o2AWtX.js
similarity index 99%
rename from docs/document/assets/en_component_setting.md.eqeWyMDt.js
rename to docs/document/assets/en_component_setting.md.C6o2AWtX.js
index e75ed25cc..028adf62c 100644
--- a/docs/document/assets/en_component_setting.md.eqeWyMDt.js
+++ b/docs/document/assets/en_component_setting.md.C6o2AWtX.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Settings Panel","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/setting.md","filePath":"en/component/setting.md","lastUpdated":1764426402000}'),t={name:"en/component/setting.md"};function e(h,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s('

Settings Panel ​

Built-in ​

First, you need to open the settings panel. It comes with four built-in items: flip, playbackRate, aspectRatio, subtitleOffset

',3),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Settings Panel","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/setting.md","filePath":"en/component/setting.md","lastUpdated":1764426402000}'),t={name:"en/component/setting.md"};function e(h,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s('

Settings Panel ​

Built-in ​

First, you need to open the settings panel. It comes with four built-in items: flip, playbackRate, aspectRatio, subtitleOffset

',3),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
 	setting: true,
diff --git a/docs/document/assets/en_component_setting.md.eqeWyMDt.lean.js b/docs/document/assets/en_component_setting.md.C6o2AWtX.lean.js
similarity index 86%
rename from docs/document/assets/en_component_setting.md.eqeWyMDt.lean.js
rename to docs/document/assets/en_component_setting.md.C6o2AWtX.lean.js
index ddc4f1ded..525ef77bc 100644
--- a/docs/document/assets/en_component_setting.md.eqeWyMDt.lean.js
+++ b/docs/document/assets/en_component_setting.md.C6o2AWtX.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Settings Panel","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/setting.md","filePath":"en/component/setting.md","lastUpdated":1764426402000}'),t={name:"en/component/setting.md"};function e(h,a,k,E,r,d){return l(),p("div",null,a[0]||(a[0]=[s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(t,[["render",e]]);export{c as __pageData,y as default};
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"Settings Panel","description":"","frontmatter":{},"headers":[],"relativePath":"en/component/setting.md","filePath":"en/component/setting.md","lastUpdated":1764426402000}'),t={name:"en/component/setting.md"};function e(h,a,k,E,r,d){return p(),l("div",null,a[0]||(a[0]=[s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",3),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const y=n(t,[["render",e]]);export{c as __pageData,y as default};
diff --git a/docs/document/assets/en_index.md.DrOcPBwp.js b/docs/document/assets/en_index.md.Adx_P8Ii.js
similarity index 96%
rename from docs/document/assets/en_index.md.DrOcPBwp.js
rename to docs/document/assets/en_index.md.Adx_P8Ii.js
index c74670be3..2d883a1e8 100644
--- a/docs/document/assets/en_index.md.DrOcPBwp.js
+++ b/docs/document/assets/en_index.md.Adx_P8Ii.js
@@ -1,4 +1,4 @@
-import{_ as i,o as a,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Installation & Usage","description":"","frontmatter":{},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1767420511000}'),p={name:"en/index.md"};function t(e,s,h,k,r,E){return a(),n("div",null,s[0]||(s[0]=[l(`

Installation & Usage ​

Installation ​

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

CDN ​

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

Usage ​

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

Installation & Usage ​

Installation ​

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

CDN ​

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

Usage ​

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

Note

The player's dimensions depend on the size of its container container, so your container must have defined dimensions.

See more usage examples at the following link:

/example

Vue.js ​

vue
<template>
+</html>

Note

The player's dimensions depend on the size of its container container, so your container must have defined dimensions.

See more usage examples at the following link:

/example

Vue.js ​

vue
<template>
   <div ref="$container" />
 </template>
 
@@ -51,7 +51,7 @@ import{_ as i,o as a,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g
   art.value.destroy(false)
 })
 </script>
vue
<template>
-  <Artplayer :option="option" :style="style" @get-instance="getInstance" />
+  <Artplayer :option="option" :style="style" @get-instance="getInstance" />
 </template>
 
 <script setup>
@@ -71,7 +71,7 @@ import{_ as i,o as a,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g
 function getInstance(art) {
   console.log(art)
 }
-</script>

Artplayer is not reactive:

Directly modifying option in Vue.js will not update the player.

React.js ​

jsx
import Artplayer from 'artplayer'
+</script>

Artplayer is not reactive:

Directly modifying option in Vue.js will not update the player.

React.js ​

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

Legacy Browsers ​

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

For legacy browsers, you can use the artplayer.legacy.js file, which supports compatibility down to: IE 11

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

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

Build configuration: scripts/build.js

Reference documentation: browserslist

ECMAScript Module ​

Starting from 5.2.6, artplayer and all plugins also provide an ESM version mjs, such as:

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

Legacy Browsers ​

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

For legacy browsers, you can use the artplayer.legacy.js file, which supports compatibility down to: IE 11

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

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

Build configuration: scripts/build.js

Reference documentation: browserslist

ECMAScript Module ​

Starting from 5.2.6, artplayer and all plugins also provide an ESM version mjs, such as:

  • artplayer/dist/artplayer.mjs
  • artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.mjs
html
<!DOCTYPE html>
 <html lang="en">
 
 <head>
diff --git a/docs/document/assets/en_index.md.DrOcPBwp.lean.js b/docs/document/assets/en_index.md.Adx_P8Ii.lean.js
similarity index 69%
rename from docs/document/assets/en_index.md.DrOcPBwp.lean.js
rename to docs/document/assets/en_index.md.Adx_P8Ii.lean.js
index 9253a76a8..e41d652b3 100644
--- a/docs/document/assets/en_index.md.DrOcPBwp.lean.js
+++ b/docs/document/assets/en_index.md.Adx_P8Ii.lean.js
@@ -1 +1 @@
-import{_ as i,o as a,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Installation & Usage","description":"","frontmatter":{},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1767420511000}'),p={name:"en/index.md"};function t(e,s,h,k,r,E){return a(),n("div",null,s[0]||(s[0]=[l("",50)]))}const c=i(p,[["render",t]]);export{g as __pageData,c as default};
+import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Installation & Usage","description":"","frontmatter":{},"headers":[],"relativePath":"en/index.md","filePath":"en/index.md","lastUpdated":1767420511000}'),p={name:"en/index.md"};function t(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l("",50)]))}const c=i(p,[["render",t]]);export{g as __pageData,c as default};
diff --git a/docs/document/assets/en_start_i18n.md.DAxrpMQL.js b/docs/document/assets/en_start_i18n.md.lFdcbEk9.js
similarity index 97%
rename from docs/document/assets/en_start_i18n.md.DAxrpMQL.js
rename to docs/document/assets/en_start_i18n.md.lFdcbEk9.js
index f0e00fa2d..db2b320a6 100644
--- a/docs/document/assets/en_start_i18n.md.DAxrpMQL.js
+++ b/docs/document/assets/en_start_i18n.md.lFdcbEk9.js
@@ -1,8 +1,8 @@
-import{_ as a,o as i,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Language Settings","description":"","frontmatter":{},"headers":[],"relativePath":"en/start/i18n.md","filePath":"en/start/i18n.md","lastUpdated":1764426402000}'),e={name:"en/start/i18n.md"};function p(t,s,h,r,k,E){return i(),n("div",null,s[0]||(s[0]=[l(`

Language Settings ​

DANGER

Due to the increasing number of bundled multilingual resources, starting from version 5.1.0, the core artplayer.js code will only include Simplified Chinese and English. Other languages are no longer bundled by default and must be imported manually as needed.

WARNING

When a language cannot be matched, English will be displayed by default. For i18n implementation reference, see: artplayer/types/i18n.d.ts

Default Languages ​

The default languages are: en, zh-cn. No manual import is required.

js
var art = new Artplayer({
+import{_ as a,c as i,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Language Settings","description":"","frontmatter":{},"headers":[],"relativePath":"en/start/i18n.md","filePath":"en/start/i18n.md","lastUpdated":1764426402000}'),e={name:"en/start/i18n.md"};function p(t,s,h,r,k,E){return n(),i("div",null,s[0]||(s[0]=[l(`

Language Settings ​

DANGER

Due to the increasing number of bundled multilingual resources, starting from version 5.1.0, the core artplayer.js code will only include Simplified Chinese and English. Other languages are no longer bundled by default and must be imported manually as needed.

WARNING

When a language cannot be matched, English will be displayed by default. For i18n implementation reference, see: artplayer/types/i18n.d.ts

Default Languages ​

The default languages are: en, zh-cn. No manual import is required.

js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
     lang: 'zh-cn', // or 'en'
-});

Importing Languages ​

Language files before bundling are located at: artplayer/src/i18n/*.js. Contributions to add your language are welcome.

Language files after bundling are located at: artplayer/dist/i18n/*.js

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

Importing Languages ​

Language files before bundling are located at: artplayer/src/i18n/*.js. Contributions to add your language are welcome.

Language files after bundling are located at: artplayer/dist/i18n/*.js

js
import id from 'artplayer/i18n/id';
 import zhTw from 'artplayer/i18n/zh-tw';
 
 var art = new Artplayer({
diff --git a/docs/document/assets/en_start_i18n.md.DAxrpMQL.lean.js b/docs/document/assets/en_start_i18n.md.lFdcbEk9.lean.js
similarity index 70%
rename from docs/document/assets/en_start_i18n.md.DAxrpMQL.lean.js
rename to docs/document/assets/en_start_i18n.md.lFdcbEk9.lean.js
index a7a51b945..b9234b59f 100644
--- a/docs/document/assets/en_start_i18n.md.DAxrpMQL.lean.js
+++ b/docs/document/assets/en_start_i18n.md.lFdcbEk9.lean.js
@@ -1 +1 @@
-import{_ as a,o as i,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Language Settings","description":"","frontmatter":{},"headers":[],"relativePath":"en/start/i18n.md","filePath":"en/start/i18n.md","lastUpdated":1764426402000}'),e={name:"en/start/i18n.md"};function p(t,s,h,r,k,E){return i(),n("div",null,s[0]||(s[0]=[l("",14)]))}const c=a(e,[["render",p]]);export{g as __pageData,c as default};
+import{_ as a,c as i,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"Language Settings","description":"","frontmatter":{},"headers":[],"relativePath":"en/start/i18n.md","filePath":"en/start/i18n.md","lastUpdated":1764426402000}'),e={name:"en/start/i18n.md"};function p(t,s,h,r,k,E){return n(),i("div",null,s[0]||(s[0]=[l("",14)]))}const c=a(e,[["render",p]]);export{g as __pageData,c as default};
diff --git a/docs/document/assets/en_start_option.md.CuY4IYWk.js b/docs/document/assets/en_start_option.md.Bk4YXvof.js
similarity index 99%
rename from docs/document/assets/en_start_option.md.CuY4IYWk.js
rename to docs/document/assets/en_start_option.md.Bk4YXvof.js
index 68607d50d..a66793215 100644
--- a/docs/document/assets/en_start_option.md.CuY4IYWk.js
+++ b/docs/document/assets/en_start_option.md.Bk4YXvof.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const o=JSON.parse('{"title":"Basic Options","description":"","frontmatter":{},"headers":[],"relativePath":"en/start/option.md","filePath":"en/start/option.md","lastUpdated":1764426402000}'),p={name:"en/start/option.md"};function h(t,a,k,r,d,E){return l(),e("div",null,a[0]||(a[0]=[s('

Basic Options ​

container ​

  • Type: String, Element
  • Default: #artplayer

The DOM container where the player is mounted.

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as l,o as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const o=JSON.parse('{"title":"Basic Options","description":"","frontmatter":{},"headers":[],"relativePath":"en/start/option.md","filePath":"en/start/option.md","lastUpdated":1764426402000}'),p={name:"en/start/option.md"};function h(t,a,k,r,d,E){return e(),l("div",null,a[0]||(a[0]=[s('

Basic Options ​

container ​

  • Type: String, Element
  • Default: #artplayer

The DOM container where the player is mounted.

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app', 
     // container: document.querySelector('.artplayer-app'),
     url: '/assets/sample/video.mp4',
diff --git a/docs/document/assets/en_start_option.md.CuY4IYWk.lean.js b/docs/document/assets/en_start_option.md.Bk4YXvof.lean.js
similarity index 96%
rename from docs/document/assets/en_start_option.md.CuY4IYWk.lean.js
rename to docs/document/assets/en_start_option.md.Bk4YXvof.lean.js
index 98320f46b..2cd059ad6 100644
--- a/docs/document/assets/en_start_option.md.CuY4IYWk.lean.js
+++ b/docs/document/assets/en_start_option.md.Bk4YXvof.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const o=JSON.parse('{"title":"Basic Options","description":"","frontmatter":{},"headers":[],"relativePath":"en/start/option.md","filePath":"en/start/option.md","lastUpdated":1764426402000}'),p={name:"en/start/option.md"};function h(t,a,k,r,d,E){return l(),e("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",9),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",7),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const g=n(p,[["render",h]]);export{o as __pageData,g as default};
+import{_ as n,c as l,o as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const o=JSON.parse('{"title":"Basic Options","description":"","frontmatter":{},"headers":[],"relativePath":"en/start/option.md","filePath":"en/start/option.md","lastUpdated":1764426402000}'),p={name:"en/start/option.md"};function h(t,a,k,r,d,E){return e(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",9),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",7),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const g=n(p,[["render",h]]);export{o as __pageData,g as default};
diff --git a/docs/document/assets/index.md.WcEL7IA5.js b/docs/document/assets/index.md.Bkwg5S8z.js
similarity index 96%
rename from docs/document/assets/index.md.WcEL7IA5.js
rename to docs/document/assets/index.md.Bkwg5S8z.js
index b1ba8c460..4ca3fe98e 100644
--- a/docs/document/assets/index.md.WcEL7IA5.js
+++ b/docs/document/assets/index.md.Bkwg5S8z.js
@@ -1,4 +1,4 @@
-import{_ as i,o as a,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"安装使用","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1767420511000}'),p={name:"index.md"};function t(e,s,h,k,r,E){return a(),n("div",null,s[0]||(s[0]=[l(`

安装使用 ​

安装 ​

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

CDN ​

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

使用 ​

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

安装使用 ​

安装 ​

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

CDN ​

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

使用 ​

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

提示

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

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

/example

Vue.js ​

vue
<template>
+</html>

提示

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

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

/example

Vue.js ​

vue
<template>
   <div ref="$container" />
 </template>
 
@@ -51,7 +51,7 @@ import{_ as i,o as a,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g
   art.value.destroy(false)
 })
 </script>
vue
<template>
-  <Artplayer :option="option" :style="style" @get-instance="getInstance" />
+  <Artplayer :option="option" :style="style" @get-instance="getInstance" />
 </template>
 
 <script setup>
@@ -71,7 +71,7 @@ import{_ as i,o as a,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g
 function getInstance(art) {
   console.log(art)
 }
-</script>

Artplayer 非响应式:

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

React.js ​

jsx
import Artplayer from 'artplayer'
+</script>

Artplayer 非响应式:

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

React.js ​

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

古老的浏览器 ​

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

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

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

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

构建配置:scripts/build.js

参考文档:browserslist

ECMAScript Module ​

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

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

古老的浏览器 ​

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

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

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

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

构建配置:scripts/build.js

参考文档:browserslist

ECMAScript Module ​

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

  • artplayer/dist/artplayer.mjs
  • artplayer-plugin-danmuku/dist/artplayer-plugin-danmuku.mjs
html
<!DOCTYPE html>
 <html lang="en">
 
 <head>
diff --git a/docs/document/assets/index.md.WcEL7IA5.lean.js b/docs/document/assets/index.md.Bkwg5S8z.lean.js
similarity index 68%
rename from docs/document/assets/index.md.WcEL7IA5.lean.js
rename to docs/document/assets/index.md.Bkwg5S8z.lean.js
index af5b52ecc..59beeb14b 100644
--- a/docs/document/assets/index.md.WcEL7IA5.lean.js
+++ b/docs/document/assets/index.md.Bkwg5S8z.lean.js
@@ -1 +1 @@
-import{_ as i,o as a,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"安装使用","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1767420511000}'),p={name:"index.md"};function t(e,s,h,k,r,E){return a(),n("div",null,s[0]||(s[0]=[l("",50)]))}const c=i(p,[["render",t]]);export{g as __pageData,c as default};
+import{_ as i,c as a,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"安装使用","description":"","frontmatter":{},"headers":[],"relativePath":"index.md","filePath":"index.md","lastUpdated":1767420511000}'),p={name:"index.md"};function t(e,s,h,k,r,E){return n(),a("div",null,s[0]||(s[0]=[l("",50)]))}const c=i(p,[["render",t]]);export{g as __pageData,c as default};
diff --git a/docs/document/assets/plugin_danmuku.md.D580Az0s.js b/docs/document/assets/plugin_danmuku.md.DSrWXJHB.js
similarity index 99%
rename from docs/document/assets/plugin_danmuku.md.D580Az0s.js
rename to docs/document/assets/plugin_danmuku.md.DSrWXJHB.js
index f34bd4c3f..2f27e7b63 100644
--- a/docs/document/assets/plugin_danmuku.md.D580Az0s.js
+++ b/docs/document/assets/plugin_danmuku.md.DSrWXJHB.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"弹幕库","description":"","frontmatter":{},"headers":[],"relativePath":"plugin/danmuku.md","filePath":"plugin/danmuku.md","lastUpdated":1734270991000}'),h={name:"plugin/danmuku.md"};function e(k,a,t,r,E,d){return l(),p("div",null,a[0]||(a[0]=[s(`

弹幕库 ​

演示 ​

👉 查看完整演示

安装 ​

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

CDN ​

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

弹幕结构 ​

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

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

弹幕库 ​

演示 ​

👉 查看完整演示

安装 ​

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

CDN ​

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

弹幕结构 ​

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

js
{
     text: '', // 弹幕文本
     time: 10, // 弹幕时间, 默认为当前播放器时间
     mode: 0, // 弹幕模式: 0: 滚动(默认),1: 顶部,2: 底部
diff --git a/docs/document/assets/plugin_danmuku.md.D580Az0s.lean.js b/docs/document/assets/plugin_danmuku.md.DSrWXJHB.lean.js
similarity index 93%
rename from docs/document/assets/plugin_danmuku.md.D580Az0s.lean.js
rename to docs/document/assets/plugin_danmuku.md.DSrWXJHB.lean.js
index 227ffddfb..b845205b6 100644
--- a/docs/document/assets/plugin_danmuku.md.D580Az0s.lean.js
+++ b/docs/document/assets/plugin_danmuku.md.DSrWXJHB.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"弹幕库","description":"","frontmatter":{},"headers":[],"relativePath":"plugin/danmuku.md","filePath":"plugin/danmuku.md","lastUpdated":1734270991000}'),h={name:"plugin/danmuku.md"};function e(k,a,t,r,E,d){return l(),p("div",null,a[0]||(a[0]=[s("",18),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",2),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",2),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",2),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",1)]))}const c=n(h,[["render",e]]);export{y as __pageData,c as default};
+import{_ as n,c as l,o as p,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const y=JSON.parse('{"title":"弹幕库","description":"","frontmatter":{},"headers":[],"relativePath":"plugin/danmuku.md","filePath":"plugin/danmuku.md","lastUpdated":1734270991000}'),h={name:"plugin/danmuku.md"};function e(k,a,t,r,E,d){return p(),l("div",null,a[0]||(a[0]=[s("",18),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",2),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",2),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",3),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",2),i("div",{className:"run-code","data-libs":"./uncompiled/artplayer-plugin-danmuku/index.js"}," ▶ Run Code ",-1),s("",1)]))}const c=n(h,[["render",e]]);export{y as __pageData,c as default};
diff --git a/docs/document/assets/start_i18n.md.C6dAnYSp.js b/docs/document/assets/start_i18n.md.D3eO9wL_.js
similarity index 97%
rename from docs/document/assets/start_i18n.md.C6dAnYSp.js
rename to docs/document/assets/start_i18n.md.D3eO9wL_.js
index bbb136bff..456a32c42 100644
--- a/docs/document/assets/start_i18n.md.C6dAnYSp.js
+++ b/docs/document/assets/start_i18n.md.D3eO9wL_.js
@@ -1,8 +1,8 @@
-import{_ as a,o as i,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"语言设置","description":"","frontmatter":{},"headers":[],"relativePath":"start/i18n.md","filePath":"start/i18n.md","lastUpdated":1757137705000}'),p={name:"start/i18n.md"};function e(h,s,t,k,r,E){return i(),n("div",null,s[0]||(s[0]=[l(`

语言设置 ​

DANGER

鉴于捆绑的多国语言越来越多, 从 5.1.0 版本开始, artplayer.js 核心代码除了包含 简体中文 和 英文 外, 不再捆绑其它多国语言, 需要自行导入需要的语言。

WARNING

当无法匹配到语言时, 会默认显示英文, i18n 写法参考: artplayer/types/i18n.d.ts

默认语言 ​

默认语言有: en, zh-cn, 无需手动导入

js
var art = new Artplayer({
+import{_ as a,c as i,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"语言设置","description":"","frontmatter":{},"headers":[],"relativePath":"start/i18n.md","filePath":"start/i18n.md","lastUpdated":1757137705000}'),p={name:"start/i18n.md"};function e(h,s,t,k,r,E){return n(),i("div",null,s[0]||(s[0]=[l(`

语言设置 ​

DANGER

鉴于捆绑的多国语言越来越多, 从 5.1.0 版本开始, artplayer.js 核心代码除了包含 简体中文 和 英文 外, 不再捆绑其它多国语言, 需要自行导入需要的语言。

WARNING

当无法匹配到语言时, 会默认显示英文, i18n 写法参考: artplayer/types/i18n.d.ts

默认语言 ​

默认语言有: en, zh-cn, 无需手动导入

js
var art = new Artplayer({
     container: '.artplayer-app',
     url: '/assets/sample/video.mp4',
     lang: 'zh-cn', // or 'en'
-});

导入语言 ​

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

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

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

导入语言 ​

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

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

js
import id from 'artplayer/i18n/id';
 import zhTw from 'artplayer/i18n/zh-tw';
 
 var art = new Artplayer({
diff --git a/docs/document/assets/start_i18n.md.C6dAnYSp.lean.js b/docs/document/assets/start_i18n.md.D3eO9wL_.lean.js
similarity index 69%
rename from docs/document/assets/start_i18n.md.C6dAnYSp.lean.js
rename to docs/document/assets/start_i18n.md.D3eO9wL_.lean.js
index 47fafaacf..20bad5b7e 100644
--- a/docs/document/assets/start_i18n.md.C6dAnYSp.lean.js
+++ b/docs/document/assets/start_i18n.md.D3eO9wL_.lean.js
@@ -1 +1 @@
-import{_ as a,o as i,c as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"语言设置","description":"","frontmatter":{},"headers":[],"relativePath":"start/i18n.md","filePath":"start/i18n.md","lastUpdated":1757137705000}'),p={name:"start/i18n.md"};function e(h,s,t,k,r,E){return i(),n("div",null,s[0]||(s[0]=[l("",14)]))}const g=a(p,[["render",e]]);export{c as __pageData,g as default};
+import{_ as a,c as i,o as n,ak as l}from"./chunks/framework.xxfEszSJ.js";const c=JSON.parse('{"title":"语言设置","description":"","frontmatter":{},"headers":[],"relativePath":"start/i18n.md","filePath":"start/i18n.md","lastUpdated":1757137705000}'),p={name:"start/i18n.md"};function e(h,s,t,k,r,E){return n(),i("div",null,s[0]||(s[0]=[l("",14)]))}const g=a(p,[["render",e]]);export{c as __pageData,g as default};
diff --git a/docs/document/assets/start_option.md.DRwrMHeQ.js b/docs/document/assets/start_option.md.D52S8Ynf.js
similarity index 99%
rename from docs/document/assets/start_option.md.DRwrMHeQ.js
rename to docs/document/assets/start_option.md.D52S8Ynf.js
index 52562da0f..442cf966b 100644
--- a/docs/document/assets/start_option.md.DRwrMHeQ.js
+++ b/docs/document/assets/start_option.md.D52S8Ynf.js
@@ -1,4 +1,4 @@
-import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"基础选项","description":"","frontmatter":{},"headers":[],"relativePath":"start/option.md","filePath":"start/option.md","lastUpdated":1764425558000}'),p={name:"start/option.md"};function h(t,a,k,r,d,E){return l(),e("div",null,a[0]||(a[0]=[s('

基础选项 ​

container ​

  • Type: String, Element
  • Default: #artplayer

播放器挂载的 DOM 容器

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
+import{_ as n,c as l,o as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"基础选项","description":"","frontmatter":{},"headers":[],"relativePath":"start/option.md","filePath":"start/option.md","lastUpdated":1764425558000}'),p={name:"start/option.md"};function h(t,a,k,r,d,E){return e(),l("div",null,a[0]||(a[0]=[s('

基础选项 ​

container ​

  • Type: String, Element
  • Default: #artplayer

播放器挂载的 DOM 容器

',4),i("div",{className:"run-code"},"▶ Run Code",-1),s(`
js
var art = new Artplayer({
     container: '.artplayer-app', 
     // container: document.querySelector('.artplayer-app'),
     url: '/assets/sample/video.mp4',
diff --git a/docs/document/assets/start_option.md.DRwrMHeQ.lean.js b/docs/document/assets/start_option.md.D52S8Ynf.lean.js
similarity index 96%
rename from docs/document/assets/start_option.md.DRwrMHeQ.lean.js
rename to docs/document/assets/start_option.md.D52S8Ynf.lean.js
index 2e4fe979b..f83eb41dc 100644
--- a/docs/document/assets/start_option.md.DRwrMHeQ.lean.js
+++ b/docs/document/assets/start_option.md.D52S8Ynf.lean.js
@@ -1 +1 @@
-import{_ as n,o as l,c as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"基础选项","description":"","frontmatter":{},"headers":[],"relativePath":"start/option.md","filePath":"start/option.md","lastUpdated":1764425558000}'),p={name:"start/option.md"};function h(t,a,k,r,d,E){return l(),e("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",9),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",7),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const o=n(p,[["render",h]]);export{g as __pageData,o as default};
+import{_ as n,c as l,o as e,ak as s,j as i}from"./chunks/framework.xxfEszSJ.js";const g=JSON.parse('{"title":"基础选项","description":"","frontmatter":{},"headers":[],"relativePath":"start/option.md","filePath":"start/option.md","lastUpdated":1764425558000}'),p={name:"start/option.md"};function h(t,a,k,r,d,E){return e(),l("div",null,a[0]||(a[0]=[s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",9),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",7),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",6),i("div",{className:"run-code"},"▶ Run Code",-1),s("",2),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",4),i("div",{className:"run-code"},"▶ Run Code",-1),s("",5),i("div",{className:"run-code"},"▶ Run Code",-1),s("",1)]))}const o=n(p,[["render",h]]);export{g as __pageData,o as default};
diff --git a/docs/document/component/contextmenu.html b/docs/document/component/contextmenu.html
index 775c491c3..9b1d85e01 100644
--- a/docs/document/component/contextmenu.html
+++ b/docs/document/component/contextmenu.html
@@ -9,11 +9,11 @@
     
     
     
-    
+    
     
-    
+    
     
-    
+    
     
     
     
@@ -106,7 +106,7 @@
         })
     }, 3000);
 });
- + \ No newline at end of file diff --git a/docs/document/component/controls.html b/docs/document/component/controls.html index fdf515524..19086c923 100644 --- a/docs/document/component/controls.html +++ b/docs/document/component/controls.html @@ -9,11 +9,11 @@ - + - + - + @@ -153,7 +153,7 @@ }); }, 3000); });
- + \ No newline at end of file diff --git a/docs/document/component/layers.html b/docs/document/component/layers.html index 398ce5f32..495e340f9 100644 --- a/docs/document/component/layers.html +++ b/docs/document/component/layers.html @@ -9,11 +9,11 @@ - + - + - + @@ -125,7 +125,7 @@ }); }, 3000); });
- + \ No newline at end of file diff --git a/docs/document/component/setting.html b/docs/document/component/setting.html index 7d50b81bd..4498bdb3b 100644 --- a/docs/document/component/setting.html +++ b/docs/document/component/setting.html @@ -9,11 +9,11 @@ - + - + - + @@ -245,7 +245,7 @@ }); }, 3000); });
- + \ No newline at end of file diff --git a/docs/document/en/advanced/built-in.html b/docs/document/en/advanced/built-in.html index 7714ce53a..8a86835de 100644 --- a/docs/document/en/advanced/built-in.html +++ b/docs/document/en/advanced/built-in.html @@ -9,11 +9,11 @@ - + - + - + @@ -217,7 +217,7 @@ art.on('ready', () => { art.plugins.add(myPlugin); });
- + \ No newline at end of file diff --git a/docs/document/en/advanced/class.html b/docs/document/en/advanced/class.html index dfb752559..e7350b96b 100644 --- a/docs/document/en/advanced/class.html +++ b/docs/document/en/advanced/class.html @@ -9,11 +9,11 @@ - + - + - + @@ -31,7 +31,7 @@ }); console.info([...Artplayer.instances]);

version ​

Returns the version information of the player.

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

env ​

Returns the environment variables of the player.

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

build ​

Returns the build time of the player.

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

config ​

Returns the default configuration for videos.

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

utils ​

Returns the collection of utility functions for the player.

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

For all utility functions, please refer to the following address:

artplayer/types/utils.d.ts

scheme ​

Returns the validation schema for player options.

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

Emitter ​

Returns the constructor function for the event emitter.

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

validator ​

Returns the validation function for options.

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

kindOf ​

Returns the utility function for type detection.

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

html ​

Returns the html string required by the player.

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

option ​

Returns the default options for the player.

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

video:canplay ​

The browser can start playing the media, but estimates there isn't enough data to play through to the end without having to stop for further buffering

video:canplaythrough ​

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

video:complete ​

OfflineAudioContext rendering is complete

video:durationchange ​

Triggered when the value of the duration property changes

video:emptied ​

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

video:ended ​

Playback has stopped because the media has reached its end point

video:error ​

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

video:loadeddata ​

The first frame of the media has finished loading

video:loadedmetadata ​

Metadata has been loaded

video:pause ​

Playback has been paused

video:play ​

Playback has begun

video:playing ​

Playback is ready to start after having been paused or delayed due to lack of data

video:progress ​

Periodically triggered while the browser is loading the resource

video:ratechange ​

The playback rate has changed

video:seeked ​

A seek operation has completed

video:seeking ​

A seek operation has begun

video:stalled ​

The user agent is trying to fetch media data, but data is unexpectedly not forthcoming

video:suspend ​

Media data loading has been suspended

video:timeupdate ​

The time indicated by the currentTime attribute has been updated

video:volumechange ​

The volume has changed

video:waiting ​

Playback has stopped due to temporary lack of data

- + \ No newline at end of file diff --git a/docs/document/en/advanced/global.html b/docs/document/en/advanced/global.html index 8f23987a7..24768eea6 100644 --- a/docs/document/en/advanced/global.html +++ b/docs/document/en/advanced/global.html @@ -9,11 +9,11 @@ - + - + - + @@ -266,7 +266,7 @@ // Only destroys the UI, does not actively clear src art.destroy(); - + \ No newline at end of file diff --git a/docs/document/en/advanced/plugin.html b/docs/document/en/advanced/plugin.html index 99ef62814..53a8549c5 100644 --- a/docs/document/en/advanced/plugin.html +++ b/docs/document/en/advanced/plugin.html @@ -9,11 +9,11 @@ - + - + - + @@ -122,7 +122,7 @@ }) ], }); - + \ No newline at end of file diff --git a/docs/document/en/advanced/property.html b/docs/document/en/advanced/property.html index 02fc635fb..84581024d 100644 --- a/docs/document/en/advanced/property.html +++ b/docs/document/en/advanced/property.html @@ -9,11 +9,11 @@ - + - + - + @@ -487,7 +487,7 @@ art.on('ready', () => { art.subtitleOffset = 1; }); - + \ No newline at end of file diff --git a/docs/document/en/component/contextmenu.html b/docs/document/en/component/contextmenu.html index d863dff0d..da550d0a3 100644 --- a/docs/document/en/component/contextmenu.html +++ b/docs/document/en/component/contextmenu.html @@ -9,11 +9,11 @@ - + - + - + @@ -106,7 +106,7 @@ }) }, 3000); }); - + \ No newline at end of file diff --git a/docs/document/en/component/controls.html b/docs/document/en/component/controls.html index f1de4b85d..c0ad8f289 100644 --- a/docs/document/en/component/controls.html +++ b/docs/document/en/component/controls.html @@ -9,11 +9,11 @@ - + - + - + @@ -153,7 +153,7 @@ }); }, 3000); }); - + \ No newline at end of file diff --git a/docs/document/en/component/layers.html b/docs/document/en/component/layers.html index 2a6c44d33..e26ea5bcb 100644 --- a/docs/document/en/component/layers.html +++ b/docs/document/en/component/layers.html @@ -9,11 +9,11 @@ - + - + - + @@ -125,7 +125,7 @@ }); }, 3000); }); - + \ No newline at end of file diff --git a/docs/document/en/component/setting.html b/docs/document/en/component/setting.html index f159597f7..8ffa289be 100644 --- a/docs/document/en/component/setting.html +++ b/docs/document/en/component/setting.html @@ -9,11 +9,11 @@ - + - + - + @@ -260,7 +260,7 @@ }); }, 3000); }); - + \ No newline at end of file diff --git a/docs/document/en/index.html b/docs/document/en/index.html index 68901fc93..5abdf9368 100644 --- a/docs/document/en/index.html +++ b/docs/document/en/index.html @@ -9,11 +9,11 @@ - + - + - + @@ -23,7 +23,7 @@ -
Skip to content

Installation & Usage ​

Installation ​

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

CDN ​

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

Usage ​

html
<html>
+    
Skip to content

Installation & Usage ​

Installation ​

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

CDN ​

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

Usage ​

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

Note

The player's dimensions depend on the size of its container container, so your container must have defined dimensions.

See more usage examples at the following link:

/example

Vue.js ​

vue
<template>
+</html>

Note

The player's dimensions depend on the size of its container container, so your container must have defined dimensions.

See more usage examples at the following link:

/example

Vue.js ​

vue
<template>
   <div ref="$container" />
 </template>
 
@@ -76,7 +76,7 @@
   art.value.destroy(false)
 })
 </script>
vue
<template>
-  <Artplayer :option="option" :style="style" @get-instance="getInstance" />
+  <Artplayer :option="option" :style="style" @get-instance="getInstance" />
 </template>
 
 <script setup>
@@ -96,7 +96,7 @@
 function getInstance(art) {
   console.log(art)
 }
-</script>

Artplayer is not reactive:

Directly modifying option in Vue.js will not update the player.

React.js ​

jsx
import Artplayer from 'artplayer'
+</script>

Artplayer is not reactive:

Directly modifying option in Vue.js will not update the player.

React.js ​

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

Legacy Browsers ​

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

For legacy browsers, you can use the artplayer.legacy.js file, which supports compatibility down to: IE 11

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

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

Build configuration: scripts/build.js

Reference documentation: browserslist

ECMAScript Module ​

Starting from 5.2.6, artplayer and all plugins also provide an ESM version mjs, such as:

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

Legacy Browsers ​

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

For legacy browsers, you can use the artplayer.legacy.js file, which supports compatibility down to: IE 11

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

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

Build configuration: scripts/build.js

Reference documentation: browserslist

ECMAScript Module ​

Starting from 5.2.6, artplayer and all plugins also provide an ESM version mjs, such as:

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

Note

You need to modify it before importing the Artplayer dependency for it to take effect.

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

Importing Languages ​

Language files before bundling are located at: artplayer/src/i18n/*.js. Contributions to add your language are welcome.

Language files after bundling are located at: artplayer/dist/i18n/*.js

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

Importing Languages ​

Language files before bundling are located at: artplayer/src/i18n/*.js. Contributions to add your language are welcome.

Language files after bundling are located at: artplayer/dist/i18n/*.js

js
import id from 'artplayer/i18n/id';
 import zhTw from 'artplayer/i18n/zh-tw';
 
 var art = new Artplayer({
@@ -75,7 +75,7 @@
         },
     },
 });
- + \ No newline at end of file diff --git a/docs/document/en/start/option.html b/docs/document/en/start/option.html index c331ead61..a331560ba 100644 --- a/docs/document/en/start/option.html +++ b/docs/document/en/start/option.html @@ -9,11 +9,11 @@ - + - + - + @@ -475,7 +475,7 @@ url: '/assets/sample/video.mp4', proxy: () => document.createElement('video') }); - + \ No newline at end of file diff --git a/docs/document/hashmap.json b/docs/document/hashmap.json index a4c07c254..f3d3d8e9b 100644 --- a/docs/document/hashmap.json +++ b/docs/document/hashmap.json @@ -1 +1 @@ -{"advanced_built-in.md":"DbXkhR8l","advanced_class.md":"BE9Wp7q6","advanced_event.md":"DoIgqIU9","advanced_global.md":"Db4VcykV","advanced_plugin.md":"CVp3Oe2x","advanced_property.md":"C_nOKniE","component_contextmenu.md":"lsIURdc3","component_controls.md":"CKAl0l5Z","component_layers.md":"D34Y4OkH","component_setting.md":"BwCpY3NU","en_advanced_built-in.md":"DWw_qKdn","en_advanced_class.md":"bWhe2FDl","en_advanced_event.md":"igITY2FO","en_advanced_global.md":"Bj0Agjzd","en_advanced_plugin.md":"IXiFhAGS","en_advanced_property.md":"DQzShb4B","en_component_contextmenu.md":"3nvb8CSX","en_component_controls.md":"s1SJ4fZd","en_component_layers.md":"wLZPKN9j","en_component_setting.md":"eqeWyMDt","en_index.md":"DrOcPBwp","en_start_i18n.md":"DAxrpMQL","en_start_option.md":"CuY4IYWk","index.md":"WcEL7IA5","plugin_danmuku.md":"D580Az0s","start_i18n.md":"C6dAnYSp","start_option.md":"DRwrMHeQ"} +{"advanced_built-in.md":"DiyRIcIA","advanced_class.md":"Da3aE0pP","advanced_event.md":"mrsB0MsK","advanced_global.md":"Bdw3azKs","advanced_plugin.md":"B3Pobmcq","advanced_property.md":"CA7GaeI3","component_contextmenu.md":"ClKmcIKr","component_controls.md":"Cl62yW1F","component_layers.md":"Cys52VMi","component_setting.md":"BP5674ir","en_advanced_built-in.md":"XdT81JC0","en_advanced_class.md":"BLyA7rxa","en_advanced_event.md":"CtQl1IYg","en_advanced_global.md":"D5Nz8wyo","en_advanced_plugin.md":"BOuMu80J","en_advanced_property.md":"urRMaqHe","en_component_contextmenu.md":"COLfX45a","en_component_controls.md":"BbQsn0wJ","en_component_layers.md":"CX93a7QS","en_component_setting.md":"C6o2AWtX","en_index.md":"Adx_P8Ii","en_start_i18n.md":"lFdcbEk9","en_start_option.md":"Bk4YXvof","index.md":"Bkwg5S8z","plugin_danmuku.md":"DSrWXJHB","start_i18n.md":"D3eO9wL_","start_option.md":"D52S8Ynf"} diff --git a/docs/document/index.html b/docs/document/index.html index f9d6cf8e7..19a40f950 100644 --- a/docs/document/index.html +++ b/docs/document/index.html @@ -9,11 +9,11 @@ - + - + - + @@ -23,7 +23,7 @@ -
Skip to content

安装使用 ​

安装 ​

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

CDN ​

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

使用 ​

html
<html>
+    
Skip to content

安装使用 ​

安装 ​

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

CDN ​

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

使用 ​

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

提示

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

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

/example

Vue.js ​

vue
<template>
+</html>

提示

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

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

/example

Vue.js ​

vue
<template>
   <div ref="$container" />
 </template>
 
@@ -76,7 +76,7 @@
   art.value.destroy(false)
 })
 </script>
vue
<template>
-  <Artplayer :option="option" :style="style" @get-instance="getInstance" />
+  <Artplayer :option="option" :style="style" @get-instance="getInstance" />
 </template>
 
 <script setup>
@@ -96,7 +96,7 @@
 function getInstance(art) {
   console.log(art)
 }
-</script>

Artplayer 非响应式:

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

React.js ​

jsx
import Artplayer from 'artplayer'
+</script>

Artplayer 非响应式:

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

React.js ​

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

古老的浏览器 ​

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

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

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

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

构建配置:scripts/build.js

参考文档:browserslist

ECMAScript Module ​

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

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

古老的浏览器 ​

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

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

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

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

构建配置:scripts/build.js

参考文档:browserslist

ECMAScript Module ​

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

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

提示

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

- + \ No newline at end of file diff --git a/docs/document/plugin/danmuku.html b/docs/document/plugin/danmuku.html index 06cecf679..b65afa6be 100644 --- a/docs/document/plugin/danmuku.html +++ b/docs/document/plugin/danmuku.html @@ -9,11 +9,11 @@ - + - + - + @@ -23,7 +23,7 @@ -
Skip to content

弹幕库 ​

演示 ​

👉 查看完整演示

安装 ​

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

CDN ​

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

弹幕结构 ​

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

js
{
+    
Skip to content

弹幕库 ​

演示 ​

👉 查看完整演示

安装 ​

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

CDN ​

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

弹幕结构 ​

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

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

导入语言 ​

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

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

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

导入语言 ​

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

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

js
import id from 'artplayer/i18n/id';
 import zhTw from 'artplayer/i18n/zh-tw';
 
 var art = new Artplayer({
@@ -75,7 +75,7 @@
         },
     },
 });
- + \ No newline at end of file diff --git a/docs/document/start/option.html b/docs/document/start/option.html index 66bde2451..92c674c96 100644 --- a/docs/document/start/option.html +++ b/docs/document/start/option.html @@ -9,11 +9,11 @@ - + - + - + @@ -415,7 +415,7 @@ url: '/assets/sample/video.mp4', proxy: () => document.createElement('video') });
- + \ No newline at end of file diff --git a/docs/uncompiled/artplayer-plugin-danmuku/index.js b/docs/uncompiled/artplayer-plugin-danmuku/index.js index f2d604814..3e6f62fe0 100644 --- a/docs/uncompiled/artplayer-plugin-danmuku/index.js +++ b/docs/uncompiled/artplayer-plugin-danmuku/index.js @@ -1,390 +1,231 @@ -// modules are defined as an array -// [ module function, map of requires ] -// -// map of requires is short require name -> numeric require -// -// anything defined in a previous bundle is accessed via the -// orig method which is the require for previous bundles - -(function ( - modules, - entry, - mainEntry, - parcelRequireName, - externals, - distDir, - publicUrl, - devServer -) { - /* eslint-disable no-undef */ - var globalObject = - typeof globalThis !== 'undefined' - ? globalThis - : typeof self !== 'undefined' - ? self - : typeof window !== 'undefined' - ? window - : typeof global !== 'undefined' - ? global - : {}; - /* eslint-enable no-undef */ - - // Save the require from previous bundle to this closure if any - var previousRequire = - typeof globalObject[parcelRequireName] === 'function' && - globalObject[parcelRequireName]; - - var importMap = previousRequire.i || {}; - var cache = previousRequire.cache || {}; - // Do not use `require` to prevent Webpack from trying to bundle this call - var nodeRequire = - typeof module !== 'undefined' && - typeof module.require === 'function' && - module.require.bind(module); - - function newRequire(name, jumped) { - if (!cache[name]) { - if (!modules[name]) { - if (externals[name]) { - return externals[name]; - } - // if we cannot find the module within our internal map or - // cache jump to the current global require ie. the last bundle - // that was added to the page. - var currentRequire = - typeof globalObject[parcelRequireName] === 'function' && - globalObject[parcelRequireName]; - if (!jumped && currentRequire) { - return currentRequire(name, true); - } - - // If there are other bundles on this page the require from the - // previous one is saved to 'previousRequire'. Repeat this as - // many times as there are bundles until the module is found or - // we exhaust the require chain. - if (previousRequire) { - return previousRequire(name, true); - } - - // Try the node require function if it exists. - if (nodeRequire && typeof name === 'string') { - return nodeRequire(name); - } - - var err = new Error("Cannot find module '" + name + "'"); - err.code = 'MODULE_NOT_FOUND'; - throw err; +var ArtplayerPluginDanmuku = (function() { + "use strict"; + function getMode(key) { + switch (key) { + case 1: + case 2: + case 3: + return 0; + case 4: + return 2; + case 5: + return 1; + default: + return 0; + } + } + function bilibiliDanmuParseFromXml(xmlString) { + if (typeof xmlString !== "string") + return []; + const reg = /]*?p="(?

[^"]+)"[^>]*>(?.*?)<\/d>/gs; + const matches = xmlString.matchAll(reg); + return Array.from(matches).map((match) => { + const attr = match.groups.p.split(","); + if (attr.length >= 8) { + const text = match.groups.text.trim().replaceAll(""", '"').replaceAll("'", "'").replaceAll("<", "<").replaceAll(">", ">").replaceAll("&", "&"); + return { + text, + time: Number(attr[0]), + mode: getMode(Number(attr[1])), + fontSize: Number(attr[2]), + color: `#${Number(attr[3]).toString(16)}`, + timestamp: Number(attr[4]), + pool: Number(attr[5]), + userID: attr[6], + rowID: Number(attr[7]) + }; + } else { + return null; } - - localRequire.resolve = resolve; - localRequire.cache = {}; - - var module = (cache[name] = new newRequire.Module(name)); - - modules[name][0].call( - module.exports, - localRequire, - module, - module.exports, - globalObject + }).filter(Boolean); + } + function onmessage({ data }) { + const { xml, id } = data; + if (!id || !xml) + return; + const danmus = bilibiliDanmuParseFromXml(xml); + globalThis.postMessage({ danmus, id }); + } + function createWorker() { + const workerText = ` + ${getMode.toString()} + ${bilibiliDanmuParseFromXml.toString()} + onmessage = ${onmessage.toString()} + `; + const blob2 = new Blob([workerText], { type: "application/javascript" }); + return new Worker(URL.createObjectURL(blob2)); + } + function bilibiliDanmuParseFromUrl(url) { + return new Promise(async (resolve) => { + const res = await fetch(url); + const xml = await res.text(); + try { + const worker = createWorker(); + worker.onmessage = (event) => { + const { danmus, id } = event.data; + if (!id || !danmus) + return; + resolve(danmus); + worker.terminate(); + }; + worker.postMessage({ xml, id: Date.now() }); + } catch (error) { + console.error("Error parsing Bilibili Danmu:", error); + const danmus = bilibiliDanmuParseFromXml(xml); + resolve(danmus); + } + }); + } + const jsContent = 'function getDanmuTop({ target, visibles, clientWidth, clientHeight, marginBottom, marginTop, antiOverlap }) {\n const maxTop = clientHeight - marginBottom;\n const danmus = visibles.filter((item) => item.mode === target.mode && item.top <= maxTop).sort((prev, next) => prev.top - next.top);\n if (danmus.length === 0) {\n if (target.mode === 2) {\n return maxTop - target.height;\n } else {\n return marginTop;\n }\n }\n danmus.unshift({\n type: "top",\n top: 0,\n left: 0,\n right: 0,\n height: marginTop,\n width: clientWidth,\n speed: 0,\n distance: clientWidth\n });\n danmus.push({\n type: "bottom",\n top: maxTop,\n left: 0,\n right: 0,\n height: marginBottom,\n width: clientWidth,\n speed: 0,\n distance: clientWidth\n });\n if (target.mode === 2) {\n for (let index = danmus.length - 2; index >= 0; index -= 1) {\n const item = danmus[index];\n const prev = danmus[index + 1];\n const itemBottom = item.top + item.height;\n const diff = prev.top - itemBottom;\n if (diff >= target.height) {\n return prev.top - target.height;\n }\n }\n } else {\n for (let index = 1; index < danmus.length; index += 1) {\n const item = danmus[index];\n const prev = danmus[index - 1];\n const prevBottom = prev.top + prev.height;\n const diff = item.top - prevBottom;\n if (diff >= target.height) {\n return prevBottom;\n }\n }\n }\n const topMap = [];\n for (let index = 1; index < danmus.length - 1; index += 1) {\n const item = danmus[index];\n if (topMap.length) {\n const last = topMap[topMap.length - 1];\n if (last[0].top === item.top) {\n last.push(item);\n } else {\n topMap.push([item]);\n }\n } else {\n topMap.push([item]);\n }\n }\n if (antiOverlap) {\n switch (target.mode) {\n case 0: {\n const result = topMap.find((list) => {\n return list.every((danmu) => {\n if (clientWidth < danmu.distance)\n return false;\n if (target.speed < danmu.speed)\n return true;\n const overlapTime = danmu.right / (target.speed - danmu.speed);\n if (overlapTime > danmu.time)\n return true;\n return false;\n });\n });\n return result && result[0] ? result[0].top : void 0;\n }\n // 静止弹幕没有重叠问题\n case 1:\n case 2:\n return void 0;\n }\n } else {\n switch (target.mode) {\n case 0:\n topMap.sort((prev, next) => {\n const nextMinRight = Math.min(...next.map((item) => item.right));\n const prevMinRight = Math.min(...prev.map((item) => item.right));\n return nextMinRight * next.length - prevMinRight * prev.length;\n });\n break;\n case 1:\n case 2:\n topMap.sort((prev, next) => {\n const nextMaxWidth = Math.max(...next.map((item) => item.width));\n const prevMaxWidth = Math.max(...prev.map((item) => item.width));\n return prevMaxWidth * prev.length - nextMaxWidth * next.length;\n });\n break;\n }\n return topMap[0][0].top;\n }\n}\nonmessage = (event) => {\n const { data } = event;\n if (!data.id || !data.type)\n return;\n const fns = { getDanmuTop };\n const fn = fns[data.type];\n const result = fn(data);\n globalThis.postMessage({\n result,\n id: data.id\n });\n};\n'; + const blob = typeof self !== "undefined" && self.Blob && new Blob(["URL.revokeObjectURL(import.meta.url);", jsContent], { type: "text/javascript;charset=utf-8" }); + function WorkerWrapper(options) { + let objURL; + try { + objURL = blob && (self.URL || self.webkitURL).createObjectURL(blob); + if (!objURL) throw ""; + const worker = new Worker(objURL, { + type: "module", + name: options?.name + }); + worker.addEventListener("error", () => { + (self.URL || self.webkitURL).revokeObjectURL(objURL); + }); + return worker; + } catch (e) { + return new Worker( + "data:text/javascript;charset=utf-8," + encodeURIComponent(jsContent), + { + type: "module", + name: options?.name + } ); } - - return cache[name].exports; - - function localRequire(x) { - var res = localRequire.resolve(x); - if (res === false) { - return {}; - } - // Synthesize a module to follow re-exports. - if (Array.isArray(res)) { - var m = {__esModule: true}; - res.forEach(function (v) { - var key = v[0]; - var id = v[1]; - var exp = v[2] || v[0]; - var x = newRequire(id); - if (key === '*') { - Object.keys(x).forEach(function (key) { - if ( - key === 'default' || - key === '__esModule' || - Object.prototype.hasOwnProperty.call(m, key) - ) { - return; - } - - Object.defineProperty(m, key, { - enumerable: true, - get: function () { - return x[key]; - }, - }); - }); - } else if (exp === '*') { - Object.defineProperty(m, key, { - enumerable: true, - value: x, - }); - } else { - Object.defineProperty(m, key, { - enumerable: true, - get: function () { - if (exp === 'default') { - return x.__esModule ? x.default : x; - } - return x[exp]; - }, - }); - } - }); - return m; - } - return newRequire(res); - } - - function resolve(x) { - var id = modules[name][1][x]; - return id != null ? id : x; - } } - - function Module(moduleName) { - this.id = moduleName; - this.bundle = newRequire; - this.require = nodeRequire; - this.exports = {}; - } - - newRequire.isParcelRequire = true; - newRequire.Module = Module; - newRequire.modules = modules; - newRequire.cache = cache; - newRequire.parent = previousRequire; - newRequire.distDir = distDir; - newRequire.publicUrl = publicUrl; - newRequire.devServer = devServer; - newRequire.i = importMap; - newRequire.register = function (id, exports) { - modules[id] = [ - function (require, module) { - module.exports = exports; - }, - {}, - ]; - }; - - // Only insert newRequire.load when it is actually used. - // The code in this file is linted against ES5, so dynamic import is not allowed. - // INSERT_LOAD_HERE - - Object.defineProperty(newRequire, 'root', { - get: function () { - return globalObject[parcelRequireName]; - }, - }); - - globalObject[parcelRequireName] = newRequire; - - for (var i = 0; i < entry.length; i++) { - newRequire(entry[i]); - } - - if (mainEntry) { - // Expose entry point to Node, AMD or browser globals - // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js - var mainExports = newRequire(mainEntry); - - // CommonJS - if (typeof exports === 'object' && typeof module !== 'undefined') { - module.exports = mainExports; - - // RequireJS - } else if (typeof define === 'function' && define.amd) { - define(function () { - return mainExports; - }); - } - } -})({"hfC30":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>artplayerPluginDanmuku); -var _danmuku = require("./danmuku"); -var _danmukuDefault = parcelHelpers.interopDefault(_danmuku); -var _heatmap = require("./heatmap"); -var _heatmapDefault = parcelHelpers.interopDefault(_heatmap); -var _setting = require("./setting"); -var _settingDefault = parcelHelpers.interopDefault(_setting); -function artplayerPluginDanmuku(option) { - return (art)=>{ - const danmuku = new (0, _danmukuDefault.default)(art, option); - const setting = new (0, _settingDefault.default)(art, danmuku); - if (danmuku.option.heatmap) (0, _heatmapDefault.default)(art, danmuku, danmuku.option.heatmap); - return { - name: 'artplayerPluginDanmuku', - emit: danmuku.emit.bind(danmuku), - load: danmuku.load.bind(danmuku), - config: danmuku.config.bind(danmuku), - hide: danmuku.hide.bind(danmuku), - show: danmuku.show.bind(danmuku), - reset: danmuku.reset.bind(danmuku), - mount: setting.mount.bind(setting), - get option () { - return danmuku.option; - }, - get isHide () { - return danmuku.isHide; - }, - get isStop () { - return danmuku.isStop; - } - }; - }; -} -artplayerPluginDanmuku.icons = (0, _settingDefault.default).icons; -if (typeof window !== 'undefined') window.artplayerPluginDanmuku = artplayerPluginDanmuku; - -},{"./danmuku":"gAOAX","./heatmap":"2G7iS","./setting":"3B2wj","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"gAOAX":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _worker = require("bundle-text:./worker"); -var _workerDefault = parcelHelpers.interopDefault(_worker); -var _bilibili = require("./bilibili"); -class Danmuku { - constructor(art, option){ - const { constructor, template } = art; - this.utils = constructor.utils // 工具库 - ; - this.validator = constructor.validator // 配置校验器 - ; - this.$danmuku = template.$danmuku // 弹幕层容器 - ; - this.$player = template.$player // 播放器容器 - ; - this.art = art; - this.queue = [] // 实际弹幕队列 - ; - this.$refs = [] // 弹幕DOM节点池 - ; - this.isStop = false // 是否停止 - ; - this.isHide = false // 是否隐藏 - ; - this.timer = null // 定时器 - ; - this.index = 0 // 弹幕索引 - ; - // 格式化后的配置项 - this.option = Danmuku.option; - // 弹幕状态池 - this.states = { - wait: [], - ready: [], - emit: [], - stop: [] - }; - // 初始化配置 - this.config(option, true); - // 创建 Web Worker, 用于计算弹幕的 top 值 - const workerText2 = (0, _workerDefault.default).replace('export{e as default};', ''); - const blob = new Blob([ - workerText2 - ], { - type: 'application/javascript' - }); - this.worker = new Worker(URL.createObjectURL(blob)); - // 绑定公用事件 - this.start = this.start.bind(this); - this.stop = this.stop.bind(this); - this.reset = this.reset.bind(this); - this.resize = this.resize.bind(this); - this.destroy = this.destroy.bind(this); - // 监听事件 - art.on('video:play', this.start); - art.on('video:playing', this.start); - art.on('video:pause', this.stop); - art.on('video:waiting', this.stop); - art.on('destroy', this.destroy); - art.on('resize', this.resize); - // 开始加载弹幕 - this.load(); + class Danmuku { + constructor(art, option) { + const { constructor, template } = art; + this.utils = constructor.utils; + this.validator = constructor.validator; + this.$danmuku = template.$danmuku; + this.$player = template.$player; + this.art = art; + this.queue = []; + this.$refs = []; + this.isStop = false; + this.isHide = false; + this.timer = null; + this.index = 0; + this.option = Danmuku.option; + this.states = { wait: [], ready: [], emit: [], stop: [] }; + this.config(option, true); + this.worker = new WorkerWrapper(); + this.start = this.start.bind(this); + this.stop = this.stop.bind(this); + this.reset = this.reset.bind(this); + this.resize = this.resize.bind(this); + this.destroy = this.destroy.bind(this); + art.on("video:play", this.start); + art.on("video:playing", this.start); + art.on("video:pause", this.stop); + art.on("video:waiting", this.stop); + art.on("destroy", this.destroy); + art.on("resize", this.resize); + this.load(); } // 默认配置 static get option() { - return { - danmuku: [], - speed: 5, - margin: [ - 10, - '25%' - ], - opacity: 1, - color: '#FFFFFF', - mode: 0, - modes: [ - 0, - 1, - 2 - ], - fontSize: 25, - antiOverlap: true, - synchronousPlayback: false, - mount: undefined, - heatmap: false, - width: 512, - points: [], - filter: ()=>true, - beforeEmit: ()=>true, - beforeVisible: ()=>true, - visible: true, - emitter: true, - maxLength: 200, - lockTime: 5, - theme: 'dark', - OPACITY: {}, - FONT_SIZE: {}, - MARGIN: {}, - SPEED: {}, - COLOR: [] - }; + return { + danmuku: [], + // 弹幕数据 + speed: 5, + // 弹幕持续时间,范围在[1 ~ 10] + margin: [10, "25%"], + // 弹幕上下边距,支持像素数字和百分比 + opacity: 1, + // 弹幕透明度,范围在[0 ~ 1] + color: "#FFFFFF", + // 默认弹幕颜色,可以被单独弹幕项覆盖 + mode: 0, + // 默认弹幕模式: 0: 滚动,1: 顶部,2: 底部 + modes: [0, 1, 2], + // 弹幕可见的模式 + fontSize: 25, + // 弹幕字体大小,支持像素数字和百分比 + antiOverlap: true, + // 弹幕是否防重叠 + synchronousPlayback: false, + // 是否同步播放速度 + mount: void 0, + // 弹幕发射器挂载点, 默认为播放器控制栏中部 + heatmap: false, + // 是否开启热力图 + width: 512, + // 当播放器宽度小于此值时,弹幕发射器置于播放器底部 + points: [], + // 热力图数据 + filter: () => true, + // 弹幕载入前的过滤器,只支持返回布尔值 + beforeEmit: () => true, + // 弹幕发送前的过滤器,支持返回 Promise + beforeVisible: () => true, + // 弹幕显示前的过滤器,支持返回 Promise + visible: true, + // 弹幕层是否可见 + emitter: true, + // 是否开启弹幕发射器 + maxLength: 200, + // 弹幕输入框最大长度, 范围在[1 ~ 1000] + lockTime: 5, + // 输入框锁定时间,范围在[1 ~ 60] + theme: "dark", + // 弹幕主题,支持 dark 和 light,只在自定义挂载时生效 + OPACITY: {}, + // 不透明度配置项 + FONT_SIZE: {}, + // 弹幕字号配置项 + MARGIN: {}, + // 显示区域配置项 + SPEED: {}, + // 弹幕速度配置项 + COLOR: [] + // 颜色列表配置项 + }; } // 配置校验 static get scheme() { - return { - danmuku: 'array|function|string', - speed: 'number', - margin: 'array', - opacity: 'number', - color: 'string', - mode: 'number', - modes: 'array', - fontSize: 'number|string', - antiOverlap: 'boolean', - synchronousPlayback: 'boolean', - mount: '?htmldivelement|string', - heatmap: 'object|boolean', - width: 'number', - points: 'array', - filter: 'function', - beforeEmit: 'function', - beforeVisible: 'function', - visible: 'boolean', - emitter: 'boolean', - maxLength: 'number', - lockTime: 'number', - theme: 'string', - OPACITY: 'object', - FONT_SIZE: 'object', - MARGIN: 'object', - SPEED: 'object', - COLOR: 'array' - }; + return { + danmuku: "array|function|string", + speed: "number", + margin: "array", + opacity: "number", + color: "string", + mode: "number", + modes: "array", + fontSize: "number|string", + antiOverlap: "boolean", + synchronousPlayback: "boolean", + mount: "?htmldivelement|string", + heatmap: "object|boolean", + width: "number", + points: "array", + filter: "function", + beforeEmit: "function", + beforeVisible: "function", + visible: "boolean", + emitter: "boolean", + maxLength: "number", + lockTime: "number", + theme: "string", + OPACITY: "object", + FONT_SIZE: "object", + MARGIN: "object", + SPEED: "object", + COLOR: "array" + }; } // 初始弹幕样式 static get cssText() { - return ` + return ` user-select: none; position: absolute; white-space: pre; @@ -401,730 +242,582 @@ class Danmuku { } // 是否在移动端使用了自动旋屏,会影响弹幕的left和top值 get isRotate() { - return this.art.plugins?.autoOrientation?.state; + return this.art.plugins?.autoOrientation?.state; } // 计算上空白边距 get marginTop() { - const { clamp } = this.utils; - const value = this.option.margin[0]; - const { clientHeight } = this.$player; - if (typeof value === 'number') return clamp(value, 0, clientHeight); - if (typeof value === 'string' && value.endsWith('%')) { - const ratio = Number.parseFloat(value) / 100; - return clamp(clientHeight * ratio, 0, clientHeight); - } - return Danmuku.option.margin[0]; + const { clamp } = this.utils; + const value = this.option.margin[0]; + const { clientHeight } = this.$player; + if (typeof value === "number") { + return clamp(value, 0, clientHeight); + } + if (typeof value === "string" && value.endsWith("%")) { + const ratio = Number.parseFloat(value) / 100; + return clamp(clientHeight * ratio, 0, clientHeight); + } + return Danmuku.option.margin[0]; } // 计算下空白边距 get marginBottom() { - const { clamp } = this.utils; - const value = this.option.margin[1]; - const { clientHeight } = this.$player; - if (typeof value === 'number') return clamp(value, 0, clientHeight); - if (typeof value === 'string' && value.endsWith('%')) { - const ratio = Number.parseFloat(value) / 100; - return clamp(clientHeight * ratio, 0, clientHeight); - } - return Danmuku.option.margin[1]; + const { clamp } = this.utils; + const value = this.option.margin[1]; + const { clientHeight } = this.$player; + if (typeof value === "number") { + return clamp(value, 0, clientHeight); + } + if (typeof value === "string" && value.endsWith("%")) { + const ratio = Number.parseFloat(value) / 100; + return clamp(clientHeight * ratio, 0, clientHeight); + } + return Danmuku.option.margin[1]; } // 计算弹幕字体大小 get fontSize() { - const { clamp } = this.utils; - const { clientHeight } = this.$player; - const fontSize = this.option.fontSize; - if (typeof fontSize === 'number') return Math.round(clamp(fontSize, 12, clientHeight)); - if (typeof fontSize === 'string' && fontSize.endsWith('%')) { - const ratio = Number.parseFloat(fontSize) / 100; - return Math.round(clamp(clientHeight * ratio, 12, clientHeight)); - } - return Danmuku.option.fontSize; + const { clamp } = this.utils; + const { clientHeight } = this.$player; + const fontSize = this.option.fontSize; + if (typeof fontSize === "number") { + return Math.round(clamp(fontSize, 12, clientHeight)); + } + if (typeof fontSize === "string" && fontSize.endsWith("%")) { + const ratio = Number.parseFloat(fontSize) / 100; + return Math.round(clamp(clientHeight * ratio, 12, clientHeight)); + } + return Danmuku.option.fontSize; } // 获取弹幕DOM节点 get $ref() { - const $ref = this.$refs.pop() || document.createElement('div'); - $ref.style.cssText = Danmuku.cssText; - $ref.dataset.mode = ''; - $ref.dataset.id = ''; - $ref.className = ''; - return $ref; + const $ref = this.$refs.pop() || document.createElement("div"); + $ref.style.cssText = Danmuku.cssText; + $ref.dataset.mode = ""; + $ref.dataset.id = ""; + $ref.className = ""; + return $ref; } // 获取准备好发送的弹幕 get readys() { - const { currentTime } = this.art; - const result = []; - // 有的是ready状态:之前因为弹幕太多而暂停发送的弹幕 - this.filter('ready', (danmu)=>result.push(danmu)); - // 有的是wait状态:符合时间范围的弹幕 - this.filter('wait', (danmu)=>{ - if (currentTime + 0.1 >= danmu.time && danmu.time >= currentTime - 0.1) result.push(danmu); - }); - return result; + const { currentTime } = this.art; + const result = []; + this.filter("ready", (danmu) => result.push(danmu)); + this.filter("wait", (danmu) => { + if (currentTime + 0.1 >= danmu.time && danmu.time >= currentTime - 0.1) { + result.push(danmu); + } + }); + return result; } // 可见的弹幕的数据,用于计算下一个弹幕的top值 get visibles() { - const result = []; - const { clientWidth } = this.$player; - const clientLeft = this.getLeft(this.$player); - this.filter('emit', (danmu)=>{ - const top = danmu.$ref.offsetTop; - const left = this.getLeft(danmu.$ref) - clientLeft; - const height = danmu.$ref.clientHeight; - const width = danmu.$ref.clientWidth; - const distance = left + width; - const right = clientWidth - distance; - const speed = distance / danmu.$restTime; - const emit = {}; - emit.top = top; - emit.left = left; - emit.height = height; - emit.width = width; - emit.right = right; - emit.speed = speed; - emit.distance = distance; - emit.time = danmu.$restTime; - emit.mode = danmu.mode; - result.push(emit); - }); - return result; + const result = []; + const { clientWidth } = this.$player; + const clientLeft = this.getLeft(this.$player); + this.filter("emit", (danmu) => { + const top = danmu.$ref.offsetTop; + const left = this.getLeft(danmu.$ref) - clientLeft; + const height = danmu.$ref.clientHeight; + const width = danmu.$ref.clientWidth; + const distance = left + width; + const right = clientWidth - distance; + const speed = distance / danmu.$restTime; + const emit = {}; + emit.top = top; + emit.left = left; + emit.height = height; + emit.width = width; + emit.right = right; + emit.speed = speed; + emit.distance = distance; + emit.time = danmu.$restTime; + emit.mode = danmu.mode; + result.push(emit); + }); + return result; } // 计算弹幕速度 get speed() { - return this.option.synchronousPlayback && this.art.playbackRate ? this.option.speed / Number(this.art.playbackRate) : this.option.speed; + return this.option.synchronousPlayback && this.art.playbackRate ? this.option.speed / Number(this.art.playbackRate) : this.option.speed; } // 加载弹幕 async load(danmuku) { - const { errorHandle } = this.utils; - let danmus = []; - const target = danmuku || this.option.danmuku; - try { - if (typeof target === 'function') danmus = await target() // 异步函数获取 - ; - else if (target instanceof Promise) danmus = await target // 从 Promise 对象获取 - ; - else if (typeof target === 'string') danmus = await (0, _bilibili.bilibiliDanmuParseFromUrl)(target) // 从B站xml链接解析 - ; - else if (Array.isArray(target)) danmus = target // 直接传入数组 - ; - errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result'); - // 假如没有传入弹幕参数,则清空弹幕,否则追加弹幕 - if (danmuku === undefined) { - this.reset() // 重置弹幕 - ; - this.queue = [] // 清空弹幕队列 - ; - this.states = { - wait: [], - ready: [], - emit: [], - stop: [] - } // 清空弹幕状态池 - ; - this.$refs = [] // 清空弹幕DOM节点池 - ; - this.$danmuku.textContent = '' // 清空弹幕层 - ; - } - // 逐个验证原始弹幕并转换到弹幕队列 - for(let index = 0; index < danmus.length; index++){ - const danmu = danmus[index]; - await this.emit(danmu); - } - this.art.emit('artplayerPluginDanmuku:loaded', this.queue); - } catch (error) { - this.art.emit('artplayerPluginDanmuku:error', error); - throw error; + const { errorHandle } = this.utils; + let danmus = []; + const target = danmuku || this.option.danmuku; + try { + if (typeof target === "function") { + danmus = await target(); + } else if (target instanceof Promise) { + danmus = await target; + } else if (typeof target === "string") { + danmus = await bilibiliDanmuParseFromUrl(target); + } else if (Array.isArray(target)) { + danmus = target; } - return this; + errorHandle(Array.isArray(danmus), "Danmuku need return an array as result"); + if (danmuku === void 0) { + this.reset(); + this.queue = []; + this.states = { wait: [], ready: [], emit: [], stop: [] }; + this.$refs = []; + this.$danmuku.textContent = ""; + } + for (let index = 0; index < danmus.length; index++) { + const danmu = danmus[index]; + await this.emit(danmu); + } + this.art.emit("artplayerPluginDanmuku:loaded", this.queue); + } catch (error) { + this.art.emit("artplayerPluginDanmuku:error", error); + throw error; + } + return this; } // 把原始弹幕转换到弹幕队列 async emit(danmu) { - const { clamp } = this.utils; - this.validator(danmu, { - id: '?string', - text: 'string', - mode: '?number', - color: '?string', - time: '?number', - border: '?boolean', - style: '?object' - }); - // 弹幕文本为空则直接忽略 - if (!danmu.text.trim()) return this; - // 设置弹幕时间,如果没有则默认为当前时间加 0.5 秒 - if (danmu.time) danmu.time = clamp(danmu.time, 0, Infinity); - else danmu.time = this.art.currentTime + 0.5; - // 设置弹幕模式,如果没有则默认为全局配置 - if (danmu.mode === undefined) danmu.mode = this.option.mode; - // 设置弹幕单独样式,如果没有则默认为空对象 - if (danmu.style === undefined) danmu.style = {}; - // 设置弹幕颜色,如果没有则默认为全局配置 - if (danmu.color === undefined) danmu.color = this.option.color; - // 弹幕模式只能是 0, 1, 2 - if (![ - 0, - 1, - 2 - ].includes(danmu.mode)) return this; - // 自定义弹幕过滤函数 - if (!this.option.filter(danmu)) return this; - // 添加自定义属性 - const item = { - ...danmu, - $state: 'wait', - $index: this.index++, - $ref: null, - $restTime: 0, - $lastStartTime: 0 - }; - // 转换为wait状态 - this.setState(item, 'wait'); - // 添加到实际弹幕队列 - this.queue.push(item); - // 弹幕有四个状态: - // - wait: 弹幕还未开始显示,没有被添加到 DOM 中 - // - ready: 弹幕准备好显示,没有被添加到 DOM 中 - // - emit: 弹幕正在显示,已经被添加到 DOM 中 - // - stop: 弹幕正在停止显示,已经被添加到 DOM 中 + const { clamp } = this.utils; + this.validator(danmu, { + id: "?string", + // 弹幕唯一标识 + text: "string", + // 弹幕文本 + mode: "?number", + // 弹幕模式: 0: 滚动,1: 顶部,2: 底部 + color: "?string", + // 弹幕颜色 + time: "?number", + // 弹幕时间 + border: "?boolean", + // 弹幕是否有边框 + style: "?object" + // 弹幕额外样式 + }); + if (!danmu.text.trim()) return this; + if (danmu.time) { + danmu.time = clamp(danmu.time, 0, Infinity); + } else { + danmu.time = this.art.currentTime + 0.5; + } + if (danmu.mode === void 0) { + danmu.mode = this.option.mode; + } + if (danmu.style === void 0) { + danmu.style = {}; + } + if (danmu.color === void 0) { + danmu.color = this.option.color; + } + if (![0, 1, 2].includes(danmu.mode)) + return this; + if (!this.option.filter(danmu)) + return this; + const item = { + ...danmu, + $state: "wait", + // 弹幕初始状态 + $index: this.index++, + // 弹幕索引 + $ref: null, + // 弹幕 DOM 节点 + $restTime: 0, + // 弹幕剩余时间 + $lastStartTime: 0 + // 弹幕上次开始时间 + }; + this.setState(item, "wait"); + this.queue.push(item); + return this; } // 动态配置 config(option, isInit = false) { - const { clamp } = this.utils; - const { $controlsCenter } = this.art.template; - // 判断配置项是否有变化 - const changed = Object.keys(option).some((key)=>JSON.stringify(this.option[key]) !== JSON.stringify(option[key])); - // 没有变化则直接返回 - if (!changed && !isInit) return this; - // 更新配置项 - this.option = Object.assign({}, Danmuku.option, this.option, option); - this.validator(this.option, Danmuku.scheme); - this.option.mode = clamp(this.option.mode, 0, 2); - this.option.speed = clamp(this.option.speed, 1, 10); - this.option.opacity = clamp(this.option.opacity, 0, 1); - this.option.lockTime = clamp(this.option.lockTime, 1, 60); - this.option.maxLength = clamp(this.option.maxLength, 1, 1000); - this.option.mount = this.option.mount || $controlsCenter; - // 动态配置有字体大小,需要重新渲染 - if (option.fontSize) this.reset(); - // 通过配置项控制弹幕的显示和隐藏 - if (this.option.visible) this.show(); - else this.hide(); - this.art.emit('artplayerPluginDanmuku:config', this.option); + const { clamp } = this.utils; + const { $controlsCenter } = this.art.template; + const changed = Object.keys(option).some( + (key) => JSON.stringify(this.option[key]) !== JSON.stringify(option[key]) + ); + if (!changed && !isInit) return this; + this.option = Object.assign({}, Danmuku.option, this.option, option); + this.validator(this.option, Danmuku.scheme); + this.option.mode = clamp(this.option.mode, 0, 2); + this.option.speed = clamp(this.option.speed, 1, 10); + this.option.opacity = clamp(this.option.opacity, 0, 1); + this.option.lockTime = clamp(this.option.lockTime, 1, 60); + this.option.maxLength = clamp(this.option.maxLength, 1, 1e3); + this.option.mount = this.option.mount || $controlsCenter; + if (option.fontSize) { + this.reset(); + } + if (this.option.visible) { + this.show(); + } else { + this.hide(); + } + this.art.emit("artplayerPluginDanmuku:config", this.option); + return this; } // 计算DOM的left值,受到旋屏影响 getLeft($ref) { - const rect = $ref.getBoundingClientRect(); - return this.isRotate ? rect.top : rect.left; + const rect = $ref.getBoundingClientRect(); + return this.isRotate ? rect.top : rect.left; } // 复杂运算交给 Web Worker 处理 postMessage(message = {}) { - return new Promise((resolve)=>{ - message.id = Date.now() // 生成唯一标识 - ; - this.worker.postMessage(message); - this.worker.onmessage = (event)=>{ - const { data } = event; - // 判断是否是当前的消息 - if (data.id === message.id) resolve(data); - }; - }); + return new Promise((resolve) => { + message.id = Date.now(); + this.worker.postMessage(message); + this.worker.onmessage = (event) => { + const { data } = event; + if (data.id === message.id) { + resolve(data); + } + }; + }); } // 根据状态获取弹幕 filter(state, callback) { - const danmus = this.states[state] || []; - for(let index = 0; index < danmus.length; index++)callback(danmus[index]); - return danmus; + const danmus = this.states[state] || []; + for (let index = 0; index < danmus.length; index++) { + callback(danmus[index]); + } + return danmus; } // 设置弹幕状态 setState(danmu, state) { - // 从原状态池中删除 - this.states[danmu.$state] = this.states[danmu.$state].filter((item)=>item !== danmu); - // 设置新状态 - danmu.$state = state; - // 设置DOM节点状态 - if (danmu.$ref) danmu.$ref.dataset.state = state; - // 添加到新状态池中 - this.states[state].push(danmu); + this.states[danmu.$state] = this.states[danmu.$state].filter((item) => item !== danmu); + danmu.$state = state; + if (danmu.$ref) { + danmu.$ref.dataset.state = state; + } + this.states[state].push(danmu); } // 重置弹幕到wait状态,回收弹幕DOM节点 makeWait(danmu) { - this.setState(danmu, 'wait'); - if (danmu.$ref) { - danmu.$ref.style.cssText = Danmuku.cssText; - danmu.$ref.style.visibility = 'hidden'; - danmu.$ref.style.marginLeft = '0px'; - danmu.$ref.style.transform = 'translateX(0px)'; - danmu.$ref.style.transition = 'transform 0s linear 0s'; - this.$refs.push(danmu.$ref); - danmu.$ref = null; - } + this.setState(danmu, "wait"); + if (danmu.$ref) { + danmu.$ref.style.cssText = Danmuku.cssText; + danmu.$ref.style.visibility = "hidden"; + danmu.$ref.style.marginLeft = "0px"; + danmu.$ref.style.transform = "translateX(0px)"; + danmu.$ref.style.transition = "transform 0s linear 0s"; + this.$refs.push(danmu.$ref); + danmu.$ref = null; + } } // 实时更新弹幕 update() { - const { setStyles } = this.utils; - this.timer = window.requestAnimationFrame(async ()=>{ - if (this.art.playing && !this.isHide) { - // 实时计算弹幕的剩余显示时间 - this.filter('emit', (danmu)=>{ - const emitTime = (Date.now() - danmu.$lastStartTime) / 1000; - danmu.$restTime -= emitTime; - danmu.$lastStartTime = Date.now(); - // 超过时间即重置弹幕 - if (danmu.$restTime <= 0) this.makeWait(danmu); - }); - // 获取准备好发送的弹幕,可能包含ready和wait状态的弹幕 - const readys = this.readys; - for(let index = 0; index < readys.length; index++){ - const danmu = readys[index]; - // 弹幕发送前的过滤器 - const state = await this.option.beforeVisible(danmu); - if (state) { - const { clientWidth, clientHeight } = this.$player; - danmu.$ref = this.$ref // 获取弹幕DOM节点 - ; - danmu.$ref.textContent = danmu.text // 设置弹幕文本 - ; - // 提前添加到弹幕层中,用于计算top值 - this.$danmuku.appendChild(danmu.$ref); - // 设置初始弹幕样式 - danmu.$ref.style.opacity = this.option.opacity; - danmu.$ref.style.fontSize = `${this.fontSize}px`; - danmu.$ref.style.color = danmu.color; - danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : null; - danmu.$ref.style.backgroundColor = danmu.border ? 'rgb(0 0 0 / 50%)' : null; - // 设置单独弹幕样式 - setStyles(danmu.$ref, danmu.style); - // 记录弹幕时间戳 - danmu.$lastStartTime = Date.now(); - // 计算弹幕剩余时间 - danmu.$restTime = this.speed; - // 计算弹幕滚动的距离 - const distance = clientWidth + danmu.$ref.clientWidth; - // 计算弹幕的top值 - const { result: top } = await this.postMessage({ - type: 'getDanmuTop', - target: { - mode: danmu.mode, - height: danmu.$ref.clientHeight, - speed: distance / danmu.$restTime - }, - visibles: this.visibles, - antiOverlap: this.option.antiOverlap, - clientWidth, - clientHeight, - marginBottom: this.marginBottom, - marginTop: this.marginTop - }); - if (danmu.$ref) { - if (!this.isStop && top !== undefined) { - this.setState(danmu, 'emit') // 转换为emit状态 - ; - danmu.$ref.style.top = `${top}px`; - danmu.$ref.style.visibility = 'visible'; - danmu.$ref.dataset.mode = danmu.mode // CSS控制模式的显示和隐藏 - ; - danmu.$ref.dataset.id = danmu.id || '' // 用于悬停的唯一标识 - ; - switch(danmu.mode){ - // 滚动的弹幕 - case 0: - danmu.$ref.style.left = `${clientWidth}px`; - danmu.$ref.style.marginLeft = '0px'; - danmu.$ref.style.transform = `translateX(${-distance}px)`; - danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; - break; - case 1: - // falls through - case 2: - danmu.$ref.style.left = '50%'; - danmu.$ref.style.marginLeft = `-${danmu.$ref.clientWidth / 2}px`; - break; - default: - break; - } - this.art.emit('artplayerPluginDanmuku:visible', danmu); - } else { - // 假如弹幕已经停止或者没有 top 值,则重置弹幕为ready状态,回收弹幕DOM节点,等待下次发送 - this.setState(danmu, 'ready'); - this.$refs.push(danmu.$ref); - danmu.$ref = null; - } - } - } - } + const { setStyles } = this.utils; + this.timer = window.requestAnimationFrame(async () => { + if (this.art.playing && !this.isHide) { + this.filter("emit", (danmu) => { + const emitTime = (Date.now() - danmu.$lastStartTime) / 1e3; + danmu.$restTime -= emitTime; + danmu.$lastStartTime = Date.now(); + if (danmu.$restTime <= 0) { + this.makeWait(danmu); } - // 递归调用 - if (!this.isStop) this.update(); - }); - return this; + }); + const readys = this.readys; + for (let index = 0; index < readys.length; index++) { + const danmu = readys[index]; + const state = await this.option.beforeVisible(danmu); + if (state) { + const { clientWidth, clientHeight } = this.$player; + danmu.$ref = this.$ref; + danmu.$ref.textContent = danmu.text; + this.$danmuku.appendChild(danmu.$ref); + danmu.$ref.style.opacity = this.option.opacity; + danmu.$ref.style.fontSize = `${this.fontSize}px`; + danmu.$ref.style.color = danmu.color; + danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : null; + danmu.$ref.style.backgroundColor = danmu.border ? "rgb(0 0 0 / 50%)" : null; + setStyles(danmu.$ref, danmu.style); + danmu.$lastStartTime = Date.now(); + danmu.$restTime = this.speed; + const distance = clientWidth + danmu.$ref.clientWidth; + const { result: top } = await this.postMessage({ + type: "getDanmuTop", + target: { + mode: danmu.mode, + height: danmu.$ref.clientHeight, + speed: distance / danmu.$restTime + }, + // 当前弹幕信息 + visibles: this.visibles, + // 可见的弹幕的数据 + antiOverlap: this.option.antiOverlap, + clientWidth, + clientHeight, + marginBottom: this.marginBottom, + marginTop: this.marginTop + }); + if (danmu.$ref) { + if (!this.isStop && top !== void 0) { + this.setState(danmu, "emit"); + danmu.$ref.style.top = `${top}px`; + danmu.$ref.style.visibility = "visible"; + danmu.$ref.dataset.mode = danmu.mode; + danmu.$ref.dataset.id = danmu.id || ""; + switch (danmu.mode) { + // 滚动的弹幕 + case 0: { + danmu.$ref.style.left = `${clientWidth}px`; + danmu.$ref.style.marginLeft = "0px"; + danmu.$ref.style.transform = `translateX(${-distance}px)`; + danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; + break; + } + case 1: + // falls through + case 2: + danmu.$ref.style.left = "50%"; + danmu.$ref.style.marginLeft = `-${danmu.$ref.clientWidth / 2}px`; + break; + } + this.art.emit("artplayerPluginDanmuku:visible", danmu); + } else { + this.setState(danmu, "ready"); + this.$refs.push(danmu.$ref); + danmu.$ref = null; + } + } + } + } + } + if (!this.isStop) { + this.update(); + } + }); + return this; } // 重置正在显示的弹幕: stop/emit 状态的弹幕 resize() { - const { clientWidth } = this.$player; - this.filter('stop', (danmu)=>{ - switch(danmu.mode){ - // 滚动的弹幕 - case 0: - danmu.$ref.style.left = `${clientWidth}px`; - break; - default: - break; - } - }); - this.filter('emit', (danmu)=>{ - danmu.$lastStartTime = Date.now(); - switch(danmu.mode){ - // 滚动的弹幕 - case 0: - { - const distance = clientWidth + danmu.$ref.clientWidth; - danmu.$ref.style.left = `${clientWidth}px`; - danmu.$ref.style.transform = `translateX(${-distance}px)`; - danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; - break; - } - default: - break; - } - }); + const { clientWidth } = this.$player; + this.filter("stop", (danmu) => { + switch (danmu.mode) { + // 滚动的弹幕 + case 0: + danmu.$ref.style.left = `${clientWidth}px`; + break; + } + }); + this.filter("emit", (danmu) => { + danmu.$lastStartTime = Date.now(); + switch (danmu.mode) { + // 滚动的弹幕 + case 0: { + const distance = clientWidth + danmu.$ref.clientWidth; + danmu.$ref.style.left = `${clientWidth}px`; + danmu.$ref.style.transform = `translateX(${-distance}px)`; + danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; + break; + } + } + }); } // 继续弹幕 continue() { - const { clientWidth } = this.$player; - this.filter('stop', (danmu)=>{ - this.setState(danmu, 'emit') // 转换为emit状态 - ; - danmu.$lastStartTime = Date.now(); - switch(danmu.mode){ - // 继续滚动的弹幕 - case 0: - { - const distance = clientWidth + danmu.$ref.clientWidth; - danmu.$ref.style.transform = `translateX(${-distance}px)`; - danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; - break; - } - default: - break; - } - }); - return this; + const { clientWidth } = this.$player; + this.filter("stop", (danmu) => { + this.setState(danmu, "emit"); + danmu.$lastStartTime = Date.now(); + switch (danmu.mode) { + // 继续滚动的弹幕 + case 0: { + const distance = clientWidth + danmu.$ref.clientWidth; + danmu.$ref.style.transform = `translateX(${-distance}px)`; + danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; + break; + } + } + }); + return this; } // 暂停弹幕 suspend() { - const { clientWidth } = this.$player; - this.filter('emit', (danmu)=>{ - this.setState(danmu, 'stop') // 转换为stop状态 - ; - switch(danmu.mode){ - // 停止滚动的弹幕 - case 0: - { - const translateX = clientWidth - (this.getLeft(danmu.$ref) - this.getLeft(this.$player)); - danmu.$ref.style.transform = `translateX(${-translateX}px)`; - danmu.$ref.style.transition = 'transform 0s linear 0s'; - break; - } - default: - break; - } - }); - return this; + const { clientWidth } = this.$player; + this.filter("emit", (danmu) => { + this.setState(danmu, "stop"); + switch (danmu.mode) { + // 停止滚动的弹幕 + case 0: { + const translateX = clientWidth - (this.getLeft(danmu.$ref) - this.getLeft(this.$player)); + danmu.$ref.style.transform = `translateX(${-translateX}px)`; + danmu.$ref.style.transition = "transform 0s linear 0s"; + break; + } + } + }); + return this; } stop() { - this.isStop = true; - this.suspend(); - window.cancelAnimationFrame(this.timer); - this.art.emit('artplayerPluginDanmuku:stop'); - return this; + this.isStop = true; + this.suspend(); + window.cancelAnimationFrame(this.timer); + this.art.emit("artplayerPluginDanmuku:stop"); + return this; } start() { - this.isStop = false; - this.continue(); - this.update(); - this.art.emit('artplayerPluginDanmuku:start'); - return this; + this.isStop = false; + this.continue(); + this.update(); + this.art.emit("artplayerPluginDanmuku:start"); + return this; } reset() { - this.queue.forEach((danmu)=>this.makeWait(danmu)); - this.art.emit('artplayerPluginDanmuku:reset'); - return this; + this.queue.forEach((danmu) => this.makeWait(danmu)); + this.art.emit("artplayerPluginDanmuku:reset"); + return this; } show() { - this.isHide = false; - this.$danmuku.style.opacity = 1; - this.option.visible = true; - this.art.emit('artplayerPluginDanmuku:show'); - return this; + this.isHide = false; + this.$danmuku.style.opacity = 1; + this.option.visible = true; + this.art.emit("artplayerPluginDanmuku:show"); + return this; } hide() { - this.isHide = true; - this.$danmuku.style.opacity = 0; - this.option.visible = false; - this.art.emit('artplayerPluginDanmuku:hide'); - return this; + this.isHide = true; + this.$danmuku.style.opacity = 0; + this.option.visible = false; + this.art.emit("artplayerPluginDanmuku:hide"); + return this; } destroy() { - this.stop(); - this.worker.terminate(); - this.art.off('video:play', this.start); - this.art.off('video:playing', this.start); - this.art.off('video:pause', this.stop); - this.art.off('video:waiting', this.stop); - this.art.off('resize', this.reset); - this.art.off('destroy', this.destroy); - this.art.emit('artplayerPluginDanmuku:destroy'); + this.stop(); + this.worker.terminate(); + this.art.off("video:play", this.start); + this.art.off("video:playing", this.start); + this.art.off("video:pause", this.stop); + this.art.off("video:waiting", this.stop); + this.art.off("resize", this.reset); + this.art.off("destroy", this.destroy); + this.art.emit("artplayerPluginDanmuku:destroy"); } -} -exports.default = Danmuku; - -},{"bundle-text:./worker":"2Spvp","./bilibili":"aIvhn","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"2Spvp":[function(require,module,exports,__globalThis) { -module.exports = "// modules are defined as an array\n// [ module function, map of requires ]\n//\n// map of requires is short require name -> numeric require\n//\n// anything defined in a previous bundle is accessed via the\n// orig method which is the require for previous bundles\n\n(function (\n modules,\n entry,\n mainEntry,\n parcelRequireName,\n externals,\n distDir,\n publicUrl,\n devServer\n) {\n /* eslint-disable no-undef */\n var globalObject =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : {};\n /* eslint-enable no-undef */\n\n // Save the require from previous bundle to this closure if any\n var previousRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n\n var importMap = previousRequire.i || {};\n var cache = previousRequire.cache || {};\n // Do not use `require` to prevent Webpack from trying to bundle this call\n var nodeRequire =\n typeof module !== 'undefined' &&\n typeof module.require === 'function' &&\n module.require.bind(module);\n\n function newRequire(name, jumped) {\n if (!cache[name]) {\n if (!modules[name]) {\n if (externals[name]) {\n return externals[name];\n }\n // if we cannot find the module within our internal map or\n // cache jump to the current global require ie. the last bundle\n // that was added to the page.\n var currentRequire =\n typeof globalObject[parcelRequireName] === 'function' &&\n globalObject[parcelRequireName];\n if (!jumped && currentRequire) {\n return currentRequire(name, true);\n }\n\n // If there are other bundles on this page the require from the\n // previous one is saved to 'previousRequire'. Repeat this as\n // many times as there are bundles until the module is found or\n // we exhaust the require chain.\n if (previousRequire) {\n return previousRequire(name, true);\n }\n\n // Try the node require function if it exists.\n if (nodeRequire && typeof name === 'string') {\n return nodeRequire(name);\n }\n\n var err = new Error(\"Cannot find module '\" + name + \"'\");\n err.code = 'MODULE_NOT_FOUND';\n throw err;\n }\n\n localRequire.resolve = resolve;\n localRequire.cache = {};\n\n var module = (cache[name] = new newRequire.Module(name));\n\n modules[name][0].call(\n module.exports,\n localRequire,\n module,\n module.exports,\n globalObject\n );\n }\n\n return cache[name].exports;\n\n function localRequire(x) {\n var res = localRequire.resolve(x);\n if (res === false) {\n return {};\n }\n // Synthesize a module to follow re-exports.\n if (Array.isArray(res)) {\n var m = {__esModule: true};\n res.forEach(function (v) {\n var key = v[0];\n var id = v[1];\n var exp = v[2] || v[0];\n var x = newRequire(id);\n if (key === '*') {\n Object.keys(x).forEach(function (key) {\n if (\n key === 'default' ||\n key === '__esModule' ||\n Object.prototype.hasOwnProperty.call(m, key)\n ) {\n return;\n }\n\n Object.defineProperty(m, key, {\n enumerable: true,\n get: function () {\n return x[key];\n },\n });\n });\n } else if (exp === '*') {\n Object.defineProperty(m, key, {\n enumerable: true,\n value: x,\n });\n } else {\n Object.defineProperty(m, key, {\n enumerable: true,\n get: function () {\n if (exp === 'default') {\n return x.__esModule ? x.default : x;\n }\n return x[exp];\n },\n });\n }\n });\n return m;\n }\n return newRequire(res);\n }\n\n function resolve(x) {\n var id = modules[name][1][x];\n return id != null ? id : x;\n }\n }\n\n function Module(moduleName) {\n this.id = moduleName;\n this.bundle = newRequire;\n this.require = nodeRequire;\n this.exports = {};\n }\n\n newRequire.isParcelRequire = true;\n newRequire.Module = Module;\n newRequire.modules = modules;\n newRequire.cache = cache;\n newRequire.parent = previousRequire;\n newRequire.distDir = distDir;\n newRequire.publicUrl = publicUrl;\n newRequire.devServer = devServer;\n newRequire.i = importMap;\n newRequire.register = function (id, exports) {\n modules[id] = [\n function (require, module) {\n module.exports = exports;\n },\n {},\n ];\n };\n\n // Only insert newRequire.load when it is actually used.\n // The code in this file is linted against ES5, so dynamic import is not allowed.\n // INSERT_LOAD_HERE\n\n Object.defineProperty(newRequire, 'root', {\n get: function () {\n return globalObject[parcelRequireName];\n },\n });\n\n globalObject[parcelRequireName] = newRequire;\n\n for (var i = 0; i < entry.length; i++) {\n newRequire(entry[i]);\n }\n\n if (mainEntry) {\n // Expose entry point to Node, AMD or browser globals\n // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js\n var mainExports = newRequire(mainEntry);\n\n // CommonJS\n if (typeof exports === 'object' && typeof module !== 'undefined') {\n module.exports = mainExports;\n\n // RequireJS\n } else if (typeof define === 'function' && define.amd) {\n define(function () {\n return mainExports;\n });\n }\n }\n})({\"02up6\":[function(require,module,exports,__globalThis) {\nfunction getDanmuTop({ target, visibles, clientWidth, clientHeight, marginBottom, marginTop, antiOverlap }) {\n // 弹幕最大高度\n const maxTop = clientHeight - marginBottom;\n // 过滤同模式的弹幕,即每种模式各不影响\n const danmus = visibles.filter((item)=>item.mode === target.mode && item.top <= maxTop).sort((prev, next)=>prev.top - next.top);\n // 如果没有同模式的弹幕,直接返回\n if (danmus.length === 0) {\n if (target.mode === 2) return maxTop - target.height;\n else return marginTop;\n }\n // 上下各加一个虚拟弹幕,方便计算\n danmus.unshift({\n type: 'top',\n top: 0,\n left: 0,\n right: 0,\n height: marginTop,\n width: clientWidth,\n speed: 0,\n distance: clientWidth\n });\n danmus.push({\n type: 'bottom',\n top: maxTop,\n left: 0,\n right: 0,\n height: marginBottom,\n width: clientWidth,\n speed: 0,\n distance: clientWidth\n });\n // 查找是否有多余的缝隙足以容纳当前弹幕\n if (target.mode === 2) // 倒序查找\n for(let index = danmus.length - 2; index >= 0; index -= 1){\n const item = danmus[index];\n const prev = danmus[index + 1];\n const itemBottom = item.top + item.height;\n const diff = prev.top - itemBottom;\n if (diff >= target.height) return prev.top - target.height;\n }\n else // 顺序查找\n for(let index = 1; index < danmus.length; index += 1){\n const item = danmus[index];\n const prev = danmus[index - 1];\n const prevBottom = prev.top + prev.height;\n const diff = item.top - prevBottom;\n if (diff >= target.height) return prevBottom;\n }\n const topMap = [];\n for(let index = 1; index < danmus.length - 1; index += 1){\n const item = danmus[index];\n if (topMap.length) {\n const last = topMap[topMap.length - 1];\n if (last[0].top === item.top) last.push(item);\n else topMap.push([\n item\n ]);\n } else topMap.push([\n item\n ]);\n }\n if (antiOverlap) switch(target.mode){\n case 0:\n {\n const result = topMap.find((list)=>{\n return list.every((danmu)=>{\n if (clientWidth < danmu.distance) return false;\n if (target.speed < danmu.speed) return true;\n const overlapTime = danmu.right / (target.speed - danmu.speed);\n if (overlapTime > danmu.time) return true;\n return false;\n });\n });\n return result && result[0] ? result[0].top : undefined;\n }\n // 静止弹幕没有重叠问题\n case 1:\n case 2:\n return undefined;\n default:\n break;\n }\n else {\n switch(target.mode){\n case 0:\n topMap.sort((prev, next)=>{\n const nextMinRight = Math.min(...next.map((item)=>item.right));\n const prevMinRight = Math.min(...prev.map((item)=>item.right));\n return nextMinRight * next.length - prevMinRight * prev.length;\n });\n break;\n case 1:\n case 2:\n topMap.sort((prev, next)=>{\n const nextMaxWidth = Math.max(...next.map((item)=>item.width));\n const prevMaxWidth = Math.max(...prev.map((item)=>item.width));\n return prevMaxWidth * prev.length - nextMaxWidth * next.length;\n });\n break;\n default:\n break;\n }\n return topMap[0][0].top;\n }\n}\nonmessage = (event)=>{\n const { data } = event;\n if (!data.id || !data.type) return;\n const fns = {\n getDanmuTop\n };\n const fn = fns[data.type];\n const result = fn(data);\n globalThis.postMessage({\n result,\n id: data.id\n });\n};\n\n},{}]},[\"02up6\"], \"02up6\", \"parcelRequire4dc0\", {})\n\n"; - -},{}],"aIvhn":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "bilibiliDanmuParseFromUrl", ()=>bilibiliDanmuParseFromUrl); -function getMode(key) { - switch(key){ - case 1: - case 2: - case 3: - return 0; - case 4: - return 2; - case 5: - return 1; - default: - return 0; - } -} -function bilibiliDanmuParseFromXml(xmlString) { - if (typeof xmlString !== 'string') return []; - const reg = /]*?p="(?

[^"]+)"[^>]*>(?.*?)<\/d>/gs; - const matches = xmlString.matchAll(reg); - return Array.from(matches).map((match)=>{ - const attr = match.groups.p.split(','); - if (attr.length >= 8) { - const text = match.groups.text.trim().replaceAll('"', '"').replaceAll(''', '\'').replaceAll('<', '<').replaceAll('>', '>').replaceAll('&', '&'); - return { - text, - time: Number(attr[0]), - mode: getMode(Number(attr[1])), - fontSize: Number(attr[2]), - color: `#${Number(attr[3]).toString(16)}`, - timestamp: Number(attr[4]), - pool: Number(attr[5]), - userID: attr[6], - rowID: Number(attr[7]) - }; - } else return null; - }).filter(Boolean); -} -function onmessage({ data }) { - const { xml, id } = data; - if (!id || !xml) return; - const danmus = bilibiliDanmuParseFromXml(xml); - globalThis.postMessage({ - danmus, - id - }); -} -function createWorker() { - const workerText = ` - ${getMode.toString()} - ${bilibiliDanmuParseFromXml.toString()} - onmessage = ${onmessage.toString()} - `; - const blob = new Blob([ - workerText - ], { - type: 'application/javascript' - }); - return new Worker(URL.createObjectURL(blob)); -} -function bilibiliDanmuParseFromUrl(url) { - // eslint-disable-next-line no-async-promise-executor - return new Promise(async (resolve)=>{ - const res = await fetch(url); - const xml = await res.text(); - try { - const worker = createWorker(); - worker.onmessage = (event)=>{ - const { danmus, id } = event.data; - if (!id || !danmus) return; - resolve(danmus); - worker.terminate(); - }; - worker.postMessage({ - xml, - id: Date.now() - }); - } catch (error) { - console.error('Error parsing Bilibili Danmu:', error); - const danmus = bilibiliDanmuParseFromXml(xml); - resolve(danmus); - } - }); -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"8oCsH":[function(require,module,exports,__globalThis) { -exports.interopDefault = function(a) { - return a && a.__esModule ? a : { - default: a - }; -}; -exports.defineInteropFlag = function(a) { - Object.defineProperty(a, '__esModule', { - value: true - }); -}; -exports.exportAll = function(source, dest) { - Object.keys(source).forEach(function(key) { - if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) return; - Object.defineProperty(dest, key, { - enumerable: true, - get: function() { - return source[key]; - } - }); - }); - return dest; -}; -exports.export = function(dest, destName, get) { - Object.defineProperty(dest, destName, { - enumerable: true, - get: get - }); -}; - -},{}],"2G7iS":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>heatmap); -const lib = { - map (value, inMin, inMax, outMin, outMax) { - return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin; + } + const lib = { + map(value, inMin, inMax, outMin, outMax) { + return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin; }, - range (start, end, tick) { - const s = Math.round(start / tick) * tick; - return Array.from({ - length: Math.floor((end - start) / tick) - }, (v, k)=>{ - return k * tick + s; - }); + range(start, end, tick) { + const s = Math.round(start / tick) * tick; + return Array.from( + { + length: Math.floor((end - start) / tick) + }, + (v, k) => { + return k * tick + s; + } + ); } -}; -function line(pointA, pointB) { + }; + function line(pointA, pointB) { const lengthX = pointB[0] - pointA[0]; const lengthY = pointB[1] - pointA[1]; return { - length: Math.sqrt(lengthX ** 2 + lengthY ** 2), - angle: Math.atan2(lengthY, lengthX) + length: Math.sqrt(lengthX ** 2 + lengthY ** 2), + angle: Math.atan2(lengthY, lengthX) }; -} -function heatmap(art, danmuku, option) { + } + function heatmap(art, danmuku, option) { const { query } = art.constructor.utils; art.controls.add({ - name: 'heatmap', - position: 'top', - html: '', - style: { - position: 'absolute', - top: '-100px', - left: '0px', - right: '0px', - height: '100px', - width: '100%', - pointerEvents: 'none' - }, - mounted ($heatmap) { - let $start = null; - let $stop = null; - function update(arg = []) { - $start = null; - $stop = null; - $heatmap.innerHTML = ''; - if (!art.duration || art.option.isLive) return; - const svg = { - w: $heatmap.offsetWidth, - h: $heatmap.offsetHeight - }; - const options = { - xMin: 0, - xMax: svg.w, - yMin: 0, - yMax: 128, - scale: 0.25, - opacity: 0.2, - minHeight: Math.floor(svg.h * 0.05), - sampling: Math.floor(svg.w / 100), - smoothing: 0.2, - flattening: 0.2 - }; - if (typeof option === 'object') Object.assign(options, option); - let points = []; - if (Array.isArray(arg) && arg.length) points = [ - ...arg - ]; - else { - const gap = art.duration / svg.w; - for(let x = 0; x <= svg.w; x += options.sampling){ - const y = danmuku.queue.filter(({ time })=>time > x * gap && time <= (x + options.sampling) * gap).length; - points.push([ - x, - y - ]); - } - } - if (points.length === 0) return; - const lastPoint = points[points.length - 1]; - const lastX = lastPoint[0]; - const lastY = lastPoint[1]; - if (lastX !== svg.w) points.push([ - svg.w, - lastY - ]); - const yPoints = points.map((point)=>point[1]); - const yMin = Math.min(...yPoints); - const yMax = Math.max(...yPoints); - const yMid = (yMin + yMax) / 2; - for(let i = 0; i < points.length; i++){ - const point = points[i]; - const y = point[1]; - point[1] = y * (y > yMid ? 1 + options.scale : 1 - options.scale) + options.minHeight; - } - const controlPoint = (current, previous, next, reverse)=>{ - const p = previous || current; - const n = next || current; - const o = line(p, n); - const flat = lib.map(Math.cos(o.angle) * options.flattening, 0, 1, 1, 0); - const angle = o.angle * flat + (reverse ? Math.PI : 0); - const length = o.length * options.smoothing; - const x = current[0] + Math.cos(angle) * length; - const y = current[1] + Math.sin(angle) * length; - return [ - x, - y - ]; - }; - const bezierCommand = (point, i, a)=>{ - const cps = controlPoint(a[i - 1], a[i - 2], point); - const cpe = controlPoint(point, a[i - 1], a[i + 1], true); - const close = i === a.length - 1 ? ' z' : ''; - return `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}${close}`; - }; - const pointsPositions = points.map((e)=>{ - const x = lib.map(e[0], options.xMin, options.xMax, 0, svg.w); - const y = lib.map(e[1], options.yMin, options.yMax, svg.h, 0); - return [ - x, - y - ]; - }); - const pathD = pointsPositions.reduce((acc, e, i, a)=>i === 0 ? `M ${a[a.length - 1][0]},${svg.h} L ${e[0]},${svg.h} L ${e[0]},${e[1]}` : `${acc} ${bezierCommand(e, i, a)}`, ''); - $heatmap.innerHTML = ` + name: "heatmap", + position: "top", + html: "", + style: { + position: "absolute", + top: "-100px", + left: "0px", + right: "0px", + height: "100px", + width: "100%", + pointerEvents: "none" + }, + mounted($heatmap) { + let $start = null; + let $stop = null; + function update(arg = []) { + $start = null; + $stop = null; + $heatmap.innerHTML = ""; + if (!art.duration || art.option.isLive) + return; + const svg = { + w: $heatmap.offsetWidth, + h: $heatmap.offsetHeight + }; + const options = { + xMin: 0, + xMax: svg.w, + yMin: 0, + yMax: 128, + scale: 0.25, + opacity: 0.2, + minHeight: Math.floor(svg.h * 0.05), + sampling: Math.floor(svg.w / 100), + smoothing: 0.2, + flattening: 0.2 + }; + if (typeof option === "object") { + Object.assign(options, option); + } + let points = []; + if (Array.isArray(arg) && arg.length) { + points = [...arg]; + } else { + const gap = art.duration / svg.w; + for (let x = 0; x <= svg.w; x += options.sampling) { + const y = danmuku.queue.filter( + ({ time }) => time > x * gap && time <= (x + options.sampling) * gap + ).length; + points.push([x, y]); + } + } + if (points.length === 0) + return; + const lastPoint = points[points.length - 1]; + const lastX = lastPoint[0]; + const lastY = lastPoint[1]; + if (lastX !== svg.w) { + points.push([svg.w, lastY]); + } + const yPoints = points.map((point) => point[1]); + const yMin = Math.min(...yPoints); + const yMax = Math.max(...yPoints); + const yMid = (yMin + yMax) / 2; + for (let i = 0; i < points.length; i++) { + const point = points[i]; + const y = point[1]; + point[1] = y * (y > yMid ? 1 + options.scale : 1 - options.scale) + options.minHeight; + } + const controlPoint = (current, previous, next, reverse) => { + const p = previous || current; + const n = next || current; + const o = line(p, n); + const flat = lib.map(Math.cos(o.angle) * options.flattening, 0, 1, 1, 0); + const angle = o.angle * flat + (reverse ? Math.PI : 0); + const length = o.length * options.smoothing; + const x = current[0] + Math.cos(angle) * length; + const y = current[1] + Math.sin(angle) * length; + return [x, y]; + }; + const bezierCommand = (point, i, a) => { + const cps = controlPoint(a[i - 1], a[i - 2], point); + const cpe = controlPoint(point, a[i - 1], a[i + 1], true); + const close = i === a.length - 1 ? " z" : ""; + return `C ${cps[0]},${cps[1]} ${cpe[0]},${cpe[1]} ${point[0]},${point[1]}${close}`; + }; + const pointsPositions = points.map((e) => { + const x = lib.map(e[0], options.xMin, options.xMax, 0, svg.w); + const y = lib.map(e[1], options.yMin, options.yMax, svg.h, 0); + return [x, y]; + }); + const pathD = pointsPositions.reduce( + (acc, e, i, a) => i === 0 ? `M ${a[a.length - 1][0]},${svg.h} L ${e[0]},${svg.h} L ${e[0]},${e[1]}` : `${acc} ${bezierCommand(e, i, a)}`, + "" + ); + $heatmap.innerHTML = ` @@ -1137,740 +830,736 @@ function heatmap(art, danmuku, option) { `; - $start = query('#heatmap-start', $heatmap); - $stop = query('#heatmap-stop', $heatmap); - $start.setAttribute('offset', `${art.played * 100}%`); - $stop.setAttribute('offset', `${art.played * 100}%`); - } - art.on('video:timeupdate', ()=>{ - if ($start && $stop) { - $start.setAttribute('offset', `${art.played * 100}%`); - $stop.setAttribute('offset', `${art.played * 100}%`); - } - }); - art.on('setBar', (type, percentage)=>{ - if ($start && $stop && type === 'played') { - $start.setAttribute('offset', `${percentage * 100}%`); - $stop.setAttribute('offset', `${percentage * 100}%`); - } - }); - art.on('ready', ()=>update()); - art.on('resize', ()=>update()); - art.on('artplayerPluginDanmuku:loaded', ()=>update()); - art.on('artplayerPluginDanmuku:points', (points)=>update(points)); + $start = query("#heatmap-start", $heatmap); + $stop = query("#heatmap-stop", $heatmap); + $start.setAttribute("offset", `${art.played * 100}%`); + $stop.setAttribute("offset", `${art.played * 100}%`); } + art.on("video:timeupdate", () => { + if ($start && $stop) { + $start.setAttribute("offset", `${art.played * 100}%`); + $stop.setAttribute("offset", `${art.played * 100}%`); + } + }); + art.on("setBar", (type, percentage) => { + if ($start && $stop && type === "played") { + $start.setAttribute("offset", `${percentage * 100}%`); + $stop.setAttribute("offset", `${percentage * 100}%`); + } + }); + art.on("ready", () => update()); + art.on("resize", () => update()); + art.on("artplayerPluginDanmuku:loaded", () => update()); + art.on("artplayerPluginDanmuku:points", (points) => update(points)); + } }); -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"3B2wj":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _checkOffSvg = require("bundle-text:./img/check_off.svg"); -var _checkOffSvgDefault = parcelHelpers.interopDefault(_checkOffSvg); -var _checkOnSvg = require("bundle-text:./img/check_on.svg"); -var _checkOnSvgDefault = parcelHelpers.interopDefault(_checkOnSvg); -var _configSvg = require("bundle-text:./img/config.svg"); -var _configSvgDefault = parcelHelpers.interopDefault(_configSvg); -var _mode0OffSvg = require("bundle-text:./img/mode_0_off.svg"); -var _mode0OffSvgDefault = parcelHelpers.interopDefault(_mode0OffSvg); -var _mode0OnSvg = require("bundle-text:./img/mode_0_on.svg"); -var _mode0OnSvgDefault = parcelHelpers.interopDefault(_mode0OnSvg); -var _mode1OffSvg = require("bundle-text:./img/mode_1_off.svg"); -var _mode1OffSvgDefault = parcelHelpers.interopDefault(_mode1OffSvg); -var _mode1OnSvg = require("bundle-text:./img/mode_1_on.svg"); -var _mode1OnSvgDefault = parcelHelpers.interopDefault(_mode1OnSvg); -var _mode2OffSvg = require("bundle-text:./img/mode_2_off.svg"); -var _mode2OffSvgDefault = parcelHelpers.interopDefault(_mode2OffSvg); -var _mode2OnSvg = require("bundle-text:./img/mode_2_on.svg"); -var _mode2OnSvgDefault = parcelHelpers.interopDefault(_mode2OnSvg); -var _offSvg = require("bundle-text:./img/off.svg"); -var _offSvgDefault = parcelHelpers.interopDefault(_offSvg); -var _onSvg = require("bundle-text:./img/on.svg"); -var _onSvgDefault = parcelHelpers.interopDefault(_onSvg); -var _styleSvg = require("bundle-text:./img/style.svg"); -var _styleSvgDefault = parcelHelpers.interopDefault(_styleSvg); -var _styleLess = require("bundle-text:./style.less"); -var _styleLessDefault = parcelHelpers.interopDefault(_styleLess); -class Setting { - constructor(art, danmuku){ - this.art = art; - this.danmuku = danmuku; - this.utils = art.constructor.utils; - const { setStyle } = this.utils; - const { $controlsCenter } = art.template; - setStyle($controlsCenter, 'display', 'flex'); - this.template = { - $controlsCenter, - $mount: $controlsCenter, - $danmuku: null, - $toggle: null, - $config: null, - $configPanel: null, - $configModes: null, - $style: null, - $stylePanel: null, - $styleModes: null, - $colors: null, - $opacitySlider: null, - $opacityValue: null, - $marginSlider: null, - $marginValue: null, - $fontSizeSlider: null, - $fontSizeValue: null, - $speedSlider: null, - $speedValue: null, - $input: null, - $send: null - }; - this.slider = { - opacity: null, - margin: null, - fontSize: null, - speed: null - }; - this.emitting = false; - this.isLock = false; - this.timer = null; - this.createTemplate(); - this.createSliders(); - this.createEvents(); - this.mount(this.option.mount); - art.on('resize', ()=>this.resize()); - art.on('fullscreen', (state)=>this.onFullscreen(state)); - art.on('fullscreenWeb', (state)=>this.onFullscreen(state)); - art.proxy(this.template.$config, 'mouseenter', ()=>{ - this.onMouseEnter({ - $control: this.template.$config, - $panel: this.template.$configPanel - }); + } + const $check_off = ''; + const $check_on = ''; + const $config = ''; + const $mode_0_off = ''; + const $mode_0_on = ''; + const $mode_1_off = ''; + const $mode_1_on = ''; + const $mode_2_off = ''; + const $mode_2_on = ''; + const $off = ''; + const $on = ''; + const $style = ''; + const style = ".artplayer-plugin-danmuku {\n display: flex;\n position: relative;\n z-index: 99;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n height: 32px;\n width: 100%;\n color: #fff;\n font-weight: 300;\n flex-shrink: 0;\n gap: 10px;\n}\n.artplayer-plugin-danmuku .apd-icon {\n cursor: pointer;\n opacity: 0.75;\n transition: all 0.2s ease;\n fill: #fff;\n}\n.artplayer-plugin-danmuku .apd-icon:hover {\n opacity: 1;\n}\n.artplayer-plugin-danmuku .apd-config {\n display: flex;\n position: relative;\n}\n.artplayer-plugin-danmuku .apd-config .apd-config-panel {\n position: absolute;\n bottom: 24px;\n left: 0;\n width: 320px;\n padding: 10px;\n opacity: 0;\n pointer-events: none;\n}\n.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner {\n width: 100%;\n border-radius: 3px;\n background-color: rgba(0, 0, 0, 0.85);\n padding: 10px;\n}\n.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel {\n opacity: 100;\n pointer-events: all;\n}\n.artplayer-plugin-danmuku .apd-config-mode,\n.artplayer-plugin-danmuku .apd-config-slider,\n.artplayer-plugin-danmuku .apd-config-other,\n.artplayer-plugin-danmuku .apd-style-mode {\n margin-bottom: 15px;\n}\n.artplayer-plugin-danmuku .apd-modes {\n display: flex;\n align-items: center;\n margin-top: 5px;\n gap: 20px;\n}\n.artplayer-plugin-danmuku .apd-modes .apd-mode {\n cursor: pointer;\n text-align: center;\n}\n.artplayer-plugin-danmuku .apd-modes .apd-mode:hover {\n color: #00a1d6;\n}\n.artplayer-plugin-danmuku .apd-config-slider {\n display: flex;\n align-items: center;\n gap: 12px;\n}\n.artplayer-plugin-danmuku .apd-config-slider .apd-value {\n width: 32px;\n text-align: right;\n}\n.artplayer-plugin-danmuku .apd-slider {\n position: relative;\n flex: 1;\n display: flex;\n height: 20px;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n}\n.artplayer-plugin-danmuku .apd-slider .apd-slider-line {\n position: relative;\n height: 2px;\n width: 100%;\n overflow: hidden;\n border-radius: 3px;\n background-color: rgba(255, 255, 255, 0.25);\n}\n.artplayer-plugin-danmuku .apd-slider .apd-slider-points {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: space-between;\n}\n.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point {\n width: 2px;\n height: 2px;\n border-radius: 50%;\n background-color: rgba(255, 255, 255, 0.5);\n}\n.artplayer-plugin-danmuku .apd-slider .apd-slider-progress {\n width: 0%;\n height: 100%;\n background-color: #00a1d6;\n}\n.artplayer-plugin-danmuku .apd-slider .apd-slider-dot {\n position: absolute;\n transform: translateX(-6px);\n left: 0%;\n width: 12px;\n height: 12px;\n border-radius: 50%;\n background-color: #00a1d6;\n}\n.artplayer-plugin-danmuku .apd-slider .apd-slider-steps {\n display: flex;\n align-items: center;\n justify-content: space-between;\n position: absolute;\n bottom: -12px;\n width: calc(100% + 32px);\n color: #777;\n}\n.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step {\n flex-shrink: 0;\n width: 36px;\n text-align: center;\n scale: 0.95;\n}\n.artplayer-plugin-danmuku .apd-config-other {\n display: flex;\n align-items: center;\n gap: 20px;\n}\n.artplayer-plugin-danmuku .apd-config-other .apd-check-off,\n.artplayer-plugin-danmuku .apd-config-other .apd-check-on {\n width: 16px;\n height: 16px;\n}\n.artplayer-plugin-danmuku .apd-config-other .apd-other {\n display: flex;\n align-items: center;\n cursor: pointer;\n gap: 2px;\n}\n.artplayer-plugin-danmuku .apd-config-other .apd-other:hover {\n color: #00a1d6;\n}\n.artplayer-plugin-danmuku .apd-emitter {\n display: flex;\n flex: 1;\n align-items: center;\n height: 100%;\n background-color: rgba(255, 255, 255, 0.25);\n border-radius: 5px;\n}\n.artplayer-plugin-danmuku .apd-style {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.artplayer-plugin-danmuku .apd-style .apd-style-panel {\n position: absolute;\n bottom: 24px;\n left: 0;\n width: 200px;\n padding: 10px;\n opacity: 0;\n pointer-events: none;\n}\n.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner {\n width: 100%;\n border-radius: 3px;\n background-color: rgba(0, 0, 0, 0.85);\n padding: 10px;\n}\n.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel {\n opacity: 100;\n pointer-events: all;\n}\n.artplayer-plugin-danmuku .apd-colors {\n display: flex;\n flex-wrap: wrap;\n margin-top: 5px;\n gap: 8px;\n}\n.artplayer-plugin-danmuku .apd-colors .apd-color {\n width: 16px;\n height: 16px;\n border-radius: 2px;\n cursor: pointer;\n}\n.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active {\n border: 1px solid black;\n box-shadow: 0 0 0 1px #fff;\n}\n.artplayer-plugin-danmuku .apd-input {\n outline: none;\n height: 100%;\n flex: 1;\n min-width: 0;\n width: auto;\n border: none;\n line-height: 1;\n color: #fff;\n background-color: transparent;\n}\n.artplayer-plugin-danmuku .apd-input::placeholder {\n color: rgba(255, 255, 255, 0.5);\n}\n.artplayer-plugin-danmuku .apd-send {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 60px;\n flex-shrink: 0;\n cursor: pointer;\n text-shadow: none;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n background-color: #00a1d6;\n}\n.artplayer-plugin-danmuku .apd-send.apd-lock {\n cursor: not-allowed;\n color: #666;\n background-color: #e7e7e7;\n}\n.art-controls-center .apd-emitter {\n width: 260px;\n flex: none;\n}\n.art-fullscreen .artplayer-plugin-danmuku,\n.art-fullscreen-web .artplayer-plugin-danmuku {\n height: 38px;\n gap: 16px;\n}\n.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon,\n.art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon,\n.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off,\n.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off,\n.art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on,\n.art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on {\n width: 28px;\n height: 28px;\n}\n.art-fullscreen .artplayer-plugin-danmuku .apd-emitter,\n.art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter {\n width: 400px;\n flex: none;\n}\n.art-video-player > .artplayer-plugin-danmuku {\n position: absolute;\n left: 0;\n right: 0;\n bottom: -40px;\n padding: 0 10px;\n}\n.art-video-player:has(> .artplayer-plugin-danmuku) {\n margin-bottom: 40px;\n}\n[data-danmuku-emitter='false'] .apd-emitter {\n display: none !important;\n}\n[data-danmuku-emitter='false'] .art-controls-center .artplayer-plugin-danmuku {\n justify-content: flex-end;\n gap: 18px;\n}\n[data-danmuku-emitter='false'].art-fullscreen .art-controls-center .artplayer-plugin-danmuku,\n[data-danmuku-emitter='false'].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku {\n gap: 24px;\n}\n[data-danmuku-theme='light'] > .artplayer-plugin-danmuku .apd-icon {\n fill: #333;\n}\n[data-danmuku-theme='light'] > .artplayer-plugin-danmuku .apd-emitter {\n background-color: #f1f2f3;\n}\n[data-danmuku-theme='light'] > .artplayer-plugin-danmuku .apd-input {\n color: #000;\n}\n[data-danmuku-theme='light'] > .artplayer-plugin-danmuku .apd-input::placeholder {\n color: rgba(0, 0, 0, 0.3);\n}\n[data-danmuku-visible='false'] .apd-toggle-off {\n display: block;\n}\n[data-danmuku-visible='false'] .apd-toggle-on {\n display: none;\n}\n[data-danmuku-visible='true'] .apd-toggle-off {\n display: none;\n}\n[data-danmuku-visible='true'] .apd-toggle-on {\n display: block;\n}\n[data-danmuku-anti-overlap='false'] .apd-anti-overlap .apd-check-on {\n display: none;\n}\n[data-danmuku-anti-overlap='false'] .apd-anti-overlap .apd-check-off {\n display: block;\n}\n[data-danmuku-anti-overlap='true'] .apd-anti-overlap .apd-check-on {\n display: block;\n}\n[data-danmuku-anti-overlap='true'] .apd-anti-overlap .apd-check-off {\n display: none;\n}\n[data-danmuku-sync-video='false'] .apd-sync-video .apd-check-on {\n display: none;\n}\n[data-danmuku-sync-video='false'] .apd-sync-video .apd-check-off {\n display: block;\n}\n[data-danmuku-sync-video='true'] .apd-sync-video .apd-check-on {\n display: block;\n}\n[data-danmuku-sync-video='true'] .apd-sync-video .apd-check-off {\n display: none;\n}\n[data-danmuku-mode0='false'] .apd-config-mode .apd-mode-0-off {\n display: block;\n}\n[data-danmuku-mode0='false'] .apd-config-mode .apd-mode-0-on {\n display: none;\n}\n[data-danmuku-mode0='false'] .art-danmuku [data-mode='0'] {\n opacity: 0 !important;\n}\n[data-danmuku-mode0='true'] .apd-config-mode .apd-mode-0-off {\n display: none;\n}\n[data-danmuku-mode0='true'] .apd-config-mode .apd-mode-0-on {\n display: block;\n}\n[data-danmuku-mode='0'] .apd-style-mode [data-mode='0'] {\n color: #00a1d6;\n}\n[data-danmuku-mode='0'] .apd-style-mode [data-mode='0'] path {\n fill: #00a1d6;\n}\n[data-danmuku-mode1='false'] .apd-config-mode .apd-mode-1-off {\n display: block;\n}\n[data-danmuku-mode1='false'] .apd-config-mode .apd-mode-1-on {\n display: none;\n}\n[data-danmuku-mode1='false'] .art-danmuku [data-mode='1'] {\n opacity: 0 !important;\n}\n[data-danmuku-mode1='true'] .apd-config-mode .apd-mode-1-off {\n display: none;\n}\n[data-danmuku-mode1='true'] .apd-config-mode .apd-mode-1-on {\n display: block;\n}\n[data-danmuku-mode='1'] .apd-style-mode [data-mode='1'] {\n color: #00a1d6;\n}\n[data-danmuku-mode='1'] .apd-style-mode [data-mode='1'] path {\n fill: #00a1d6;\n}\n[data-danmuku-mode2='false'] .apd-config-mode .apd-mode-2-off {\n display: block;\n}\n[data-danmuku-mode2='false'] .apd-config-mode .apd-mode-2-on {\n display: none;\n}\n[data-danmuku-mode2='false'] .art-danmuku [data-mode='2'] {\n opacity: 0 !important;\n}\n[data-danmuku-mode2='true'] .apd-config-mode .apd-mode-2-off {\n display: none;\n}\n[data-danmuku-mode2='true'] .apd-config-mode .apd-mode-2-on {\n display: block;\n}\n[data-danmuku-mode='2'] .apd-style-mode [data-mode='2'] {\n color: #00a1d6;\n}\n[data-danmuku-mode='2'] .apd-style-mode [data-mode='2'] path {\n fill: #00a1d6;\n}\n"; + class Setting { + constructor(art, danmuku) { + this.art = art; + this.danmuku = danmuku; + this.utils = art.constructor.utils; + const { setStyle } = this.utils; + const { $controlsCenter } = art.template; + setStyle($controlsCenter, "display", "flex"); + this.template = { + $controlsCenter, + $mount: $controlsCenter, + $danmuku: null, + $toggle: null, + $config: null, + $configPanel: null, + $configModes: null, + $style: null, + $stylePanel: null, + $styleModes: null, + $colors: null, + $opacitySlider: null, + $opacityValue: null, + $marginSlider: null, + $marginValue: null, + $fontSizeSlider: null, + $fontSizeValue: null, + $speedSlider: null, + $speedValue: null, + $input: null, + $send: null + }; + this.slider = { + opacity: null, + margin: null, + fontSize: null, + speed: null + }; + this.emitting = false; + this.isLock = false; + this.timer = null; + this.createTemplate(); + this.createSliders(); + this.createEvents(); + this.mount(this.option.mount); + art.on("resize", () => this.resize()); + art.on("fullscreen", (state) => this.onFullscreen(state)); + art.on("fullscreenWeb", (state) => this.onFullscreen(state)); + art.proxy(this.template.$config, "mouseenter", () => { + this.onMouseEnter({ + $control: this.template.$config, + $panel: this.template.$configPanel }); - art.proxy(this.template.$style, 'mouseenter', ()=>{ - this.onMouseEnter({ - $control: this.template.$style, - $panel: this.template.$stylePanel - }); + }); + art.proxy(this.template.$style, "mouseenter", () => { + this.onMouseEnter({ + $control: this.template.$style, + $panel: this.template.$stylePanel }); + }); } static get icons() { - return { - $on: (0, _onSvgDefault.default), - $off: (0, _offSvgDefault.default), - $config: (0, _configSvgDefault.default), - $style: (0, _styleSvgDefault.default), - $mode_0_off: (0, _mode0OffSvgDefault.default), - $mode_0_on: (0, _mode0OnSvgDefault.default), - $mode_1_off: (0, _mode1OffSvgDefault.default), - $mode_1_on: (0, _mode1OnSvgDefault.default), - $mode_2_off: (0, _mode2OffSvgDefault.default), - $mode_2_on: (0, _mode2OnSvgDefault.default), - $check_on: (0, _checkOnSvgDefault.default), - $check_off: (0, _checkOffSvgDefault.default) - }; + return { + $on, + $off, + $config, + $style, + $mode_0_off, + $mode_0_on, + $mode_1_off, + $mode_1_on, + $mode_2_off, + $mode_2_on, + $check_on, + $check_off + }; } get option() { - return this.danmuku.option; + return this.danmuku.option; } get outside() { - return this.template.$mount !== this.template.$controlsCenter; + return this.template.$mount !== this.template.$controlsCenter; } get TEMPLATE() { - const { option } = this; - return ` + const { option } = this; + return `

- ${0, _onSvgDefault.default}${0, _offSvgDefault.default} + ${$on}${$off}
- ${0, _configSvgDefault.default} + ${$config}
- \u{6309}\u{7C7B}\u{578B}\u{5C4F}\u{853D} + 按类型屏蔽
- ${0, _mode0OffSvgDefault.default}${0, _mode0OnSvgDefault.default} -
\u{6EDA}\u{52A8}
+ ${$mode_0_off}${$mode_0_on} +
滚动
- ${0, _mode1OffSvgDefault.default}${0, _mode1OnSvgDefault.default} -
\u{9876}\u{90E8}
+ ${$mode_1_off}${$mode_1_on} +
顶部
- ${0, _mode2OffSvgDefault.default}${0, _mode2OnSvgDefault.default} -
\u{5E95}\u{90E8}
+ ${$mode_2_off}${$mode_2_on} +
底部
- ${0, _checkOnSvgDefault.default}${0, _checkOffSvgDefault.default} - \u{9632}\u{6B62}\u{5F39}\u{5E55}\u{91CD}\u{53E0} + ${$check_on}${$check_off} + 防止弹幕重叠
- ${0, _checkOnSvgDefault.default}${0, _checkOffSvgDefault.default} - \u{540C}\u{6B65}\u{89C6}\u{9891}\u{901F}\u{5EA6} + ${$check_on}${$check_off} + 同步视频速度
- \u{4E0D}\u{900F}\u{660E}\u{5EA6} + 不透明度
-
\u{672A}\u{77E5}
+
未知
- \u{663E}\u{793A}\u{533A}\u{57DF} + 显示区域
-
\u{672A}\u{77E5}
+
未知
- \u{5F39}\u{5E55}\u{5B57}\u{53F7} + 弹幕字号
-
\u{672A}\u{77E5}
+
未知
- \u{5F39}\u{5E55}\u{901F}\u{5EA6} + 弹幕速度
-
\u{672A}\u{77E5}
+
未知
- ${0, _styleSvgDefault.default} + ${$style}
- \u{6A21}\u{5F0F} + 模式
- ${0, _mode0OnSvgDefault.default} -
\u{6EDA}\u{52A8}
+ ${$mode_0_on} +
滚动
- ${0, _mode1OnSvgDefault.default} -
\u{9876}\u{90E8}
+ ${$mode_1_on} +
顶部
- ${0, _mode2OnSvgDefault.default} -
\u{5E95}\u{90E8}
+ ${$mode_2_on} +
底部
- \u{989C}\u{8272} + 颜色
- ${this.COLOR.map((color)=>`
`).join('')} + ${this.COLOR.map((color) => `
`).join("")}
- -
\u{53D1}\u{9001}
+ +
发送
`; } get OPACITY() { - return { - min: 0, - max: 100, - steps: [], - ...this.option.OPACITY - }; + return { + min: 0, + max: 100, + steps: [], + ...this.option.OPACITY + }; } get FONT_SIZE() { - return { - min: 12, - max: 120, - steps: [], - ...this.option.FONT_SIZE - }; + return { + min: 12, + max: 120, + steps: [], + ...this.option.FONT_SIZE + }; } get MARGIN() { - return { - min: 0, - max: 3, - steps: [ - { - name: '1/4', - value: [ - 10, - '75%' - ] - }, - { - name: "\u534A\u5C4F", - value: [ - 10, - '50%' - ] - }, - { - name: '3/4', - value: [ - 10, - '25%' - ] - }, - { - name: "\u6EE1\u5C4F", - value: [ - 10, - 10 - ] - } - ], - ...this.option.MARGIN - }; + return { + min: 0, + max: 3, + steps: [ + { + name: "1/4", + value: [10, "75%"] + }, + { + name: "半屏", + value: [10, "50%"] + }, + { + name: "3/4", + value: [10, "25%"] + }, + { + name: "满屏", + value: [10, 10] + } + ], + ...this.option.MARGIN + }; } get SPEED() { - return { - min: 0, - max: 4, - steps: [ - { - name: "\u6781\u6162", - value: 10 - }, - { - name: "\u8F83\u6162", - value: 7.5, - hide: true - }, - { - name: "\u9002\u4E2D", - value: 5 - }, - { - name: "\u8F83\u5FEB", - value: 2.5, - hide: true - }, - { - name: "\u6781\u5FEB", - value: 1 - } - ], - ...this.option.SPEED - }; + return { + min: 0, + max: 4, + steps: [ + { + name: "极慢", + value: 10 + }, + { + name: "较慢", + value: 7.5, + hide: true + }, + { + name: "适中", + value: 5 + }, + { + name: "较快", + value: 2.5, + hide: true + }, + { + name: "极快", + value: 1 + } + ], + ...this.option.SPEED + }; } get COLOR() { - return this.option.COLOR.length ? this.option.COLOR : [ - '#FE0302', - '#FF7204', - '#FFAA02', - '#FFD302', - '#FFFF00', - '#A0EE00', - '#00CD00', - '#019899', - '#4266BE', - '#89D5FF', - '#CC0273', - '#222222', - '#9B9B9B', - '#FFFFFF' - ]; + return this.option.COLOR.length ? this.option.COLOR : [ + "#FE0302", + "#FF7204", + "#FFAA02", + "#FFD302", + "#FFFF00", + "#A0EE00", + "#00CD00", + "#019899", + "#4266BE", + "#89D5FF", + "#CC0273", + "#222222", + "#9B9B9B", + "#FFFFFF" + ]; } query(selector) { - const { query } = this.utils; - const { $danmuku } = this.template; - return query(selector, $danmuku); + const { query } = this.utils; + const { $danmuku } = this.template; + return query(selector, $danmuku); } append(el, target) { - const { append } = this.utils; - const children = [ - ...el.children - ]; - if (children.includes(target)) return; - append(el, target); + const { append } = this.utils; + const children = [...el.children]; + if (children.includes(target)) + return; + append(el, target); } setData(key, value) { - const { $player } = this.art.template; - const { $mount } = this.template; - $player.dataset[key] = value; - if (this.outside) $mount.dataset[key] = value; + const { $player } = this.art.template; + const { $mount } = this.template; + $player.dataset[key] = value; + if (this.outside) { + $mount.dataset[key] = value; + } } createTemplate() { - const { createElement, tooltip } = this.utils; - const $danmuku = createElement('div'); - $danmuku.className = 'artplayer-plugin-danmuku'; - $danmuku.innerHTML = this.TEMPLATE; - this.template.$danmuku = $danmuku; - this.template.$toggle = this.query('.apd-toggle'); - this.template.$config = this.query('.apd-config'); - this.template.$configPanel = this.query('.apd-config-panel'); - this.template.$configModes = this.query('.apd-config-mode .apd-modes'); - this.template.$style = this.query('.apd-style'); - this.template.$stylePanel = this.query('.apd-style-panel'); - this.template.$styleModes = this.query('.apd-style-mode .apd-modes'); - this.template.$colors = this.query('.apd-colors'); - this.template.$antiOverlap = this.query('.apd-anti-overlap'); - this.template.$syncVideo = this.query('.apd-sync-video'); - this.template.$opacitySlider = this.query('.apd-config-opacity .apd-slider'); - this.template.$opacityValue = this.query('.apd-config-opacity .apd-value'); - this.template.$marginSlider = this.query('.apd-config-margin .apd-slider'); - this.template.$marginValue = this.query('.apd-config-margin .apd-value'); - this.template.$fontSizeSlider = this.query('.apd-config-fontSize .apd-slider'); - this.template.$fontSizeValue = this.query('.apd-config-fontSize .apd-value'); - this.template.$speedSlider = this.query('.apd-config-speed .apd-slider'); - this.template.$speedValue = this.query('.apd-config-speed .apd-value'); - this.template.$input = this.query('.apd-input'); - this.template.$send = this.query('.apd-send'); - const { $toggle } = this.template; - this.art.on('artplayerPluginDanmuku:show', ()=>{ - tooltip($toggle, "\u5173\u95ED\u5F39\u5E55"); - }); - this.art.on('artplayerPluginDanmuku:hide', ()=>{ - tooltip($toggle, "\u6253\u5F00\u5F39\u5E55"); - }); + const { createElement, tooltip } = this.utils; + const $danmuku = createElement("div"); + $danmuku.className = "artplayer-plugin-danmuku"; + $danmuku.innerHTML = this.TEMPLATE; + this.template.$danmuku = $danmuku; + this.template.$toggle = this.query(".apd-toggle"); + this.template.$config = this.query(".apd-config"); + this.template.$configPanel = this.query(".apd-config-panel"); + this.template.$configModes = this.query(".apd-config-mode .apd-modes"); + this.template.$style = this.query(".apd-style"); + this.template.$stylePanel = this.query(".apd-style-panel"); + this.template.$styleModes = this.query(".apd-style-mode .apd-modes"); + this.template.$colors = this.query(".apd-colors"); + this.template.$antiOverlap = this.query(".apd-anti-overlap"); + this.template.$syncVideo = this.query(".apd-sync-video"); + this.template.$opacitySlider = this.query(".apd-config-opacity .apd-slider"); + this.template.$opacityValue = this.query(".apd-config-opacity .apd-value"); + this.template.$marginSlider = this.query(".apd-config-margin .apd-slider"); + this.template.$marginValue = this.query(".apd-config-margin .apd-value"); + this.template.$fontSizeSlider = this.query(".apd-config-fontSize .apd-slider"); + this.template.$fontSizeValue = this.query(".apd-config-fontSize .apd-value"); + this.template.$speedSlider = this.query(".apd-config-speed .apd-slider"); + this.template.$speedValue = this.query(".apd-config-speed .apd-value"); + this.template.$input = this.query(".apd-input"); + this.template.$send = this.query(".apd-send"); + const { $toggle } = this.template; + this.art.on("artplayerPluginDanmuku:show", () => { + tooltip($toggle, "关闭弹幕"); + }); + this.art.on("artplayerPluginDanmuku:hide", () => { + tooltip($toggle, "打开弹幕"); + }); } createEvents() { - const { $toggle, $configModes, $styleModes, $colors, $antiOverlap, $syncVideo, $send, $input } = this.template; - this.art.proxy($toggle, 'click', ()=>{ - this.danmuku.config({ - visible: !this.option.visible - }); - this.reset(); + const { $toggle, $configModes, $styleModes, $colors, $antiOverlap, $syncVideo, $send, $input } = this.template; + this.art.proxy($toggle, "click", () => { + this.danmuku.config({ + visible: !this.option.visible }); - this.art.proxy($configModes, 'click', (event)=>{ - const $mode = event.target.closest('.apd-mode'); - if (!$mode) return; - const mode = Number($mode.dataset.mode); - if (this.option.modes.includes(mode)) this.danmuku.config({ - modes: this.option.modes.filter((m)=>m !== mode) - }); - else this.danmuku.config({ - modes: [ - ...this.option.modes, - mode - ] - }); - this.reset(); + this.reset(); + }); + this.art.proxy($configModes, "click", (event) => { + const $mode = event.target.closest(".apd-mode"); + if (!$mode) + return; + const mode = Number($mode.dataset.mode); + if (this.option.modes.includes(mode)) { + this.danmuku.config({ + modes: this.option.modes.filter((m) => m !== mode) + }); + } else { + this.danmuku.config({ + modes: [...this.option.modes, mode] + }); + } + this.reset(); + }); + this.art.proxy($antiOverlap, "click", () => { + this.danmuku.config({ + antiOverlap: !this.option.antiOverlap }); - this.art.proxy($antiOverlap, 'click', ()=>{ - this.danmuku.config({ - antiOverlap: !this.option.antiOverlap - }); - this.reset(); + this.reset(); + }); + this.art.proxy($syncVideo, "click", () => { + this.danmuku.config({ + synchronousPlayback: !this.option.synchronousPlayback }); - this.art.proxy($syncVideo, 'click', ()=>{ - this.danmuku.config({ - synchronousPlayback: !this.option.synchronousPlayback - }); - this.reset(); + this.reset(); + }); + this.art.proxy($styleModes, "click", (event) => { + const $mode = event.target.closest(".apd-mode"); + if (!$mode) + return; + const mode = Number($mode.dataset.mode); + this.danmuku.config({ + mode }); - this.art.proxy($styleModes, 'click', (event)=>{ - const $mode = event.target.closest('.apd-mode'); - if (!$mode) return; - const mode = Number($mode.dataset.mode); - this.danmuku.config({ - mode - }); - this.reset(); - }); - this.art.proxy($colors, 'click', (event)=>{ - const $color = event.target.closest('.apd-color'); - if (!$color) return; - this.danmuku.config({ - color: $color.dataset.color - }); - this.reset(); - }); - this.art.proxy($send, 'click', ()=>this.emit()); - this.art.proxy($input, 'keypress', (event)=>{ - if (event.key === 'Enter') { - event.preventDefault(); - this.emit(); - } + this.reset(); + }); + this.art.proxy($colors, "click", (event) => { + const $color = event.target.closest(".apd-color"); + if (!$color) + return; + this.danmuku.config({ + color: $color.dataset.color }); + this.reset(); + }); + this.art.proxy($send, "click", () => this.emit()); + this.art.proxy($input, "keypress", (event) => { + if (event.key === "Enter") { + event.preventDefault(); + this.emit(); + } + }); } createSliders() { - this.slider.opacity = this.createSlider({ - ...this.OPACITY, - container: this.template.$opacitySlider, - findIndex: ()=>{ - return Math.round(this.option.opacity * 100); - }, - onChange: (index)=>{ - const { $opacityValue } = this.template; - $opacityValue.textContent = `${index}%`; - this.danmuku.config({ - opacity: index / 100 - }); - } - }); - this.slider.margin = this.createSlider({ - ...this.MARGIN, - container: this.template.$marginSlider, - findIndex: ()=>{ - return this.MARGIN.steps.findIndex((item)=>item.value[0] === this.option.margin[0] && item.value[1] === this.option.margin[1]); - }, - onChange: (index)=>{ - const margin = this.MARGIN.steps[index]; - if (!margin) return; - const { $marginValue } = this.template; - $marginValue.textContent = margin.name; - this.danmuku.config({ - margin: margin.value - }); - } - }); - this.slider.fontSize = this.createSlider({ - ...this.FONT_SIZE, - container: this.template.$fontSizeSlider, - findIndex: ()=>{ - return this.danmuku.fontSize; - }, - onChange: (index)=>{ - const { $fontSizeValue } = this.template; - $fontSizeValue.textContent = `${index}px`; - if (index === this.danmuku.fontSize) return; - this.danmuku.config({ - fontSize: index - }); - } - }); - this.slider.speed = this.createSlider({ - ...this.SPEED, - container: this.template.$speedSlider, - findIndex: ()=>{ - return this.SPEED.steps.findIndex((item)=>item.value === this.option.speed); - }, - onChange: (index)=>{ - const speed = this.SPEED.steps[index]; - if (!speed) return; - const { $speedValue } = this.template; - $speedValue.textContent = speed.name; - this.danmuku.config({ - speed: speed.value - }); - } - }); + this.slider.opacity = this.createSlider({ + ...this.OPACITY, + container: this.template.$opacitySlider, + findIndex: () => { + return Math.round(this.option.opacity * 100); + }, + onChange: (index) => { + const { $opacityValue } = this.template; + $opacityValue.textContent = `${index}%`; + this.danmuku.config({ + opacity: index / 100 + }); + } + }); + this.slider.margin = this.createSlider({ + ...this.MARGIN, + container: this.template.$marginSlider, + findIndex: () => { + return this.MARGIN.steps.findIndex( + (item) => item.value[0] === this.option.margin[0] && item.value[1] === this.option.margin[1] + ); + }, + onChange: (index) => { + const margin = this.MARGIN.steps[index]; + if (!margin) + return; + const { $marginValue } = this.template; + $marginValue.textContent = margin.name; + this.danmuku.config({ + margin: margin.value + }); + } + }); + this.slider.fontSize = this.createSlider({ + ...this.FONT_SIZE, + container: this.template.$fontSizeSlider, + findIndex: () => { + return this.danmuku.fontSize; + }, + onChange: (index) => { + const { $fontSizeValue } = this.template; + $fontSizeValue.textContent = `${index}px`; + if (index === this.danmuku.fontSize) + return; + this.danmuku.config({ + fontSize: index + }); + } + }); + this.slider.speed = this.createSlider({ + ...this.SPEED, + container: this.template.$speedSlider, + findIndex: () => { + return this.SPEED.steps.findIndex((item) => item.value === this.option.speed); + }, + onChange: (index) => { + const speed = this.SPEED.steps[index]; + if (!speed) + return; + const { $speedValue } = this.template; + $speedValue.textContent = speed.name; + this.danmuku.config({ + speed: speed.value + }); + } + }); } createSlider({ min, max, container, findIndex, onChange, steps = [] }) { - const { query, clamp, setStyle } = this.utils; - setStyle(container, 'touch-action', 'none'); - container.innerHTML = ` + const { query, clamp, setStyle } = this.utils; + setStyle(container, "touch-action", "none"); + container.innerHTML = `
- ${steps.map(()=>`
`).join('')} + ${steps.map(() => `
`).join("")}
- ${steps.map((step)=>step.hide ? '' : `
${step.name}
`).join('')} + ${steps.map((step) => step.hide ? "" : `
${step.name}
`).join("")}
`; - const $dot = query('.apd-slider-dot', container); - const $progress = query('.apd-slider-progress', container); - let isDroging = false; - function reset(index = findIndex()) { - if (index < min || index > max) return; - const percentage = (index - min) / (max - min); - $dot.style.left = `${percentage * 100}%`; - if (steps.length === 0) $progress.style.width = $dot.style.left; - onChange(index); + const $dot = query(".apd-slider-dot", container); + const $progress = query(".apd-slider-progress", container); + let isDroging = false; + function reset(index = findIndex()) { + if (index < min || index > max) + return; + const percentage = (index - min) / (max - min); + $dot.style.left = `${percentage * 100}%`; + if (steps.length === 0) { + $progress.style.width = $dot.style.left; } - function updateLeft(event) { - const { top, height, left, width } = container.getBoundingClientRect(); - if (this.art.isRotate) { - const value = clamp(event.clientY - top, 0, height); - const index = Math.round(value / height * (max - min) + min); - reset(index); - } else { - const value = clamp(event.clientX - left, 0, width); - const index = Math.round(value / width * (max - min) + min); - reset(index); - } + onChange(index); + } + function updateLeft(event) { + const { top, height, left, width } = container.getBoundingClientRect(); + if (this.art.isRotate) { + const value = clamp(event.clientY - top, 0, height); + const index = Math.round(value / height * (max - min) + min); + reset(index); + } else { + const value = clamp(event.clientX - left, 0, width); + const index = Math.round(value / width * (max - min) + min); + reset(index); } - this.art.proxy(container, 'click', (event)=>{ - updateLeft.call(this, event); - }); - this.art.proxy(container, 'pointerdown', (event)=>{ - isDroging = event.button === 0; - }); - this.art.on('document:pointermove', (event)=>{ - if (isDroging) updateLeft.call(this, event); - }); - this.art.on('document:pointerup', (event)=>{ - if (isDroging) { - isDroging = false; - updateLeft.call(this, event); - } - }); - return { - reset - }; + } + this.art.proxy(container, "click", (event) => { + updateLeft.call(this, event); + }); + this.art.proxy(container, "pointerdown", (event) => { + isDroging = event.button === 0; + }); + this.art.on("document:pointermove", (event) => { + if (isDroging) { + updateLeft.call(this, event); + } + }); + this.art.on("document:pointerup", (event) => { + if (isDroging) { + isDroging = false; + updateLeft.call(this, event); + } + }); + return { reset }; } onFullscreen(state) { - const { $danmuku, $controlsCenter, $mount } = this.template; - if (this.outside) { - if (state) this.append($controlsCenter, $danmuku); - else this.append($mount, $danmuku); - } else this.append($controlsCenter, $danmuku); + const { $danmuku, $controlsCenter, $mount } = this.template; + if (this.outside) { + if (state) { + this.append($controlsCenter, $danmuku); + } else { + this.append($mount, $danmuku); + } + } else { + this.append($controlsCenter, $danmuku); + } } onMouseEnter({ $control, $panel }) { - const { $player } = this.art.template; - const controlRect = $control.getBoundingClientRect(); - const panelRect = $panel.getBoundingClientRect(); - const playerRect = $player.getBoundingClientRect(); - const half = panelRect.width / 2 - controlRect.width / 2; - const left = playerRect.left - (controlRect.left - half); - const right = controlRect.right + half - playerRect.right; - if (left > 0) $panel.style.left = `${-half + left}px`; - else if (right > 0) $panel.style.left = `${-half - right}px`; - else $panel.style.left = `${-half}px`; + const { $player } = this.art.template; + const controlRect = $control.getBoundingClientRect(); + const panelRect = $panel.getBoundingClientRect(); + const playerRect = $player.getBoundingClientRect(); + const half = panelRect.width / 2 - controlRect.width / 2; + const left = playerRect.left - (controlRect.left - half); + const right = controlRect.right + half - playerRect.right; + if (left > 0) { + $panel.style.left = `${-half + left}px`; + } else if (right > 0) { + $panel.style.left = `${-half - right}px`; + } else { + $panel.style.left = `${-half}px`; + } } async emit() { - const { $input } = this.template; - const text = $input.value.trim(); - if (!text.length) return; - if (this.isLock) return; - if (this.emitting) return; - const danmu = { - text, - mode: this.option.mode, - color: this.option.color, - time: this.art.currentTime - }; - try { - this.emitting = true; - const state = await this.option.beforeEmit(danmu); - this.emitting = false; - if (state !== true) return; - danmu.border = true; - delete danmu.time; - this.danmuku.emit(danmu); - $input.value = ''; - this.lock(); - } catch (error) { - console.error('Error emitting danmuku:', error); - this.emitting = false; - } + const { $input } = this.template; + const text = $input.value.trim(); + if (!text.length) + return; + if (this.isLock) + return; + if (this.emitting) + return; + const danmu = { + text, + mode: this.option.mode, + color: this.option.color, + time: this.art.currentTime + }; + try { + this.emitting = true; + const state = await this.option.beforeEmit(danmu); + this.emitting = false; + if (state !== true) + return; + danmu.border = true; + delete danmu.time; + this.danmuku.emit(danmu); + $input.value = ""; + this.lock(); + } catch (error) { + console.error("Error emitting danmuku:", error); + this.emitting = false; + } } lock() { - const { addClass } = this.utils; - const { $send } = this.template; - this.isLock = true; - let time = this.option.lockTime; - $send.textContent = time; - addClass($send, 'apd-lock'); - const loop = ()=>{ - this.timer = setTimeout(()=>{ - if (time === 0) this.unlock(); - else { - time -= 1; - $send.textContent = time; - loop(); - } - }, 1000); - }; - loop(); + const { addClass } = this.utils; + const { $send } = this.template; + this.isLock = true; + let time = this.option.lockTime; + $send.textContent = time; + addClass($send, "apd-lock"); + const loop = () => { + this.timer = setTimeout(() => { + if (time === 0) { + this.unlock(); + } else { + time -= 1; + $send.textContent = time; + loop(); + } + }, 1e3); + }; + loop(); } unlock() { - const { removeClass } = this.utils; - const { $send } = this.template; - clearTimeout(this.timer); - this.isLock = false; - $send.textContent = "\u53D1\u9001"; - removeClass($send, 'apd-lock'); + const { removeClass } = this.utils; + const { $send } = this.template; + clearTimeout(this.timer); + this.isLock = false; + $send.textContent = "发送"; + removeClass($send, "apd-lock"); } resize() { - if (this.outside) return; - if (this.art.fullscreen) return; - if (this.art.fullscreenWeb) return; - const { $player, $controlsCenter } = this.art.template; - const { $danmuku } = this.template; - if (this.art.width < this.option.width) this.append($player, $danmuku); - else this.append($controlsCenter, $danmuku); + if (this.outside) + return; + if (this.art.fullscreen) + return; + if (this.art.fullscreenWeb) + return; + const { $player, $controlsCenter } = this.art.template; + const { $danmuku } = this.template; + if (this.art.width < this.option.width) { + this.append($player, $danmuku); + } else { + this.append($controlsCenter, $danmuku); + } } reset() { - const { inverseClass, tooltip } = this.utils; - const { $toggle, $colors } = this.template; - this.slider.opacity.reset(); - this.slider.margin.reset(); - this.slider.fontSize.reset(); - this.slider.speed.reset(); - this.setData('danmukuVisible', this.option.visible); - this.setData('danmukuMode', this.option.mode); - this.setData('danmukuColor', this.option.color); - this.setData('danmukuMode0', this.option.modes.includes(0)); - this.setData('danmukuMode1', this.option.modes.includes(1)); - this.setData('danmukuMode2', this.option.modes.includes(2)); - this.setData('danmukuAntiOverlap', this.option.antiOverlap); - this.setData('danmukuSyncVideo', this.option.synchronousPlayback); - this.setData('danmukuTheme', this.option.theme); - this.setData('danmukuEmitter', this.option.emitter); - const colors = $colors.children; - const $color = Array.from(colors).find((item)=>item.dataset.color === this.option.color.toUpperCase()); - $color && inverseClass($color, 'apd-active'); - tooltip($toggle, this.option.visible ? "\u5173\u95ED\u5F39\u5E55" : "\u6253\u5F00\u5F39\u5E55"); - this.resize(); + const { inverseClass, tooltip } = this.utils; + const { $toggle, $colors } = this.template; + this.slider.opacity.reset(); + this.slider.margin.reset(); + this.slider.fontSize.reset(); + this.slider.speed.reset(); + this.setData("danmukuVisible", this.option.visible); + this.setData("danmukuMode", this.option.mode); + this.setData("danmukuColor", this.option.color); + this.setData("danmukuMode0", this.option.modes.includes(0)); + this.setData("danmukuMode1", this.option.modes.includes(1)); + this.setData("danmukuMode2", this.option.modes.includes(2)); + this.setData("danmukuAntiOverlap", this.option.antiOverlap); + this.setData("danmukuSyncVideo", this.option.synchronousPlayback); + this.setData("danmukuTheme", this.option.theme); + this.setData("danmukuEmitter", this.option.emitter); + const colors = $colors.children; + const $color = Array.from(colors).find((item) => item.dataset.color === this.option.color.toUpperCase()); + $color && inverseClass($color, "apd-active"); + tooltip($toggle, this.option.visible ? "关闭弹幕" : "打开弹幕"); + this.resize(); } mount(target) { - const { errorHandle } = this.utils; - const $el = typeof target === 'string' ? document.querySelector(target) : target; - errorHandle($el, `Can not find the mount point: ${target}`); - this.append($el, this.template.$danmuku); - this.template.$mount = $el; - this.reset(); + const { errorHandle } = this.utils; + const $el = typeof target === "string" ? document.querySelector(target) : target; + errorHandle($el, `Can not find the mount point: ${target}`); + this.append($el, this.template.$danmuku); + this.template.$mount = $el; + this.reset(); } -} -exports.default = Setting; -if (typeof document !== 'undefined') { - const id = 'artplayer-plugin-danmuku'; - let $style = document.getElementById(id); - if (!$style) { - $style = document.createElement('style'); - $style.id = id; - if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', ()=>{ - document.head.appendChild($style); + } + if (typeof document !== "undefined") { + const id = "artplayer-plugin-danmuku"; + let $style2 = document.getElementById(id); + if (!$style2) { + $style2 = document.createElement("style"); + $style2.id = id; + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", () => { + document.head.appendChild($style2); }); - else (document.head || document.documentElement).appendChild($style); + } else { + (document.head || document.documentElement).appendChild($style2); + } } - $style.textContent = (0, _styleLessDefault.default); -} - -},{"bundle-text:./img/check_off.svg":"iZKOG","bundle-text:./img/check_on.svg":"dHpvg","bundle-text:./img/config.svg":"Zd1dH","bundle-text:./img/mode_0_off.svg":"clMb3","bundle-text:./img/mode_0_on.svg":"6jPwG","bundle-text:./img/mode_1_off.svg":"gAeHz","bundle-text:./img/mode_1_on.svg":"fK0pY","bundle-text:./img/mode_2_off.svg":"67tbB","bundle-text:./img/mode_2_on.svg":"9zaZq","bundle-text:./img/off.svg":"iqU8K","bundle-text:./img/on.svg":"8mY0A","bundle-text:./img/style.svg":"jPuJr","bundle-text:./style.less":"bh9OX","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"iZKOG":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"dHpvg":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"Zd1dH":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"clMb3":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"6jPwG":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"gAeHz":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"fK0pY":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"67tbB":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"9zaZq":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"iqU8K":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"8mY0A":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"jPuJr":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"bh9OX":[function(require,module,exports,__globalThis) { -module.exports = ".artplayer-plugin-danmuku {\n z-index: 99;\n color: #fff;\n flex-shrink: 0;\n justify-content: center;\n align-items: center;\n gap: 10px;\n width: 100%;\n height: 32px;\n font-size: 12px;\n font-weight: 300;\n display: flex;\n position: relative;\n}\n\n.artplayer-plugin-danmuku .apd-icon {\n cursor: pointer;\n opacity: .75;\n fill: #fff;\n transition: all .2s;\n}\n\n.artplayer-plugin-danmuku .apd-icon:hover {\n opacity: 1;\n}\n\n.artplayer-plugin-danmuku .apd-config {\n display: flex;\n position: relative;\n}\n\n.artplayer-plugin-danmuku .apd-config .apd-config-panel {\n opacity: 0;\n pointer-events: none;\n width: 320px;\n padding: 10px;\n position: absolute;\n bottom: 24px;\n left: 0;\n}\n\n.artplayer-plugin-danmuku .apd-config .apd-config-panel .apd-config-panel-inner {\n background-color: #000000d9;\n border-radius: 3px;\n width: 100%;\n padding: 10px;\n}\n\n.artplayer-plugin-danmuku .apd-config:hover .apd-config-panel {\n opacity: 100;\n pointer-events: all;\n}\n\n.artplayer-plugin-danmuku .apd-config-mode, .artplayer-plugin-danmuku .apd-config-slider, .artplayer-plugin-danmuku .apd-config-other, .artplayer-plugin-danmuku .apd-style-mode {\n margin-bottom: 15px;\n}\n\n.artplayer-plugin-danmuku .apd-modes {\n align-items: center;\n gap: 20px;\n margin-top: 5px;\n display: flex;\n}\n\n.artplayer-plugin-danmuku .apd-modes .apd-mode {\n cursor: pointer;\n text-align: center;\n}\n\n.artplayer-plugin-danmuku .apd-modes .apd-mode:hover {\n color: #00a1d6;\n}\n\n.artplayer-plugin-danmuku .apd-config-slider {\n align-items: center;\n gap: 12px;\n display: flex;\n}\n\n.artplayer-plugin-danmuku .apd-config-slider .apd-value {\n text-align: right;\n width: 32px;\n}\n\n.artplayer-plugin-danmuku .apd-slider {\n cursor: pointer;\n flex: 1;\n justify-content: center;\n align-items: center;\n height: 20px;\n display: flex;\n position: relative;\n}\n\n.artplayer-plugin-danmuku .apd-slider .apd-slider-line {\n background-color: #ffffff40;\n border-radius: 3px;\n width: 100%;\n height: 2px;\n position: relative;\n overflow: hidden;\n}\n\n.artplayer-plugin-danmuku .apd-slider .apd-slider-points {\n justify-content: space-between;\n align-items: center;\n display: flex;\n position: absolute;\n inset: 0;\n}\n\n.artplayer-plugin-danmuku .apd-slider .apd-slider-points .apd-slider-point {\n background-color: #ffffff80;\n border-radius: 50%;\n width: 2px;\n height: 2px;\n}\n\n.artplayer-plugin-danmuku .apd-slider .apd-slider-progress {\n background-color: #00a1d6;\n width: 0%;\n height: 100%;\n}\n\n.artplayer-plugin-danmuku .apd-slider .apd-slider-dot {\n background-color: #00a1d6;\n border-radius: 50%;\n width: 12px;\n height: 12px;\n position: absolute;\n left: 0%;\n transform: translateX(-6px);\n}\n\n.artplayer-plugin-danmuku .apd-slider .apd-slider-steps {\n color: #777;\n justify-content: space-between;\n align-items: center;\n width: calc(100% + 32px);\n display: flex;\n position: absolute;\n bottom: -12px;\n}\n\n.artplayer-plugin-danmuku .apd-slider .apd-slider-steps .apd-slider-step {\n text-align: center;\n flex-shrink: 0;\n width: 36px;\n scale: .95;\n}\n\n.artplayer-plugin-danmuku .apd-config-other {\n align-items: center;\n gap: 20px;\n display: flex;\n}\n\n.artplayer-plugin-danmuku .apd-config-other .apd-check-off, .artplayer-plugin-danmuku .apd-config-other .apd-check-on {\n width: 16px;\n height: 16px;\n}\n\n.artplayer-plugin-danmuku .apd-config-other .apd-other {\n cursor: pointer;\n align-items: center;\n gap: 2px;\n display: flex;\n}\n\n.artplayer-plugin-danmuku .apd-config-other .apd-other:hover {\n color: #00a1d6;\n}\n\n.artplayer-plugin-danmuku .apd-emitter {\n background-color: #ffffff40;\n border-radius: 5px;\n flex: 1;\n align-items: center;\n height: 100%;\n display: flex;\n}\n\n.artplayer-plugin-danmuku .apd-style {\n justify-content: center;\n align-items: center;\n display: flex;\n position: relative;\n}\n\n.artplayer-plugin-danmuku .apd-style .apd-style-panel {\n opacity: 0;\n pointer-events: none;\n width: 200px;\n padding: 10px;\n position: absolute;\n bottom: 24px;\n left: 0;\n}\n\n.artplayer-plugin-danmuku .apd-style .apd-style-panel .apd-style-panel-inner {\n background-color: #000000d9;\n border-radius: 3px;\n width: 100%;\n padding: 10px;\n}\n\n.artplayer-plugin-danmuku .apd-style:hover .apd-style-panel {\n opacity: 100;\n pointer-events: all;\n}\n\n.artplayer-plugin-danmuku .apd-colors {\n flex-wrap: wrap;\n gap: 8px;\n margin-top: 5px;\n display: flex;\n}\n\n.artplayer-plugin-danmuku .apd-colors .apd-color {\n cursor: pointer;\n border-radius: 2px;\n width: 16px;\n height: 16px;\n}\n\n.artplayer-plugin-danmuku .apd-colors .apd-color.apd-active {\n border: 1px solid #000;\n box-shadow: 0 0 0 1px #fff;\n}\n\n.artplayer-plugin-danmuku .apd-input {\n color: #fff;\n background-color: #0000;\n border: none;\n outline: none;\n flex: 1;\n width: auto;\n min-width: 0;\n height: 100%;\n line-height: 1;\n}\n\n.artplayer-plugin-danmuku .apd-input::placeholder {\n color: #ffffff80;\n}\n\n.artplayer-plugin-danmuku .apd-send {\n cursor: pointer;\n width: 60px;\n height: 100%;\n text-shadow: none;\n background-color: #00a1d6;\n border-top-right-radius: 5px;\n border-bottom-right-radius: 5px;\n flex-shrink: 0;\n justify-content: center;\n align-items: center;\n display: flex;\n}\n\n.artplayer-plugin-danmuku .apd-send.apd-lock {\n cursor: not-allowed;\n color: #666;\n background-color: #e7e7e7;\n}\n\n.art-controls-center .apd-emitter {\n flex: none;\n width: 260px;\n}\n\n.art-fullscreen .artplayer-plugin-danmuku, .art-fullscreen-web .artplayer-plugin-danmuku {\n gap: 16px;\n height: 38px;\n}\n\n.art-fullscreen .artplayer-plugin-danmuku .apd-config-icon, .art-fullscreen-web .artplayer-plugin-danmuku .apd-config-icon, .art-fullscreen .artplayer-plugin-danmuku .apd-toggle-off, .art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-off, .art-fullscreen .artplayer-plugin-danmuku .apd-toggle-on, .art-fullscreen-web .artplayer-plugin-danmuku .apd-toggle-on {\n width: 28px;\n height: 28px;\n}\n\n.art-fullscreen .artplayer-plugin-danmuku .apd-emitter, .art-fullscreen-web .artplayer-plugin-danmuku .apd-emitter {\n flex: none;\n width: 400px;\n}\n\n.art-video-player > .artplayer-plugin-danmuku {\n padding: 0 10px;\n position: absolute;\n bottom: -40px;\n left: 0;\n right: 0;\n}\n\n.art-video-player:has( > .artplayer-plugin-danmuku) {\n margin-bottom: 40px;\n}\n\n[data-danmuku-emitter=\"false\"] .apd-emitter {\n display: none !important;\n}\n\n[data-danmuku-emitter=\"false\"] .art-controls-center .artplayer-plugin-danmuku {\n justify-content: flex-end;\n gap: 18px;\n}\n\n[data-danmuku-emitter=\"false\"].art-fullscreen .art-controls-center .artplayer-plugin-danmuku, [data-danmuku-emitter=\"false\"].art-fullscreen-web .art-controls-center .artplayer-plugin-danmuku {\n gap: 24px;\n}\n\n[data-danmuku-theme=\"light\"] > .artplayer-plugin-danmuku .apd-icon {\n fill: #333;\n}\n\n[data-danmuku-theme=\"light\"] > .artplayer-plugin-danmuku .apd-emitter {\n background-color: #f1f2f3;\n}\n\n[data-danmuku-theme=\"light\"] > .artplayer-plugin-danmuku .apd-input {\n color: #000;\n}\n\n[data-danmuku-theme=\"light\"] > .artplayer-plugin-danmuku .apd-input::placeholder {\n color: #0000004d;\n}\n\n[data-danmuku-visible=\"false\"] .apd-toggle-off {\n display: block;\n}\n\n[data-danmuku-visible=\"false\"] .apd-toggle-on, [data-danmuku-visible=\"true\"] .apd-toggle-off {\n display: none;\n}\n\n[data-danmuku-visible=\"true\"] .apd-toggle-on {\n display: block;\n}\n\n[data-danmuku-anti-overlap=\"false\"] .apd-anti-overlap .apd-check-on {\n display: none;\n}\n\n[data-danmuku-anti-overlap=\"false\"] .apd-anti-overlap .apd-check-off, [data-danmuku-anti-overlap=\"true\"] .apd-anti-overlap .apd-check-on {\n display: block;\n}\n\n[data-danmuku-anti-overlap=\"true\"] .apd-anti-overlap .apd-check-off, [data-danmuku-sync-video=\"false\"] .apd-sync-video .apd-check-on {\n display: none;\n}\n\n[data-danmuku-sync-video=\"false\"] .apd-sync-video .apd-check-off, [data-danmuku-sync-video=\"true\"] .apd-sync-video .apd-check-on {\n display: block;\n}\n\n[data-danmuku-sync-video=\"true\"] .apd-sync-video .apd-check-off {\n display: none;\n}\n\n[data-danmuku-mode0=\"false\"] .apd-config-mode .apd-mode-0-off {\n display: block;\n}\n\n[data-danmuku-mode0=\"false\"] .apd-config-mode .apd-mode-0-on {\n display: none;\n}\n\n[data-danmuku-mode0=\"false\"] .art-danmuku [data-mode=\"0\"] {\n opacity: 0 !important;\n}\n\n[data-danmuku-mode0=\"true\"] .apd-config-mode .apd-mode-0-off {\n display: none;\n}\n\n[data-danmuku-mode0=\"true\"] .apd-config-mode .apd-mode-0-on {\n display: block;\n}\n\n[data-danmuku-mode=\"0\"] .apd-style-mode [data-mode=\"0\"] {\n color: #00a1d6;\n}\n\n[data-danmuku-mode=\"0\"] .apd-style-mode [data-mode=\"0\"] path {\n fill: #00a1d6;\n}\n\n[data-danmuku-mode1=\"false\"] .apd-config-mode .apd-mode-1-off {\n display: block;\n}\n\n[data-danmuku-mode1=\"false\"] .apd-config-mode .apd-mode-1-on {\n display: none;\n}\n\n[data-danmuku-mode1=\"false\"] .art-danmuku [data-mode=\"1\"] {\n opacity: 0 !important;\n}\n\n[data-danmuku-mode1=\"true\"] .apd-config-mode .apd-mode-1-off {\n display: none;\n}\n\n[data-danmuku-mode1=\"true\"] .apd-config-mode .apd-mode-1-on {\n display: block;\n}\n\n[data-danmuku-mode=\"1\"] .apd-style-mode [data-mode=\"1\"] {\n color: #00a1d6;\n}\n\n[data-danmuku-mode=\"1\"] .apd-style-mode [data-mode=\"1\"] path {\n fill: #00a1d6;\n}\n\n[data-danmuku-mode2=\"false\"] .apd-config-mode .apd-mode-2-off {\n display: block;\n}\n\n[data-danmuku-mode2=\"false\"] .apd-config-mode .apd-mode-2-on {\n display: none;\n}\n\n[data-danmuku-mode2=\"false\"] .art-danmuku [data-mode=\"2\"] {\n opacity: 0 !important;\n}\n\n[data-danmuku-mode2=\"true\"] .apd-config-mode .apd-mode-2-off {\n display: none;\n}\n\n[data-danmuku-mode2=\"true\"] .apd-config-mode .apd-mode-2-on {\n display: block;\n}\n\n[data-danmuku-mode=\"2\"] .apd-style-mode [data-mode=\"2\"] {\n color: #00a1d6;\n}\n\n[data-danmuku-mode=\"2\"] .apd-style-mode [data-mode=\"2\"] path {\n fill: #00a1d6;\n}\n"; - -},{}]},["hfC30"], "hfC30", "parcelRequire4dc0", {}) - -//# sourceMappingURL=index.js.map + $style2.textContent = style; + } + function artplayerPluginDanmuku(option) { + return (art) => { + const danmuku = new Danmuku(art, option); + const setting = new Setting(art, danmuku); + if (danmuku.option.heatmap) { + heatmap(art, danmuku, danmuku.option.heatmap); + } + return { + name: "artplayerPluginDanmuku", + emit: danmuku.emit.bind(danmuku), + load: danmuku.load.bind(danmuku), + config: danmuku.config.bind(danmuku), + hide: danmuku.hide.bind(danmuku), + show: danmuku.show.bind(danmuku), + reset: danmuku.reset.bind(danmuku), + mount: setting.mount.bind(setting), + get option() { + return danmuku.option; + }, + get isHide() { + return danmuku.isHide; + }, + get isStop() { + return danmuku.isStop; + } + }; + }; + } + artplayerPluginDanmuku.icons = Setting.icons; + if (typeof window !== "undefined") { + window.artplayerPluginDanmuku = artplayerPluginDanmuku; + } + return artplayerPluginDanmuku; +})(); diff --git a/docs/uncompiled/artplayer-plugin-danmuku/index.js.map b/docs/uncompiled/artplayer-plugin-danmuku/index.js.map deleted file mode 100644 index 2c135f34f..000000000 --- a/docs/uncompiled/artplayer-plugin-danmuku/index.js.map +++ /dev/null @@ -1 +0,0 @@ -{"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6CAIwB;AAJxB;;AACA;;AACA;;AAEe,SAAS,uBAAuB,MAAM;IACnD,OAAO,CAAC;QACN,MAAM,UAAU,IAAI,CAAA,GAAA,uBAAO,AAAD,EAAE,KAAK;QACjC,MAAM,UAAU,IAAI,CAAA,GAAA,uBAAO,AAAD,EAAE,KAAK;QAEjC,IAAI,QAAQ,MAAM,CAAC,OAAO,EACxB,CAAA,GAAA,uBAAO,AAAD,EAAE,KAAK,SAAS,QAAQ,MAAM,CAAC,OAAO;QAG9C,OAAO;YACL,MAAM;YACN,MAAM,QAAQ,IAAI,CAAC,IAAI,CAAC;YACxB,MAAM,QAAQ,IAAI,CAAC,IAAI,CAAC;YACxB,QAAQ,QAAQ,MAAM,CAAC,IAAI,CAAC;YAC5B,MAAM,QAAQ,IAAI,CAAC,IAAI,CAAC;YACxB,MAAM,QAAQ,IAAI,CAAC,IAAI,CAAC;YACxB,OAAO,QAAQ,KAAK,CAAC,IAAI,CAAC;YAC1B,OAAO,QAAQ,KAAK,CAAC,IAAI,CAAC;YAC1B,IAAI,UAAS;gBACX,OAAO,QAAQ,MAAM;YACvB;YACA,IAAI,UAAS;gBACX,OAAO,QAAQ,MAAM;YACvB;YACA,IAAI,UAAS;gBACX,OAAO,QAAQ,MAAM;YACvB;QACF;IACF;AACF;AAEA,uBAAuB,KAAK,GAAG,CAAA,GAAA,uBAAO,AAAD,EAAE,KAAK;AAE5C,IAAI,OAAO,WAAW,aACpB,OAAO,sBAAsB,GAAG;;;;;ACtClC;;AACA;AAEe,MAAM;IACnB,YAAY,GAAG,EAAE,MAAM,CAAE;QACvB,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG;QAElC,IAAI,CAAC,KAAK,GAAG,YAAY,KAAK,CAAC,MAAM;;QACrC,IAAI,CAAC,SAAS,GAAG,YAAY,SAAS,CAAC,QAAQ;;QAC/C,IAAI,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAC,QAAQ;;QAC1C,IAAI,CAAC,OAAO,GAAG,SAAS,OAAO,CAAC,QAAQ;;QAExC,IAAI,CAAC,GAAG,GAAG;QACX,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS;;QACzB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,WAAW;;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,OAAO;;QAC3B,IAAI,CAAC,MAAM,GAAG,MAAM,OAAO;;QAC3B,IAAI,CAAC,KAAK,GAAG,KAAK,MAAM;;QACxB,IAAI,CAAC,KAAK,GAAG,EAAE,OAAO;;QAEtB,WAAW;QACX,IAAI,CAAC,MAAM,GAAG,QAAQ,MAAM;QAE5B,QAAQ;QACR,IAAI,CAAC,MAAM,GAAG;YAAE,MAAM,EAAE;YAAE,OAAO,EAAE;YAAE,MAAM,EAAE;YAAE,MAAM,EAAE;QAAC;QAExD,QAAQ;QACR,IAAI,CAAC,MAAM,CAAC,QAAQ;QAEpB,+BAA+B;QAC/B,MAAM,cAAc,CAAA,GAAA,sBAAU,AAAD,EAAE,OAAO,CAAC,yBAAyB;QAChE,MAAM,OAAO,IAAI,KAAK;YAAC;SAAY,EAAE;YAAE,MAAM;QAAyB;QACtE,IAAI,CAAC,MAAM,GAAG,IAAI,OAAO,IAAI,eAAe,CAAC;QAE7C,SAAS;QACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI;QAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI;QACnC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI;QAErC,OAAO;QACP,IAAI,EAAE,CAAC,cAAc,IAAI,CAAC,KAAK;QAC/B,IAAI,EAAE,CAAC,iBAAiB,IAAI,CAAC,KAAK;QAClC,IAAI,EAAE,CAAC,eAAe,IAAI,CAAC,IAAI;QAC/B,IAAI,EAAE,CAAC,iBAAiB,IAAI,CAAC,IAAI;QACjC,IAAI,EAAE,CAAC,WAAW,IAAI,CAAC,OAAO;QAC9B,IAAI,EAAE,CAAC,UAAU,IAAI,CAAC,MAAM;QAE5B,SAAS;QACT,IAAI,CAAC,IAAI;IACX;IAEA,OAAO;IACP,WAAW,SAAS;QAClB,OAAO;YACL,SAAS,EAAE;YACX,OAAO;YACP,QAAQ;gBAAC;gBAAI;aAAM;YACnB,SAAS;YACT,OAAO;YACP,MAAM;YACN,OAAO;gBAAC;gBAAG;gBAAG;aAAE;YAChB,UAAU;YACV,aAAa;YACb,qBAAqB;YACrB,OAAO;YACP,SAAS;YACT,OAAO;YACP,QAAQ,EAAE;YACV,QAAQ,IAAM;YACd,YAAY,IAAM;YAClB,eAAe,IAAM;YACrB,SAAS;YACT,SAAS;YACT,WAAW;YACX,UAAU;YACV,OAAO;YACP,SAAS,CAAC;YACV,WAAW,CAAC;YACZ,QAAQ,CAAC;YACT,OAAO,CAAC;YACR,OAAO,EAAE;QACX;IACF;IAEA,OAAO;IACP,WAAW,SAAS;QAClB,OAAO;YACL,SAAS;YACT,OAAO;YACP,QAAQ;YACR,SAAS;YACT,OAAO;YACP,MAAM;YACN,OAAO;YACP,UAAU;YACV,aAAa;YACb,qBAAqB;YACrB,OAAO;YACP,SAAS;YACT,OAAO;YACP,QAAQ;YACR,QAAQ;YACR,YAAY;YACZ,eAAe;YACf,SAAS;YACT,SAAS;YACT,WAAW;YACX,UAAU;YACV,OAAO;YACP,SAAS;YACT,WAAW;YACX,QAAQ;YACR,OAAO;YACP,OAAO;QACT;IACF;IAEA,SAAS;IACT,WAAW,UAAU;QACnB,OAAO,CAAC;;;;;;;;;;;;;QAaJ,CAAC;IACP;IAEA,gCAAgC;IAChC,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB;IAC5C;IAEA,UAAU;IACV,IAAI,YAAY;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK;QAC5B,MAAM,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACnC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,OAAO;QAErC,IAAI,OAAO,UAAU,UACnB,OAAO,MAAM,OAAO,GAAG;QAGzB,IAAI,OAAO,UAAU,YAAY,MAAM,QAAQ,CAAC,MAAM;YACpD,MAAM,QAAQ,OAAO,UAAU,CAAC,SAAS;YACzC,OAAO,MAAM,eAAe,OAAO,GAAG;QACxC;QAEA,OAAO,QAAQ,MAAM,CAAC,MAAM,CAAC,EAAE;IACjC;IAEA,UAAU;IACV,IAAI,eAAe;QACjB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK;QAC5B,MAAM,QAAQ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;QACnC,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,OAAO;QAErC,IAAI,OAAO,UAAU,UACnB,OAAO,MAAM,OAAO,GAAG;QAGzB,IAAI,OAAO,UAAU,YAAY,MAAM,QAAQ,CAAC,MAAM;YACpD,MAAM,QAAQ,OAAO,UAAU,CAAC,SAAS;YACzC,OAAO,MAAM,eAAe,OAAO,GAAG;QACxC;QAEA,OAAO,QAAQ,MAAM,CAAC,MAAM,CAAC,EAAE;IACjC;IAEA,WAAW;IACX,IAAI,WAAW;QACb,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK;QAC5B,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,OAAO;QAErC,MAAM,WAAW,IAAI,CAAC,MAAM,CAAC,QAAQ;QAErC,IAAI,OAAO,aAAa,UACtB,OAAO,KAAK,KAAK,CAAC,MAAM,UAAU,IAAI;QAGxC,IAAI,OAAO,aAAa,YAAY,SAAS,QAAQ,CAAC,MAAM;YAC1D,MAAM,QAAQ,OAAO,UAAU,CAAC,YAAY;YAC5C,OAAO,KAAK,KAAK,CAAC,MAAM,eAAe,OAAO,IAAI;QACpD;QAEA,OAAO,QAAQ,MAAM,CAAC,QAAQ;IAChC;IAEA,YAAY;IACZ,IAAI,OAAO;QACT,MAAM,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,SAAS,aAAa,CAAC;QACxD,KAAK,KAAK,CAAC,OAAO,GAAG,QAAQ,OAAO;QACpC,KAAK,OAAO,CAAC,IAAI,GAAG;QACpB,KAAK,OAAO,CAAC,EAAE,GAAG;QAClB,KAAK,SAAS,GAAG;QACjB,OAAO;IACT;IAEA,aAAa;IACb,IAAI,SAAS;QACX,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,GAAG;QAEhC,MAAM,SAAS,EAAE;QAEjB,8BAA8B;QAC9B,IAAI,CAAC,MAAM,CAAC,SAAS,CAAA,QAAS,OAAO,IAAI,CAAC;QAE1C,sBAAsB;QACtB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACnB,IAAI,cAAc,OAAO,MAAM,IAAI,IAAI,MAAM,IAAI,IAAI,cAAc,KACjE,OAAO,IAAI,CAAC;QAEhB;QAEA,OAAO;IACT;IAEA,0BAA0B;IAC1B,IAAI,WAAW;QACb,MAAM,SAAS,EAAE;QACjB,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO;QACpC,MAAM,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO;QAE5C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACnB,MAAM,MAAM,MAAM,IAAI,CAAC,SAAS;YAChC,MAAM,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI;YACxC,MAAM,SAAS,MAAM,IAAI,CAAC,YAAY;YACtC,MAAM,QAAQ,MAAM,IAAI,CAAC,WAAW;YACpC,MAAM,WAAW,OAAO;YACxB,MAAM,QAAQ,cAAc;YAC5B,MAAM,QAAQ,WAAW,MAAM,SAAS;YAExC,MAAM,OAAO,CAAC;YACd,KAAK,GAAG,GAAG;YACX,KAAK,IAAI,GAAG;YACZ,KAAK,MAAM,GAAG;YACd,KAAK,KAAK,GAAG;YACb,KAAK,KAAK,GAAG;YACb,KAAK,KAAK,GAAG;YACb,KAAK,QAAQ,GAAG;YAChB,KAAK,IAAI,GAAG,MAAM,SAAS;YAC3B,KAAK,IAAI,GAAG,MAAM,IAAI;YAEtB,OAAO,IAAI,CAAC;QACd;QAEA,OAAO;IACT;IAEA,SAAS;IACT,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,mBAAmB,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,GAC3D,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,IAChD,IAAI,CAAC,MAAM,CAAC,KAAK;IACvB;IAEA,OAAO;IACP,MAAM,KAAK,OAAO,EAAE;QAClB,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK;QAElC,IAAI,SAAS,EAAE;QACf,MAAM,SAAS,WAAW,IAAI,CAAC,MAAM,CAAC,OAAO;QAE7C,IAAI;YACF,IAAI,OAAO,WAAW,YACpB,SAAS,MAAM,SAAS,SAAS;;iBAE9B,IAAI,kBAAkB,SACzB,SAAS,MAAM,OAAO,iBAAiB;;iBAEpC,IAAI,OAAO,WAAW,UACzB,SAAS,MAAM,CAAA,GAAA,mCAAyB,AAAD,EAAE,QAAQ,aAAa;;iBAE3D,IAAI,MAAM,OAAO,CAAC,SACrB,SAAS,OAAO,SAAS;;YAG3B,YAAY,MAAM,OAAO,CAAC,SAAS;YAEnC,0BAA0B;YAC1B,IAAI,YAAY,WAAW;gBACzB,IAAI,CAAC,KAAK,GAAG,OAAO;;gBACpB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,SAAS;;gBACzB,IAAI,CAAC,MAAM,GAAG;oBAAE,MAAM,EAAE;oBAAE,OAAO,EAAE;oBAAE,MAAM,EAAE;oBAAE,MAAM,EAAE;gBAAC,EAAE,UAAU;;gBACpE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC,aAAa;;gBAC7B,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,GAAG,QAAQ;;YACzC;YAEA,mBAAmB;YACnB,IAAK,IAAI,QAAQ,GAAG,QAAQ,OAAO,MAAM,EAAE,QAAS;gBAClD,MAAM,QAAQ,MAAM,CAAC,MAAM;gBAC3B,MAAM,IAAI,CAAC,IAAI,CAAC;YAClB;YAEA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,KAAK;QAC3D,EACA,OAAO,OAAO;YACZ,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gCAAgC;YAC9C,MAAM;QACR;QAEA,OAAO,IAAI;IACb;IAEA,eAAe;IACf,MAAM,KAAK,KAAK,EAAE;QAChB,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK;QAE5B,IAAI,CAAC,SAAS,CAAC,OAAO;YACpB,IAAI;YACJ,MAAM;YACN,MAAM;YACN,OAAO;YACP,MAAM;YACN,QAAQ;YACR,OAAO;QACT;QAEA,cAAc;QACd,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,IAClB,OAAO,IAAI;QAEb,6BAA6B;QAC7B,IAAI,MAAM,IAAI,EACZ,MAAM,IAAI,GAAG,MAAM,MAAM,IAAI,EAAE,GAAG;aAGlC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG;QAGtC,sBAAsB;QACtB,IAAI,MAAM,IAAI,KAAK,WACjB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI;QAG/B,uBAAuB;QACvB,IAAI,MAAM,KAAK,KAAK,WAClB,MAAM,KAAK,GAAG,CAAC;QAGjB,sBAAsB;QACtB,IAAI,MAAM,KAAK,KAAK,WAClB,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QAGjC,kBAAkB;QAClB,IAAI,CAAC;YAAC;YAAG;YAAG;SAAE,CAAC,QAAQ,CAAC,MAAM,IAAI,GAChC,OAAO,IAAI;QAEb,YAAY;QACZ,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QACtB,OAAO,IAAI;QAEb,UAAU;QACV,MAAM,OAAO;YACX,GAAG,KAAK;YACR,QAAQ;YACR,QAAQ,IAAI,CAAC,KAAK;YAClB,MAAM;YACN,WAAW;YACX,gBAAgB;QAClB;QAEA,YAAY;QACZ,IAAI,CAAC,QAAQ,CAAC,MAAM;QAEpB,YAAY;QACZ,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;QAEhB,WAAW;QACX,gCAAgC;QAChC,gCAAgC;QAChC,8BAA8B;QAC9B,gCAAgC;QAEhC,OAAO,IAAI;IACb;IAEA,OAAO;IACP,OAAO,MAAM,EAAE,SAAS,KAAK,EAAE;QAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK;QAC5B,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;QAE7C,aAAa;QACb,MAAM,UAAU,OAAO,IAAI,CAAC,QAAQ,IAAI,CACtC,CAAA,MAAO,KAAK,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC,IAAI;QAGxE,YAAY;QACZ,IAAI,CAAC,WAAW,CAAC,QACf,OAAO,IAAI;QAEb,QAAQ;QACR,IAAI,CAAC,MAAM,GAAG,OAAO,MAAM,CAAC,CAAC,GAAG,QAAQ,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE;QAC7D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,MAAM;QAE1C,IAAI,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG;QAC9C,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG;QAChD,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG;QACpD,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG;QACtD,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG;QACxD,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI;QAEzC,mBAAmB;QACnB,IAAI,OAAO,QAAQ,EACjB,IAAI,CAAC,KAAK;QAGZ,kBAAkB;QAClB,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EACrB,IAAI,CAAC,IAAI;aAGT,IAAI,CAAC,IAAI;QAGX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,iCAAiC,IAAI,CAAC,MAAM;QAE1D,OAAO,IAAI;IACb;IAEA,qBAAqB;IACrB,QAAQ,IAAI,EAAE;QACZ,MAAM,OAAO,KAAK,qBAAqB;QACvC,OAAO,IAAI,CAAC,QAAQ,GAAG,KAAK,GAAG,GAAG,KAAK,IAAI;IAC7C;IAEA,uBAAuB;IACvB,YAAY,UAAU,CAAC,CAAC,EAAE;QACxB,OAAO,IAAI,QAAQ,CAAC;YAClB,QAAQ,EAAE,GAAG,KAAK,GAAG,GAAG,SAAS;;YACjC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC;gBACvB,MAAM,EAAE,IAAI,EAAE,GAAG;gBACjB,aAAa;gBACb,IAAI,KAAK,EAAE,KAAK,QAAQ,EAAE,EACxB,QAAQ;YAEZ;QACF;IACF;IAEA,WAAW;IACX,OAAO,KAAK,EAAE,QAAQ,EAAE;QACtB,MAAM,SAAS,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,EAAE;QACvC,IAAK,IAAI,QAAQ,GAAG,QAAQ,OAAO,MAAM,EAAE,QACzC,SAAS,MAAM,CAAC,MAAM;QAExB,OAAO;IACT;IAEA,SAAS;IACT,SAAS,KAAK,EAAE,KAAK,EAAE;QACrB,WAAW;QACX,IAAI,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA,OAAQ,SAAS;QAE9E,QAAQ;QACR,MAAM,MAAM,GAAG;QAEf,YAAY;QACZ,IAAI,MAAM,IAAI,EACZ,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,GAAG;QAG7B,WAAW;QACX,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;IAC1B;IAEA,wBAAwB;IACxB,SAAS,KAAK,EAAE;QACd,IAAI,CAAC,QAAQ,CAAC,OAAO;QACrB,IAAI,MAAM,IAAI,EAAE;YACd,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,QAAQ,OAAO;YAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;YAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;YAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG;YAC7B,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;YAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI;YAC1B,MAAM,IAAI,GAAG;QACf;IACF;IAEA,SAAS;IACT,SAAS;QACP,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,KAAK;QAEhC,IAAI,CAAC,KAAK,GAAG,OAAO,qBAAqB,CAAC;YACxC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBACpC,gBAAgB;gBAChB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;oBACnB,MAAM,WAAW,AAAC,CAAA,KAAK,GAAG,KAAK,MAAM,cAAc,AAAD,IAAK;oBACvD,MAAM,SAAS,IAAI;oBACnB,MAAM,cAAc,GAAG,KAAK,GAAG;oBAC/B,YAAY;oBACZ,IAAI,MAAM,SAAS,IAAI,GACrB,IAAI,CAAC,QAAQ,CAAC;gBAElB;gBAEA,iCAAiC;gBACjC,MAAM,SAAS,IAAI,CAAC,MAAM;gBAE1B,IAAK,IAAI,QAAQ,GAAG,QAAQ,OAAO,MAAM,EAAE,QAAS;oBAClD,MAAM,QAAQ,MAAM,CAAC,MAAM;oBAE3B,YAAY;oBACZ,MAAM,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;oBAE9C,IAAI,OAAO;wBACT,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,OAAO;wBAClD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY;;wBACnC,MAAM,IAAI,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS;;wBAE7C,qBAAqB;wBACrB,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,MAAM,IAAI;wBAEpC,WAAW;wBACX,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;wBAC9C,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;wBAChD,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,KAAK;wBACpC,MAAM,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,MAAM,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,EAAE,GAAG;wBACtE,MAAM,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,MAAM,MAAM,GAAG,qBAAqB;wBAEvE,WAAW;wBACX,UAAU,MAAM,IAAI,EAAE,MAAM,KAAK;wBAEjC,UAAU;wBACV,MAAM,cAAc,GAAG,KAAK,GAAG;wBAE/B,WAAW;wBACX,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK;wBAE5B,YAAY;wBACZ,MAAM,WAAW,cAAc,MAAM,IAAI,CAAC,WAAW;wBAErD,YAAY;wBACZ,MAAM,EAAE,QAAQ,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC;4BAC7C,MAAM;4BACN,QAAQ;gCACN,MAAM,MAAM,IAAI;gCAChB,QAAQ,MAAM,IAAI,CAAC,YAAY;gCAC/B,OAAO,WAAW,MAAM,SAAS;4BACnC;4BACA,UAAU,IAAI,CAAC,QAAQ;4BACvB,aAAa,IAAI,CAAC,MAAM,CAAC,WAAW;4BACpC;4BACA;4BACA,cAAc,IAAI,CAAC,YAAY;4BAC/B,WAAW,IAAI,CAAC,SAAS;wBAC3B;wBAEA,IAAI,MAAM,IAAI;4BACZ,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,QAAQ,WAAW;gCACrC,IAAI,CAAC,QAAQ,CAAC,OAAO,QAAQ,YAAY;;gCACzC,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,IAAI,EAAE,CAAC;gCACjC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;gCAC9B,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,MAAM,IAAI,CAAC,gBAAgB;;gCACrD,MAAM,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,EAAE,IAAI,GAAG,YAAY;;gCAEnD,OAAQ,MAAM,IAAI;oCAChB,QAAQ;oCACR,KAAK;wCACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,YAAY,EAAE,CAAC;wCAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;wCAC9B,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,WAAW,EAAE,CAAC,SAAS,GAAG,CAAC;wCACzD,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,UAAU,EAAE,MAAM,SAAS,CAAC,WAAW,CAAC;wCACvE;oCAEF,KAAK;oCACH,gBAAgB;oCAClB,KAAK;wCACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG;wCACxB,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE,MAAM,IAAI,CAAC,WAAW,GAAG,EAAE,EAAE,CAAC;wCAChE;oCACF;wCACE;gCACJ;gCAEA,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC;4BAClD,OACK;gCACH,oDAAoD;gCACpD,IAAI,CAAC,QAAQ,CAAC,OAAO;gCACrB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI;gCAC1B,MAAM,IAAI,GAAG;4BACf;;oBAEJ;gBACF;YACF;YAEA,OAAO;YACP,IAAI,CAAC,IAAI,CAAC,MAAM,EACd,IAAI,CAAC,MAAM;QAEf;QACA,OAAO,IAAI;IACb;IAEA,6BAA6B;IAC7B,SAAS;QACP,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO;QAEpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACnB,OAAQ,MAAM,IAAI;gBAChB,QAAQ;gBACR,KAAK;oBACH,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,YAAY,EAAE,CAAC;oBAC1C;gBACF;oBACE;YACJ;QACF;QAEA,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACnB,MAAM,cAAc,GAAG,KAAK,GAAG;YAC/B,OAAQ,MAAM,IAAI;gBAChB,QAAQ;gBACR,KAAK;oBAAG;wBACN,MAAM,WAAW,cAAc,MAAM,IAAI,CAAC,WAAW;wBACrD,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,YAAY,EAAE,CAAC;wBAC1C,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,WAAW,EAAE,CAAC,SAAS,GAAG,CAAC;wBACzD,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,UAAU,EAAE,MAAM,SAAS,CAAC,WAAW,CAAC;wBACvE;oBACF;gBACA;oBACE;YACJ;QACF;IACF;IAEA,OAAO;IACP,WAAW;QACT,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,OAAO,QAAQ,YAAY;;YACzC,MAAM,cAAc,GAAG,KAAK,GAAG;YAC/B,OAAQ,MAAM,IAAI;gBAChB,UAAU;gBACV,KAAK;oBAAG;wBACN,MAAM,WAAW,cAAc,MAAM,IAAI,CAAC,WAAW;wBACrD,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,WAAW,EAAE,CAAC,SAAS,GAAG,CAAC;wBACzD,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,UAAU,EAAE,MAAM,SAAS,CAAC,WAAW,CAAC;wBACvE;oBACF;gBACA;oBACE;YACJ;QACF;QAEA,OAAO,IAAI;IACb;IAEA,OAAO;IACP,UAAU;QACR,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,OAAO;QACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC;YACnB,IAAI,CAAC,QAAQ,CAAC,OAAO,QAAQ,YAAY;;YACzC,OAAQ,MAAM,IAAI;gBAChB,UAAU;gBACV,KAAK;oBAAG;wBACN,MAAM,aAAa,cAAe,CAAA,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAA;wBACtF,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,CAAC,WAAW,EAAE,CAAC,WAAW,GAAG,CAAC;wBAC3D,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG;wBAC9B;oBACF;gBACA;oBACE;YACJ;QACF;QAEA,OAAO,IAAI;IACb;IAEA,OAAO;QACL,IAAI,CAAC,MAAM,GAAG;QACd,IAAI,CAAC,OAAO;QACZ,OAAO,oBAAoB,CAAC,IAAI,CAAC,KAAK;QACtC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACd,OAAO,IAAI;IACb;IAEA,QAAQ;QACN,IAAI,CAAC,MAAM,GAAG;QACd,IAAI,CAAC,QAAQ;QACb,IAAI,CAAC,MAAM;QACX,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACd,OAAO,IAAI;IACb;IAEA,QAAQ;QACN,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA,QAAS,IAAI,CAAC,QAAQ,CAAC;QAC1C,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACd,OAAO,IAAI;IACb;IAEA,OAAO;QACL,IAAI,CAAC,MAAM,GAAG;QACd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG;QAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG;QACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACd,OAAO,IAAI;IACb;IAEA,OAAO;QACL,IAAI,CAAC,MAAM,GAAG;QACd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,GAAG;QAC9B,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG;QACtB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;QACd,OAAO,IAAI;IACb;IAEA,UAAU;QACR,IAAI,CAAC,IAAI;QACT,IAAI,CAAC,MAAM,CAAC,SAAS;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,KAAK;QACrC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,KAAK;QACxC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,IAAI,CAAC,IAAI;QACrC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,iBAAiB,IAAI,CAAC,IAAI;QACvC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,IAAI,CAAC,KAAK;QACjC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,OAAO;QACpC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC;IAChB;AACF;kBAztBqB;;;ACHrB,OAAO,OAAO,GAAG;;;;;ACqEjB,+DAAgB;AArEhB,SAAS,QAAQ,GAAG;IAClB,OAAQ;QACN,KAAK;QACL,KAAK;QACL,KAAK;YACH,OAAO;QACT,KAAK;YACH,OAAO;QACT,KAAK;YACH,OAAO;QACT;YACE,OAAO;IACX;AACF;AAEA,SAAS,0BAA0B,SAAS;IAC1C,IAAI,OAAO,cAAc,UACvB,OAAO,EAAE;IACX,MAAM,MAAM;IACZ,MAAM,UAAU,UAAU,QAAQ,CAAC;IACnC,OAAO,MAAM,IAAI,CAAC,SACf,GAAG,CAAC,CAAC;QACJ,MAAM,OAAO,MAAM,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAClC,IAAI,KAAK,MAAM,IAAI,GAAG;YACpB,MAAM,OAAO,MAAM,MAAM,CAAC,IAAI,CAC3B,IAAI,GACJ,UAAU,CAAC,UAAU,KACrB,UAAU,CAAC,UAAU,MACrB,UAAU,CAAC,QAAQ,KACnB,UAAU,CAAC,QAAQ,KACnB,UAAU,CAAC,SAAS;YAEvB,OAAO;gBACL;gBACA,MAAM,OAAO,IAAI,CAAC,EAAE;gBACpB,MAAM,QAAQ,OAAO,IAAI,CAAC,EAAE;gBAC5B,UAAU,OAAO,IAAI,CAAC,EAAE;gBACxB,OAAO,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC,EAAE,EAAE,QAAQ,CAAC,KAAK;gBACzC,WAAW,OAAO,IAAI,CAAC,EAAE;gBACzB,MAAM,OAAO,IAAI,CAAC,EAAE;gBACpB,QAAQ,IAAI,CAAC,EAAE;gBACf,OAAO,OAAO,IAAI,CAAC,EAAE;YACvB;QACF,OAEE,OAAO;IAEX,GACC,MAAM,CAAC;AACZ;AAEA,SAAS,UAAU,EAAE,IAAI,EAAE;IACzB,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG;IACpB,IAAI,CAAC,MAAM,CAAC,KACV;IACF,MAAM,SAAS,0BAA0B;IACzC,WAAW,WAAW,CAAC;QAAE;QAAQ;IAAG;AACtC;AAEA,SAAS;IACP,MAAM,aAAa,CAAC;QACd,EAAE,QAAQ,QAAQ,GAAG;QACrB,EAAE,0BAA0B,QAAQ,GAAG;oBAC3B,EAAE,UAAU,QAAQ,GAAG;IACvC,CAAC;IACH,MAAM,OAAO,IAAI,KAAK;QAAC;KAAW,EAAE;QAAE,MAAM;IAAyB;IACrE,OAAO,IAAI,OAAO,IAAI,eAAe,CAAC;AACxC;AAEO,SAAS,0BAA0B,GAAG;IAC3C,qDAAqD;IACrD,OAAO,IAAI,QAAQ,OAAO;QACxB,MAAM,MAAM,MAAM,MAAM;QACxB,MAAM,MAAM,MAAM,IAAI,IAAI;QAE1B,IAAI;YACF,MAAM,SAAS;YACf,OAAO,SAAS,GAAG,CAAC;gBAClB,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,IAAI;gBACjC,IAAI,CAAC,MAAM,CAAC,QACV;gBACF,QAAQ;gBACR,OAAO,SAAS;YAClB;YACA,OAAO,WAAW,CAAC;gBAAE;gBAAK,IAAI,KAAK,GAAG;YAAG;QAC3C,EACA,OAAO,OAAO;YACZ,QAAQ,KAAK,CAAC,iCAAiC;YAC/C,MAAM,SAAS,0BAA0B;YACzC,QAAQ;QACV;IACF;AACF;;;AC5FA,QAAQ,cAAc,GAAG,SAAU,CAAC;IAClC,OAAO,KAAK,EAAE,UAAU,GAAG,IAAI;QAAC,SAAS;IAAC;AAC5C;AAEA,QAAQ,iBAAiB,GAAG,SAAU,CAAC;IACrC,OAAO,cAAc,CAAC,GAAG,cAAc;QAAC,OAAO;IAAI;AACrD;AAEA,QAAQ,SAAS,GAAG,SAAU,MAAM,EAAE,IAAI;IACxC,OAAO,IAAI,CAAC,QAAQ,OAAO,CAAC,SAAU,GAAG;QACvC,IACE,QAAQ,aACR,QAAQ,gBACR,OAAO,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,MAE3C;QAGF,OAAO,cAAc,CAAC,MAAM,KAAK;YAC/B,YAAY;YACZ,KAAK;gBACH,OAAO,MAAM,CAAC,IAAI;YACpB;QACF;IACF;IAEA,OAAO;AACT;AAEA,QAAQ,MAAM,GAAG,SAAU,IAAI,EAAE,QAAQ,EAAE,GAAG;IAC5C,OAAO,cAAc,CAAC,MAAM,UAAU;QACpC,YAAY;QACZ,KAAK;IACP;AACF;;;;;6CCRwB;AA1BxB,MAAM,MAAM;IACV,KAAI,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;QACrC,OAAO,AAAE,CAAA,QAAQ,KAAI,IAAM,CAAA,SAAS,MAAK,IAAO,CAAA,QAAQ,KAAI,IAAK;IACnE;IACA,OAAM,KAAK,EAAE,GAAG,EAAE,IAAI;QACpB,MAAM,IAAI,KAAK,KAAK,CAAC,QAAQ,QAAQ;QACrC,OAAO,MAAM,IAAI,CACf;YACE,QAAQ,KAAK,KAAK,CAAC,AAAC,CAAA,MAAM,KAAI,IAAK;QACrC,GACA,CAAC,GAAG;YACF,OAAO,IAAI,OAAO;QACpB;IAEJ;AACF;AAEA,SAAS,KAAK,MAAM,EAAE,MAAM;IAC1B,MAAM,UAAU,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;IACrC,MAAM,UAAU,MAAM,CAAC,EAAE,GAAG,MAAM,CAAC,EAAE;IACrC,OAAO;QACL,QAAQ,KAAK,IAAI,CAAC,WAAW,IAAI,WAAW;QAC5C,OAAO,KAAK,KAAK,CAAC,SAAS;IAC7B;AACF;AAEe,SAAS,QAAQ,GAAG,EAAE,OAAO,EAAE,MAAM;IAClD,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,WAAW,CAAC,KAAK;IAEvC,IAAI,QAAQ,CAAC,GAAG,CAAC;QACf,MAAM;QACN,UAAU;QACV,MAAM;QACN,OAAO;YACL,UAAU;YACV,KAAK;YACL,MAAM;YACN,OAAO;YACP,QAAQ;YACR,OAAO;YACP,eAAe;QACjB;QACA,SAAQ,QAAQ;YACd,IAAI,SAAS;YACb,IAAI,QAAQ;YAEZ,SAAS,OAAO,MAAM,EAAE;gBACtB,SAAS;gBACT,QAAQ;gBACR,SAAS,SAAS,GAAG;gBAErB,IAAI,CAAC,IAAI,QAAQ,IAAI,IAAI,MAAM,CAAC,MAAM,EACpC;gBAEF,MAAM,MAAM;oBACV,GAAG,SAAS,WAAW;oBACvB,GAAG,SAAS,YAAY;gBAC1B;gBAEA,MAAM,UAAU;oBACd,MAAM;oBACN,MAAM,IAAI,CAAC;oBACX,MAAM;oBACN,MAAM;oBACN,OAAO;oBACP,SAAS;oBACT,WAAW,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG;oBAC9B,UAAU,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG;oBAC7B,WAAW;oBACX,YAAY;gBACd;gBAEA,IAAI,OAAO,WAAW,UACpB,OAAO,MAAM,CAAC,SAAS;gBAGzB,IAAI,SAAS,EAAE;gBAEf,IAAI,MAAM,OAAO,CAAC,QAAQ,IAAI,MAAM,EAClC,SAAS;uBAAI;iBAAI;qBAEd;oBACH,MAAM,MAAM,IAAI,QAAQ,GAAG,IAAI,CAAC;oBAChC,IAAK,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,EAAE,KAAK,QAAQ,QAAQ,CAAE;wBACjD,MAAM,IAAI,QAAQ,KAAK,CAAC,MAAM,CAC5B,CAAC,EAAE,IAAI,EAAE,GAAK,OAAO,IAAI,OAAO,QAAQ,AAAC,CAAA,IAAI,QAAQ,QAAQ,AAAD,IAAK,KACjE,MAAM;wBACR,OAAO,IAAI,CAAC;4BAAC;4BAAG;yBAAE;oBACpB;gBACF;gBAEA,IAAI,OAAO,MAAM,KAAK,GACpB;gBAEF,MAAM,YAAY,MAAM,CAAC,OAAO,MAAM,GAAG,EAAE;gBAC3C,MAAM,QAAQ,SAAS,CAAC,EAAE;gBAC1B,MAAM,QAAQ,SAAS,CAAC,EAAE;gBAC1B,IAAI,UAAU,IAAI,CAAC,EACjB,OAAO,IAAI,CAAC;oBAAC,IAAI,CAAC;oBAAE;iBAAM;gBAG5B,MAAM,UAAU,OAAO,GAAG,CAAC,CAAA,QAAS,KAAK,CAAC,EAAE;gBAC5C,MAAM,OAAO,KAAK,GAAG,IAAI;gBACzB,MAAM,OAAO,KAAK,GAAG,IAAI;gBACzB,MAAM,OAAO,AAAC,CAAA,OAAO,IAAG,IAAK;gBAE7B,IAAK,IAAI,IAAI,GAAG,IAAI,OAAO,MAAM,EAAE,IAAK;oBACtC,MAAM,QAAQ,MAAM,CAAC,EAAE;oBACvB,MAAM,IAAI,KAAK,CAAC,EAAE;oBAClB,KAAK,CAAC,EAAE,GAAG,IAAK,CAAA,IAAI,OAAO,IAAI,QAAQ,KAAK,GAAG,IAAI,QAAQ,KAAK,AAAD,IAAK,QAAQ,SAAS;gBACvF;gBAEA,MAAM,eAAe,CAAC,SAAS,UAAU,MAAM;oBAC7C,MAAM,IAAI,YAAY;oBACtB,MAAM,IAAI,QAAQ;oBAClB,MAAM,IAAI,KAAK,GAAG;oBAClB,MAAM,OAAO,IAAI,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,QAAQ,UAAU,EAAE,GAAG,GAAG,GAAG;oBACtE,MAAM,QAAQ,EAAE,KAAK,GAAG,OAAQ,CAAA,UAAU,KAAK,EAAE,GAAG,CAAA;oBACpD,MAAM,SAAS,EAAE,MAAM,GAAG,QAAQ,SAAS;oBAC3C,MAAM,IAAI,OAAO,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,SAAS;oBACzC,MAAM,IAAI,OAAO,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,SAAS;oBACzC,OAAO;wBAAC;wBAAG;qBAAE;gBACf;gBAEA,MAAM,gBAAgB,CAAC,OAAO,GAAG;oBAC/B,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC7C,MAAM,MAAM,aAAa,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE;oBACpD,MAAM,QAAQ,MAAM,EAAE,MAAM,GAAG,IAAI,OAAO;oBAC1C,OAAO,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,OAAO;gBACpF;gBAEA,MAAM,kBAAkB,OAAO,GAAG,CAAC,CAAC;oBAClC,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,IAAI,EAAE,QAAQ,IAAI,EAAE,GAAG,IAAI,CAAC;oBAC5D,MAAM,IAAI,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,QAAQ,IAAI,EAAE,QAAQ,IAAI,EAAE,IAAI,CAAC,EAAE;oBAC3D,OAAO;wBAAC;wBAAG;qBAAE;gBACf;gBAEA,MAAM,QAAQ,gBAAgB,MAAM,CAClC,CAAC,KAAK,GAAG,GAAG,IACV,MAAM,IACF,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,GACvE,GAAG,IAAI,CAAC,EAAE,cAAc,GAAG,GAAG,IAAI,EACxC;gBAGF,SAAS,SAAS,GAAG,CAAC;sCACQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;;;kGAG2C,EAAE,QAAQ,OAAO,CAAC;kGAClB,EAAE,QAAQ,OAAO,CAAC;;;;;6DAKvD,EAAE,MAAM;;gBAErD,CAAC;gBAET,SAAS,MAAM,kBAAkB;gBACjC,QAAQ,MAAM,iBAAiB;gBAC/B,OAAO,YAAY,CAAC,UAAU,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC;gBACpD,MAAM,YAAY,CAAC,UAAU,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC;YACrD;YAEA,IAAI,EAAE,CAAC,oBAAoB;gBACzB,IAAI,UAAU,OAAO;oBACnB,OAAO,YAAY,CAAC,UAAU,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC;oBACpD,MAAM,YAAY,CAAC,UAAU,GAAG,IAAI,MAAM,GAAG,IAAI,CAAC,CAAC;gBACrD;YACF;YAEA,IAAI,EAAE,CAAC,UAAU,CAAC,MAAM;gBACtB,IAAI,UAAU,SAAS,SAAS,UAAU;oBACxC,OAAO,YAAY,CAAC,UAAU,GAAG,aAAa,IAAI,CAAC,CAAC;oBACpD,MAAM,YAAY,CAAC,UAAU,GAAG,aAAa,IAAI,CAAC,CAAC;gBACrD;YACF;YAEA,IAAI,EAAE,CAAC,SAAS,IAAM;YACtB,IAAI,EAAE,CAAC,UAAU,IAAM;YACvB,IAAI,EAAE,CAAC,iCAAiC,IAAM;YAC9C,IAAI,EAAE,CAAC,iCAAiC,CAAA,SAAU,OAAO;QAC3D;IACF;AACF;;;;;ACzLA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;AAEe,MAAM;IACnB,YAAY,GAAG,EAAE,OAAO,CAAE;QACxB,IAAI,CAAC,GAAG,GAAG;QACX,IAAI,CAAC,OAAO,GAAG;QACf,IAAI,CAAC,KAAK,GAAG,IAAI,WAAW,CAAC,KAAK;QAElC,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK;QAC/B,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,QAAQ;QACxC,SAAS,iBAAiB,WAAW;QAErC,IAAI,CAAC,QAAQ,GAAG;YACd;YACA,QAAQ;YACR,UAAU;YACV,SAAS;YACT,SAAS;YACT,cAAc;YACd,cAAc;YACd,QAAQ;YACR,aAAa;YACb,aAAa;YACb,SAAS;YACT,gBAAgB;YAChB,eAAe;YACf,eAAe;YACf,cAAc;YACd,iBAAiB;YACjB,gBAAgB;YAChB,cAAc;YACd,aAAa;YACb,QAAQ;YACR,OAAO;QACT;QAEA,IAAI,CAAC,MAAM,GAAG;YACZ,SAAS;YACT,QAAQ;YACR,UAAU;YACV,OAAO;QACT;QAEA,IAAI,CAAC,QAAQ,GAAG;QAChB,IAAI,CAAC,MAAM,GAAG;QACd,IAAI,CAAC,KAAK,GAAG;QAEb,IAAI,CAAC,cAAc;QACnB,IAAI,CAAC,aAAa;QAClB,IAAI,CAAC,YAAY;QAEjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK;QAE5B,IAAI,EAAE,CAAC,UAAU,IAAM,IAAI,CAAC,MAAM;QAClC,IAAI,EAAE,CAAC,cAAc,CAAA,QAAS,IAAI,CAAC,YAAY,CAAC;QAChD,IAAI,EAAE,CAAC,iBAAiB,CAAA,QAAS,IAAI,CAAC,YAAY,CAAC;QAEnD,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,cAAc;YAC7C,IAAI,CAAC,YAAY,CAAC;gBAChB,UAAU,IAAI,CAAC,QAAQ,CAAC,OAAO;gBAC/B,QAAQ,IAAI,CAAC,QAAQ,CAAC,YAAY;YACpC;QACF;QAEA,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,cAAc;YAC5C,IAAI,CAAC,YAAY,CAAC;gBAChB,UAAU,IAAI,CAAC,QAAQ,CAAC,MAAM;gBAC9B,QAAQ,IAAI,CAAC,QAAQ,CAAC,WAAW;YACnC;QACF;IACF;IAEA,WAAW,QAAQ;QACjB,OAAO;iBACL,CAAA,GAAA,qBAAG,AAAD;kBACF,CAAA,GAAA,sBAAI,AAAD;qBACH,CAAA,GAAA,yBAAO,AAAD;oBACN,CAAA,GAAA,wBAAM,AAAD;yBACL,CAAA,GAAA,2BAAW,AAAD;wBACV,CAAA,GAAA,0BAAU,AAAD;yBACT,CAAA,GAAA,2BAAW,AAAD;wBACV,CAAA,GAAA,0BAAU,AAAD;yBACT,CAAA,GAAA,2BAAW,AAAD;wBACV,CAAA,GAAA,0BAAU,AAAD;uBACT,CAAA,GAAA,0BAAS,AAAD;wBACR,CAAA,GAAA,2BAAU,AAAD;QACX;IACF;IAEA,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM;IAC5B;IAEA,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,eAAe;IAC/D;IAEA,IAAI,WAAW;QACb,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;QACvB,OAAO,CAAC;;gBAEI,EAAE,GAAA,qBAAG,GAAG,GAAA,sBAAI,CAAC;;;gBAGb,EAAE,GAAA,yBAAO;AACzB;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,EAAE,GAAA,2BAAW,GAAG,GAAA,0BAAU;AAC9D;AACA;AACA;AACA,oCAAoC,EAAE,GAAA,2BAAW,GAAG,GAAA,0BAAU;AAC9D;AACA;AACA;AACA,oCAAoC,EAAE,GAAA,2BAAW,GAAG,GAAA,0BAAU;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA,gCAAgC,EAAE,GAAA,0BAAS,GAAG,GAAA,2BAAU;AACxD;AACA;AACA;AACA,gCAAgC,EAAE,GAAA,0BAAS,GAAG,GAAA,2BAAU;AACxD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB,EAAE,GAAA,wBAAM;AAC5B;AACA;AACA;AACA;AACA;AACA;AACA,wCAAwC,EAAE,GAAA,0BAAU;AACpD;AACA;AACA;AACA,wCAAwC,EAAE,GAAA,0BAAU;AACpD;AACA;AACA;AACA,wCAAwC,EAAE,GAAA,0BAAU;AACpD;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA,QAAS,CAAC,iBAAiB,EAAE,MAAM,6CAA6C,EAAE,MAAM,QAAQ,CAAC,EAAE,IAAI,CAAC;AAC7J;AACA;AACA;AACA;AACA;AACA,8KAAiG,EAAE,OAAO,SAAS,CAAC;AACpH;AACA;AACA,QAAQ,CAAC;IACP;IAEA,IAAI,UAAU;QACZ,OAAO;YACL,KAAK;YACL,KAAK;YACL,OAAO,EAAE;YACT,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO;QACxB;IACF;IAEA,IAAI,YAAY;QACd,OAAO;YACL,KAAK;YACL,KAAK;YACL,OAAO,EAAE;YACT,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS;QAC1B;IACF;IAEA,IAAI,SAAS;QACX,OAAO;YACL,KAAK;YACL,KAAK;YACL,OAAO;gBACL;oBACE,MAAM;oBACN,OAAO;wBAAC;wBAAI;qBAAM;gBACpB;gBACA;oBACE,MAAM;oBACN,OAAO;wBAAC;wBAAI;qBAAM;gBACpB;gBACA;oBACE,MAAM;oBACN,OAAO;wBAAC;wBAAI;qBAAM;gBACpB;gBACA;oBACE,MAAM;oBACN,OAAO;wBAAC;wBAAI;qBAAG;gBACjB;aACD;YACD,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM;QACvB;IACF;IAEA,IAAI,QAAQ;QACV,OAAO;YACL,KAAK;YACL,KAAK;YACL,OAAO;gBACL;oBACE,MAAM;oBACN,OAAO;gBACT;gBACA;oBACE,MAAM;oBACN,OAAO;oBACP,MAAM;gBACR;gBACA;oBACE,MAAM;oBACN,OAAO;gBACT;gBACA;oBACE,MAAM;oBACN,OAAO;oBACP,MAAM;gBACR;gBACA;oBACE,MAAM;oBACN,OAAO;gBACT;aACD;YACD,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK;QACtB;IACF;IAEA,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAC3B,IAAI,CAAC,MAAM,CAAC,KAAK,GACjB;YACE;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;YACA;SACD;IACP;IAEA,MAAM,QAAQ,EAAE;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,KAAK;QAC5B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ;QAClC,OAAO,MAAM,UAAU;IACzB;IAEA,OAAO,EAAE,EAAE,MAAM,EAAE;QACjB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK;QAC7B,MAAM,WAAW;eAAI,GAAG,QAAQ;SAAC;QACjC,IAAI,SAAS,QAAQ,CAAC,SACpB;QACF,OAAO,IAAI;IACb;IAEA,QAAQ,GAAG,EAAE,KAAK,EAAE;QAClB,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;QACrC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ;QAChC,QAAQ,OAAO,CAAC,IAAI,GAAG;QACvB,IAAI,IAAI,CAAC,OAAO,EACd,OAAO,OAAO,CAAC,IAAI,GAAG;IAE1B;IAEA,iBAAiB;QACf,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK;QAE7C,MAAM,WAAW,cAAc;QAC/B,SAAS,SAAS,GAAG;QACrB,SAAS,SAAS,GAAG,IAAI,CAAC,QAAQ;QAElC,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG;QACzB,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC;QACzC,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC;QAC3C,IAAI,CAAC,QAAQ,CAAC,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC;QAC1C,IAAI,CAAC,QAAQ,CAAC,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC;QACxC,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEjC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ;QAEjC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,+BAA+B;YACzC,QAAQ,SAAS;QACnB;QAEA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,+BAA+B;YACzC,QAAQ,SAAS;QACnB;IACF;IAEA,eAAe;QACb,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ;QAE9G,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,SAAS;YAC/B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO;YAC/B;YACA,IAAI,CAAC,KAAK;QACZ;QAEA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,SAAS,CAAC;YACrC,MAAM,QAAQ,MAAM,MAAM,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,OACH;YACF,MAAM,OAAO,OAAO,MAAM,OAAO,CAAC,IAAI;YACtC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,OAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA,IAAK,MAAM;YAC7C;iBAGA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClB,OAAO;uBAAI,IAAI,CAAC,MAAM,CAAC,KAAK;oBAAE;iBAAK;YACrC;YAEF,IAAI,CAAC,KAAK;QACZ;QAEA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,SAAS;YACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClB,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW;YACvC;YACA,IAAI,CAAC,KAAK;QACZ;QAEA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,SAAS;YAClC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClB,qBAAqB,CAAC,IAAI,CAAC,MAAM,CAAC,mBAAmB;YACvD;YACA,IAAI,CAAC,KAAK;QACZ;QAEA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,SAAS,CAAC;YACpC,MAAM,QAAQ,MAAM,MAAM,CAAC,OAAO,CAAC;YACnC,IAAI,CAAC,OACH;YACF,MAAM,OAAO,OAAO,MAAM,OAAO,CAAC,IAAI;YACtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClB;YACF;YACA,IAAI,CAAC,KAAK;QACZ;QAEA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,SAAS,CAAC;YAChC,MAAM,SAAS,MAAM,MAAM,CAAC,OAAO,CAAC;YACpC,IAAI,CAAC,QACH;YACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;gBAClB,OAAO,OAAO,OAAO,CAAC,KAAK;YAC7B;YACA,IAAI,CAAC,KAAK;QACZ;QAEA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,SAAS,IAAM,IAAI,CAAC,IAAI;QAE9C,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,YAAY,CAAC;YAClC,IAAI,MAAM,GAAG,KAAK,SAAS;gBACzB,MAAM,cAAc;gBACpB,IAAI,CAAC,IAAI;YACX;QACF;IACF;IAEA,gBAAgB;QACd,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;YACtC,GAAG,IAAI,CAAC,OAAO;YACf,WAAW,IAAI,CAAC,QAAQ,CAAC,cAAc;YACvC,WAAW;gBACT,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG;YAC1C;YACA,UAAU,CAAC;gBACT,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC,QAAQ;gBACvC,cAAc,WAAW,GAAG,GAAG,MAAM,CAAC,CAAC;gBACvC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAClB,SAAS,QAAQ;gBACnB;YACF;QACF;QAEA,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC;YACrC,GAAG,IAAI,CAAC,MAAM;YACd,WAAW,IAAI,CAAC,QAAQ,CAAC,aAAa;YACtC,WAAW;gBACT,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAChC,CAAA,OAAQ,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YAE9F;YACA,UAAU,CAAC;gBACT,MAAM,SAAS,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;gBACvC,IAAI,CAAC,QACH;gBACF,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,CAAC,QAAQ;gBACtC,aAAa,WAAW,GAAG,OAAO,IAAI;gBACtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAClB,QAAQ,OAAO,KAAK;gBACtB;YACF;QACF;QAEA,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC;YACvC,GAAG,IAAI,CAAC,SAAS;YACjB,WAAW,IAAI,CAAC,QAAQ,CAAC,eAAe;YACxC,WAAW;gBACT,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC9B;YACA,UAAU,CAAC;gBACT,MAAM,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC,QAAQ;gBACxC,eAAe,WAAW,GAAG,GAAG,MAAM,EAAE,CAAC;gBACzC,IAAI,UAAU,IAAI,CAAC,OAAO,CAAC,QAAQ,EACjC;gBACF,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAClB,UAAU;gBACZ;YACF;QACF;QAEA,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC;YACpC,GAAG,IAAI,CAAC,KAAK;YACb,WAAW,IAAI,CAAC,QAAQ,CAAC,YAAY;YACrC,WAAW;gBACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA,OAAQ,KAAK,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK;YAC5E;YACA,UAAU,CAAC;gBACT,MAAM,QAAQ,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM;gBACrC,IAAI,CAAC,OACH;gBACF,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ;gBACrC,YAAY,WAAW,GAAG,MAAM,IAAI;gBACpC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;oBAClB,OAAO,MAAM,KAAK;gBACpB;YACF;QACF;IACF;IAEA,aAAa,EAAE,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK;QAE7C,SAAS,WAAW,gBAAgB;QAEpC,UAAU,SAAS,GAAG,CAAC;;;oBAGP,EAAE,MAAM,GAAG,CAAC,IAAM,CAAC,oCAAoC,CAAC,EAAE,IAAI,CAAC,IAAI;;;;;;gBAMvE,EAAE,MAAM,GAAG,CAAC,CAAA,OAAS,KAAK,IAAI,GAAG,KAAK,CAAC,6BAA6B,EAAE,KAAK,IAAI,CAAC,MAAM,CAAC,EAAG,IAAI,CAAC,IAAI;;QAE3G,CAAC;QAEL,MAAM,OAAO,MAAM,mBAAmB;QACtC,MAAM,YAAY,MAAM,wBAAwB;QAEhD,IAAI,YAAY;QAEhB,SAAS,MAAM,QAAQ,WAAW;YAChC,IAAI,QAAQ,OAAO,QAAQ,KACzB;YACF,MAAM,aAAa,AAAC,CAAA,QAAQ,GAAE,IAAM,CAAA,MAAM,GAAE;YAC5C,KAAK,KAAK,CAAC,IAAI,GAAG,GAAG,aAAa,IAAI,CAAC,CAAC;YACxC,IAAI,MAAM,MAAM,KAAK,GACnB,UAAU,KAAK,CAAC,KAAK,GAAG,KAAK,KAAK,CAAC,IAAI;YAEzC,SAAS;QACX;QAEA,SAAS,WAAW,KAAK;YACvB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,UAAU,qBAAqB;YACpE,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACrB,MAAM,QAAQ,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG;gBAC5C,MAAM,QAAQ,KAAK,KAAK,CAAC,AAAC,QAAQ,SAAW,CAAA,MAAM,GAAE,IAAK;gBAC1D,MAAM;YACR,OACK;gBACH,MAAM,QAAQ,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG;gBAC7C,MAAM,QAAQ,KAAK,KAAK,CAAC,AAAC,QAAQ,QAAU,CAAA,MAAM,GAAE,IAAK;gBACzD,MAAM;YACR;QACF;QAEA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,SAAS,CAAC;YAClC,WAAW,IAAI,CAAC,IAAI,EAAE;QACxB;QAEA,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,eAAe,CAAC;YACxC,YAAY,MAAM,MAAM,KAAK;QAC/B;QAEA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,wBAAwB,CAAC;YACnC,IAAI,WACF,WAAW,IAAI,CAAC,IAAI,EAAE;QAE1B;QAEA,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,sBAAsB,CAAC;YACjC,IAAI,WAAW;gBACb,YAAY;gBACZ,WAAW,IAAI,CAAC,IAAI,EAAE;YACxB;QACF;QAEA,OAAO;YAAE;QAAM;IACjB;IAEA,aAAa,KAAK,EAAE;QAClB,MAAM,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ;QAC3D,IAAI,IAAI,CAAC,OAAO;YACd,IAAI,OACF,IAAI,CAAC,MAAM,CAAC,iBAAiB;iBAG7B,IAAI,CAAC,MAAM,CAAC,QAAQ;eAItB,IAAI,CAAC,MAAM,CAAC,iBAAiB;IAEjC;IAEA,aAAa,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE;QACjC,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;QACrC,MAAM,cAAc,SAAS,qBAAqB;QAClD,MAAM,YAAY,OAAO,qBAAqB;QAC9C,MAAM,aAAa,QAAQ,qBAAqB;QAEhD,MAAM,OAAO,UAAU,KAAK,GAAG,IAAI,YAAY,KAAK,GAAG;QACvD,MAAM,OAAO,WAAW,IAAI,GAAI,CAAA,YAAY,IAAI,GAAG,IAAG;QACtD,MAAM,QAAQ,YAAY,KAAK,GAAG,OAAO,WAAW,KAAK;QAEzD,IAAI,OAAO,GACT,OAAO,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC;aAEpC,IAAI,QAAQ,GACf,OAAO,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,OAAO,MAAM,EAAE,CAAC;aAGxC,OAAO,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAEpC;IAEA,MAAM,OAAO;QACX,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,QAAQ;QAEhC,MAAM,OAAO,OAAO,KAAK,CAAC,IAAI;QAC9B,IAAI,CAAC,KAAK,MAAM,EACd;QACF,IAAI,IAAI,CAAC,MAAM,EACb;QACF,IAAI,IAAI,CAAC,QAAQ,EACf;QAEF,MAAM,QAAQ;YACZ;YACA,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI;YACtB,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW;QAC5B;QAEA,IAAI;YACF,IAAI,CAAC,QAAQ,GAAG;YAChB,MAAM,QAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC;YAC3C,IAAI,CAAC,QAAQ,GAAG;YAEhB,IAAI,UAAU,MACZ;YAEF,MAAM,MAAM,GAAG;YACf,OAAO,MAAM,IAAI;YACjB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAClB,OAAO,KAAK,GAAG;YAEf,IAAI,CAAC,IAAI;QACX,EACA,OAAO,OAAO;YACZ,QAAQ,KAAK,CAAC,2BAA2B;YACzC,IAAI,CAAC,QAAQ,GAAG;QAClB;IACF;IAEA,OAAO;QACL,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,KAAK;QAC/B,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ;QAE/B,IAAI,CAAC,MAAM,GAAG;QACd,IAAI,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ;QAC/B,MAAM,WAAW,GAAG;QACpB,SAAS,OAAO;QAEhB,MAAM,OAAO;YACX,IAAI,CAAC,KAAK,GAAG,WAAW;gBACtB,IAAI,SAAS,GACX,IAAI,CAAC,MAAM;qBAER;oBACH,QAAQ;oBACR,MAAM,WAAW,GAAG;oBACpB;gBACF;YACF,GAAG;QACL;QAEA;IACF;IAEA,SAAS;QACP,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK;QAClC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,QAAQ;QAC/B,aAAa,IAAI,CAAC,KAAK;QACvB,IAAI,CAAC,MAAM,GAAG;QACd,MAAM,WAAW,GAAG;QACpB,YAAY,OAAO;IACrB;IAEA,SAAS;QACP,IAAI,IAAI,CAAC,OAAO,EACd;QACF,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EACrB;QACF,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,EACxB;QACF,MAAM,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ;QACtD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,QAAQ;QAClC,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EACpC,IAAI,CAAC,MAAM,CAAC,SAAS;aAGrB,IAAI,CAAC,MAAM,CAAC,iBAAiB;IAEjC;IAEA,QAAQ;QACN,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK;QAC5C,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ;QAE1C,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK;QACzB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK;QACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK;QAC1B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK;QAEvB,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,OAAO;QAClD,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,CAAC,MAAM,CAAC,IAAI;QAC5C,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK;QAC9C,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC;QACxD,IAAI,CAAC,OAAO,CAAC,sBAAsB,IAAI,CAAC,MAAM,CAAC,WAAW;QAC1D,IAAI,CAAC,OAAO,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,mBAAmB;QAChE,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,MAAM,CAAC,KAAK;QAC9C,IAAI,CAAC,OAAO,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,OAAO;QAElD,MAAM,SAAS,QAAQ,QAAQ;QAC/B,MAAM,SAAS,MAAM,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAA,OAAQ,KAAK,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW;QACnG,UAAU,aAAa,QAAQ;QAE/B,QAAQ,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO,GAAG,6BAAS;QAEhD,IAAI,CAAC,MAAM;IACb;IAEA,MAAM,MAAM,EAAE;QACZ,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK;QAClC,MAAM,MAAM,OAAO,WAAW,WAAW,SAAS,aAAa,CAAC,UAAU;QAC1E,YAAY,KAAK,CAAC,8BAA8B,EAAE,QAAQ;QAC1D,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,QAAQ;QACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG;QACvB,IAAI,CAAC,KAAK;IACZ;AACF;kBA5tBqB;AA8tBrB,IAAI,OAAO,aAAa,aAAa;IACnC,MAAM,KAAK;IACX,IAAI,SAAS,SAAS,cAAc,CAAC;IACrC,IAAI,CAAC,QAAQ;QACX,SAAS,SAAS,aAAa,CAAC;QAChC,OAAO,EAAE,GAAG;QACZ,IAAI,SAAS,UAAU,KAAK,WAC1B,SAAS,gBAAgB,CAAC,oBAAoB;YAC5C,SAAS,IAAI,CAAC,WAAW,CAAC;QAC5B;aAGA,AAAC,CAAA,SAAS,IAAI,IAAI,SAAS,eAAe,AAAD,EAAG,WAAW,CAAC;IAE5D;IACA,OAAO,WAAW,GAAG,CAAA,GAAA,yBAAK,AAAD;AAC3B;;;AC5vBA,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG;;;ACAjB,OAAO,OAAO,GAAG","sources":["packages/artplayer-plugin-danmuku/src/index.js","packages/artplayer-plugin-danmuku/src/danmuku.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-17e4dd909398e569.js","packages/artplayer-plugin-danmuku/src/bilibili.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer-plugin-danmuku/src/heatmap.js","packages/artplayer-plugin-danmuku/src/setting.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-e06b06703f22c8eb.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-ec1a2b323654893d.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-ab14b9be0ece93ac.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-76c315480ca27c87.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-b1458ff964353dd6.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-99ebb9e9ce705f53.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-415105bf9d0dad80.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-87721bd507e67269.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-df0d0cb27ecb2329.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-b2c30279f9ecca46.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-04939e555ef8b080.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-28aea7d78a23879e.js","node_modules/@parcel/runtime-js/lib/bundles/runtime-df41fcd818e2c172.js"],"sourcesContent":["import Danmuku from './danmuku'\nimport heatmap from './heatmap'\nimport Setting from './setting'\n\nexport default function artplayerPluginDanmuku(option) {\n return (art) => {\n const danmuku = new Danmuku(art, option)\n const setting = new Setting(art, danmuku)\n\n if (danmuku.option.heatmap) {\n heatmap(art, danmuku, danmuku.option.heatmap)\n }\n\n return {\n name: 'artplayerPluginDanmuku',\n emit: danmuku.emit.bind(danmuku),\n load: danmuku.load.bind(danmuku),\n config: danmuku.config.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n reset: danmuku.reset.bind(danmuku),\n mount: setting.mount.bind(setting),\n get option() {\n return danmuku.option\n },\n get isHide() {\n return danmuku.isHide\n },\n get isStop() {\n return danmuku.isStop\n },\n }\n }\n}\n\nartplayerPluginDanmuku.icons = Setting.icons\n\nif (typeof window !== 'undefined') {\n window.artplayerPluginDanmuku = artplayerPluginDanmuku\n}\n","import workerText from 'bundle-text:./worker'\nimport { bilibiliDanmuParseFromUrl } from './bilibili'\n\nexport default class Danmuku {\n constructor(art, option) {\n const { constructor, template } = art\n\n this.utils = constructor.utils // 工具库\n this.validator = constructor.validator // 配置校验器\n this.$danmuku = template.$danmuku // 弹幕层容器\n this.$player = template.$player // 播放器容器\n\n this.art = art\n this.queue = [] // 实际弹幕队列\n this.$refs = [] // 弹幕DOM节点池\n this.isStop = false // 是否停止\n this.isHide = false // 是否隐藏\n this.timer = null // 定时器\n this.index = 0 // 弹幕索引\n\n // 格式化后的配置项\n this.option = Danmuku.option\n\n // 弹幕状态池\n this.states = { wait: [], ready: [], emit: [], stop: [] }\n\n // 初始化配置\n this.config(option, true)\n\n // 创建 Web Worker, 用于计算弹幕的 top 值\n const workerText2 = workerText.replace('export{e as default};', '')\n const blob = new Blob([workerText2], { type: 'application/javascript' })\n this.worker = new Worker(URL.createObjectURL(blob))\n\n // 绑定公用事件\n this.start = this.start.bind(this)\n this.stop = this.stop.bind(this)\n this.reset = this.reset.bind(this)\n this.resize = this.resize.bind(this)\n this.destroy = this.destroy.bind(this)\n\n // 监听事件\n art.on('video:play', this.start)\n art.on('video:playing', this.start)\n art.on('video:pause', this.stop)\n art.on('video:waiting', this.stop)\n art.on('destroy', this.destroy)\n art.on('resize', this.resize)\n\n // 开始加载弹幕\n this.load()\n }\n\n // 默认配置\n static get option() {\n return {\n danmuku: [], // 弹幕数据\n speed: 5, // 弹幕持续时间,范围在[1 ~ 10]\n margin: [10, '25%'], // 弹幕上下边距,支持像素数字和百分比\n opacity: 1, // 弹幕透明度,范围在[0 ~ 1]\n color: '#FFFFFF', // 默认弹幕颜色,可以被单独弹幕项覆盖\n mode: 0, // 默认弹幕模式: 0: 滚动,1: 顶部,2: 底部\n modes: [0, 1, 2], // 弹幕可见的模式\n fontSize: 25, // 弹幕字体大小,支持像素数字和百分比\n antiOverlap: true, // 弹幕是否防重叠\n synchronousPlayback: false, // 是否同步播放速度\n mount: undefined, // 弹幕发射器挂载点, 默认为播放器控制栏中部\n heatmap: false, // 是否开启热力图\n width: 512, // 当播放器宽度小于此值时,弹幕发射器置于播放器底部\n points: [], // 热力图数据\n filter: () => true, // 弹幕载入前的过滤器,只支持返回布尔值\n beforeEmit: () => true, // 弹幕发送前的过滤器,支持返回 Promise\n beforeVisible: () => true, // 弹幕显示前的过滤器,支持返回 Promise\n visible: true, // 弹幕层是否可见\n emitter: true, // 是否开启弹幕发射器\n maxLength: 200, // 弹幕输入框最大长度, 范围在[1 ~ 1000]\n lockTime: 5, // 输入框锁定时间,范围在[1 ~ 60]\n theme: 'dark', // 弹幕主题,支持 dark 和 light,只在自定义挂载时生效\n OPACITY: {}, // 不透明度配置项\n FONT_SIZE: {}, // 弹幕字号配置项\n MARGIN: {}, // 显示区域配置项\n SPEED: {}, // 弹幕速度配置项\n COLOR: [], // 颜色列表配置项\n }\n }\n\n // 配置校验\n static get scheme() {\n return {\n danmuku: 'array|function|string',\n speed: 'number',\n margin: 'array',\n opacity: 'number',\n color: 'string',\n mode: 'number',\n modes: 'array',\n fontSize: 'number|string',\n antiOverlap: 'boolean',\n synchronousPlayback: 'boolean',\n mount: '?htmldivelement|string',\n heatmap: 'object|boolean',\n width: 'number',\n points: 'array',\n filter: 'function',\n beforeEmit: 'function',\n beforeVisible: 'function',\n visible: 'boolean',\n emitter: 'boolean',\n maxLength: 'number',\n lockTime: 'number',\n theme: 'string',\n OPACITY: 'object',\n FONT_SIZE: 'object',\n MARGIN: 'object',\n SPEED: 'object',\n COLOR: 'array',\n }\n }\n\n // 初始弹幕样式\n static get cssText() {\n return `\n user-select: none;\n position: absolute;\n white-space: pre;\n pointer-events: none;\n perspective: 500px;\n display: inline-block;\n will-change: transform;\n font-weight: normal;\n line-height: 1.125;\n visibility: hidden;\n font-family: SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif;\n text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px;\n `\n }\n\n // 是否在移动端使用了自动旋屏,会影响弹幕的left和top值\n get isRotate() {\n return this.art.plugins?.autoOrientation?.state\n }\n\n // 计算上空白边距\n get marginTop() {\n const { clamp } = this.utils\n const value = this.option.margin[0]\n const { clientHeight } = this.$player\n\n if (typeof value === 'number') {\n return clamp(value, 0, clientHeight)\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100\n return clamp(clientHeight * ratio, 0, clientHeight)\n }\n\n return Danmuku.option.margin[0]\n }\n\n // 计算下空白边距\n get marginBottom() {\n const { clamp } = this.utils\n const value = this.option.margin[1]\n const { clientHeight } = this.$player\n\n if (typeof value === 'number') {\n return clamp(value, 0, clientHeight)\n }\n\n if (typeof value === 'string' && value.endsWith('%')) {\n const ratio = Number.parseFloat(value) / 100\n return clamp(clientHeight * ratio, 0, clientHeight)\n }\n\n return Danmuku.option.margin[1]\n }\n\n // 计算弹幕字体大小\n get fontSize() {\n const { clamp } = this.utils\n const { clientHeight } = this.$player\n\n const fontSize = this.option.fontSize\n\n if (typeof fontSize === 'number') {\n return Math.round(clamp(fontSize, 12, clientHeight))\n }\n\n if (typeof fontSize === 'string' && fontSize.endsWith('%')) {\n const ratio = Number.parseFloat(fontSize) / 100\n return Math.round(clamp(clientHeight * ratio, 12, clientHeight))\n }\n\n return Danmuku.option.fontSize\n }\n\n // 获取弹幕DOM节点\n get $ref() {\n const $ref = this.$refs.pop() || document.createElement('div')\n $ref.style.cssText = Danmuku.cssText\n $ref.dataset.mode = ''\n $ref.dataset.id = ''\n $ref.className = ''\n return $ref\n }\n\n // 获取准备好发送的弹幕\n get readys() {\n const { currentTime } = this.art\n\n const result = []\n\n // 有的是ready状态:之前因为弹幕太多而暂停发送的弹幕\n this.filter('ready', danmu => result.push(danmu))\n\n // 有的是wait状态:符合时间范围的弹幕\n this.filter('wait', (danmu) => {\n if (currentTime + 0.1 >= danmu.time && danmu.time >= currentTime - 0.1) {\n result.push(danmu)\n }\n })\n\n return result\n }\n\n // 可见的弹幕的数据,用于计算下一个弹幕的top值\n get visibles() {\n const result = []\n const { clientWidth } = this.$player\n const clientLeft = this.getLeft(this.$player)\n\n this.filter('emit', (danmu) => {\n const top = danmu.$ref.offsetTop\n const left = this.getLeft(danmu.$ref) - clientLeft\n const height = danmu.$ref.clientHeight\n const width = danmu.$ref.clientWidth\n const distance = left + width\n const right = clientWidth - distance\n const speed = distance / danmu.$restTime\n\n const emit = {}\n emit.top = top\n emit.left = left\n emit.height = height\n emit.width = width\n emit.right = right\n emit.speed = speed\n emit.distance = distance\n emit.time = danmu.$restTime\n emit.mode = danmu.mode\n\n result.push(emit)\n })\n\n return result\n }\n\n // 计算弹幕速度\n get speed() {\n return this.option.synchronousPlayback && this.art.playbackRate\n ? this.option.speed / Number(this.art.playbackRate)\n : this.option.speed\n }\n\n // 加载弹幕\n async load(danmuku) {\n const { errorHandle } = this.utils\n\n let danmus = []\n const target = danmuku || this.option.danmuku\n\n try {\n if (typeof target === 'function') {\n danmus = await target() // 异步函数获取\n }\n else if (target instanceof Promise) {\n danmus = await target // 从 Promise 对象获取\n }\n else if (typeof target === 'string') {\n danmus = await bilibiliDanmuParseFromUrl(target) // 从B站xml链接解析\n }\n else if (Array.isArray(target)) {\n danmus = target // 直接传入数组\n }\n\n errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result')\n\n // 假如没有传入弹幕参数,则清空弹幕,否则追加弹幕\n if (danmuku === undefined) {\n this.reset() // 重置弹幕\n this.queue = [] // 清空弹幕队列\n this.states = { wait: [], ready: [], emit: [], stop: [] } // 清空弹幕状态池\n this.$refs = [] // 清空弹幕DOM节点池\n this.$danmuku.textContent = '' // 清空弹幕层\n }\n\n // 逐个验证原始弹幕并转换到弹幕队列\n for (let index = 0; index < danmus.length; index++) {\n const danmu = danmus[index]\n await this.emit(danmu)\n }\n\n this.art.emit('artplayerPluginDanmuku:loaded', this.queue)\n }\n catch (error) {\n this.art.emit('artplayerPluginDanmuku:error', error)\n throw error\n }\n\n return this\n }\n\n // 把原始弹幕转换到弹幕队列\n async emit(danmu) {\n const { clamp } = this.utils\n\n this.validator(danmu, {\n id: '?string', // 弹幕唯一标识\n text: 'string', // 弹幕文本\n mode: '?number', // 弹幕模式: 0: 滚动,1: 顶部,2: 底部\n color: '?string', // 弹幕颜色\n time: '?number', // 弹幕时间\n border: '?boolean', // 弹幕是否有边框\n style: '?object', // 弹幕额外样式\n })\n\n // 弹幕文本为空则直接忽略\n if (!danmu.text.trim())\n return this\n\n // 设置弹幕时间,如果没有则默认为当前时间加 0.5 秒\n if (danmu.time) {\n danmu.time = clamp(danmu.time, 0, Infinity)\n }\n else {\n danmu.time = this.art.currentTime + 0.5\n }\n\n // 设置弹幕模式,如果没有则默认为全局配置\n if (danmu.mode === undefined) {\n danmu.mode = this.option.mode\n }\n\n // 设置弹幕单独样式,如果没有则默认为空对象\n if (danmu.style === undefined) {\n danmu.style = {}\n }\n\n // 设置弹幕颜色,如果没有则默认为全局配置\n if (danmu.color === undefined) {\n danmu.color = this.option.color\n }\n\n // 弹幕模式只能是 0, 1, 2\n if (![0, 1, 2].includes(danmu.mode))\n return this\n\n // 自定义弹幕过滤函数\n if (!this.option.filter(danmu))\n return this\n\n // 添加自定义属性\n const item = {\n ...danmu,\n $state: 'wait', // 弹幕初始状态\n $index: this.index++, // 弹幕索引\n $ref: null, // 弹幕 DOM 节点\n $restTime: 0, // 弹幕剩余时间\n $lastStartTime: 0, // 弹幕上次开始时间\n }\n\n // 转换为wait状态\n this.setState(item, 'wait')\n\n // 添加到实际弹幕队列\n this.queue.push(item)\n\n // 弹幕有四个状态:\n // - wait: 弹幕还未开始显示,没有被添加到 DOM 中\n // - ready: 弹幕准备好显示,没有被添加到 DOM 中\n // - emit: 弹幕正在显示,已经被添加到 DOM 中\n // - stop: 弹幕正在停止显示,已经被添加到 DOM 中\n\n return this\n }\n\n // 动态配置\n config(option, isInit = false) {\n const { clamp } = this.utils\n const { $controlsCenter } = this.art.template\n\n // 判断配置项是否有变化\n const changed = Object.keys(option).some(\n key => JSON.stringify(this.option[key]) !== JSON.stringify(option[key]),\n )\n\n // 没有变化则直接返回\n if (!changed && !isInit)\n return this\n\n // 更新配置项\n this.option = Object.assign({}, Danmuku.option, this.option, option)\n this.validator(this.option, Danmuku.scheme)\n\n this.option.mode = clamp(this.option.mode, 0, 2)\n this.option.speed = clamp(this.option.speed, 1, 10)\n this.option.opacity = clamp(this.option.opacity, 0, 1)\n this.option.lockTime = clamp(this.option.lockTime, 1, 60)\n this.option.maxLength = clamp(this.option.maxLength, 1, 1000)\n this.option.mount = this.option.mount || $controlsCenter\n\n // 动态配置有字体大小,需要重新渲染\n if (option.fontSize) {\n this.reset()\n }\n\n // 通过配置项控制弹幕的显示和隐藏\n if (this.option.visible) {\n this.show()\n }\n else {\n this.hide()\n }\n\n this.art.emit('artplayerPluginDanmuku:config', this.option)\n\n return this\n }\n\n // 计算DOM的left值,受到旋屏影响\n getLeft($ref) {\n const rect = $ref.getBoundingClientRect()\n return this.isRotate ? rect.top : rect.left\n }\n\n // 复杂运算交给 Web Worker 处理\n postMessage(message = {}) {\n return new Promise((resolve) => {\n message.id = Date.now() // 生成唯一标识\n this.worker.postMessage(message)\n this.worker.onmessage = (event) => {\n const { data } = event\n // 判断是否是当前的消息\n if (data.id === message.id) {\n resolve(data)\n }\n }\n })\n }\n\n // 根据状态获取弹幕\n filter(state, callback) {\n const danmus = this.states[state] || []\n for (let index = 0; index < danmus.length; index++) {\n callback(danmus[index])\n }\n return danmus\n }\n\n // 设置弹幕状态\n setState(danmu, state) {\n // 从原状态池中删除\n this.states[danmu.$state] = this.states[danmu.$state].filter(item => item !== danmu)\n\n // 设置新状态\n danmu.$state = state\n\n // 设置DOM节点状态\n if (danmu.$ref) {\n danmu.$ref.dataset.state = state\n }\n\n // 添加到新状态池中\n this.states[state].push(danmu)\n }\n\n // 重置弹幕到wait状态,回收弹幕DOM节点\n makeWait(danmu) {\n this.setState(danmu, 'wait')\n if (danmu.$ref) {\n danmu.$ref.style.cssText = Danmuku.cssText\n danmu.$ref.style.visibility = 'hidden'\n danmu.$ref.style.marginLeft = '0px'\n danmu.$ref.style.transform = 'translateX(0px)'\n danmu.$ref.style.transition = 'transform 0s linear 0s'\n this.$refs.push(danmu.$ref)\n danmu.$ref = null\n }\n }\n\n // 实时更新弹幕\n update() {\n const { setStyles } = this.utils\n\n this.timer = window.requestAnimationFrame(async () => {\n if (this.art.playing && !this.isHide) {\n // 实时计算弹幕的剩余显示时间\n this.filter('emit', (danmu) => {\n const emitTime = (Date.now() - danmu.$lastStartTime) / 1000\n danmu.$restTime -= emitTime\n danmu.$lastStartTime = Date.now()\n // 超过时间即重置弹幕\n if (danmu.$restTime <= 0) {\n this.makeWait(danmu)\n }\n })\n\n // 获取准备好发送的弹幕,可能包含ready和wait状态的弹幕\n const readys = this.readys\n\n for (let index = 0; index < readys.length; index++) {\n const danmu = readys[index]\n\n // 弹幕发送前的过滤器\n const state = await this.option.beforeVisible(danmu)\n\n if (state) {\n const { clientWidth, clientHeight } = this.$player\n danmu.$ref = this.$ref // 获取弹幕DOM节点\n danmu.$ref.textContent = danmu.text // 设置弹幕文本\n\n // 提前添加到弹幕层中,用于计算top值\n this.$danmuku.appendChild(danmu.$ref)\n\n // 设置初始弹幕样式\n danmu.$ref.style.opacity = this.option.opacity\n danmu.$ref.style.fontSize = `${this.fontSize}px`\n danmu.$ref.style.color = danmu.color\n danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : null\n danmu.$ref.style.backgroundColor = danmu.border ? 'rgb(0 0 0 / 50%)' : null\n\n // 设置单独弹幕样式\n setStyles(danmu.$ref, danmu.style)\n\n // 记录弹幕时间戳\n danmu.$lastStartTime = Date.now()\n\n // 计算弹幕剩余时间\n danmu.$restTime = this.speed\n\n // 计算弹幕滚动的距离\n const distance = clientWidth + danmu.$ref.clientWidth\n\n // 计算弹幕的top值\n const { result: top } = await this.postMessage({\n type: 'getDanmuTop',\n target: {\n mode: danmu.mode,\n height: danmu.$ref.clientHeight,\n speed: distance / danmu.$restTime,\n }, // 当前弹幕信息\n visibles: this.visibles, // 可见的弹幕的数据\n antiOverlap: this.option.antiOverlap,\n clientWidth,\n clientHeight,\n marginBottom: this.marginBottom,\n marginTop: this.marginTop,\n })\n\n if (danmu.$ref) {\n if (!this.isStop && top !== undefined) {\n this.setState(danmu, 'emit') // 转换为emit状态\n danmu.$ref.style.top = `${top}px`\n danmu.$ref.style.visibility = 'visible'\n danmu.$ref.dataset.mode = danmu.mode // CSS控制模式的显示和隐藏\n danmu.$ref.dataset.id = danmu.id || '' // 用于悬停的唯一标识\n\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0: {\n danmu.$ref.style.left = `${clientWidth}px`\n danmu.$ref.style.marginLeft = '0px'\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n case 1:\n // falls through\n case 2:\n danmu.$ref.style.left = '50%'\n danmu.$ref.style.marginLeft = `-${danmu.$ref.clientWidth / 2}px`\n break\n default:\n break\n }\n\n this.art.emit('artplayerPluginDanmuku:visible', danmu)\n }\n else {\n // 假如弹幕已经停止或者没有 top 值,则重置弹幕为ready状态,回收弹幕DOM节点,等待下次发送\n this.setState(danmu, 'ready')\n this.$refs.push(danmu.$ref)\n danmu.$ref = null\n }\n }\n }\n }\n }\n\n // 递归调用\n if (!this.isStop) {\n this.update()\n }\n })\n return this\n }\n\n // 重置正在显示的弹幕: stop/emit 状态的弹幕\n resize() {\n const { clientWidth } = this.$player\n\n this.filter('stop', (danmu) => {\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0:\n danmu.$ref.style.left = `${clientWidth}px`\n break\n default:\n break\n }\n })\n\n this.filter('emit', (danmu) => {\n danmu.$lastStartTime = Date.now()\n switch (danmu.mode) {\n // 滚动的弹幕\n case 0: {\n const distance = clientWidth + danmu.$ref.clientWidth\n danmu.$ref.style.left = `${clientWidth}px`\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n default:\n break\n }\n })\n }\n\n // 继续弹幕\n continue() {\n const { clientWidth } = this.$player\n this.filter('stop', (danmu) => {\n this.setState(danmu, 'emit') // 转换为emit状态\n danmu.$lastStartTime = Date.now()\n switch (danmu.mode) {\n // 继续滚动的弹幕\n case 0: {\n const distance = clientWidth + danmu.$ref.clientWidth\n danmu.$ref.style.transform = `translateX(${-distance}px)`\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`\n break\n }\n default:\n break\n }\n })\n\n return this\n }\n\n // 暂停弹幕\n suspend() {\n const { clientWidth } = this.$player\n this.filter('emit', (danmu) => {\n this.setState(danmu, 'stop') // 转换为stop状态\n switch (danmu.mode) {\n // 停止滚动的弹幕\n case 0: {\n const translateX = clientWidth - (this.getLeft(danmu.$ref) - this.getLeft(this.$player))\n danmu.$ref.style.transform = `translateX(${-translateX}px)`\n danmu.$ref.style.transition = 'transform 0s linear 0s'\n break\n }\n default:\n break\n }\n })\n\n return this\n }\n\n stop() {\n this.isStop = true\n this.suspend()\n window.cancelAnimationFrame(this.timer)\n this.art.emit('artplayerPluginDanmuku:stop')\n return this\n }\n\n start() {\n this.isStop = false\n this.continue()\n this.update()\n this.art.emit('artplayerPluginDanmuku:start')\n return this\n }\n\n reset() {\n this.queue.forEach(danmu => this.makeWait(danmu))\n this.art.emit('artplayerPluginDanmuku:reset')\n return this\n }\n\n show() {\n this.isHide = false\n this.$danmuku.style.opacity = 1\n this.option.visible = true\n this.art.emit('artplayerPluginDanmuku:show')\n return this\n }\n\n hide() {\n this.isHide = true\n this.$danmuku.style.opacity = 0\n this.option.visible = false\n this.art.emit('artplayerPluginDanmuku:hide')\n return this\n }\n\n destroy() {\n this.stop()\n this.worker.terminate()\n this.art.off('video:play', this.start)\n this.art.off('video:playing', this.start)\n this.art.off('video:pause', this.stop)\n this.art.off('video:waiting', this.stop)\n this.art.off('resize', this.reset)\n this.art.off('destroy', this.destroy)\n this.art.emit('artplayerPluginDanmuku:destroy')\n }\n}\n","module.exports = \"07cc0a7cc35c8e4c\";","function getMode(key) {\n switch (key) {\n case 1:\n case 2:\n case 3:\n return 0\n case 4:\n return 2\n case 5:\n return 1\n default:\n return 0\n }\n}\n\nfunction bilibiliDanmuParseFromXml(xmlString) {\n if (typeof xmlString !== 'string')\n return []\n const reg = /]*?p=\"(?

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

\n ${$on}${$off}\n
\n
\n ${$config}\n
\n
\n
\n 按类型屏蔽\n
\n
\n ${$mode_0_off}${$mode_0_on}\n
滚动
\n
\n
\n ${$mode_1_off}${$mode_1_on}\n
顶部
\n
\n
\n ${$mode_2_off}${$mode_2_on}\n
底部
\n
\n
\n
\n
\n
\n ${$check_on}${$check_off}\n 防止弹幕重叠\n
\n
\n ${$check_on}${$check_off}\n 同步视频速度\n
\n
\n
\n 不透明度\n
\n
未知
\n
\n
\n 显示区域\n
\n
未知
\n
\n
\n 弹幕字号\n
\n
未知
\n
\n
\n 弹幕速度\n
\n
未知
\n
\n
\n
\n
\n
\n
\n ${$style}\n
\n
\n
\n 模式\n
\n
\n ${$mode_0_on}\n
滚动
\n
\n
\n ${$mode_1_on}\n
顶部
\n
\n
\n ${$mode_2_on}\n
底部
\n
\n
\n
\n
\n 颜色\n
\n ${this.COLOR.map(color => `
`).join('')}\n
\n
\n
\n
\n
\n \n
发送
\n
\n `\n }\n\n get OPACITY() {\n return {\n min: 0,\n max: 100,\n steps: [],\n ...this.option.OPACITY,\n }\n }\n\n get FONT_SIZE() {\n return {\n min: 12,\n max: 120,\n steps: [],\n ...this.option.FONT_SIZE,\n }\n }\n\n get MARGIN() {\n return {\n min: 0,\n max: 3,\n steps: [\n {\n name: '1/4',\n value: [10, '75%'],\n },\n {\n name: '半屏',\n value: [10, '50%'],\n },\n {\n name: '3/4',\n value: [10, '25%'],\n },\n {\n name: '满屏',\n value: [10, 10],\n },\n ],\n ...this.option.MARGIN,\n }\n }\n\n get SPEED() {\n return {\n min: 0,\n max: 4,\n steps: [\n {\n name: '极慢',\n value: 10,\n },\n {\n name: '较慢',\n value: 7.5,\n hide: true,\n },\n {\n name: '适中',\n value: 5,\n },\n {\n name: '较快',\n value: 2.5,\n hide: true,\n },\n {\n name: '极快',\n value: 1,\n },\n ],\n ...this.option.SPEED,\n }\n }\n\n get COLOR() {\n return this.option.COLOR.length\n ? this.option.COLOR\n : [\n '#FE0302',\n '#FF7204',\n '#FFAA02',\n '#FFD302',\n '#FFFF00',\n '#A0EE00',\n '#00CD00',\n '#019899',\n '#4266BE',\n '#89D5FF',\n '#CC0273',\n '#222222',\n '#9B9B9B',\n '#FFFFFF',\n ]\n }\n\n query(selector) {\n const { query } = this.utils\n const { $danmuku } = this.template\n return query(selector, $danmuku)\n }\n\n append(el, target) {\n const { append } = this.utils\n const children = [...el.children]\n if (children.includes(target))\n return\n append(el, target)\n }\n\n setData(key, value) {\n const { $player } = this.art.template\n const { $mount } = this.template\n $player.dataset[key] = value\n if (this.outside) {\n $mount.dataset[key] = value\n }\n }\n\n createTemplate() {\n const { createElement, tooltip } = this.utils\n\n const $danmuku = createElement('div')\n $danmuku.className = 'artplayer-plugin-danmuku'\n $danmuku.innerHTML = this.TEMPLATE\n\n this.template.$danmuku = $danmuku\n this.template.$toggle = this.query('.apd-toggle')\n this.template.$config = this.query('.apd-config')\n this.template.$configPanel = this.query('.apd-config-panel')\n this.template.$configModes = this.query('.apd-config-mode .apd-modes')\n this.template.$style = this.query('.apd-style')\n this.template.$stylePanel = this.query('.apd-style-panel')\n this.template.$styleModes = this.query('.apd-style-mode .apd-modes')\n this.template.$colors = this.query('.apd-colors')\n this.template.$antiOverlap = this.query('.apd-anti-overlap')\n this.template.$syncVideo = this.query('.apd-sync-video')\n this.template.$opacitySlider = this.query('.apd-config-opacity .apd-slider')\n this.template.$opacityValue = this.query('.apd-config-opacity .apd-value')\n this.template.$marginSlider = this.query('.apd-config-margin .apd-slider')\n this.template.$marginValue = this.query('.apd-config-margin .apd-value')\n this.template.$fontSizeSlider = this.query('.apd-config-fontSize .apd-slider')\n this.template.$fontSizeValue = this.query('.apd-config-fontSize .apd-value')\n this.template.$speedSlider = this.query('.apd-config-speed .apd-slider')\n this.template.$speedValue = this.query('.apd-config-speed .apd-value')\n this.template.$input = this.query('.apd-input')\n this.template.$send = this.query('.apd-send')\n\n const { $toggle } = this.template\n\n this.art.on('artplayerPluginDanmuku:show', () => {\n tooltip($toggle, '关闭弹幕')\n })\n\n this.art.on('artplayerPluginDanmuku:hide', () => {\n tooltip($toggle, '打开弹幕')\n })\n }\n\n createEvents() {\n const { $toggle, $configModes, $styleModes, $colors, $antiOverlap, $syncVideo, $send, $input } = this.template\n\n this.art.proxy($toggle, 'click', () => {\n this.danmuku.config({\n visible: !this.option.visible,\n })\n this.reset()\n })\n\n this.art.proxy($configModes, 'click', (event) => {\n const $mode = event.target.closest('.apd-mode')\n if (!$mode)\n return\n const mode = Number($mode.dataset.mode)\n if (this.option.modes.includes(mode)) {\n this.danmuku.config({\n modes: this.option.modes.filter(m => m !== mode),\n })\n }\n else {\n this.danmuku.config({\n modes: [...this.option.modes, mode],\n })\n }\n this.reset()\n })\n\n this.art.proxy($antiOverlap, 'click', () => {\n this.danmuku.config({\n antiOverlap: !this.option.antiOverlap,\n })\n this.reset()\n })\n\n this.art.proxy($syncVideo, 'click', () => {\n this.danmuku.config({\n synchronousPlayback: !this.option.synchronousPlayback,\n })\n this.reset()\n })\n\n this.art.proxy($styleModes, 'click', (event) => {\n const $mode = event.target.closest('.apd-mode')\n if (!$mode)\n return\n const mode = Number($mode.dataset.mode)\n this.danmuku.config({\n mode,\n })\n this.reset()\n })\n\n this.art.proxy($colors, 'click', (event) => {\n const $color = event.target.closest('.apd-color')\n if (!$color)\n return\n this.danmuku.config({\n color: $color.dataset.color,\n })\n this.reset()\n })\n\n this.art.proxy($send, 'click', () => this.emit())\n\n this.art.proxy($input, 'keypress', (event) => {\n if (event.key === 'Enter') {\n event.preventDefault()\n this.emit()\n }\n })\n }\n\n createSliders() {\n this.slider.opacity = this.createSlider({\n ...this.OPACITY,\n container: this.template.$opacitySlider,\n findIndex: () => {\n return Math.round(this.option.opacity * 100)\n },\n onChange: (index) => {\n const { $opacityValue } = this.template\n $opacityValue.textContent = `${index}%`\n this.danmuku.config({\n opacity: index / 100,\n })\n },\n })\n\n this.slider.margin = this.createSlider({\n ...this.MARGIN,\n container: this.template.$marginSlider,\n findIndex: () => {\n return this.MARGIN.steps.findIndex(\n item => item.value[0] === this.option.margin[0] && item.value[1] === this.option.margin[1],\n )\n },\n onChange: (index) => {\n const margin = this.MARGIN.steps[index]\n if (!margin)\n return\n const { $marginValue } = this.template\n $marginValue.textContent = margin.name\n this.danmuku.config({\n margin: margin.value,\n })\n },\n })\n\n this.slider.fontSize = this.createSlider({\n ...this.FONT_SIZE,\n container: this.template.$fontSizeSlider,\n findIndex: () => {\n return this.danmuku.fontSize\n },\n onChange: (index) => {\n const { $fontSizeValue } = this.template\n $fontSizeValue.textContent = `${index}px`\n if (index === this.danmuku.fontSize)\n return\n this.danmuku.config({\n fontSize: index,\n })\n },\n })\n\n this.slider.speed = this.createSlider({\n ...this.SPEED,\n container: this.template.$speedSlider,\n findIndex: () => {\n return this.SPEED.steps.findIndex(item => item.value === this.option.speed)\n },\n onChange: (index) => {\n const speed = this.SPEED.steps[index]\n if (!speed)\n return\n const { $speedValue } = this.template\n $speedValue.textContent = speed.name\n this.danmuku.config({\n speed: speed.value,\n })\n },\n })\n }\n\n createSlider({ min, max, container, findIndex, onChange, steps = [] }) {\n const { query, clamp, setStyle } = this.utils\n\n setStyle(container, 'touch-action', 'none')\n\n container.innerHTML = `\n
\n
\n ${steps.map(() => `
`).join('')}\n
\n
\n
\n
\n
\n ${steps.map(step => (step.hide ? '' : `
${step.name}
`)).join('')}\n
\n `\n\n const $dot = query('.apd-slider-dot', container)\n const $progress = query('.apd-slider-progress', container)\n\n let isDroging = false\n\n function reset(index = findIndex()) {\n if (index < min || index > max)\n return\n const percentage = (index - min) / (max - min)\n $dot.style.left = `${percentage * 100}%`\n if (steps.length === 0) {\n $progress.style.width = $dot.style.left\n }\n onChange(index)\n }\n\n function updateLeft(event) {\n const { top, height, left, width } = container.getBoundingClientRect()\n if (this.art.isRotate) {\n const value = clamp(event.clientY - top, 0, height)\n const index = Math.round((value / height) * (max - min) + min)\n reset(index)\n }\n else {\n const value = clamp(event.clientX - left, 0, width)\n const index = Math.round((value / width) * (max - min) + min)\n reset(index)\n }\n }\n\n this.art.proxy(container, 'click', (event) => {\n updateLeft.call(this, event)\n })\n\n this.art.proxy(container, 'pointerdown', (event) => {\n isDroging = event.button === 0\n })\n\n this.art.on('document:pointermove', (event) => {\n if (isDroging) {\n updateLeft.call(this, event)\n }\n })\n\n this.art.on('document:pointerup', (event) => {\n if (isDroging) {\n isDroging = false\n updateLeft.call(this, event)\n }\n })\n\n return { reset }\n }\n\n onFullscreen(state) {\n const { $danmuku, $controlsCenter, $mount } = this.template\n if (this.outside) {\n if (state) {\n this.append($controlsCenter, $danmuku)\n }\n else {\n this.append($mount, $danmuku)\n }\n }\n else {\n this.append($controlsCenter, $danmuku)\n }\n }\n\n onMouseEnter({ $control, $panel }) {\n const { $player } = this.art.template\n const controlRect = $control.getBoundingClientRect()\n const panelRect = $panel.getBoundingClientRect()\n const playerRect = $player.getBoundingClientRect()\n\n const half = panelRect.width / 2 - controlRect.width / 2\n const left = playerRect.left - (controlRect.left - half)\n const right = controlRect.right + half - playerRect.right\n\n if (left > 0) {\n $panel.style.left = `${-half + left}px`\n }\n else if (right > 0) {\n $panel.style.left = `${-half - right}px`\n }\n else {\n $panel.style.left = `${-half}px`\n }\n }\n\n async emit() {\n const { $input } = this.template\n\n const text = $input.value.trim()\n if (!text.length)\n return\n if (this.isLock)\n return\n if (this.emitting)\n return\n\n const danmu = {\n text,\n mode: this.option.mode,\n color: this.option.color,\n time: this.art.currentTime,\n }\n\n try {\n this.emitting = true\n const state = await this.option.beforeEmit(danmu)\n this.emitting = false\n\n if (state !== true)\n return\n\n danmu.border = true\n delete danmu.time\n this.danmuku.emit(danmu)\n $input.value = ''\n\n this.lock()\n }\n catch (error) {\n console.error('Error emitting danmuku:', error)\n this.emitting = false\n }\n }\n\n lock() {\n const { addClass } = this.utils\n const { $send } = this.template\n\n this.isLock = true\n let time = this.option.lockTime\n $send.textContent = time\n addClass($send, 'apd-lock')\n\n const loop = () => {\n this.timer = setTimeout(() => {\n if (time === 0) {\n this.unlock()\n }\n else {\n time -= 1\n $send.textContent = time\n loop()\n }\n }, 1000)\n }\n\n loop()\n }\n\n unlock() {\n const { removeClass } = this.utils\n const { $send } = this.template\n clearTimeout(this.timer)\n this.isLock = false\n $send.textContent = '发送'\n removeClass($send, 'apd-lock')\n }\n\n resize() {\n if (this.outside)\n return\n if (this.art.fullscreen)\n return\n if (this.art.fullscreenWeb)\n return\n const { $player, $controlsCenter } = this.art.template\n const { $danmuku } = this.template\n if (this.art.width < this.option.width) {\n this.append($player, $danmuku)\n }\n else {\n this.append($controlsCenter, $danmuku)\n }\n }\n\n reset() {\n const { inverseClass, tooltip } = this.utils\n const { $toggle, $colors } = this.template\n\n this.slider.opacity.reset()\n this.slider.margin.reset()\n this.slider.fontSize.reset()\n this.slider.speed.reset()\n\n this.setData('danmukuVisible', this.option.visible)\n this.setData('danmukuMode', this.option.mode)\n this.setData('danmukuColor', this.option.color)\n this.setData('danmukuMode0', this.option.modes.includes(0))\n this.setData('danmukuMode1', this.option.modes.includes(1))\n this.setData('danmukuMode2', this.option.modes.includes(2))\n this.setData('danmukuAntiOverlap', this.option.antiOverlap)\n this.setData('danmukuSyncVideo', this.option.synchronousPlayback)\n this.setData('danmukuTheme', this.option.theme)\n this.setData('danmukuEmitter', this.option.emitter)\n\n const colors = $colors.children\n const $color = Array.from(colors).find(item => item.dataset.color === this.option.color.toUpperCase())\n $color && inverseClass($color, 'apd-active')\n\n tooltip($toggle, this.option.visible ? '关闭弹幕' : '打开弹幕')\n\n this.resize()\n }\n\n mount(target) {\n const { errorHandle } = this.utils\n const $el = typeof target === 'string' ? document.querySelector(target) : target\n errorHandle($el, `Can not find the mount point: ${target}`)\n this.append($el, this.template.$danmuku)\n this.template.$mount = $el\n this.reset()\n }\n}\n\nif (typeof document !== 'undefined') {\n const id = 'artplayer-plugin-danmuku'\n let $style = document.getElementById(id)\n if (!$style) {\n $style = document.createElement('style')\n $style.id = id\n if (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => {\n document.head.appendChild($style)\n })\n }\n else {\n (document.head || document.documentElement).appendChild($style)\n }\n }\n $style.textContent = style\n}\n","module.exports = \"c28963a4f139517c\";","module.exports = \"469338a744265a8b\";","module.exports = \"90842e11c6ecb43a\";","module.exports = \"e82600b1fd4599fb\";","module.exports = \"c3722bee49d765b2\";","module.exports = \"8cf82700f8fc43c1\";","module.exports = \"6cb45dc0e743e136\";","module.exports = \"4701a5f85dec4373\";","module.exports = \"223c9b9278a2222a\";","module.exports = \"ff1da11f96e97480\";","module.exports = \"c150a54789fb9dce\";","module.exports = \"cb2b742af8ffaef9\";","module.exports = \"606fae5003b81d5f\";"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"} \ No newline at end of file diff --git a/docs/uncompiled/artplayer/index.js b/docs/uncompiled/artplayer/index.js index 249a41ff1..ff1086572 100644 --- a/docs/uncompiled/artplayer/index.js +++ b/docs/uncompiled/artplayer/index.js @@ -1,1334 +1,644 @@ -// modules are defined as an array -// [ module function, map of requires ] -// -// map of requires is short require name -> numeric require -// -// anything defined in a previous bundle is accessed via the -// orig method which is the require for previous bundles - -(function ( - modules, - entry, - mainEntry, - parcelRequireName, - externals, - distDir, - publicUrl, - devServer -) { - /* eslint-disable no-undef */ - var globalObject = - typeof globalThis !== 'undefined' - ? globalThis - : typeof self !== 'undefined' - ? self - : typeof window !== 'undefined' - ? window - : typeof global !== 'undefined' - ? global - : {}; - /* eslint-enable no-undef */ - - // Save the require from previous bundle to this closure if any - var previousRequire = - typeof globalObject[parcelRequireName] === 'function' && - globalObject[parcelRequireName]; - - var importMap = previousRequire.i || {}; - var cache = previousRequire.cache || {}; - // Do not use `require` to prevent Webpack from trying to bundle this call - var nodeRequire = - typeof module !== 'undefined' && - typeof module.require === 'function' && - module.require.bind(module); - - function newRequire(name, jumped) { - if (!cache[name]) { - if (!modules[name]) { - if (externals[name]) { - return externals[name]; - } - // if we cannot find the module within our internal map or - // cache jump to the current global require ie. the last bundle - // that was added to the page. - var currentRequire = - typeof globalObject[parcelRequireName] === 'function' && - globalObject[parcelRequireName]; - if (!jumped && currentRequire) { - return currentRequire(name, true); - } - - // If there are other bundles on this page the require from the - // previous one is saved to 'previousRequire'. Repeat this as - // many times as there are bundles until the module is found or - // we exhaust the require chain. - if (previousRequire) { - return previousRequire(name, true); - } - - // Try the node require function if it exists. - if (nodeRequire && typeof name === 'string') { - return nodeRequire(name); - } - - var err = new Error("Cannot find module '" + name + "'"); - err.code = 'MODULE_NOT_FOUND'; - throw err; - } - - localRequire.resolve = resolve; - localRequire.cache = {}; - - var module = (cache[name] = new newRequire.Module(name)); - - modules[name][0].call( - module.exports, - localRequire, - module, - module.exports, - globalObject - ); - } - - return cache[name].exports; - - function localRequire(x) { - var res = localRequire.resolve(x); - if (res === false) { - return {}; - } - // Synthesize a module to follow re-exports. - if (Array.isArray(res)) { - var m = {__esModule: true}; - res.forEach(function (v) { - var key = v[0]; - var id = v[1]; - var exp = v[2] || v[0]; - var x = newRequire(id); - if (key === '*') { - Object.keys(x).forEach(function (key) { - if ( - key === 'default' || - key === '__esModule' || - Object.prototype.hasOwnProperty.call(m, key) - ) { - return; - } - - Object.defineProperty(m, key, { - enumerable: true, - get: function () { - return x[key]; - }, - }); - }); - } else if (exp === '*') { - Object.defineProperty(m, key, { - enumerable: true, - value: x, - }); - } else { - Object.defineProperty(m, key, { - enumerable: true, - get: function () { - if (exp === 'default') { - return x.__esModule ? x.default : x; - } - return x[exp]; - }, - }); - } - }); - return m; - } - return newRequire(res); - } - - function resolve(x) { - var id = modules[name][1][x]; - return id != null ? id : x; - } +var Artplayer = (function() { + "use strict"; + function getDefaultExportFromCjs(x) { + return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, "default") ? x["default"] : x; } - - function Module(moduleName) { - this.id = moduleName; - this.bundle = newRequire; - this.require = nodeRequire; - this.exports = {}; - } - - newRequire.isParcelRequire = true; - newRequire.Module = Module; - newRequire.modules = modules; - newRequire.cache = cache; - newRequire.parent = previousRequire; - newRequire.distDir = distDir; - newRequire.publicUrl = publicUrl; - newRequire.devServer = devServer; - newRequire.i = importMap; - newRequire.register = function (id, exports) { - modules[id] = [ - function (require, module) { - module.exports = exports; - }, - {}, - ]; - }; - - // Only insert newRequire.load when it is actually used. - // The code in this file is linted against ES5, so dynamic import is not allowed. - // INSERT_LOAD_HERE - - Object.defineProperty(newRequire, 'root', { - get: function () { - return globalObject[parcelRequireName]; - }, - }); - - globalObject[parcelRequireName] = newRequire; - - for (var i = 0; i < entry.length; i++) { - newRequire(entry[i]); - } - - if (mainEntry) { - // Expose entry point to Node, AMD or browser globals - // Based on https://github.com/ForbesLindesay/umd/blob/master/template.js - var mainExports = newRequire(mainEntry); - - // CommonJS - if (typeof exports === 'object' && typeof module !== 'undefined') { - module.exports = mainExports; - - // RequireJS - } else if (typeof define === 'function' && define.amd) { - define(function () { - return mainExports; - }); - } - } -})({"jHWOm":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _indexLess = require("bundle-text:./style/index.less"); -var _indexLessDefault = parcelHelpers.interopDefault(_indexLess); -var _optionValidator = require("option-validator"); -var _optionValidatorDefault = parcelHelpers.interopDefault(_optionValidator); -var _packageJson = require("../package.json"); -var _config = require("./config"); -var _configDefault = parcelHelpers.interopDefault(_config); -var _contextmenu = require("./contextmenu"); -var _contextmenuDefault = parcelHelpers.interopDefault(_contextmenu); -var _control = require("./control"); -var _controlDefault = parcelHelpers.interopDefault(_control); -var _events = require("./events"); -var _eventsDefault = parcelHelpers.interopDefault(_events); -var _hotkey = require("./hotkey"); -var _hotkeyDefault = parcelHelpers.interopDefault(_hotkey); -var _i18N = require("./i18n"); -var _i18NDefault = parcelHelpers.interopDefault(_i18N); -var _icons = require("./icons"); -var _iconsDefault = parcelHelpers.interopDefault(_icons); -var _info = require("./info"); -var _infoDefault = parcelHelpers.interopDefault(_info); -var _layer = require("./layer"); -var _layerDefault = parcelHelpers.interopDefault(_layer); -var _loading = require("./loading"); -var _loadingDefault = parcelHelpers.interopDefault(_loading); -var _mask = require("./mask"); -var _maskDefault = parcelHelpers.interopDefault(_mask); -var _notice = require("./notice"); -var _noticeDefault = parcelHelpers.interopDefault(_notice); -var _player = require("./player"); -var _playerDefault = parcelHelpers.interopDefault(_player); -var _plugins = require("./plugins"); -var _pluginsDefault = parcelHelpers.interopDefault(_plugins); -var _scheme = require("./scheme"); -var _schemeDefault = parcelHelpers.interopDefault(_scheme); -var _setting = require("./setting"); -var _settingDefault = parcelHelpers.interopDefault(_setting); -var _storage = require("./storage"); -var _storageDefault = parcelHelpers.interopDefault(_storage); -var _subtitle = require("./subtitle"); -var _subtitleDefault = parcelHelpers.interopDefault(_subtitle); -var _template = require("./template"); -var _templateDefault = parcelHelpers.interopDefault(_template); -var _utils = require("./utils"); -var _emitter = require("./utils/emitter"); -var _emitterDefault = parcelHelpers.interopDefault(_emitter); -let id = 0; -const instances = []; -class Artplayer extends (0, _emitterDefault.default) { - constructor(option, readyCallback){ - super(); - if (!_utils.isBrowser) throw new Error('Artplayer can only be used in the browser environment'); - this.id = ++id; - const mergeOption = _utils.mergeDeep(Artplayer.option, option); - mergeOption.container = option.container; - this.option = (0, _optionValidatorDefault.default)(mergeOption, (0, _schemeDefault.default)); - this.isLock = false; - this.isReady = false; - this.isFocus = false; - this.isInput = false; - this.isRotate = false; - this.isDestroy = false; - this.template = new (0, _templateDefault.default)(this); - this.events = new (0, _eventsDefault.default)(this); - this.storage = new (0, _storageDefault.default)(this); - this.icons = new (0, _iconsDefault.default)(this); - this.i18n = new (0, _i18NDefault.default)(this); - this.notice = new (0, _noticeDefault.default)(this); - this.player = new (0, _playerDefault.default)(this); - this.layers = new (0, _layerDefault.default)(this); - this.controls = new (0, _controlDefault.default)(this); - this.contextmenu = new (0, _contextmenuDefault.default)(this); - this.subtitle = new (0, _subtitleDefault.default)(this); - this.info = new (0, _infoDefault.default)(this); - this.loading = new (0, _loadingDefault.default)(this); - this.hotkey = new (0, _hotkeyDefault.default)(this); - this.mask = new (0, _maskDefault.default)(this); - this.setting = new (0, _settingDefault.default)(this); - this.plugins = new (0, _pluginsDefault.default)(this); - if (typeof readyCallback === 'function') this.on('ready', ()=>readyCallback.call(this, this)); - if (Artplayer.DEBUG) { - // eslint-disable-next-line no-console - const log = (msg)=>console.log(`[ART.${this.id}] -> ${msg}`); - log(`Version@${Artplayer.version}`); - for(let index = 0; index < (0, _configDefault.default).events.length; index++)this.on(`video:${(0, _configDefault.default).events[index]}`, (event)=>log(`Event@${event.type}`)); + var optionValidator$1 = { exports: {} }; + var optionValidator = optionValidator$1.exports; + var hasRequiredOptionValidator; + function requireOptionValidator() { + if (hasRequiredOptionValidator) return optionValidator$1.exports; + hasRequiredOptionValidator = 1; + (function(module, exports$1) { + !(function(r, t) { + module.exports = t(); + })(optionValidator, function() { + function e(r) { + return (e = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(r2) { + return typeof r2; + } : function(r2) { + return r2 && "function" == typeof Symbol && r2.constructor === Symbol && r2 !== Symbol.prototype ? "symbol" : typeof r2; + })(r); } - instances.push(this); - } - static get instances() { - return instances; - } - static get version() { - return 0, _packageJson.version; - } - static get config() { - return 0, _configDefault.default; - } - static get utils() { - return _utils; - } - static get scheme() { - return 0, _schemeDefault.default; - } - static get Emitter() { - return 0, _emitterDefault.default; - } - static get validator() { - return 0, _optionValidatorDefault.default; - } - static get kindOf() { - return (0, _optionValidatorDefault.default).kindOf; - } - static get html() { - return (0, _templateDefault.default).html; - } - static get option() { - return { - id: '', - container: '#artplayer', - url: '', - poster: '', - type: '', - theme: '#f00', - volume: 0.7, - isLive: false, - muted: false, - autoplay: false, - autoSize: false, - autoMini: false, - loop: false, - flip: false, - playbackRate: false, - aspectRatio: false, - screenshot: false, - setting: false, - hotkey: true, - pip: false, - mutex: true, - backdrop: true, - fullscreen: false, - fullscreenWeb: false, - subtitleOffset: false, - miniProgressBar: false, - useSSR: false, - playsInline: true, - lock: false, - gesture: true, - fastForward: false, - autoPlayback: false, - autoOrientation: false, - airplay: false, - proxy: undefined, - layers: [], - contextmenu: [], - controls: [], - settings: [], - quality: [], - highlight: [], - plugins: [], - thumbnails: { - url: '', - number: 60, - column: 10, - width: 0, - height: 0, - scale: 1 - }, - subtitle: { - url: '', - type: '', - style: {}, - name: '', - escape: true, - encoding: 'utf-8', - onVttLoad: (vtt)=>vtt - }, - moreVideoAttr: { - controls: false, - preload: _utils.isSafari ? 'auto' : 'metadata' - }, - i18n: {}, - icons: {}, - cssVar: {}, - customType: {}, - lang: navigator?.language.toLowerCase() - }; - } - get proxy() { - return this.events.proxy; - } - get query() { - return this.template.query; - } - get video() { - return this.template.$video; - } - reset() { - this.video.removeAttribute('src'); - this.video.load(); - } - destroy(removeHtml = true) { - if (Artplayer.REMOVE_SRC_WHEN_DESTROY) this.reset(); - this.events.destroy(); - this.template.destroy(removeHtml); - instances.splice(instances.indexOf(this), 1); - this.isDestroy = true; - this.emit('destroy'); - } -} -exports.default = Artplayer; -Artplayer.STYLE = (0, _indexLessDefault.default); -Artplayer.DEBUG = false; -Artplayer.CONTEXTMENU = true; -Artplayer.NOTICE_TIME = 2000; -Artplayer.SETTING_WIDTH = 250; -Artplayer.SETTING_ITEM_WIDTH = 200; -Artplayer.SETTING_ITEM_HEIGHT = 35; -Artplayer.RESIZE_TIME = 200; -Artplayer.SCROLL_TIME = 200; -Artplayer.SCROLL_GAP = 50; -Artplayer.AUTO_PLAYBACK_MAX = 10; -Artplayer.AUTO_PLAYBACK_MIN = 5; -Artplayer.AUTO_PLAYBACK_TIMEOUT = 3000; -Artplayer.RECONNECT_TIME_MAX = 5; -Artplayer.RECONNECT_SLEEP_TIME = 1000; -Artplayer.CONTROL_HIDE_TIME = 3000; -Artplayer.DBCLICK_TIME = 300; -Artplayer.DBCLICK_FULLSCREEN = true; -Artplayer.MOBILE_DBCLICK_PLAY = true; -Artplayer.MOBILE_CLICK_PLAY = false; -Artplayer.AUTO_ORIENTATION_TIME = 200; -Artplayer.INFO_LOOP_TIME = 1000; -Artplayer.FAST_FORWARD_VALUE = 3; -Artplayer.FAST_FORWARD_TIME = 1000; -Artplayer.TOUCH_MOVE_RATIO = 0.5; -Artplayer.VOLUME_STEP = 0.1; -Artplayer.SEEK_STEP = 5; -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.FULLSCREEN_WEB_IN_BODY = true; -Artplayer.LOG_VERSION = true; -Artplayer.USE_RAF = false; -Artplayer.REMOVE_SRC_WHEN_DESTROY = true; -if (_utils.isBrowser) { - window.Artplayer = Artplayer; - _utils.setStyleText('artplayer-style', (0, _indexLessDefault.default)); - setTimeout(()=>{ - if (Artplayer.LOG_VERSION) // eslint-disable-next-line no-console - console.log(`%c ArtPlayer %c ${Artplayer.version} %c https://artplayer.org`, 'color: #fff; background: #5f5f5f', 'color: #fff; background: #4bc729', ''); - }, 100); -} - -},{"bundle-text:./style/index.less":"bFGMG","option-validator":"9hUEm","../package.json":"3r4tp","./config":"1dlGA","./contextmenu":"dx7Zz","./control":"cNVpy","./events":"dQzlM","./hotkey":"drylQ","./i18n":"3Jf1s","./icons":"avFu3","./info":"gvEup","./layer":"7Oas9","./loading":"glZdQ","./mask":"iGxU6","./notice":"jZEIz","./player":"iA4EC","./plugins":"6P64r","./scheme":"8YPbR","./setting":"7ATN8","./storage":"grHII","./subtitle":"hxr0l","./template":"5JwMQ","./utils":"gGxPm","./utils/emitter":"2qvfs","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"bFGMG":[function(require,module,exports,__globalThis) { -module.exports = ".art-video-player {\n --art-theme: red;\n --art-font-color: #fff;\n --art-background-color: #000;\n --art-text-shadow-color: #00000080;\n --art-transition-duration: .2s;\n --art-padding: 10px;\n --art-border-radius: 3px;\n --art-progress-height: 6px;\n --art-progress-color: #ffffff40;\n --art-progress-top-gap: 8px;\n --art-hover-color: #ffffff40;\n --art-loaded-color: #ffffff40;\n --art-state-size: 80px;\n --art-state-opacity: .8;\n --art-bottom-height: 100px;\n --art-bottom-offset: 20px;\n --art-bottom-gap: 5px;\n --art-highlight-width: 8px;\n --art-highlight-color: #ffffff80;\n --art-control-height: 46px;\n --art-control-opacity: .75;\n --art-control-icon-size: 36px;\n --art-control-icon-scale: 1.1;\n --art-volume-height: 120px;\n --art-volume-handle-size: 14px;\n --art-lock-size: 36px;\n --art-indicator-scale: 0;\n --art-indicator-size: 16px;\n --art-fullscreen-web-index: 9999;\n --art-settings-icon-size: 24px;\n --art-settings-max-height: 300px;\n --art-selector-max-height: 300px;\n --art-contextmenus-min-width: 250px;\n --art-subtitle-font-size: 20px;\n --art-subtitle-gap: 5px;\n --art-subtitle-bottom: 15px;\n --art-subtitle-border: #000;\n --art-widget-background: #000000d9;\n --art-tip-background: #000000b3;\n --art-scrollbar-size: 4px;\n --art-scrollbar-background: #ffffff40;\n --art-scrollbar-background-hover: #ffffff80;\n --art-mini-progress-height: 2px;\n}\n\n.art-bg-cover {\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n}\n\n.art-bottom-gradient {\n background-image: linear-gradient(to top, #000, #0006, #0000);\n background-position: bottom;\n background-repeat: repeat-x;\n}\n\n.art-backdrop-filter {\n backdrop-filter: saturate(180%) blur(20px);\n background-color: #000000bf !important;\n}\n\n.art-truncate {\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.art-video-player {\n zoom: 1;\n text-align: left;\n user-select: none;\n box-sizing: border-box;\n width: 100%;\n height: 100%;\n color: var(--art-font-color);\n background-color: var(--art-background-color);\n text-shadow: 0 0 2px var(--art-text-shadow-color);\n -webkit-tap-highlight-color: #0000;\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n -ms-high-contrast-adjust: none;\n direction: ltr;\n outline: 0;\n margin: 0 auto;\n padding: 0;\n font-family: PingFang SC, Helvetica Neue, Microsoft YaHei, Roboto, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.3;\n position: relative;\n}\n\n.art-video-player *, .art-video-player :before, .art-video-player :after {\n box-sizing: border-box;\n}\n\n.art-video-player ::-webkit-scrollbar {\n width: var(--art-scrollbar-size);\n height: var(--art-scrollbar-size);\n}\n\n.art-video-player ::-webkit-scrollbar-thumb {\n background-color: var(--art-scrollbar-background);\n}\n\n.art-video-player ::-webkit-scrollbar-thumb:hover {\n background-color: var(--art-scrollbar-background-hover);\n}\n\n.art-video-player img {\n vertical-align: top;\n max-width: 100%;\n}\n\n.art-video-player svg {\n fill: var(--art-font-color);\n}\n\n.art-video-player a {\n color: var(--art-font-color);\n text-decoration: none;\n}\n\n.art-icon {\n justify-content: center;\n align-items: center;\n line-height: 1;\n display: flex;\n}\n\n.art-video-player.art-backdrop .art-contextmenus, .art-video-player.art-backdrop .art-info, .art-video-player.art-backdrop .art-settings, .art-video-player.art-backdrop .art-layer-auto-playback, .art-video-player.art-backdrop .art-selector-list, .art-video-player.art-backdrop .art-volume-inner {\n backdrop-filter: saturate(180%) blur(20px);\n background-color: #000000bf !important;\n}\n\n.art-video {\n z-index: 10;\n cursor: pointer;\n width: 100%;\n height: 100%;\n position: absolute;\n inset: 0;\n}\n\n.art-poster {\n z-index: 11;\n pointer-events: none;\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n width: 100%;\n height: 100%;\n position: absolute;\n inset: 0;\n}\n\n.art-video-player .art-subtitle {\n z-index: 20;\n text-align: center;\n pointer-events: none;\n justify-content: center;\n align-items: center;\n gap: var(--art-subtitle-gap);\n width: 100%;\n bottom: var(--art-subtitle-bottom);\n font-size: var(--art-subtitle-font-size);\n transition: bottom var(--art-transition-duration) ease;\n text-shadow: var(--art-subtitle-border) 1px 0 1px, var(--art-subtitle-border) 0 1px 1px, var(--art-subtitle-border) -1px 0 1px, var(--art-subtitle-border) 0 -1px 1px, var(--art-subtitle-border) 1px 1px 1px, var(--art-subtitle-border) -1px -1px 1px, var(--art-subtitle-border) 1px -1px 1px, var(--art-subtitle-border) -1px 1px 1px;\n flex-direction: column;\n padding: 0 5%;\n display: none;\n position: absolute;\n}\n\n.art-video-player.art-subtitle-show .art-subtitle {\n display: flex;\n}\n\n.art-video-player.art-control-show .art-subtitle {\n bottom: calc(var(--art-control-height) + var(--art-subtitle-bottom));\n}\n\n.art-danmuku {\n z-index: 30;\n pointer-events: none;\n width: 100%;\n height: 100%;\n position: absolute;\n inset: 0;\n overflow: hidden;\n}\n\n.art-video-player .art-layers {\n z-index: 40;\n pointer-events: none;\n width: 100%;\n height: 100%;\n display: none;\n position: absolute;\n inset: 0;\n}\n\n.art-video-player .art-layers .art-layer {\n pointer-events: auto;\n}\n\n.art-video-player.art-layer-show .art-layers {\n display: flex;\n}\n\n.art-video-player .art-mask {\n z-index: 50;\n pointer-events: none;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n display: flex;\n position: absolute;\n inset: 0;\n}\n\n.art-video-player .art-mask .art-state {\n opacity: 0;\n width: var(--art-state-size);\n height: var(--art-state-size);\n transition: all var(--art-transition-duration) ease;\n justify-content: center;\n align-items: center;\n display: flex;\n transform: scale(2);\n}\n\n.art-video-player.art-mask-show .art-state {\n cursor: pointer;\n pointer-events: auto;\n opacity: var(--art-state-opacity);\n transform: scale(1);\n}\n\n.art-video-player.art-loading-show .art-state {\n display: none;\n}\n\n.art-video-player .art-loading {\n z-index: 70;\n pointer-events: none;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n display: none;\n position: absolute;\n inset: 0;\n}\n\n.art-video-player.art-loading-show .art-loading {\n display: flex;\n}\n\n.art-video-player.art-loading-show .art-mask {\n display: none;\n}\n\n.art-video-player .art-bottom {\n z-index: 60;\n opacity: 0;\n pointer-events: none;\n width: 100%;\n height: 100%;\n padding: 0 var(--art-padding);\n transition: all var(--art-transition-duration) ease;\n background-size: 100% var(--art-bottom-height);\n background-image: linear-gradient(to top, #000, #0006, #0000);\n background-position: bottom;\n background-repeat: repeat-x;\n flex-direction: column;\n justify-content: flex-end;\n display: flex;\n position: absolute;\n inset: 0;\n overflow: hidden;\n}\n\n.art-video-player .art-bottom .art-controls, .art-video-player .art-bottom .art-progress {\n transform: translateY(var(--art-bottom-offset));\n transition: transform var(--art-transition-duration) ease;\n}\n\n.art-video-player.art-control-show .art-bottom, .art-video-player.art-hover .art-bottom {\n opacity: 1;\n}\n\n.art-video-player.art-control-show .art-bottom .art-controls, .art-video-player.art-hover .art-bottom .art-controls, .art-video-player.art-control-show .art-bottom .art-progress, .art-video-player.art-hover .art-bottom .art-progress {\n transform: translateY(0);\n}\n\n.art-bottom .art-progress {\n z-index: 0;\n pointer-events: auto;\n padding-top: var(--art-progress-top-gap);\n padding-bottom: var(--art-bottom-gap);\n position: relative;\n}\n\n.art-bottom .art-progress .art-control-progress {\n cursor: pointer;\n height: var(--art-progress-height);\n justify-content: center;\n align-items: center;\n display: flex;\n position: relative;\n}\n\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner {\n width: 100%;\n height: 50%;\n transition: height var(--art-transition-duration) ease;\n background-color: var(--art-progress-color);\n align-items: center;\n display: flex;\n position: relative;\n}\n\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover {\n z-index: 0;\n background-color: var(--art-hover-color);\n width: 0%;\n height: 100%;\n position: absolute;\n inset: 0;\n}\n\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded {\n z-index: 10;\n background-color: var(--art-loaded-color);\n width: 0%;\n height: 100%;\n position: absolute;\n inset: 0;\n}\n\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played {\n z-index: 20;\n background-color: var(--art-theme);\n width: 0%;\n height: 100%;\n position: absolute;\n inset: 0;\n}\n\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight {\n z-index: 30;\n pointer-events: none;\n width: 100%;\n height: 100%;\n position: absolute;\n inset: 0;\n}\n\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span {\n z-index: 0;\n pointer-events: auto;\n width: 100%;\n height: 100%;\n transform: translateX(calc(var(--art-highlight-width) / -2));\n background-color: var(--art-highlight-color);\n position: absolute;\n inset: 0 auto 0 0;\n width: var(--art-highlight-width) !important;\n}\n\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator {\n z-index: 40;\n width: var(--art-indicator-size);\n height: var(--art-indicator-size);\n transform: scale(var(--art-indicator-scale));\n margin-left: calc(var(--art-indicator-size) / -2);\n transition: transform var(--art-transition-duration) ease;\n border-radius: 50%;\n justify-content: center;\n align-items: center;\n display: flex;\n position: absolute;\n left: 0;\n}\n\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon {\n pointer-events: none;\n width: 100%;\n height: 100%;\n}\n\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover {\n transform: scale(1.2) !important;\n}\n\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active {\n transform: scale(1) !important;\n}\n\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip {\n transform-origin: bottom;\n opacity: 0;\n z-index: 50;\n border-radius: var(--art-border-radius);\n white-space: nowrap;\n background-color: var(--art-tip-background);\n transition: transform var(--art-transition-duration) ease, opacity var(--art-transition-duration) ease;\n padding: 3px 5px;\n font-size: 12px;\n line-height: 1;\n position: absolute;\n top: -25px;\n left: 0;\n transform: scale(.5);\n}\n\n.art-bottom .art-progress .art-control-progress:hover .art-control-progress-inner {\n height: 100%;\n}\n\n.art-bottom .art-progress .art-control-thumbnails {\n transform-origin: bottom;\n opacity: 0;\n bottom: calc(var(--art-bottom-gap) + 10px);\n border-radius: var(--art-border-radius);\n pointer-events: none;\n background-color: var(--art-widget-background);\n transition: transform var(--art-transition-duration) ease, opacity var(--art-transition-duration) ease;\n position: absolute;\n left: 0;\n transform: scale(.5);\n box-shadow: 0 1px 3px #0003, 0 1px 2px -1px #0003;\n}\n\n.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator {\n transform: scale(1);\n}\n\n.art-progress-hover .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip, .art-progress-hover .art-bottom .art-progress .art-control-thumbnails {\n opacity: 1;\n transform: scale(1);\n}\n\n.art-video-player .art-controls {\n z-index: 10;\n pointer-events: auto;\n height: var(--art-control-height);\n justify-content: space-between;\n align-items: center;\n display: flex;\n position: relative;\n}\n\n.art-video-player .art-controls .art-controls-left, .art-video-player .art-controls .art-controls-right {\n height: 100%;\n display: flex;\n}\n\n.art-video-player .art-controls .art-controls-center {\n flex: 1;\n justify-content: center;\n align-items: center;\n height: 100%;\n padding: 0 10px;\n display: none;\n}\n\n.art-video-player .art-controls .art-controls-right {\n justify-content: flex-end;\n}\n\n.art-video-player .art-controls .art-control {\n cursor: pointer;\n white-space: nowrap;\n opacity: var(--art-control-opacity);\n min-height: var(--art-control-height);\n min-width: var(--art-control-height);\n transition: opacity var(--art-transition-duration) ease;\n flex-shrink: 0;\n justify-content: center;\n align-items: center;\n display: flex;\n}\n\n.art-video-player .art-controls .art-control .art-icon {\n height: var(--art-control-icon-size);\n width: var(--art-control-icon-size);\n transform: scale(var(--art-control-icon-scale));\n transition: transform var(--art-transition-duration) ease;\n}\n\n.art-video-player .art-controls .art-control .art-icon:active {\n transform: scale(calc(var(--art-control-icon-scale) * .8));\n}\n\n.art-video-player .art-controls .art-control:hover {\n opacity: 1;\n}\n\n.art-control-volume {\n position: relative;\n}\n\n.art-control-volume .art-volume-panel {\n text-align: center;\n cursor: default;\n opacity: 0;\n pointer-events: none;\n left: 0;\n right: 0;\n bottom: var(--art-control-height);\n width: var(--art-control-height);\n height: var(--art-volume-height);\n transition: all var(--art-transition-duration) ease;\n justify-content: center;\n align-items: center;\n padding: 0 5px;\n font-size: 12px;\n display: flex;\n position: absolute;\n transform: translateY(10px);\n}\n\n.art-control-volume .art-volume-panel .art-volume-inner {\n border-radius: var(--art-border-radius);\n background-color: var(--art-widget-background);\n flex-direction: column;\n align-items: center;\n gap: 10px;\n width: 100%;\n height: 100%;\n padding: 10px 0 12px;\n display: flex;\n}\n\n.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider {\n cursor: pointer;\n flex: 1;\n justify-content: center;\n width: 100%;\n display: flex;\n position: relative;\n}\n\n.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle {\n border-radius: var(--art-border-radius);\n background-color: #ffffff40;\n justify-content: center;\n width: 2px;\n display: flex;\n position: relative;\n overflow: hidden;\n}\n\n.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded {\n z-index: 0;\n background-color: var(--art-theme);\n width: 100%;\n height: 100%;\n position: absolute;\n inset: 0;\n}\n\n.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator {\n width: var(--art-volume-handle-size);\n height: var(--art-volume-handle-size);\n margin-top: calc(var(--art-volume-handle-size) / -2);\n background-color: var(--art-theme);\n transition: transform var(--art-transition-duration) ease;\n border-radius: 100%;\n flex-shrink: 0;\n position: absolute;\n transform: scale(1);\n}\n\n.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator {\n transform: scale(.9);\n}\n\n.art-control-volume:hover .art-volume-panel {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n}\n\n.art-video-player .art-notice {\n z-index: 80;\n width: 100%;\n height: auto;\n padding: var(--art-padding);\n pointer-events: none;\n display: none;\n position: absolute;\n inset: 0 0 auto;\n}\n\n.art-video-player .art-notice .art-notice-inner {\n border-radius: var(--art-border-radius);\n background-color: var(--art-tip-background);\n padding: 5px;\n line-height: 1;\n display: inline-flex;\n}\n\n.art-video-player.art-notice-show .art-notice {\n display: flex;\n}\n\n.art-video-player .art-contextmenus {\n z-index: 120;\n border-radius: var(--art-border-radius);\n background-color: var(--art-widget-background);\n min-width: var(--art-contextmenus-min-width);\n flex-direction: column;\n padding: 5px 0;\n font-size: 12px;\n display: none;\n position: absolute;\n}\n\n.art-video-player .art-contextmenus .art-contextmenu {\n cursor: pointer;\n border-bottom: 1px solid #ffffff1a;\n padding: 10px 15px;\n display: flex;\n}\n\n.art-video-player .art-contextmenus .art-contextmenu span {\n padding: 0 8px;\n}\n\n.art-video-player .art-contextmenus .art-contextmenu span:hover, .art-video-player .art-contextmenus .art-contextmenu span.art-current {\n color: var(--art-theme);\n}\n\n.art-video-player .art-contextmenus .art-contextmenu:hover {\n background-color: #ffffff1a;\n}\n\n.art-video-player .art-contextmenus .art-contextmenu:last-child {\n border-bottom: none;\n}\n\n.art-video-player.art-contextmenu-show .art-contextmenus {\n display: flex;\n}\n\n.art-video-player .art-settings {\n z-index: 90;\n border-radius: var(--art-border-radius);\n max-height: var(--art-settings-max-height);\n left: auto;\n right: var(--art-padding);\n bottom: var(--art-control-height);\n transition: all var(--art-transition-duration) ease;\n background-color: var(--art-widget-background);\n flex-direction: column;\n display: none;\n position: absolute;\n overflow: hidden auto;\n}\n\n.art-video-player .art-settings .art-setting-panel {\n flex-direction: column;\n display: none;\n}\n\n.art-video-player .art-settings .art-setting-panel.art-current {\n display: flex;\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item {\n cursor: pointer;\n transition: background-color var(--art-transition-duration) ease;\n justify-content: space-between;\n align-items: center;\n padding: 0 5px;\n display: flex;\n overflow: hidden;\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item:hover {\n background-color: #ffffff1a;\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current {\n color: var(--art-theme);\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check {\n visibility: hidden;\n height: 15px;\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check {\n visibility: visible;\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left {\n flex-shrink: 0;\n justify-content: center;\n align-items: center;\n gap: 5px;\n display: flex;\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon {\n height: var(--art-settings-icon-size);\n width: var(--art-settings-icon-size);\n justify-content: center;\n align-items: center;\n display: flex;\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right {\n justify-content: center;\n align-items: center;\n gap: 5px;\n font-size: 12px;\n display: flex;\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip {\n white-space: nowrap;\n color: #ffffff80;\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon {\n justify-content: center;\n align-items: center;\n min-width: 32px;\n height: 24px;\n display: flex;\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range {\n appearance: none;\n background-color: #fff3;\n outline: none;\n width: 80px;\n height: 3px;\n}\n\n.art-video-player .art-settings .art-setting-panel .art-setting-item-back {\n border-bottom: 1px solid #ffffff1a;\n}\n\n.art-video-player.art-setting-show .art-settings {\n display: flex;\n}\n\n.art-video-player .art-info {\n left: var(--art-padding);\n top: var(--art-padding);\n z-index: 100;\n border-radius: var(--art-border-radius);\n background-color: var(--art-widget-background);\n padding: 10px;\n font-size: 12px;\n display: none;\n position: absolute;\n}\n\n.art-video-player .art-info .art-info-panel {\n flex-direction: column;\n gap: 5px;\n display: flex;\n}\n\n.art-video-player .art-info .art-info-panel .art-info-item {\n align-items: center;\n gap: 5px;\n display: flex;\n}\n\n.art-video-player .art-info .art-info-panel .art-info-item .art-info-title {\n text-align: right;\n width: 100px;\n}\n\n.art-video-player .art-info .art-info-panel .art-info-item .art-info-content {\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: all;\n width: 250px;\n overflow: hidden;\n}\n\n.art-video-player .art-info .art-info-close {\n cursor: pointer;\n position: absolute;\n top: 5px;\n right: 5px;\n}\n\n.art-video-player.art-info-show .art-info {\n display: flex;\n}\n\n.art-hide-cursor * {\n cursor: none !important;\n}\n\n.art-video-player[data-aspect-ratio] {\n overflow: hidden;\n}\n\n.art-video-player[data-aspect-ratio] .art-video {\n object-fit: fill;\n box-sizing: content-box;\n}\n\n.art-fullscreen {\n --art-progress-height: 8px;\n --art-indicator-size: 20px;\n --art-control-height: 60px;\n --art-control-icon-scale: 1.3;\n}\n\n.art-fullscreen-web {\n --art-progress-height: 8px;\n --art-indicator-size: 20px;\n --art-control-height: 60px;\n --art-control-icon-scale: 1.3;\n z-index: var(--art-fullscreen-web-index);\n width: 100%;\n height: 100%;\n position: fixed;\n inset: 0;\n}\n\n.art-mini-popup {\n z-index: 9999;\n border-radius: var(--art-border-radius);\n cursor: move;\n user-select: none;\n background: #000;\n width: 320px;\n height: 180px;\n transition: opacity .2s;\n position: fixed;\n overflow: hidden;\n box-shadow: 0 0 5px #00000080;\n}\n\n.art-mini-popup svg {\n fill: #fff;\n}\n\n.art-mini-popup .art-video {\n pointer-events: none;\n}\n\n.art-mini-popup .art-mini-close {\n z-index: 20;\n cursor: pointer;\n opacity: 0;\n transition: opacity .2s;\n position: absolute;\n top: 10px;\n right: 10px;\n}\n\n.art-mini-popup .art-mini-state {\n z-index: 30;\n pointer-events: none;\n opacity: 0;\n background-color: #00000040;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n transition: opacity .2s;\n display: flex;\n position: absolute;\n inset: 0;\n}\n\n.art-mini-popup .art-mini-state .art-icon {\n opacity: .75;\n cursor: pointer;\n pointer-events: auto;\n transition: transform .2s;\n transform: scale(3);\n}\n\n.art-mini-popup .art-mini-state .art-icon:active {\n transform: scale(2.5);\n}\n\n.art-mini-popup.art-mini-dragging {\n opacity: .9;\n}\n\n.art-mini-popup:hover .art-mini-close, .art-mini-popup:hover .art-mini-state {\n opacity: 1;\n}\n\n.art-video-player[data-flip=\"horizontal\"] .art-video {\n transform: scaleX(-1);\n}\n\n.art-video-player[data-flip=\"vertical\"] .art-video {\n transform: scaleY(-1);\n}\n\n.art-video-player .art-layer-lock {\n height: var(--art-lock-size);\n width: var(--art-lock-size);\n top: 50%;\n left: var(--art-padding);\n background-color: var(--art-tip-background);\n border-radius: 50%;\n justify-content: center;\n align-items: center;\n display: none;\n position: absolute;\n transform: translateY(-50%);\n}\n\n.art-video-player .art-layer-auto-playback {\n border-radius: var(--art-border-radius);\n left: var(--art-padding);\n bottom: calc(var(--art-control-height) + var(--art-bottom-gap) + 10px);\n background-color: var(--art-widget-background);\n align-items: center;\n gap: 10px;\n padding: 10px;\n line-height: 1;\n display: none;\n position: absolute;\n}\n\n.art-video-player .art-layer-auto-playback .art-auto-playback-close {\n cursor: pointer;\n justify-content: center;\n align-items: center;\n display: flex;\n}\n\n.art-video-player .art-layer-auto-playback .art-auto-playback-close svg {\n width: 15px;\n height: 15px;\n fill: var(--art-theme);\n}\n\n.art-video-player .art-layer-auto-playback .art-auto-playback-jump {\n color: var(--art-theme);\n cursor: pointer;\n}\n\n.art-video-player.art-lock .art-subtitle {\n bottom: var(--art-subtitle-bottom) !important;\n}\n\n.art-video-player.art-mini-progress-bar .art-bottom, .art-video-player.art-lock .art-bottom {\n opacity: 1;\n background-image: none;\n padding: 0;\n}\n\n.art-video-player.art-mini-progress-bar .art-bottom .art-controls, .art-video-player.art-lock .art-bottom .art-controls, .art-video-player.art-mini-progress-bar .art-bottom .art-progress, .art-video-player.art-lock .art-bottom .art-progress {\n transform: translateY(calc(var(--art-control-height) + var(--art-bottom-gap) + var(--art-progress-height) / 4));\n}\n\n.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator, .art-video-player.art-lock .art-bottom .art-progress-indicator {\n display: none !important;\n}\n\n.art-video-player.art-control-show .art-layer-lock {\n display: flex;\n}\n\n.art-control-selector {\n justify-content: center;\n display: flex;\n position: relative;\n}\n\n.art-control-selector .art-selector-list {\n text-align: center;\n border-radius: var(--art-border-radius);\n opacity: 0;\n pointer-events: none;\n bottom: var(--art-control-height);\n max-height: var(--art-selector-max-height);\n background-color: var(--art-widget-background);\n transition: all var(--art-transition-duration) ease;\n flex-direction: column;\n align-items: center;\n display: flex;\n position: absolute;\n overflow: hidden auto;\n transform: translateY(10px);\n}\n\n.art-control-selector .art-selector-list .art-selector-item {\n flex-shrink: 0;\n justify-content: center;\n align-items: center;\n width: 100%;\n padding: 10px 15px;\n line-height: 1;\n display: flex;\n}\n\n.art-control-selector .art-selector-list .art-selector-item:hover {\n background-color: #ffffff1a;\n}\n\n.art-control-selector .art-selector-list .art-selector-item:hover, .art-control-selector .art-selector-list .art-selector-item.art-current {\n color: var(--art-theme);\n}\n\n.art-control-selector:hover .art-selector-list {\n opacity: 1;\n pointer-events: auto;\n transform: translateY(0);\n}\n\n.art-video-player [class*=\"hint--\"] {\n font-style: normal;\n display: inline-block;\n position: relative;\n}\n\n.art-video-player [class*=\"hint--\"]:before, .art-video-player [class*=\"hint--\"]:after {\n visibility: hidden;\n opacity: 0;\n z-index: 1000000;\n pointer-events: none;\n transition: all .3s;\n position: absolute;\n transform: translate3d(0, 0, 0);\n}\n\n.art-video-player [class*=\"hint--\"]:hover:before, .art-video-player [class*=\"hint--\"]:hover:after {\n visibility: visible;\n opacity: 1;\n transition-delay: .1s;\n}\n\n.art-video-player [class*=\"hint--\"]:before {\n content: \"\";\n z-index: 1000001;\n background: none;\n border: 6px solid #0000;\n position: absolute;\n}\n\n.art-video-player [class*=\"hint--\"]:after {\n color: #fff;\n white-space: nowrap;\n background: #000;\n padding: 8px 10px;\n font-family: Helvetica Neue, Helvetica, Arial, sans-serif;\n font-size: 12px;\n line-height: 12px;\n}\n\n.art-video-player [class*=\"hint--\"][aria-label]:after {\n content: attr(aria-label);\n}\n\n.art-video-player [class*=\"hint--\"][data-hint]:after {\n content: attr(data-hint);\n}\n\n.art-video-player [aria-label=\"\"]:before, .art-video-player [aria-label=\"\"]:after, .art-video-player [data-hint=\"\"]:before, .art-video-player [data-hint=\"\"]:after {\n display: none !important;\n}\n\n.art-video-player .hint--top-left:before, .art-video-player .hint--top-right:before, .art-video-player .hint--top:before {\n border-top-color: #000;\n}\n\n.art-video-player .hint--bottom-left:before, .art-video-player .hint--bottom-right:before, .art-video-player .hint--bottom:before {\n border-bottom-color: #000;\n}\n\n.art-video-player .hint--left:before {\n border-left-color: #000;\n}\n\n.art-video-player .hint--right:before {\n border-right-color: #000;\n}\n\n.art-video-player .hint--top:before {\n margin-bottom: -11px;\n}\n\n.art-video-player .hint--top:before, .art-video-player .hint--top:after {\n bottom: 100%;\n left: 50%;\n}\n\n.art-video-player .hint--top:before {\n left: calc(50% - 6px);\n}\n\n.art-video-player .hint--top:after {\n transform: translateX(-50%);\n}\n\n.art-video-player .hint--top:hover:before {\n transform: translateY(-8px);\n}\n\n.art-video-player .hint--top:hover:after {\n transform: translateX(-50%)translateY(-8px);\n}\n\n.art-video-player .hint--bottom:before {\n margin-top: -11px;\n}\n\n.art-video-player .hint--bottom:before, .art-video-player .hint--bottom:after {\n top: 100%;\n left: 50%;\n}\n\n.art-video-player .hint--bottom:before {\n left: calc(50% - 6px);\n}\n\n.art-video-player .hint--bottom:after {\n transform: translateX(-50%);\n}\n\n.art-video-player .hint--bottom:hover:before {\n transform: translateY(8px);\n}\n\n.art-video-player .hint--bottom:hover:after {\n transform: translateX(-50%)translateY(8px);\n}\n\n.art-video-player .hint--right:before {\n margin-bottom: -6px;\n margin-left: -11px;\n}\n\n.art-video-player .hint--right:after {\n margin-bottom: -14px;\n}\n\n.art-video-player .hint--right:before, .art-video-player .hint--right:after {\n bottom: 50%;\n left: 100%;\n}\n\n.art-video-player .hint--right:hover:before, .art-video-player .hint--right:hover:after {\n transform: translateX(8px);\n}\n\n.art-video-player .hint--left:before {\n margin-bottom: -6px;\n margin-right: -11px;\n}\n\n.art-video-player .hint--left:after {\n margin-bottom: -14px;\n}\n\n.art-video-player .hint--left:before, .art-video-player .hint--left:after {\n bottom: 50%;\n right: 100%;\n}\n\n.art-video-player .hint--left:hover:before, .art-video-player .hint--left:hover:after {\n transform: translateX(-8px);\n}\n\n.art-video-player .hint--top-left:before {\n margin-bottom: -11px;\n}\n\n.art-video-player .hint--top-left:before, .art-video-player .hint--top-left:after {\n bottom: 100%;\n left: 50%;\n}\n\n.art-video-player .hint--top-left:before {\n left: calc(50% - 6px);\n}\n\n.art-video-player .hint--top-left:after {\n margin-left: 12px;\n transform: translateX(-100%);\n}\n\n.art-video-player .hint--top-left:hover:before {\n transform: translateY(-8px);\n}\n\n.art-video-player .hint--top-left:hover:after {\n transform: translateX(-100%)translateY(-8px);\n}\n\n.art-video-player .hint--top-right:before {\n margin-bottom: -11px;\n}\n\n.art-video-player .hint--top-right:before, .art-video-player .hint--top-right:after {\n bottom: 100%;\n left: 50%;\n}\n\n.art-video-player .hint--top-right:before {\n left: calc(50% - 6px);\n}\n\n.art-video-player .hint--top-right:after {\n margin-left: -12px;\n transform: translateX(0);\n}\n\n.art-video-player .hint--top-right:hover:before, .art-video-player .hint--top-right:hover:after {\n transform: translateY(-8px);\n}\n\n.art-video-player .hint--bottom-left:before {\n margin-top: -11px;\n}\n\n.art-video-player .hint--bottom-left:before, .art-video-player .hint--bottom-left:after {\n top: 100%;\n left: 50%;\n}\n\n.art-video-player .hint--bottom-left:before {\n left: calc(50% - 6px);\n}\n\n.art-video-player .hint--bottom-left:after {\n margin-left: 12px;\n transform: translateX(-100%);\n}\n\n.art-video-player .hint--bottom-left:hover:before {\n transform: translateY(8px);\n}\n\n.art-video-player .hint--bottom-left:hover:after {\n transform: translateX(-100%)translateY(8px);\n}\n\n.art-video-player .hint--bottom-right:before {\n margin-top: -11px;\n}\n\n.art-video-player .hint--bottom-right:before, .art-video-player .hint--bottom-right:after {\n top: 100%;\n left: 50%;\n}\n\n.art-video-player .hint--bottom-right:before {\n left: calc(50% - 6px);\n}\n\n.art-video-player .hint--bottom-right:after {\n margin-left: -12px;\n transform: translateX(0);\n}\n\n.art-video-player .hint--bottom-right:hover:before, .art-video-player .hint--bottom-right:hover:after {\n transform: translateY(8px);\n}\n\n.art-video-player .hint--small:after, .art-video-player .hint--medium:after, .art-video-player .hint--large:after {\n white-space: normal;\n word-wrap: break-word;\n line-height: 1.4em;\n}\n\n.art-video-player .hint--small:after {\n width: 80px;\n}\n\n.art-video-player .hint--medium:after {\n width: 150px;\n}\n\n.art-video-player .hint--large:after {\n width: 300px;\n}\n\n.art-video-player [class*=\"hint--\"]:after {\n text-shadow: 0 -1px #000;\n box-shadow: 4px 4px 8px #0000004d;\n}\n\n.art-video-player .hint--error:after {\n text-shadow: 0 -1px #592726;\n background-color: #b34e4d;\n}\n\n.art-video-player .hint--error.hint--top-left:before, .art-video-player .hint--error.hint--top-right:before, .art-video-player .hint--error.hint--top:before {\n border-top-color: #b34e4d;\n}\n\n.art-video-player .hint--error.hint--bottom-left:before, .art-video-player .hint--error.hint--bottom-right:before, .art-video-player .hint--error.hint--bottom:before {\n border-bottom-color: #b34e4d;\n}\n\n.art-video-player .hint--error.hint--left:before {\n border-left-color: #b34e4d;\n}\n\n.art-video-player .hint--error.hint--right:before {\n border-right-color: #b34e4d;\n}\n\n.art-video-player .hint--warning:after {\n text-shadow: 0 -1px #6c5328;\n background-color: #c09854;\n}\n\n.art-video-player .hint--warning.hint--top-left:before, .art-video-player .hint--warning.hint--top-right:before, .art-video-player .hint--warning.hint--top:before {\n border-top-color: #c09854;\n}\n\n.art-video-player .hint--warning.hint--bottom-left:before, .art-video-player .hint--warning.hint--bottom-right:before, .art-video-player .hint--warning.hint--bottom:before {\n border-bottom-color: #c09854;\n}\n\n.art-video-player .hint--warning.hint--left:before {\n border-left-color: #c09854;\n}\n\n.art-video-player .hint--warning.hint--right:before {\n border-right-color: #c09854;\n}\n\n.art-video-player .hint--info:after {\n text-shadow: 0 -1px #1a3c4d;\n background-color: #3986ac;\n}\n\n.art-video-player .hint--info.hint--top-left:before, .art-video-player .hint--info.hint--top-right:before, .art-video-player .hint--info.hint--top:before {\n border-top-color: #3986ac;\n}\n\n.art-video-player .hint--info.hint--bottom-left:before, .art-video-player .hint--info.hint--bottom-right:before, .art-video-player .hint--info.hint--bottom:before {\n border-bottom-color: #3986ac;\n}\n\n.art-video-player .hint--info.hint--left:before {\n border-left-color: #3986ac;\n}\n\n.art-video-player .hint--info.hint--right:before {\n border-right-color: #3986ac;\n}\n\n.art-video-player .hint--success:after {\n text-shadow: 0 -1px #1a321a;\n background-color: #458746;\n}\n\n.art-video-player .hint--success.hint--top-left:before, .art-video-player .hint--success.hint--top-right:before, .art-video-player .hint--success.hint--top:before {\n border-top-color: #458746;\n}\n\n.art-video-player .hint--success.hint--bottom-left:before, .art-video-player .hint--success.hint--bottom-right:before, .art-video-player .hint--success.hint--bottom:before {\n border-bottom-color: #458746;\n}\n\n.art-video-player .hint--success.hint--left:before {\n border-left-color: #458746;\n}\n\n.art-video-player .hint--success.hint--right:before {\n border-right-color: #458746;\n}\n\n.art-video-player .hint--always:after, .art-video-player .hint--always:before {\n opacity: 1;\n visibility: visible;\n}\n\n.art-video-player .hint--always.hint--top:before {\n transform: translateY(-8px);\n}\n\n.art-video-player .hint--always.hint--top:after {\n transform: translateX(-50%)translateY(-8px);\n}\n\n.art-video-player .hint--always.hint--top-left:before {\n transform: translateY(-8px);\n}\n\n.art-video-player .hint--always.hint--top-left:after {\n transform: translateX(-100%)translateY(-8px);\n}\n\n.art-video-player .hint--always.hint--top-right:before, .art-video-player .hint--always.hint--top-right:after {\n transform: translateY(-8px);\n}\n\n.art-video-player .hint--always.hint--bottom:before {\n transform: translateY(8px);\n}\n\n.art-video-player .hint--always.hint--bottom:after {\n transform: translateX(-50%)translateY(8px);\n}\n\n.art-video-player .hint--always.hint--bottom-left:before {\n transform: translateY(8px);\n}\n\n.art-video-player .hint--always.hint--bottom-left:after {\n transform: translateX(-100%)translateY(8px);\n}\n\n.art-video-player .hint--always.hint--bottom-right:before, .art-video-player .hint--always.hint--bottom-right:after {\n transform: translateY(8px);\n}\n\n.art-video-player .hint--always.hint--left:before, .art-video-player .hint--always.hint--left:after {\n transform: translateX(-8px);\n}\n\n.art-video-player .hint--always.hint--right:before, .art-video-player .hint--always.hint--right:after {\n transform: translateX(8px);\n}\n\n.art-video-player .hint--rounded:after {\n border-radius: 4px;\n}\n\n.art-video-player .hint--no-animate:before, .art-video-player .hint--no-animate:after {\n transition-duration: 0s;\n}\n\n.art-video-player .hint--bounce:before, .art-video-player .hint--bounce:after {\n -webkit-transition: opacity .3s, visibility .3s, -webkit-transform .3s cubic-bezier(.71, 1.7, .77, 1.24);\n -moz-transition: opacity .3s, visibility .3s, -moz-transform .3s cubic-bezier(.71, 1.7, .77, 1.24);\n transition: opacity .3s, visibility .3s, transform .3s cubic-bezier(.71, 1.7, .77, 1.24);\n}\n\n.art-video-player .hint--no-shadow:before, .art-video-player .hint--no-shadow:after {\n text-shadow: initial;\n box-shadow: initial;\n}\n\n.art-video-player .hint--no-arrow:before {\n display: none;\n}\n\n.art-video-player.art-mobile {\n --art-bottom-gap: 10px;\n --art-control-height: 38px;\n --art-control-icon-scale: 1;\n --art-state-size: 60px;\n --art-settings-max-height: 180px;\n --art-selector-max-height: 180px;\n --art-indicator-scale: 1;\n --art-control-opacity: 1;\n}\n\n.art-video-player.art-mobile .art-controls-left {\n margin-left: calc(var(--art-padding) / -1);\n}\n\n.art-video-player.art-mobile .art-controls-right {\n margin-right: calc(var(--art-padding) / -1);\n}\n"; - -},{}],"9hUEm":[function(require,module,exports,__globalThis) { -!function(r, t) { - module.exports = t(); -}(this, function() { - "use strict"; - function e(r) { - return (e = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(r) { - return typeof r; - } : function(r) { - return r && "function" == typeof Symbol && r.constructor === Symbol && r !== Symbol.prototype ? "symbol" : typeof r; - })(r); - } - var n = Object.prototype.toString, c = function(r) { - if (void 0 === r) return "undefined"; - if (null === r) return "null"; - var t = e(r); - if ("boolean" === t) return "boolean"; - if ("string" === t) return "string"; - if ("number" === t) return "number"; - if ("symbol" === t) return "symbol"; - if ("function" === t) return function(r) { - return "GeneratorFunction" === o(r); - }(r) ? "generatorfunction" : "function"; - if (function(r) { - return Array.isArray ? Array.isArray(r) : r instanceof Array; - }(r)) return "array"; - if (function(r) { - if (r.constructor && "function" == typeof r.constructor.isBuffer) return r.constructor.isBuffer(r); - return !1; - }(r)) return "buffer"; - if (function(r) { + var n2 = Object.prototype.toString, c = function(r) { + if (void 0 === r) return "undefined"; + if (null === r) return "null"; + var t = e(r); + if ("boolean" === t) return "boolean"; + if ("string" === t) return "string"; + if ("number" === t) return "number"; + if ("symbol" === t) return "symbol"; + if ("function" === t) return (function(r2) { + return "GeneratorFunction" === o2(r2); + })(r) ? "generatorfunction" : "function"; + if ((function(r2) { + return Array.isArray ? Array.isArray(r2) : r2 instanceof Array; + })(r)) return "array"; + if ((function(r2) { + if (r2.constructor && "function" == typeof r2.constructor.isBuffer) return r2.constructor.isBuffer(r2); + return false; + })(r)) return "buffer"; + if ((function(r2) { try { - if ("number" == typeof r.length && "function" == typeof r.callee) return !0; - } catch (r) { - if (-1 !== r.message.indexOf("callee")) return !0; + if ("number" == typeof r2.length && "function" == typeof r2.callee) return true; + } catch (r3) { + if (-1 !== r3.message.indexOf("callee")) return true; } - return !1; - }(r)) return "arguments"; - if (function(r) { - return r instanceof Date || "function" == typeof r.toDateString && "function" == typeof r.getDate && "function" == typeof r.setDate; - }(r)) return "date"; - if (function(r) { - return r instanceof Error || "string" == typeof r.message && r.constructor && "number" == typeof r.constructor.stackTraceLimit; - }(r)) return "error"; - if (function(r) { - return r instanceof RegExp || "string" == typeof r.flags && "boolean" == typeof r.ignoreCase && "boolean" == typeof r.multiline && "boolean" == typeof r.global; - }(r)) return "regexp"; - switch(o(r)){ + return false; + })(r)) return "arguments"; + if ((function(r2) { + return r2 instanceof Date || "function" == typeof r2.toDateString && "function" == typeof r2.getDate && "function" == typeof r2.setDate; + })(r)) return "date"; + if ((function(r2) { + return r2 instanceof Error || "string" == typeof r2.message && r2.constructor && "number" == typeof r2.constructor.stackTraceLimit; + })(r)) return "error"; + if ((function(r2) { + return r2 instanceof RegExp || "string" == typeof r2.flags && "boolean" == typeof r2.ignoreCase && "boolean" == typeof r2.multiline && "boolean" == typeof r2.global; + })(r)) return "regexp"; + switch (o2(r)) { case "Symbol": - return "symbol"; + return "symbol"; case "Promise": - return "promise"; + return "promise"; case "WeakMap": - return "weakmap"; + return "weakmap"; case "WeakSet": - return "weakset"; + return "weakset"; case "Map": - return "map"; + return "map"; case "Set": - return "set"; + return "set"; case "Int8Array": - return "int8array"; + return "int8array"; case "Uint8Array": - return "uint8array"; + return "uint8array"; case "Uint8ClampedArray": - return "uint8clampedarray"; + return "uint8clampedarray"; case "Int16Array": - return "int16array"; + return "int16array"; case "Uint16Array": - return "uint16array"; + return "uint16array"; case "Int32Array": - return "int32array"; + return "int32array"; case "Uint32Array": - return "uint32array"; + return "uint32array"; case "Float32Array": - return "float32array"; + return "float32array"; case "Float64Array": - return "float64array"; - } - if (function(r) { - return "function" == typeof r.throw && "function" == typeof r.return && "function" == typeof r.next; - }(r)) return "generator"; - switch(t = n.call(r)){ + return "float64array"; + } + if ((function(r2) { + return "function" == typeof r2.throw && "function" == typeof r2.return && "function" == typeof r2.next; + })(r)) return "generator"; + switch (t = n2.call(r)) { case "[object Object]": - return "object"; + return "object"; case "[object Map Iterator]": - return "mapiterator"; + return "mapiterator"; case "[object Set Iterator]": - return "setiterator"; + return "setiterator"; case "[object String Iterator]": - return "stringiterator"; + return "stringiterator"; case "[object Array Iterator]": - return "arrayiterator"; + return "arrayiterator"; + } + return t.slice(8, -1).toLowerCase().replace(/\s/g, ""); + }; + function o2(r) { + return r.constructor ? r.constructor.name : null; } - return t.slice(8, -1).toLowerCase().replace(/\s/g, ""); - }; - function o(r) { - return r.constructor ? r.constructor.name : null; - } - function f(r, t) { - var e = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : [ - "option" - ]; - return s(r, t, e), y(r, t, e), function(a, i, u) { - var r = c(i), t = c(a); - if ("object" === r) { - if ("object" !== t) throw new Error("[Type Error]: '".concat(u.join("."), "' require 'object' type, but got '").concat(t, "'")); - Object.keys(i).forEach(function(r) { - var t = a[r], e = i[r], n = u.slice(); - n.push(r), s(t, e, n), y(t, e, n), f(t, e, n); - }); + function f2(r, t) { + var e2 = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : ["option"]; + return s2(r, t, e2), y(r, t, e2), (function(a2, i, u) { + var r2 = c(i), t2 = c(a2); + if ("object" === r2) { + if ("object" !== t2) throw new Error("[Type Error]: '".concat(u.join("."), "' require 'object' type, but got '").concat(t2, "'")); + Object.keys(i).forEach(function(r3) { + var t3 = a2[r3], e3 = i[r3], n3 = u.slice(); + n3.push(r3), s2(t3, e3, n3), y(t3, e3, n3), f2(t3, e3, n3); + }); } - if ("array" === r) { - if ("array" !== t) throw new Error("[Type Error]: '".concat(u.join("."), "' require 'array' type, but got '").concat(t, "'")); - a.forEach(function(r, t) { - var e = a[t], n = i[t] || i[0], o = u.slice(); - o.push(t), s(e, n, o), y(e, n, o), f(e, n, o); - }); + if ("array" === r2) { + if ("array" !== t2) throw new Error("[Type Error]: '".concat(u.join("."), "' require 'array' type, but got '").concat(t2, "'")); + a2.forEach(function(r3, t3) { + var e3 = a2[t3], n3 = i[t3] || i[0], o3 = u.slice(); + o3.push(t3), s2(e3, n3, o3), y(e3, n3, o3), f2(e3, n3, o3); + }); } - }(r, t, e), r; - } - function s(r, t, e) { - if ("string" === c(t)) { - var n = c(r); - if ("?" === t[0] && (t = t.slice(1) + "|undefined"), !(-1 < t.indexOf("|") ? t.split("|").map(function(r) { - return r.toLowerCase().trim(); - }).filter(Boolean).some(function(r) { - return n === r; - }) : t.toLowerCase().trim() === n)) throw new Error("[Type Error]: '".concat(e.join("."), "' require '").concat(t, "' type, but got '").concat(n, "'")); + })(r, t, e2), r; } - } - function y(r, t, e) { - if ("function" === c(t)) { - var n = t(r, c(r), e); - if (!0 !== n) { - var o = c(n); - throw "string" === o ? new Error(n) : "error" === o ? n : new Error("[Validator Error]: The scheme for '".concat(e.join("."), "' validator require return true, but got '").concat(n, "'")); - } + function s2(r, t, e2) { + if ("string" === c(t)) { + var n3 = c(r); + if ("?" === t[0] && (t = t.slice(1) + "|undefined"), !(-1 < t.indexOf("|") ? t.split("|").map(function(r2) { + return r2.toLowerCase().trim(); + }).filter(Boolean).some(function(r2) { + return n3 === r2; + }) : t.toLowerCase().trim() === n3)) throw new Error("[Type Error]: '".concat(e2.join("."), "' require '").concat(t, "' type, but got '").concat(n3, "'")); + } } - } - return f.kindOf = c, f; -}); - -},{}],"3r4tp":[function(require,module,exports,__globalThis) { -module.exports = JSON.parse("{\"name\":\"artplayer\",\"version\":\"5.3.1-beta.1\",\"description\":\"ArtPlayer.js is a modern and full featured HTML5 video player\",\"author\":\"Harvey Zhao \",\"license\":\"MIT\",\"homepage\":\"https://artplayer.org\",\"repository\":{\"type\":\"git\",\"url\":\"git+https://github.com/zhw2590582/ArtPlayer.git\"},\"bugs\":{\"url\":\"https://github.com/zhw2590582/ArtPlayer/issues\"},\"keywords\":[\"html5\",\"video\",\"player\"],\"exports\":{\".\":{\"types\":\"./types/artplayer.d.ts\",\"import\":\"./dist/artplayer.mjs\",\"require\":\"./dist/artplayer.js\"},\"./legacy\":{\"types\":\"./types/artplayer.d.ts\",\"import\":\"./dist/artplayer.legacy.js\",\"require\":\"./dist/artplayer.legacy.js\"},\"./i18n/*\":{\"types\":\"./types/i18n.d.ts\",\"import\":\"./dist/i18n/*.mjs\",\"require\":\"./dist/i18n/*.js\"}},\"main\":\"./dist/artplayer.js\",\"module\":\"./dist/artplayer.mjs\",\"types\":\"./types/artplayer.d.ts\",\"typesVersions\":{\"*\":{\"i18n/*\":[\"types/i18n.d.ts\"],\"legacy\":[\"types/artplayer.d.ts\"]}},\"legacy\":\"./dist/artplayer.legacy.js\",\"browserslist\":\"last 1 Chrome version\",\"dependencies\":{\"option-validator\":\"^2.0.6\"}}"); - -},{}],"1dlGA":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -exports.default = { + function y(r, t, e2) { + if ("function" === c(t)) { + var n3 = t(r, c(r), e2); + if (true !== n3) { + var o3 = c(n3); + throw "string" === o3 ? new Error(n3) : "error" === o3 ? n3 : new Error("[Validator Error]: The scheme for '".concat(e2.join("."), "' validator require return true, but got '").concat(n3, "'")); + } + } + } + return f2.kindOf = c, f2; + }); + })(optionValidator$1); + return optionValidator$1.exports; + } + var optionValidatorExports = requireOptionValidator(); + const validator = /* @__PURE__ */ getDefaultExportFromCjs(optionValidatorExports); + const version$1 = "5.3.1"; + const config$1 = { properties: [ - 'audioTracks', - 'autoplay', - 'buffered', - 'controller', - 'controls', - 'crossOrigin', - 'currentSrc', - 'currentTime', - 'defaultMuted', - 'defaultPlaybackRate', - 'duration', - 'ended', - 'error', - 'loop', - 'mediaGroup', - 'muted', - 'networkState', - 'paused', - 'playbackRate', - 'played', - 'preload', - 'readyState', - 'seekable', - 'seeking', - 'src', - 'startDate', - 'textTracks', - 'videoTracks', - 'volume' - ], - methods: [ - 'addTextTrack', - 'canPlayType', - 'load', - 'play', - 'pause' + "audioTracks", + "autoplay", + "buffered", + "controller", + "controls", + "crossOrigin", + "currentSrc", + "currentTime", + "defaultMuted", + "defaultPlaybackRate", + "duration", + "ended", + "error", + "loop", + "mediaGroup", + "muted", + "networkState", + "paused", + "playbackRate", + "played", + "preload", + "readyState", + "seekable", + "seeking", + "src", + "startDate", + "textTracks", + "videoTracks", + "volume" ], + methods: ["addTextTrack", "canPlayType", "load", "play", "pause"], events: [ - 'abort', - 'canplay', - 'canplaythrough', - 'durationchange', - 'emptied', - 'ended', - 'error', - 'loadeddata', - 'loadedmetadata', - 'loadstart', - 'pause', - 'play', - 'playing', - 'progress', - 'ratechange', - 'seeked', - 'seeking', - 'stalled', - 'suspend', - 'timeupdate', - 'volumechange', - 'waiting' + "abort", + "canplay", + "canplaythrough", + "durationchange", + "emptied", + "ended", + "error", + "loadeddata", + "loadedmetadata", + "loadstart", + "pause", + "play", + "playing", + "progress", + "ratechange", + "seeked", + "seeking", + "stalled", + "suspend", + "timeupdate", + "volumechange", + "waiting" ], prototypes: [ - 'width', - 'height', - 'videoWidth', - 'videoHeight', - 'poster', - 'webkitDecodedFrameCount', - 'webkitDroppedFrameCount', - 'playsInline', - 'webkitSupportsFullscreen', - 'webkitDisplayingFullscreen', - 'onenterpictureinpicture', - 'onleavepictureinpicture', - 'disablePictureInPicture', - 'cancelVideoFrameCallback', - 'requestVideoFrameCallback', - 'getVideoPlaybackQuality', - 'requestPictureInPicture', - 'webkitEnterFullScreen', - 'webkitEnterFullscreen', - 'webkitExitFullScreen', - 'webkitExitFullscreen' + "width", + "height", + "videoWidth", + "videoHeight", + "poster", + "webkitDecodedFrameCount", + "webkitDroppedFrameCount", + "playsInline", + "webkitSupportsFullscreen", + "webkitDisplayingFullscreen", + "onenterpictureinpicture", + "onleavepictureinpicture", + "disablePictureInPicture", + "cancelVideoFrameCallback", + "requestVideoFrameCallback", + "getVideoPlaybackQuality", + "requestPictureInPicture", + "webkitEnterFullScreen", + "webkitEnterFullscreen", + "webkitExitFullScreen", + "webkitExitFullscreen" ] -}; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"8oCsH":[function(require,module,exports,__globalThis) { -exports.interopDefault = function(a) { - return a && a.__esModule ? a : { - default: a - }; -}; -exports.defineInteropFlag = function(a) { - Object.defineProperty(a, '__esModule', { - value: true - }); -}; -exports.exportAll = function(source, dest) { - Object.keys(source).forEach(function(key) { - if (key === 'default' || key === '__esModule' || Object.prototype.hasOwnProperty.call(dest, key)) return; - Object.defineProperty(dest, key, { - enumerable: true, - get: function() { - return source[key]; - } - }); - }); - return dest; -}; -exports.export = function(dest, destName, get) { - Object.defineProperty(dest, destName, { - enumerable: true, - get: get - }); -}; - -},{}],"dx7Zz":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _utils = require("../utils"); -var _component = require("../utils/component"); -var _componentDefault = parcelHelpers.interopDefault(_component); -var _aspectRatio = require("./aspectRatio"); -var _aspectRatioDefault = parcelHelpers.interopDefault(_aspectRatio); -var _close = require("./close"); -var _closeDefault = parcelHelpers.interopDefault(_close); -var _flip = require("./flip"); -var _flipDefault = parcelHelpers.interopDefault(_flip); -var _info = require("./info"); -var _infoDefault = parcelHelpers.interopDefault(_info); -var _playbackRate = require("./playbackRate"); -var _playbackRateDefault = parcelHelpers.interopDefault(_playbackRate); -var _version = require("./version"); -var _versionDefault = parcelHelpers.interopDefault(_version); -class Contextmenu extends (0, _componentDefault.default) { - constructor(art){ - super(art); - this.name = 'contextmenu'; - this.$parent = art.template.$contextmenu; - if (!(0, _utils.isMobile)) this.init(); - } - init() { - const { option, proxy, template: { $player, $contextmenu } } = this.art; - if (option.playbackRate) this.add((0, _playbackRateDefault.default)({ - name: 'playbackRate', - index: 10 - })); - if (option.aspectRatio) this.add((0, _aspectRatioDefault.default)({ - name: 'aspectRatio', - index: 20 - })); - if (option.flip) this.add((0, _flipDefault.default)({ - name: 'flip', - index: 30 - })); - this.add((0, _infoDefault.default)({ - name: 'info', - index: 40 - })); - this.add((0, _versionDefault.default)({ - name: 'version', - index: 50 - })); - this.add((0, _closeDefault.default)({ - name: 'close', - index: 60 - })); - for(let index = 0; index < option.contextmenu.length; index++)this.add(option.contextmenu[index]); - proxy($player, 'contextmenu', (event)=>{ - if (!this.art.constructor.CONTEXTMENU) return; - event.preventDefault(); - this.show = true; - const mouseX = event.clientX; - const mouseY = event.clientY; - const { height: cHeight, width: cWidth, left: cLeft, top: cTop } = (0, _utils.getRect)($player); - const { height: mHeight, width: mWidth } = (0, _utils.getRect)($contextmenu); - let menuLeft = mouseX - cLeft; - let menuTop = mouseY - cTop; - if (mouseX + mWidth > cLeft + cWidth) menuLeft = cWidth - mWidth; - if (mouseY + mHeight > cTop + cHeight) menuTop = cHeight - mHeight; - (0, _utils.setStyles)($contextmenu, { - top: `${menuTop}px`, - left: `${menuLeft}px` - }); - }); - proxy($player, 'click', (event)=>{ - if (!(0, _utils.includeFromEvent)(event, $contextmenu)) this.show = false; - }); - this.art.on('blur', ()=>{ - this.show = false; - }); - } -} -exports.default = Contextmenu; - -},{"../utils":"gGxPm","../utils/component":"1wQH1","./aspectRatio":"iS5RH","./close":"2Iw6R","./flip":"cqZI9","./info":"hbkKl","./playbackRate":"dI4ur","./version":"b5I2V","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"gGxPm":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _compatibility = require("./compatibility"); -parcelHelpers.exportAll(_compatibility, exports); -var _dom = require("./dom"); -parcelHelpers.exportAll(_dom, exports); -var _error = require("./error"); -parcelHelpers.exportAll(_error, exports); -var _file = require("./file"); -parcelHelpers.exportAll(_file, exports); -var _format = require("./format"); -parcelHelpers.exportAll(_format, exports); -var _property = require("./property"); -parcelHelpers.exportAll(_property, exports); -var _subtitle = require("./subtitle"); -parcelHelpers.exportAll(_subtitle, exports); -var _time = require("./time"); -parcelHelpers.exportAll(_time, exports); - -},{"./compatibility":"gWwQj","./dom":"1aVnA","./error":"29G01","./file":"l9MZw","./format":"lbsB4","./property":"84aB7","./subtitle":"9DUE6","./time":"94hvW","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"gWwQj":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "userAgent", ()=>userAgent); -parcelHelpers.export(exports, "isSafari", ()=>isSafari); -parcelHelpers.export(exports, "isIOS", ()=>isIOS); -parcelHelpers.export(exports, "isIOS13", ()=>isIOS13); -parcelHelpers.export(exports, "isMobile", ()=>isMobile); -parcelHelpers.export(exports, "isBrowser", ()=>isBrowser); -const userAgent = globalThis?.CUSTOM_USER_AGENT ?? (typeof navigator !== 'undefined' ? navigator.userAgent : ''); -const isSafari = /^(?:(?!chrome|android).)*safari/i.test(userAgent); -const isIOS = /iPad|iPhone|iPod/i.test(userAgent) && !window.MSStream; -const isIOS13 = isIOS || userAgent.includes('Macintosh') && navigator.maxTouchPoints >= 1; -const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) || isIOS13; -const isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined'; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"1aVnA":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "query", ()=>query); -parcelHelpers.export(exports, "queryAll", ()=>queryAll); -parcelHelpers.export(exports, "addClass", ()=>addClass); -parcelHelpers.export(exports, "removeClass", ()=>removeClass); -parcelHelpers.export(exports, "hasClass", ()=>hasClass); -parcelHelpers.export(exports, "append", ()=>append); -parcelHelpers.export(exports, "remove", ()=>remove); -parcelHelpers.export(exports, "setStyle", ()=>setStyle); -parcelHelpers.export(exports, "setStyles", ()=>setStyles); -parcelHelpers.export(exports, "getStyle", ()=>getStyle); -parcelHelpers.export(exports, "siblings", ()=>siblings); -parcelHelpers.export(exports, "inverseClass", ()=>inverseClass); -parcelHelpers.export(exports, "tooltip", ()=>tooltip); -parcelHelpers.export(exports, "isInViewport", ()=>isInViewport); -parcelHelpers.export(exports, "includeFromEvent", ()=>includeFromEvent); -parcelHelpers.export(exports, "replaceElement", ()=>replaceElement); -parcelHelpers.export(exports, "createElement", ()=>createElement); -parcelHelpers.export(exports, "getIcon", ()=>getIcon); -parcelHelpers.export(exports, "setStyleText", ()=>setStyleText); -parcelHelpers.export(exports, "supportsFlex", ()=>supportsFlex); -parcelHelpers.export(exports, "getRect", ()=>getRect); -parcelHelpers.export(exports, "loadImg", ()=>loadImg); -parcelHelpers.export(exports, "getComposedPath", ()=>getComposedPath); -var _compatibility = require("./compatibility"); -function query(selector, parent = document) { + }; + const userAgent = globalThis?.CUSTOM_USER_AGENT ?? (typeof navigator !== "undefined" ? navigator.userAgent : ""); + const isSafari = /^(?:(?!chrome|android).)*safari/i.test(userAgent); + const isIOS = /iPad|iPhone|iPod/i.test(userAgent) && !window.MSStream; + const isIOS13 = isIOS || userAgent.includes("Macintosh") && navigator.maxTouchPoints >= 1; + const isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(userAgent) || isIOS13; + const isBrowser = typeof window !== "undefined" && typeof document !== "undefined"; + function query(selector, parent = document) { return parent.querySelector(selector); -} -function queryAll(selector, parent = document) { + } + function queryAll(selector, parent = document) { return Array.from(parent.querySelectorAll(selector)); -} -function addClass(target, className) { + } + function addClass(target, className) { return target.classList.add(className); -} -function removeClass(target, className) { + } + function removeClass(target, className) { return target.classList.remove(className); -} -function hasClass(target, className) { + } + function hasClass(target, className) { return target.classList.contains(className); -} -function append(parent, child) { - if (child instanceof Element) parent.appendChild(child); - else parent.insertAdjacentHTML('beforeend', String(child)); + } + function append(parent, child) { + if (child instanceof Element) { + parent.appendChild(child); + } else { + parent.insertAdjacentHTML("beforeend", String(child)); + } return parent.lastElementChild || parent.lastChild; -} -function remove(child) { + } + function remove(child) { return child.parentNode.removeChild(child); -} -function setStyle(element, key, value) { + } + function setStyle(element, key, value) { element.style[key] = value; return element; -} -function setStyles(element, styles) { - for(const key in styles)setStyle(element, key, styles[key]); + } + function setStyles(element, styles) { + for (const key in styles) { + setStyle(element, key, styles[key]); + } return element; -} -function getStyle(element, key, numberType = true) { + } + function getStyle(element, key, numberType = true) { const value = window.getComputedStyle(element, null).getPropertyValue(key); return numberType ? Number.parseFloat(value) : value; -} -function siblings(target) { - return Array.from(target.parentElement.children).filter((item)=>item !== target); -} -function inverseClass(target, className) { - siblings(target).forEach((item)=>removeClass(item, className)); + } + function siblings(target) { + return Array.from(target.parentElement.children).filter((item) => item !== target); + } + function inverseClass(target, className) { + siblings(target).forEach((item) => removeClass(item, className)); addClass(target, className); -} -function tooltip(target, msg, pos = 'top') { - if (0, _compatibility.isMobile) return; - target.setAttribute('aria-label', msg); - addClass(target, 'hint--rounded'); + } + function tooltip(target, msg, pos = "top") { + if (isMobile) + return; + target.setAttribute("aria-label", msg); + addClass(target, "hint--rounded"); addClass(target, `hint--${pos}`); -} -function isInViewport(el, offset = 0) { + } + function isInViewport(el, offset = 0) { const rect = el.getBoundingClientRect(); const windowHeight = window.innerHeight || document.documentElement.clientHeight; const windowWidth = window.innerWidth || document.documentElement.clientWidth; const vertInView = rect.top - offset <= windowHeight && rect.top + rect.height + offset >= 0; const horInView = rect.left - offset <= windowWidth + offset && rect.left + rect.width + offset >= 0; return vertInView && horInView; -} -function includeFromEvent(event, target) { + } + function includeFromEvent(event, target) { return getComposedPath(event).includes(target); -} -function replaceElement(newChild, oldChild) { + } + function replaceElement(newChild, oldChild) { oldChild.parentNode.replaceChild(newChild, oldChild); return newChild; -} -function createElement(tag) { + } + function createElement(tag) { return document.createElement(tag); -} -function getIcon(key = '', html = '') { - const icon = createElement('i'); - addClass(icon, 'art-icon'); + } + function getIcon(key = "", html = "") { + const icon = createElement("i"); + addClass(icon, "art-icon"); addClass(icon, `art-icon-${key}`); append(icon, html); return icon; -} -function setStyleText(id, style) { - let $style = document.getElementById(id); + } + function setStyleText(id2, style2) { + let $style = document.getElementById(id2); if (!$style) { - $style = document.createElement('style'); - $style.id = id; - if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', ()=>{ - document.head.appendChild($style); + $style = document.createElement("style"); + $style.id = id2; + if (document.readyState === "loading") { + document.addEventListener("DOMContentLoaded", () => { + document.head.appendChild($style); }); - else (document.head || document.documentElement).appendChild($style); + } else { + (document.head || document.documentElement).appendChild($style); + } } - $style.textContent = style; -} -function supportsFlex() { - const div = document.createElement('div'); - div.style.display = 'flex'; - return div.style.display === 'flex'; -} -function getRect(el) { + $style.textContent = style2; + } + function supportsFlex() { + const div = document.createElement("div"); + div.style.display = "flex"; + return div.style.display === "flex"; + } + function getRect(el) { return el.getBoundingClientRect(); -} -function loadImg(url, scale) { - return new Promise((resolve, reject)=>{ - const img = new Image(); - img.onload = function() { - if (!scale || scale === 1) resolve(img); - else { - const canvas = document.createElement('canvas'); - const ctx = canvas.getContext('2d'); - canvas.width = img.width * scale; - canvas.height = img.height * scale; - ctx.drawImage(img, 0, 0, canvas.width, canvas.height); - canvas.toBlob((blob)=>{ - const blobUrl = URL.createObjectURL(blob); - const scaledImg = new Image(); - scaledImg.onload = function() { - resolve(scaledImg); - }; - scaledImg.onerror = function() { - URL.revokeObjectURL(blobUrl); - reject(new Error(`Image load failed: ${url}`)); - }; - scaledImg.src = blobUrl; - }); - } - }; - img.onerror = function() { - reject(new Error(`Image load failed: ${url}`)); - }; - img.src = url; + } + function loadImg(url, scale) { + return new Promise((resolve, reject) => { + const img = new Image(); + img.onload = function() { + if (!scale || scale === 1) { + resolve(img); + } else { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + canvas.width = img.width * scale; + canvas.height = img.height * scale; + ctx.drawImage(img, 0, 0, canvas.width, canvas.height); + canvas.toBlob((blob) => { + const blobUrl = URL.createObjectURL(blob); + const scaledImg = new Image(); + scaledImg.onload = function() { + resolve(scaledImg); + }; + scaledImg.onerror = function() { + URL.revokeObjectURL(blobUrl); + reject(new Error(`Image load failed: ${url}`)); + }; + scaledImg.src = blobUrl; + }); + } + }; + img.onerror = function() { + reject(new Error(`Image load failed: ${url}`)); + }; + img.src = url; }); -} -function getComposedPath(event) { - if (event.composedPath) return event.composedPath(); + } + function getComposedPath(event) { + if (event.composedPath) + return event.composedPath(); const path = []; let node = event.target; - while(node){ - path.push(node); - node = node.parentNode; + while (node) { + path.push(node); + node = node.parentNode; + } + if (!path.includes(window) && window !== void 0) { + path.push(window); } - if (!path.includes(window) && window !== undefined) path.push(window); return path; -} - -},{"./compatibility":"gWwQj","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"29G01":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "ArtPlayerError", ()=>ArtPlayerError); -parcelHelpers.export(exports, "errorHandle", ()=>errorHandle); -class ArtPlayerError extends Error { - constructor(message, context){ - super(message); - if (typeof Error.captureStackTrace === 'function') Error.captureStackTrace(this, context || this.constructor); - this.name = 'ArtPlayerError'; + } + class ArtPlayerError extends Error { + constructor(message, context) { + super(message); + if (typeof Error.captureStackTrace === "function") { + Error.captureStackTrace(this, context || this.constructor); + } + this.name = "ArtPlayerError"; + } + } + function errorHandle(condition, msg) { + if (!condition) { + throw new ArtPlayerError(msg); } -} -function errorHandle(condition, msg) { - if (!condition) throw new ArtPlayerError(msg); return condition; -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"l9MZw":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "getExt", ()=>getExt); -parcelHelpers.export(exports, "download", ()=>download); -function getExt(url) { - if (url.includes('?')) return getExt(url.split('?')[0]); - if (url.includes('#')) return getExt(url.split('#')[0]); - return url.trim().toLowerCase().split('.').pop(); -} -function download(url, name) { - const elink = document.createElement('a'); - elink.style.display = 'none'; + } + function getExt(url) { + if (url.includes("?")) { + return getExt(url.split("?")[0]); + } + if (url.includes("#")) { + return getExt(url.split("#")[0]); + } + return url.trim().toLowerCase().split(".").pop(); + } + function download(url, name) { + const elink = document.createElement("a"); + elink.style.display = "none"; elink.href = url; elink.download = name; document.body.appendChild(elink); elink.click(); document.body.removeChild(elink); -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"lbsB4":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "clamp", ()=>clamp); -parcelHelpers.export(exports, "capitalize", ()=>capitalize); -parcelHelpers.export(exports, "secondToTime", ()=>secondToTime); -parcelHelpers.export(exports, "escape", ()=>escape); -parcelHelpers.export(exports, "unescape", ()=>unescape); -function clamp(num, a, b) { - return Math.max(Math.min(num, Math.max(a, b)), Math.min(a, b)); -} -function capitalize(str) { + } + function clamp(num, a2, b2) { + return Math.max(Math.min(num, Math.max(a2, b2)), Math.min(a2, b2)); + } + function capitalize(str) { return str.charAt(0).toUpperCase() + str.slice(1); -} -function secondToTime(second) { - if (!second) return '00:00'; - const add0 = (num)=>num < 10 ? `0${num}` : String(num); + } + function secondToTime(second) { + if (!second) + return "00:00"; + const add0 = (num) => num < 10 ? `0${num}` : String(num); const hour = Math.floor(second / 3600); const min = Math.floor((second - hour * 3600) / 60); const sec = Math.floor(second - hour * 3600 - min * 60); - return (hour > 0 ? [ - hour, - min, - sec - ] : [ - min, - sec - ]).map(add0).join(':'); -} -function escape(str) { - return str.replace(/[&<>'"]/g, (tag)=>({ - '&': '&', - '<': '<', - '>': '>', - '\'': ''', - '"': '"' - })[tag] || tag); -} -function unescape(str) { + return (hour > 0 ? [hour, min, sec] : [min, sec]).map(add0).join(":"); + } + function escape(str) { + return str.replace( + /[&<>'"]/g, + (tag) => ({ + "&": "&", + "<": "<", + ">": ">", + "'": "'", + '"': """ + })[tag] || tag + ); + } + function unescape(str) { const map = { - '&': '&', - '<': '<', - '>': '>', - ''': '\'', - '"': '"' + "&": "&", + "<": "<", + ">": ">", + "'": "'", + """: '"' }; - const reg = new RegExp(`(${Object.keys(map).join('|')})`, 'g'); - return str.replace(reg, (tag)=>map[tag] || tag); -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"84aB7":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "def", ()=>def); -parcelHelpers.export(exports, "has", ()=>has); -parcelHelpers.export(exports, "get", ()=>get); -parcelHelpers.export(exports, "mergeDeep", ()=>mergeDeep); -const def = Object.defineProperty; -const { hasOwnProperty } = Object.prototype; -function has(obj, name) { + const reg = new RegExp(`(${Object.keys(map).join("|")})`, "g"); + return str.replace(reg, (tag) => map[tag] || tag); + } + const def = Object.defineProperty; + const { hasOwnProperty } = Object.prototype; + function has(obj, name) { return hasOwnProperty.call(obj, name); -} -function get(obj, name) { + } + function get(obj, name) { return Object.getOwnPropertyDescriptor(obj, name); -} -function mergeDeep(...objects) { - const isObject = (item)=>item && typeof item === 'object' && !Array.isArray(item); - return objects.reduce((prev, obj)=>{ - Object.keys(obj).forEach((key)=>{ - const pVal = prev[key]; - const oVal = obj[key]; - if (Array.isArray(pVal) && Array.isArray(oVal)) prev[key] = pVal.concat(...oVal); - else if (isObject(pVal) && isObject(oVal)) prev[key] = mergeDeep(pVal, oVal); - else prev[key] = oVal; - }); - return prev; + } + function mergeDeep(...objects) { + const isObject = (item) => item && typeof item === "object" && !Array.isArray(item); + return objects.reduce((prev, obj) => { + Object.keys(obj).forEach((key) => { + const pVal = prev[key]; + const oVal = obj[key]; + if (Array.isArray(pVal) && Array.isArray(oVal)) { + prev[key] = pVal.concat(...oVal); + } else if (isObject(pVal) && isObject(oVal)) { + prev[key] = mergeDeep(pVal, oVal); + } else { + prev[key] = oVal; + } + }); + return prev; }, {}); -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"9DUE6":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "srtToVtt", ()=>srtToVtt); -parcelHelpers.export(exports, "vttToBlob", ()=>vttToBlob); -parcelHelpers.export(exports, "assToVtt", ()=>assToVtt); -function fixSrt(srt) { - return srt.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g, (_, $1, $2)=>{ - let ms = $2.slice(0, 3); - if ($2.length === 1) ms = `${$2}00`; - if ($2.length === 2) ms = `${$2}0`; - return `${$1},${ms}`; + } + function fixSrt(srt) { + return srt.replace(/(\d\d:\d\d:\d\d)[,.](\d+)/g, (_, $1, $2) => { + let ms = $2.slice(0, 3); + if ($2.length === 1) { + ms = `${$2}00`; + } + if ($2.length === 2) { + ms = `${$2}0`; + } + return `${$1},${ms}`; }); -} -function srtToVtt(srtText) { - return 'WEBVTT \r\n\r\n'.concat(fixSrt(srtText).replace(/\{\\([ibu])\}/g, '').replace(/\{\\([ibu])1\}/g, '<$1>').replace(/\{([ibu])\}/g, '<$1>').replace(/\{\/([ibu])\}/g, '').replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g, '$1.$2').replace(/\{[\s\S]*?\}/g, '').concat('\r\n\r\n')); -} -function vttToBlob(vttText) { - return URL.createObjectURL(new Blob([ - vttText - ], { - type: 'text/vtt' - })); -} -function assToVtt(ass) { - const reAss = new RegExp("Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$", 'i'); - function fixTime(time = '') { - return time.split(/[:.]/).map((item, index, arr)=>{ - if (index === arr.length - 1) { - if (item.length === 1) return `.${item}00`; - if (item.length === 2) return `.${item}0`; - } else if (item.length === 1) return (index === 0 ? '0' : ':0') + item; - return index === 0 ? item : index === arr.length - 1 ? `.${item}` : `:${item}`; - }).join(''); + } + function srtToVtt(srtText) { + return "WEBVTT \r\n\r\n".concat( + fixSrt(srtText).replace(/\{\\([ibu])\}/g, "").replace(/\{\\([ibu])1\}/g, "<$1>").replace(/\{([ibu])\}/g, "<$1>").replace(/\{\/([ibu])\}/g, "").replace(/(\d\d:\d\d:\d\d),(\d\d\d)/g, "$1.$2").replace(/\{[\s\S]*?\}/g, "").concat("\r\n\r\n") + ); + } + function vttToBlob(vttText) { + return URL.createObjectURL( + new Blob([vttText], { + type: "text/vtt" + }) + ); + } + function assToVtt(ass) { + const reAss = new RegExp( + "Dialogue:\\s\\d,(\\d+:\\d\\d:\\d\\d.\\d\\d),(\\d+:\\d\\d:\\d\\d.\\d\\d),([^,]*),([^,]*),(?:[^,]*,){4}([\\s\\S]*)$", + "i" + ); + function fixTime(time2 = "") { + return time2.split(/[:.]/).map((item, index, arr) => { + if (index === arr.length - 1) { + if (item.length === 1) { + return `.${item}00`; + } + if (item.length === 2) { + return `.${item}0`; + } + } else if (item.length === 1) { + return (index === 0 ? "0" : ":0") + item; + } + return index === 0 ? item : index === arr.length - 1 ? `.${item}` : `:${item}`; + }).join(""); } - return `WEBVTT` + `\n` + `\n${ass.split(/\r?\n/).map((line)=>{ - const m = line.match(reAss); - if (!m) return null; - return { - start: fixTime(m[1].trim()), - end: fixTime(m[2].trim()), - text: m[5].replace(/\{[\s\S]*?\}/g, '').replace(/(\\N)/g, '\n').trim().split(/\r?\n/).map((item)=>item.trim()).join('\n') - }; - }).filter((line)=>line).map((line, index)=>{ - if (line) return `${index + 1}\n` + `${line.start} --> ${line.end}` + `\n` + `${line.text}`; - return ''; - }).filter((line)=>line.trim()).join('\n\n')}`; -} + return `WEBVTT -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"94hvW":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "sleep", ()=>sleep); -parcelHelpers.export(exports, "debounce", ()=>debounce); -parcelHelpers.export(exports, "throttle", ()=>throttle); -function sleep(ms = 0) { - return new Promise((resolve)=>setTimeout(resolve, ms)); -} -function debounce(func, duration) { +${ass.split(/\r?\n/).map((line) => { + const m = line.match(reAss); + if (!m) + return null; + return { + start: fixTime(m[1].trim()), + end: fixTime(m[2].trim()), + text: m[5].replace(/\{[\s\S]*?\}/g, "").replace(/(\\N)/g, "\n").trim().split(/\r?\n/).map((item) => item.trim()).join("\n") + }; + }).filter((line) => line).map((line, index) => { + if (line) { + return `${index + 1} +${line.start} --> ${line.end} +${line.text}`; + } + return ""; + }).filter((line) => line.trim()).join("\n\n")}`; + } + function sleep(ms = 0) { + return new Promise((resolve) => setTimeout(resolve, ms)); + } + function debounce(func, duration) { let timeout; return function(...args) { - const effect = ()=>{ - timeout = null; - return func.apply(this, args); - }; - clearTimeout(timeout); - timeout = setTimeout(effect, duration); + const effect = () => { + timeout = null; + return func.apply(this, args); + }; + clearTimeout(timeout); + timeout = setTimeout(effect, duration); }; -} -function throttle(func, duration) { + } + function throttle(func, duration) { let shouldWait = false; return function(...args) { - if (!shouldWait) { - func.apply(this, args); - shouldWait = true; - setTimeout(()=>{ - shouldWait = false; - }, duration); - } + if (!shouldWait) { + func.apply(this, args); + shouldWait = true; + setTimeout(() => { + shouldWait = false; + }, duration); + } }; -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"1wQH1":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _optionValidator = require("option-validator"); -var _optionValidatorDefault = parcelHelpers.interopDefault(_optionValidator); -var _scheme = require("../scheme"); -var _dom = require("./dom"); -var _error = require("./error"); -class Component { - constructor(art){ - this.id = 0; - this.art = art; - this.cache = new Map(); - this.add = this.add.bind(this); - this.remove = this.remove.bind(this); - this.update = this.update.bind(this); - } - get show() { - return (0, _dom.hasClass)(this.art.template.$player, `art-${this.name}-show`); - } - set show(value) { - const { $player } = this.art.template; - const className = `art-${this.name}-show`; - if (value) (0, _dom.addClass)($player, className); - else (0, _dom.removeClass)($player, className); - this.art.emit(this.name, value); - } - toggle() { - this.show = !this.show; - } - add(getOption) { - const option = typeof getOption === 'function' ? getOption(this.art) : getOption; - option.html = option.html || ''; - (0, _optionValidatorDefault.default)(option, (0, _scheme.ComponentOption)); - if (!this.$parent || !this.name || option.disable) return; - const name = option.name || `${this.name}${this.id}`; - (0, _error.errorHandle)(!this.cache.has(name), `Can't add an existing [${name}] to the [${this.name}]`); - this.id += 1; - const $ref = (0, _dom.createElement)('div'); - (0, _dom.addClass)($ref, `art-${this.name}`); - (0, _dom.addClass)($ref, `art-${this.name}-${name}`); - const childs = Array.from(this.$parent.children); - $ref.dataset.index = option.index || this.id; - const nextChild = childs.find((item)=>Number(item.dataset.index) >= Number($ref.dataset.index)); - if (nextChild) nextChild.insertAdjacentElement('beforebegin', $ref); - else (0, _dom.append)(this.$parent, $ref); - if (option.html) (0, _dom.append)($ref, option.html); - if (option.style) (0, _dom.setStyles)($ref, option.style); - if (option.tooltip) (0, _dom.tooltip)($ref, option.tooltip); - const events = []; - if (option.click) { - const destroyEvent = this.art.events.proxy($ref, 'click', (event)=>{ - event.preventDefault(); - option.click.call(this.art, this, event); - }); - events.push(destroyEvent); - } - if (option.selector && [ - 'left', - 'right' - ].includes(option.position)) this.selector(option, $ref, events); - this[name] = $ref; - this.cache.set(name, { - $ref, - events, - option - }); - if (option.mounted) option.mounted.call(this.art, $ref); - return $ref; - } - remove(name) { - (0, _error.errorHandle)(this.cache.has(name), `Can't find [${name}] from the [${this.name}]`); - const item = this.cache.get(name); - if (item.option.beforeUnmount) item.option.beforeUnmount.call(this.art, item.$ref); - for (const event of item.events)this.art.events.remove(event); - this.cache.delete(name); - delete this[name]; - (0, _dom.remove)(item.$ref); - } - update(option) { - if (this.cache.has(option.name)) { - const item = this.cache.get(option.name); - option = Object.assign(item.option, option); - this.remove(option.name); - } - return this.add(option); - } -} -exports.default = Component; - -},{"option-validator":"9hUEm","../scheme":"8YPbR","./dom":"1aVnA","./error":"29G01","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"8YPbR":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "ComponentOption", ()=>ComponentOption); -var _utils = require("../utils"); -const a = 'array'; -const b = 'boolean'; -const s = 'string'; -const n = 'number'; -const o = 'object'; -const f = 'function'; -function validElement(value, type, paths) { - return (0, _utils.errorHandle)(type === s || type === n || value instanceof Element, `${paths.join('.')} require '${s}' or 'Element' type`); -} -const ComponentOption = { + } + const utils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({ + __proto__: null, + ArtPlayerError, + addClass, + append, + assToVtt, + capitalize, + clamp, + createElement, + debounce, + def, + download, + errorHandle, + escape, + get, + getComposedPath, + getExt, + getIcon, + getRect, + getStyle, + has, + hasClass, + includeFromEvent, + inverseClass, + isBrowser, + isIOS, + isIOS13, + isInViewport, + isMobile, + isSafari, + loadImg, + mergeDeep, + query, + queryAll, + remove, + removeClass, + replaceElement, + secondToTime, + setStyle, + setStyleText, + setStyles, + siblings, + sleep, + srtToVtt, + supportsFlex, + throttle, + tooltip, + unescape, + userAgent, + vttToBlob + }, Symbol.toStringTag, { value: "Module" })); + const a = "array"; + const b = "boolean"; + const s = "string"; + const n = "number"; + const o = "object"; + const f = "function"; + function validElement(value, type, paths) { + return errorHandle( + type === s || type === n || value instanceof Element, + `${paths.join(".")} require '${s}' or 'Element' type` + ); + } + const ComponentOption = { html: validElement, disable: `?${b}`, name: `?${s}`, @@ -1345,8 +655,8 @@ const ComponentOption = { range: `?${a}`, onRange: `?${f}`, onChange: `?${f}` -}; -exports.default = { + }; + const scheme = { id: s, container: validElement, url: s, @@ -1383,577 +693,516 @@ exports.default = { autoOrientation: b, airplay: b, proxy: `?${f}`, - plugins: [ - f - ], - layers: [ - ComponentOption - ], - contextmenu: [ - ComponentOption - ], - settings: [ - ComponentOption - ], + plugins: [f], + layers: [ComponentOption], + contextmenu: [ComponentOption], + settings: [ComponentOption], controls: [ - { - ...ComponentOption, - position: (value, _, paths)=>{ - const position = [ - 'top', - 'left', - 'right' - ]; - return (0, _utils.errorHandle)(position.includes(value), `${paths.join('.')} only accept ${position.toString()} as parameters`); - } + { + ...ComponentOption, + position: (value, _, paths) => { + const position = ["top", "left", "right"]; + return errorHandle( + position.includes(value), + `${paths.join(".")} only accept ${position.toString()} as parameters` + ); } + } ], quality: [ - { - default: `?${b}`, - html: s, - url: s - } + { + default: `?${b}`, + html: s, + url: s + } ], highlight: [ - { - time: n, - text: s - } + { + time: n, + text: s + } ], thumbnails: { - url: s, - number: n, - column: n, - width: n, - height: n, - scale: n + url: s, + number: n, + column: n, + width: n, + height: n, + scale: n }, subtitle: { - url: s, - name: s, - type: s, - style: o, - escape: b, - encoding: s, - onVttLoad: f + url: s, + name: s, + type: s, + style: o, + escape: b, + encoding: s, + onVttLoad: f }, moreVideoAttr: o, i18n: o, icons: o, cssVar: o, customType: o -}; - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"iS5RH":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>aspectRatio); -var _utils = require("../utils"); -function aspectRatio(option) { - return (art)=>{ - const { i18n, constructor: { ASPECT_RATIO } } = art; - const html = ASPECT_RATIO.map((item)=>`${item === 'default' ? i18n.get('Default') : item}`).join(''); - return { - ...option, - html: `${i18n.get('Aspect Ratio')}: ${html}`, - click: (contextmenu, event)=>{ - const { value } = event.target.dataset; - if (value) { - art.aspectRatio = value; - contextmenu.show = false; - } - }, - mounted: ($panel)=>{ - const $default = (0, _utils.query)('[data-value="default"]', $panel); - if ($default) (0, _utils.inverseClass)($default, 'art-current'); - art.on('aspectRatio', (value)=>{ - const $current = (0, _utils.queryAll)('span', $panel).find((item)=>item.dataset.value === value); - if ($current) (0, _utils.inverseClass)($current, 'art-current'); - }); - } - }; - }; -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"2Iw6R":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>close); -function close(option) { - return (art)=>({ - ...option, - html: art.i18n.get('Close'), - click: (contextmenu)=>{ - contextmenu.show = false; - } - }); -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"cqZI9":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>flip); -var _utils = require("../utils"); -function flip(option) { - return (art)=>{ - const { i18n, constructor: { FLIP } } = art; - const html = FLIP.map((item)=>`${i18n.get((0, _utils.capitalize)(item))}`).join(''); - return { - ...option, - html: `${i18n.get('Video Flip')}: ${html}`, - click: (contextmenu, event)=>{ - const { value } = event.target.dataset; - if (value) { - art.flip = value.toLowerCase(); - contextmenu.show = false; - } - }, - mounted: ($panel)=>{ - const $default = (0, _utils.query)('[data-value="normal"]', $panel); - if ($default) (0, _utils.inverseClass)($default, 'art-current'); - art.on('flip', (value)=>{ - const $current = (0, _utils.queryAll)('span', $panel).find((item)=>item.dataset.value === value); - if ($current) (0, _utils.inverseClass)($current, 'art-current'); - }); - } - }; - }; -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"hbkKl":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>info); -function info(option) { - return (art)=>({ - ...option, - html: art.i18n.get('Video Info'), - click: (contextmenu)=>{ - art.info.show = true; - contextmenu.show = false; - } - }); -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"dI4ur":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>playbackRate); -var _utils = require("../utils"); -function playbackRate(option) { - return (art)=>{ - const { i18n, constructor: { PLAYBACK_RATE } } = art; - const html = PLAYBACK_RATE.map((item)=>`${item === 1 ? i18n.get('Normal') : item.toFixed(1)}`).join(''); - return { - ...option, - html: `${i18n.get('Play Speed')}: ${html}`, - click: (contextmenu, event)=>{ - const { value } = event.target.dataset; - if (value) { - art.playbackRate = Number(value); - contextmenu.show = false; - } - }, - mounted: ($panel)=>{ - const $default = (0, _utils.query)('[data-value="1"]', $panel); - if ($default) (0, _utils.inverseClass)($default, 'art-current'); - art.on('video:ratechange', ()=>{ - const $current = (0, _utils.queryAll)('span', $panel).find((item)=>Number(item.dataset.value) === art.playbackRate); - if ($current) (0, _utils.inverseClass)($current, 'art-current'); - }); - } - }; - }; -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"b5I2V":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>function(option) { - const url = (0, _compatibility.isBrowser) ? location.href : ""; - return { - ...option, - html: `ArtPlayer ${0, _packageJson.version}` - }; - }); -var _packageJson = require("../../package.json"); -var _compatibility = require("../utils/compatibility"); - -},{"../../package.json":"3r4tp","../utils/compatibility":"gWwQj","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"cNVpy":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _utils = require("../utils"); -var _component = require("../utils/component"); -var _componentDefault = parcelHelpers.interopDefault(_component); -var _airplay = require("./airplay"); -var _airplayDefault = parcelHelpers.interopDefault(_airplay); -var _fullscreen = require("./fullscreen"); -var _fullscreenDefault = parcelHelpers.interopDefault(_fullscreen); -var _fullscreenWeb = require("./fullscreenWeb"); -var _fullscreenWebDefault = parcelHelpers.interopDefault(_fullscreenWeb); -var _pip = require("./pip"); -var _pipDefault = parcelHelpers.interopDefault(_pip); -var _playAndPause = require("./playAndPause"); -var _playAndPauseDefault = parcelHelpers.interopDefault(_playAndPause); -var _progress = require("./progress"); -var _progressDefault = parcelHelpers.interopDefault(_progress); -var _screenshot = require("./screenshot"); -var _screenshotDefault = parcelHelpers.interopDefault(_screenshot); -var _setting = require("./setting"); -var _settingDefault = parcelHelpers.interopDefault(_setting); -var _time = require("./time"); -var _timeDefault = parcelHelpers.interopDefault(_time); -var _volume = require("./volume"); -var _volumeDefault = parcelHelpers.interopDefault(_volume); -class Control extends (0, _componentDefault.default) { - constructor(art){ - super(art); - this.isHover = false; - this.name = 'control'; - this.timer = Date.now(); - const { constructor } = art; - const { $player, $bottom } = this.art.template; - art.on('mousemove', ()=>{ - if (!(0, _utils.isMobile)) this.show = true; - }); - art.on('click', ()=>{ - if (0, _utils.isMobile) this.toggle(); - else this.show = true; - }); - art.on('document:mousemove', (event)=>{ - this.isHover = (0, _utils.includeFromEvent)(event, $bottom); - }); - art.on('video:timeupdate', ()=>{ - if (!art.setting.show && !this.isHover && !art.isInput && art.playing && this.show && Date.now() - this.timer >= constructor.CONTROL_HIDE_TIME) this.show = false; - }); - art.on('control', (state)=>{ - if (state) { - (0, _utils.removeClass)($player, 'art-hide-cursor'); - (0, _utils.addClass)($player, 'art-hover'); - this.timer = Date.now(); - } else { - (0, _utils.addClass)($player, 'art-hide-cursor'); - (0, _utils.removeClass)($player, 'art-hover'); - } - }); - this.init(); + }; + class Component { + constructor(art) { + this.id = 0; + this.art = art; + this.cache = /* @__PURE__ */ new Map(); + this.add = this.add.bind(this); + this.remove = this.remove.bind(this); + this.update = this.update.bind(this); } - init() { - const { option } = this.art; - if (!option.isLive) this.add((0, _progressDefault.default)({ - name: 'progress', - position: 'top', - index: 10 - })); - this.add({ - name: 'thumbnails', - position: 'top', - index: 20 - }); - this.add((0, _playAndPauseDefault.default)({ - name: 'playAndPause', - position: 'left', - index: 10 - })); - this.add((0, _volumeDefault.default)({ - name: 'volume', - position: 'left', - index: 20 - })); - if (!option.isLive) this.add((0, _timeDefault.default)({ - name: 'time', - position: 'left', - index: 30 - })); - if (option.quality.length) (0, _utils.sleep)().then(()=>{ - this.art.quality = option.quality; - }); - if (option.screenshot && !(0, _utils.isMobile)) this.add((0, _screenshotDefault.default)({ - name: 'screenshot', - position: 'right', - index: 20 - })); - if (option.setting) this.add((0, _settingDefault.default)({ - name: 'setting', - position: 'right', - index: 30 - })); - if (option.pip) this.add((0, _pipDefault.default)({ - name: 'pip', - position: 'right', - index: 40 - })); - if (option.airplay && window.WebKitPlaybackTargetAvailabilityEvent) this.add((0, _airplayDefault.default)({ - name: 'airplay', - position: 'right', - index: 50 - })); - if (option.fullscreenWeb) this.add((0, _fullscreenWebDefault.default)({ - name: 'fullscreenWeb', - position: 'right', - index: 60 - })); - if (option.fullscreen) this.add((0, _fullscreenDefault.default)({ - name: 'fullscreen', - position: 'right', - index: 70 - })); - for(let index = 0; index < option.controls.length; index++)this.add(option.controls[index]); + get show() { + return hasClass(this.art.template.$player, `art-${this.name}-show`); + } + set show(value) { + const { $player } = this.art.template; + const className = `art-${this.name}-show`; + if (value) { + addClass($player, className); + } else { + removeClass($player, className); + } + this.art.emit(this.name, value); + } + toggle() { + this.show = !this.show; } add(getOption) { - const option = typeof getOption === 'function' ? getOption(this.art) : getOption; - const { $progress, $controlsLeft, $controlsRight } = this.art.template; - switch(option.position){ - case 'top': - this.$parent = $progress; - break; - case 'left': - this.$parent = $controlsLeft; - break; - case 'right': - this.$parent = $controlsRight; - break; - default: - (0, _utils.errorHandle)(false, `Control option.position must one of 'top', 'left', 'right'`); - break; - } - super.add(option); + const option = typeof getOption === "function" ? getOption(this.art) : getOption; + option.html = option.html || ""; + validator(option, ComponentOption); + if (!this.$parent || !this.name || option.disable) + return; + const name = option.name || `${this.name}${this.id}`; + errorHandle(!this.cache.has(name), `Can't add an existing [${name}] to the [${this.name}]`); + this.id += 1; + const $ref = createElement("div"); + addClass($ref, `art-${this.name}`); + addClass($ref, `art-${this.name}-${name}`); + const childs = Array.from(this.$parent.children); + $ref.dataset.index = option.index || this.id; + const nextChild = childs.find((item) => Number(item.dataset.index) >= Number($ref.dataset.index)); + if (nextChild) { + nextChild.insertAdjacentElement("beforebegin", $ref); + } else { + append(this.$parent, $ref); + } + if (option.html) { + append($ref, option.html); + } + if (option.style) { + setStyles($ref, option.style); + } + if (option.tooltip) { + tooltip($ref, option.tooltip); + } + const events = []; + if (option.click) { + const destroyEvent = this.art.events.proxy($ref, "click", (event) => { + event.preventDefault(); + option.click.call(this.art, this, event); + }); + events.push(destroyEvent); + } + if (option.selector && ["left", "right"].includes(option.position)) { + this.selector(option, $ref, events); + } + this[name] = $ref; + this.cache.set(name, { $ref, events, option }); + if (option.mounted) { + option.mounted.call(this.art, $ref); + } + return $ref; } - check(target) { - if (!target) return; - target.$control_value.innerHTML = target.html; - for(let index = 0; index < target.$control_option.length; index++){ - const item = target.$control_option[index]; - item.default = item === target; - if (item.default) (0, _utils.inverseClass)(item.$control_item, 'art-current'); - } + remove(name) { + errorHandle(this.cache.has(name), `Can't find [${name}] from the [${this.name}]`); + const item = this.cache.get(name); + if (item.option.beforeUnmount) { + item.option.beforeUnmount.call(this.art, item.$ref); + } + for (const event of item.events) { + this.art.events.remove(event); + } + this.cache.delete(name); + delete this[name]; + remove(item.$ref); } - selector(option, $ref, events) { - const { proxy } = this.art.events; - (0, _utils.addClass)($ref, 'art-control-selector'); - const $value = (0, _utils.createElement)('div'); - (0, _utils.addClass)($value, 'art-selector-value'); - (0, _utils.append)($value, option.html); - $ref.textContent = ''; - (0, _utils.append)($ref, $value); - const $list = (0, _utils.createElement)('div'); - (0, _utils.addClass)($list, 'art-selector-list'); - (0, _utils.append)($ref, $list); - for(let index = 0; index < option.selector.length; index++){ - const item = option.selector[index]; - const $item = (0, _utils.createElement)('div'); - (0, _utils.addClass)($item, 'art-selector-item'); - if (item.default) (0, _utils.addClass)($item, 'art-current'); - $item.dataset.index = index; - $item.dataset.value = item.value; - $item.innerHTML = item.html; - (0, _utils.append)($list, $item); - (0, _utils.def)(item, '$control_option', { - get: ()=>option.selector - }); - (0, _utils.def)(item, '$control_item', { - get: ()=>$item - }); - (0, _utils.def)(item, '$control_value', { - get: ()=>$value - }); - } - const event = proxy($list, 'click', async (event)=>{ - const path = (0, _utils.getComposedPath)(event); - const item = option.selector.find((item)=>item.$control_item === path.find(($item)=>item.$control_item === $item)); - this.check(item); - if (option.onSelect) $value.innerHTML = await option.onSelect.call(this.art, item, item.$control_item, event); - }); - events.push(event); + update(option) { + if (this.cache.has(option.name)) { + const item = this.cache.get(option.name); + option = Object.assign(item.option, option); + this.remove(option.name); + } + return this.add(option); } -} -exports.default = Control; - -},{"../utils":"gGxPm","../utils/component":"1wQH1","./airplay":"lTlrf","./fullscreen":"hZAUt","./fullscreenWeb":"hI1SN","./pip":"ka0Xr","./playAndPause":"jeo77","./progress":"7uH4F","./screenshot":"2XZ2T","./setting":"d5chS","./time":"4MZ6S","./volume":"eP3Jv","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"lTlrf":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>airplay); -var _utils = require("../utils"); -function airplay(option) { - return (art)=>({ - ...option, - tooltip: art.i18n.get('AirPlay'), - mounted: ($control)=>{ - const { proxy, icons } = art; - (0, _utils.append)($control, icons.airplay); - proxy($control, 'click', ()=>art.airplay()); + } + function aspectRatio$2(option) { + return (art) => { + const { + i18n, + constructor: { ASPECT_RATIO } + } = art; + const html = ASPECT_RATIO.map( + (item) => `${item === "default" ? i18n.get("Default") : item}` + ).join(""); + return { + ...option, + html: `${i18n.get("Aspect Ratio")}: ${html}`, + click: (contextmenu, event) => { + const { value } = event.target.dataset; + if (value) { + art.aspectRatio = value; + contextmenu.show = false; + } + }, + mounted: ($panel) => { + const $default = query('[data-value="default"]', $panel); + if ($default) { + inverseClass($default, "art-current"); + } + art.on("aspectRatio", (value) => { + const $current = queryAll("span", $panel).find((item) => item.dataset.value === value); + if ($current) { + inverseClass($current, "art-current"); } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"hZAUt":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>fullscreen); -var _utils = require("../utils"); -function fullscreen(option) { - return (art)=>({ - ...option, - tooltip: art.i18n.get('Fullscreen'), - mounted: ($control)=>{ - const { proxy, icons, i18n } = art; - const $fullscreenOn = (0, _utils.append)($control, icons.fullscreenOn); - const $fullscreenOff = (0, _utils.append)($control, icons.fullscreenOff); - (0, _utils.setStyle)($fullscreenOff, 'display', 'none'); - proxy($control, 'click', ()=>{ - art.fullscreen = !art.fullscreen; - }); - art.on('fullscreen', (state)=>{ - if (state) { - (0, _utils.tooltip)($control, i18n.get('Exit Fullscreen')); - (0, _utils.setStyle)($fullscreenOn, 'display', 'none'); - (0, _utils.setStyle)($fullscreenOff, 'display', 'inline-flex'); - } else { - (0, _utils.tooltip)($control, i18n.get('Fullscreen')); - (0, _utils.setStyle)($fullscreenOn, 'display', 'inline-flex'); - (0, _utils.setStyle)($fullscreenOff, 'display', 'none'); - } - }); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"hI1SN":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>fullscreenWeb); -var _utils = require("../utils"); -function fullscreenWeb(option) { - return (art)=>({ - ...option, - tooltip: art.i18n.get('Web Fullscreen'), - mounted: ($control)=>{ - const { proxy, icons, i18n } = art; - const $fullscreenWebOn = (0, _utils.append)($control, icons.fullscreenWebOn); - const $fullscreenWebOff = (0, _utils.append)($control, icons.fullscreenWebOff); - (0, _utils.setStyle)($fullscreenWebOff, 'display', 'none'); - proxy($control, 'click', ()=>{ - art.fullscreenWeb = !art.fullscreenWeb; - }); - art.on('fullscreenWeb', (value)=>{ - if (value) { - (0, _utils.tooltip)($control, i18n.get('Exit Web Fullscreen')); - (0, _utils.setStyle)($fullscreenWebOn, 'display', 'none'); - (0, _utils.setStyle)($fullscreenWebOff, 'display', 'inline-flex'); - } else { - (0, _utils.tooltip)($control, i18n.get('Web Fullscreen')); - (0, _utils.setStyle)($fullscreenWebOn, 'display', 'inline-flex'); - (0, _utils.setStyle)($fullscreenWebOff, 'display', 'none'); - } - }); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"ka0Xr":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>pip); -var _utils = require("../utils"); -function pip(option) { - return (art)=>({ - ...option, - tooltip: art.i18n.get('PIP Mode'), - mounted: ($control)=>{ - const { proxy, icons, i18n } = art; - (0, _utils.append)($control, icons.pip); - proxy($control, 'click', ()=>{ - art.pip = !art.pip; - }); - art.on('pip', (value)=>{ - (0, _utils.tooltip)($control, i18n.get(value ? 'Exit PIP Mode' : 'PIP Mode')); - }); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"jeo77":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>playAndPause); -var _utils = require("../utils"); -function playAndPause(option) { - return (art)=>({ - ...option, - mounted: ($control)=>{ - const { proxy, icons, i18n } = art; - const $play = (0, _utils.append)($control, icons.play); - const $pause = (0, _utils.append)($control, icons.pause); - (0, _utils.tooltip)($play, i18n.get('Play')); - (0, _utils.tooltip)($pause, i18n.get('Pause')); - proxy($play, 'click', ()=>{ - art.play(); - }); - proxy($pause, 'click', ()=>{ - art.pause(); - }); - function showPlay() { - (0, _utils.setStyle)($play, 'display', 'flex'); - (0, _utils.setStyle)($pause, 'display', 'none'); - } - function showPause() { - (0, _utils.setStyle)($play, 'display', 'none'); - (0, _utils.setStyle)($pause, 'display', 'flex'); - } - if (art.playing) showPause(); - else showPlay(); - art.on('video:playing', ()=>{ - showPause(); - }); - art.on('video:pause', ()=>{ - showPlay(); - }); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"7uH4F":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "getPosFromEvent", ()=>getPosFromEvent); -parcelHelpers.export(exports, "setCurrentTime", ()=>setCurrentTime); -parcelHelpers.export(exports, "default", ()=>progress); -var _utils = require("../utils"); -function getPosFromEvent(art, event) { - const { $progress } = art.template; - const { left } = (0, _utils.getRect)($progress); - const eventLeft = (0, _utils.isMobile) ? event.touches[0].clientX : event.clientX; - const width = (0, _utils.clamp)(eventLeft - left, 0, $progress.clientWidth); - const second = width / $progress.clientWidth * art.duration; - const time = (0, _utils.secondToTime)(second); - const percentage = (0, _utils.clamp)(width / $progress.clientWidth, 0, 1); - return { - second, - time, - width, - percentage + }); + } + }; }; -} -function setCurrentTime(art, event) { - if (art.isRotate) { - const percentage = event.touches[0].clientY / art.height; - const second = percentage * art.duration; - art.emit('setBar', 'played', percentage, event); - art.seek = second; - } else { - const { second, percentage } = getPosFromEvent(art, event); - art.emit('setBar', 'played', percentage, event); - art.seek = second; + } + function close$1(option) { + return (art) => ({ + ...option, + html: art.i18n.get("Close"), + click: (contextmenu) => { + contextmenu.show = false; + } + }); + } + function flip$2(option) { + return (art) => { + const { + i18n, + constructor: { FLIP } + } = art; + const html = FLIP.map((item) => `${i18n.get(capitalize(item))}`).join(""); + return { + ...option, + html: `${i18n.get("Video Flip")}: ${html}`, + click: (contextmenu, event) => { + const { value } = event.target.dataset; + if (value) { + art.flip = value.toLowerCase(); + contextmenu.show = false; + } + }, + mounted: ($panel) => { + const $default = query('[data-value="normal"]', $panel); + if ($default) { + inverseClass($default, "art-current"); + } + art.on("flip", (value) => { + const $current = queryAll("span", $panel).find((item) => item.dataset.value === value); + if ($current) { + inverseClass($current, "art-current"); + } + }); + } + }; + }; + } + function info(option) { + return (art) => ({ + ...option, + html: art.i18n.get("Video Info"), + click: (contextmenu) => { + art.info.show = true; + contextmenu.show = false; + } + }); + } + function playbackRate$2(option) { + return (art) => { + const { + i18n, + constructor: { PLAYBACK_RATE } + } = art; + const html = PLAYBACK_RATE.map( + (item) => `${item === 1 ? i18n.get("Normal") : item.toFixed(1)}` + ).join(""); + return { + ...option, + html: `${i18n.get("Play Speed")}: ${html}`, + click: (contextmenu, event) => { + const { value } = event.target.dataset; + if (value) { + art.playbackRate = Number(value); + contextmenu.show = false; + } + }, + mounted: ($panel) => { + const $default = query('[data-value="1"]', $panel); + if ($default) + inverseClass($default, "art-current"); + art.on("video:ratechange", () => { + const $current = queryAll("span", $panel).find( + (item) => Number(item.dataset.value) === art.playbackRate + ); + if ($current) { + inverseClass($current, "art-current"); + } + }); + } + }; + }; + } + function version(option) { + const url = isBrowser ? location.href : ""; + return { + ...option, + html: `ArtPlayer ${version$1}` + }; + } + class Contextmenu extends Component { + constructor(art) { + super(art); + this.name = "contextmenu"; + this.$parent = art.template.$contextmenu; + if (!isMobile) { + this.init(); + } } -} -function progress(options) { - return (art)=>{ - const { icons, option, proxy } = art; - const { $player } = art.template; - return { - ...options, - html: ` + init() { + const { + option, + proxy, + template: { $player, $contextmenu } + } = this.art; + if (option.playbackRate) { + this.add( + playbackRate$2({ + name: "playbackRate", + index: 10 + }) + ); + } + if (option.aspectRatio) { + this.add( + aspectRatio$2({ + name: "aspectRatio", + index: 20 + }) + ); + } + if (option.flip) { + this.add( + flip$2({ + name: "flip", + index: 30 + }) + ); + } + this.add( + info({ + name: "info", + index: 40 + }) + ); + this.add( + version({ + name: "version", + index: 50 + }) + ); + this.add( + close$1({ + name: "close", + index: 60 + }) + ); + for (let index = 0; index < option.contextmenu.length; index++) { + this.add(option.contextmenu[index]); + } + proxy($player, "contextmenu", (event) => { + if (!this.art.constructor.CONTEXTMENU) + return; + event.preventDefault(); + this.show = true; + const mouseX = event.clientX; + const mouseY = event.clientY; + const { height: cHeight, width: cWidth, left: cLeft, top: cTop } = getRect($player); + const { height: mHeight, width: mWidth } = getRect($contextmenu); + let menuLeft = mouseX - cLeft; + let menuTop = mouseY - cTop; + if (mouseX + mWidth > cLeft + cWidth) { + menuLeft = cWidth - mWidth; + } + if (mouseY + mHeight > cTop + cHeight) { + menuTop = cHeight - mHeight; + } + setStyles($contextmenu, { + top: `${menuTop}px`, + left: `${menuLeft}px` + }); + }); + proxy($player, "click", (event) => { + if (!includeFromEvent(event, $contextmenu)) { + this.show = false; + } + }); + this.art.on("blur", () => { + this.show = false; + }); + } + } + function airplay$1(option) { + return (art) => ({ + ...option, + tooltip: art.i18n.get("AirPlay"), + mounted: ($control) => { + const { proxy, icons } = art; + append($control, icons.airplay); + proxy($control, "click", () => art.airplay()); + } + }); + } + function fullscreen(option) { + return (art) => ({ + ...option, + tooltip: art.i18n.get("Fullscreen"), + mounted: ($control) => { + const { proxy, icons, i18n } = art; + const $fullscreenOn = append($control, icons.fullscreenOn); + const $fullscreenOff = append($control, icons.fullscreenOff); + setStyle($fullscreenOff, "display", "none"); + proxy($control, "click", () => { + art.fullscreen = !art.fullscreen; + }); + art.on("fullscreen", (state2) => { + if (state2) { + tooltip($control, i18n.get("Exit Fullscreen")); + setStyle($fullscreenOn, "display", "none"); + setStyle($fullscreenOff, "display", "inline-flex"); + } else { + tooltip($control, i18n.get("Fullscreen")); + setStyle($fullscreenOn, "display", "inline-flex"); + setStyle($fullscreenOff, "display", "none"); + } + }); + } + }); + } + function fullscreenWeb(option) { + return (art) => ({ + ...option, + tooltip: art.i18n.get("Web Fullscreen"), + mounted: ($control) => { + const { proxy, icons, i18n } = art; + const $fullscreenWebOn = append($control, icons.fullscreenWebOn); + const $fullscreenWebOff = append($control, icons.fullscreenWebOff); + setStyle($fullscreenWebOff, "display", "none"); + proxy($control, "click", () => { + art.fullscreenWeb = !art.fullscreenWeb; + }); + art.on("fullscreenWeb", (value) => { + if (value) { + tooltip($control, i18n.get("Exit Web Fullscreen")); + setStyle($fullscreenWebOn, "display", "none"); + setStyle($fullscreenWebOff, "display", "inline-flex"); + } else { + tooltip($control, i18n.get("Web Fullscreen")); + setStyle($fullscreenWebOn, "display", "inline-flex"); + setStyle($fullscreenWebOff, "display", "none"); + } + }); + } + }); + } + function pip$1(option) { + return (art) => ({ + ...option, + tooltip: art.i18n.get("PIP Mode"), + mounted: ($control) => { + const { proxy, icons, i18n } = art; + append($control, icons.pip); + proxy($control, "click", () => { + art.pip = !art.pip; + }); + art.on("pip", (value) => { + tooltip($control, i18n.get(value ? "Exit PIP Mode" : "PIP Mode")); + }); + } + }); + } + function playAndPause(option) { + return (art) => ({ + ...option, + mounted: ($control) => { + const { proxy, icons, i18n } = art; + const $play = append($control, icons.play); + const $pause = append($control, icons.pause); + tooltip($play, i18n.get("Play")); + tooltip($pause, i18n.get("Pause")); + proxy($play, "click", () => { + art.play(); + }); + proxy($pause, "click", () => { + art.pause(); + }); + function showPlay() { + setStyle($play, "display", "flex"); + setStyle($pause, "display", "none"); + } + function showPause() { + setStyle($play, "display", "none"); + setStyle($pause, "display", "flex"); + } + if (art.playing) { + showPause(); + } else { + showPlay(); + } + art.on("video:playing", () => { + showPause(); + }); + art.on("video:pause", () => { + showPlay(); + }); + } + }); + } + function getPosFromEvent(art, event) { + const { $progress } = art.template; + const { left } = getRect($progress); + const eventLeft = isMobile ? event.touches[0].clientX : event.clientX; + const width = clamp(eventLeft - left, 0, $progress.clientWidth); + const second = width / $progress.clientWidth * art.duration; + const time2 = secondToTime(second); + const percentage = clamp(width / $progress.clientWidth, 0, 1); + return { second, time: time2, width, percentage }; + } + function setCurrentTime(art, event) { + if (art.isRotate) { + const percentage = event.touches[0].clientY / art.height; + const second = percentage * art.duration; + art.emit("setBar", "played", percentage, event); + art.seek = second; + } else { + const { second, percentage } = getPosFromEvent(art, event); + art.emit("setBar", "played", percentage, event); + art.seek = second; + } + } + function progress(options) { + return (art) => { + const { icons, option, proxy } = art; + const { $player } = art.template; + return { + ...options, + html: `
@@ -1963,3478 +1212,3425 @@ function progress(options) {
00:00
`, - mounted: ($control)=>{ - let tipTimer = null; - let isDragging = false; - const $hover = (0, _utils.query)('.art-progress-hover', $control); - const $loaded = (0, _utils.query)('.art-progress-loaded', $control); - const $played = (0, _utils.query)('.art-progress-played', $control); - const $highlight = (0, _utils.query)('.art-progress-highlight', $control); - const $indicator = (0, _utils.query)('.art-progress-indicator', $control); - const $tip = (0, _utils.query)('.art-progress-tip', $control); - if (icons.indicator) (0, _utils.append)($indicator, icons.indicator); - else (0, _utils.setStyle)($indicator, 'backgroundColor', 'var(--art-theme)'); - function showHighlight(event) { - const { width } = getPosFromEvent(art, event); - const { text } = event.target.dataset; - $tip.textContent = text; - const tipWidth = $tip.clientWidth; - if (width <= tipWidth / 2) (0, _utils.setStyle)($tip, 'left', 0); - else if (width > $control.clientWidth - tipWidth / 2) (0, _utils.setStyle)($tip, 'left', `${$control.clientWidth - tipWidth}px`); - else (0, _utils.setStyle)($tip, 'left', `${width - tipWidth / 2}px`); - } - function showTime(event, touch) { - const { width, time } = touch || getPosFromEvent(art, event); - $tip.textContent = time || '00:00'; - const tipWidth = $tip.clientWidth; - if (width <= tipWidth / 2) (0, _utils.setStyle)($tip, 'left', 0); - else if (width > $control.clientWidth - tipWidth / 2) (0, _utils.setStyle)($tip, 'left', `${$control.clientWidth - tipWidth}px`); - else (0, _utils.setStyle)($tip, 'left', `${width - tipWidth / 2}px`); - } - function updateHighlight() { - $highlight.textContent = ''; - for(let index = 0; index < option.highlight.length; index++){ - const item = option.highlight[index]; - const left = (0, _utils.clamp)(item.time, 0, art.duration) / art.duration * 100; - const html = ``; - (0, _utils.append)($highlight, html); - } - } - function setBar(type, percentage, event) { - const isMobileDragging = type === 'played' && event && (0, _utils.isMobile); - if (type === 'loaded') (0, _utils.setStyle)($loaded, 'width', `${percentage * 100}%`); - if (type === 'hover') { - (0, _utils.setStyle)($hover, 'width', `${percentage * 100}%`); - if ((0, _utils.includeFromEvent)(event, $highlight)) showHighlight(event); - else showTime(event); - if (percentage === 0) (0, _utils.removeClass)($player, 'art-progress-hover'); - else (0, _utils.addClass)($player, 'art-progress-hover'); - } - if (type === 'played') { - (0, _utils.setStyle)($played, 'width', `${percentage * 100}%`); - (0, _utils.setStyle)($indicator, 'left', `${percentage * 100}%`); - } - if (isMobileDragging) { - (0, _utils.addClass)($player, 'art-progress-hover'); - const width = $control.clientWidth * percentage; - const time = (0, _utils.secondToTime)(percentage * art.duration); - showTime(event, { - width, - time - }); - clearTimeout(tipTimer); - tipTimer = setTimeout(()=>{ - (0, _utils.removeClass)($player, 'art-progress-hover'); - }, 500); - } - } - art.on('setBar', setBar); - art.on('video:loadedmetadata', updateHighlight); - if (art.constructor.USE_RAF) art.on('raf', ()=>{ - art.emit('setBar', 'played', art.played); - art.emit('setBar', 'loaded', art.loaded); - }); - else { - art.on('video:timeupdate', ()=>{ - art.emit('setBar', 'played', art.played); - }); - art.on('video:progress', ()=>{ - art.emit('setBar', 'loaded', art.loaded); - }); - art.on('video:ended', ()=>{ - art.emit('setBar', 'played', 1); - }); - } - art.emit('setBar', 'loaded', art.loaded || 0); - if (!(0, _utils.isMobile)) { - proxy($control, 'click', (event)=>{ - if (event.target !== $indicator) setCurrentTime(art, event); - }); - proxy($control, 'mousemove', (event)=>{ - const { percentage } = getPosFromEvent(art, event); - art.emit('setBar', 'hover', percentage, event); - }); - proxy($control, 'mouseleave', (event)=>{ - art.emit('setBar', 'hover', 0, event); - }); - proxy($control, 'mousedown', (event)=>{ - isDragging = event.button === 0; - }); - art.on('document:mousemove', (event)=>{ - if (isDragging) { - const { second, percentage } = getPosFromEvent(art, event); - art.emit('setBar', 'played', percentage, event); - art.seek = second; - } - }); - art.on('document:mouseup', ()=>{ - if (isDragging) isDragging = false; - }); - } + mounted: ($control) => { + let tipTimer = null; + let isDragging = false; + const $hover = query(".art-progress-hover", $control); + const $loaded = query(".art-progress-loaded", $control); + const $played = query(".art-progress-played", $control); + const $highlight = query(".art-progress-highlight", $control); + const $indicator = query(".art-progress-indicator", $control); + const $tip = query(".art-progress-tip", $control); + if (icons.indicator) { + append($indicator, icons.indicator); + } else { + setStyle($indicator, "backgroundColor", "var(--art-theme)"); + } + function showHighlight(event) { + const { width } = getPosFromEvent(art, event); + const { text } = event.target.dataset; + $tip.textContent = text; + const tipWidth = $tip.clientWidth; + if (width <= tipWidth / 2) { + setStyle($tip, "left", 0); + } else if (width > $control.clientWidth - tipWidth / 2) { + setStyle($tip, "left", `${$control.clientWidth - tipWidth}px`); + } else { + setStyle($tip, "left", `${width - tipWidth / 2}px`); } - }; + } + function showTime(event, touch) { + const { width, time: time2 } = touch || getPosFromEvent(art, event); + $tip.textContent = time2 || "00:00"; + const tipWidth = $tip.clientWidth; + if (width <= tipWidth / 2) { + setStyle($tip, "left", 0); + } else if (width > $control.clientWidth - tipWidth / 2) { + setStyle($tip, "left", `${$control.clientWidth - tipWidth}px`); + } else { + setStyle($tip, "left", `${width - tipWidth / 2}px`); + } + } + function updateHighlight() { + $highlight.textContent = ""; + for (let index = 0; index < option.highlight.length; index++) { + const item = option.highlight[index]; + const left = clamp(item.time, 0, art.duration) / art.duration * 100; + const html = ``; + append($highlight, html); + } + } + function setBar(type, percentage, event) { + const isMobileDragging = type === "played" && event && isMobile; + if (type === "loaded") { + setStyle($loaded, "width", `${percentage * 100}%`); + } + if (type === "hover") { + setStyle($hover, "width", `${percentage * 100}%`); + if (includeFromEvent(event, $highlight)) { + showHighlight(event); + } else { + showTime(event); + } + if (percentage === 0) { + removeClass($player, "art-progress-hover"); + } else { + addClass($player, "art-progress-hover"); + } + } + if (type === "played") { + setStyle($played, "width", `${percentage * 100}%`); + setStyle($indicator, "left", `${percentage * 100}%`); + } + if (isMobileDragging) { + addClass($player, "art-progress-hover"); + const width = $control.clientWidth * percentage; + const time2 = secondToTime(percentage * art.duration); + showTime(event, { width, time: time2 }); + clearTimeout(tipTimer); + tipTimer = setTimeout(() => { + removeClass($player, "art-progress-hover"); + }, 500); + } + } + art.on("setBar", setBar); + art.on("video:loadedmetadata", updateHighlight); + if (art.constructor.USE_RAF) { + art.on("raf", () => { + art.emit("setBar", "played", art.played); + art.emit("setBar", "loaded", art.loaded); + }); + } else { + art.on("video:timeupdate", () => { + art.emit("setBar", "played", art.played); + }); + art.on("video:progress", () => { + art.emit("setBar", "loaded", art.loaded); + }); + art.on("video:ended", () => { + art.emit("setBar", "played", 1); + }); + } + art.emit("setBar", "loaded", art.loaded || 0); + if (!isMobile) { + proxy($control, "click", (event) => { + if (event.target !== $indicator) { + setCurrentTime(art, event); + } + }); + proxy($control, "mousemove", (event) => { + const { percentage } = getPosFromEvent(art, event); + art.emit("setBar", "hover", percentage, event); + }); + proxy($control, "mouseleave", (event) => { + art.emit("setBar", "hover", 0, event); + }); + proxy($control, "mousedown", (event) => { + isDragging = event.button === 0; + }); + art.on("document:mousemove", (event) => { + if (isDragging) { + const { second, percentage } = getPosFromEvent(art, event); + art.emit("setBar", "played", percentage, event); + art.seek = second; + } + }); + art.on("document:mouseup", () => { + if (isDragging) { + isDragging = false; + } + }); + } + } + }; }; -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"2XZ2T":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>screenshot); -var _utils = require("../utils"); -function screenshot(option) { - return (art)=>({ - ...option, - tooltip: art.i18n.get('Screenshot'), - mounted: ($control)=>{ - const { proxy, icons } = art; - (0, _utils.append)($control, icons.screenshot); - proxy($control, 'click', ()=>{ - art.screenshot(); - }); - } + } + function screenshot$1(option) { + return (art) => ({ + ...option, + tooltip: art.i18n.get("Screenshot"), + mounted: ($control) => { + const { proxy, icons } = art; + append($control, icons.screenshot); + proxy($control, "click", () => { + art.screenshot(); }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"d5chS":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>setting); -var _utils = require("../utils"); -function setting(option) { - return (art)=>({ - ...option, - tooltip: art.i18n.get('Show Setting'), - mounted: ($control)=>{ - const { proxy, icons, i18n } = art; - (0, _utils.append)($control, icons.setting); - proxy($control, 'click', ()=>{ - art.setting.toggle(); - art.setting.resize(); - }); - art.on('setting', (value)=>{ - (0, _utils.tooltip)($control, i18n.get(value ? 'Hide Setting' : 'Show Setting')); - }); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"4MZ6S":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>time); -var _utils = require("../utils"); -function time(option) { - return (art)=>({ - ...option, - style: (0, _utils.isMobile) ? { - fontSize: '12px', - padding: '0 5px' - } : { - cursor: 'auto', - padding: '0 10px' - }, - mounted: ($control)=>{ - function getTime() { - const newTime = `${(0, _utils.secondToTime)(art.currentTime)} / ${(0, _utils.secondToTime)(art.duration)}`; - if (newTime !== $control.textContent) $control.textContent = newTime; - } - getTime(); - const events = [ - 'video:loadedmetadata', - 'video:timeupdate', - 'video:progress' - ]; - for(let index = 0; index < events.length; index++)art.on(events[index], getTime); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"eP3Jv":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>volume); -var _utils = require("../utils"); -function volume(option) { - return (art)=>({ - ...option, - mounted: ($control)=>{ - const { proxy, icons } = art; - const $volume = (0, _utils.append)($control, icons.volume); - const $close = (0, _utils.append)($control, icons.volumeClose); - const $panel = (0, _utils.append)($control, '
'); - const $inner = (0, _utils.append)($panel, '
'); - const $value = (0, _utils.append)($inner, `
`); - const $slider = (0, _utils.append)($inner, `
`); - const $handle = (0, _utils.append)($slider, `
`); - const $loaded = (0, _utils.append)($handle, `
`); - const $indicator = (0, _utils.append)($slider, `
`); - function getVolumeFromEvent(event) { - const { top, height } = (0, _utils.getRect)($slider); - return 1 - (event.clientY - top) / height; - } - function update() { - if (art.muted || art.volume === 0) { - (0, _utils.setStyle)($volume, 'display', 'none'); - (0, _utils.setStyle)($close, 'display', 'flex'); - (0, _utils.setStyle)($indicator, 'top', '100%'); - (0, _utils.setStyle)($loaded, 'top', '100%'); - $value.textContent = 0; - } else { - const percentage = art.volume * 100; - (0, _utils.setStyle)($volume, 'display', 'flex'); - (0, _utils.setStyle)($close, 'display', 'none'); - (0, _utils.setStyle)($indicator, 'top', `${100 - percentage}%`); - (0, _utils.setStyle)($loaded, 'top', `${100 - percentage}%`); - $value.textContent = Math.floor(percentage); - } - } - update(); - art.on('video:volumechange', update); - proxy($volume, 'click', ()=>{ - art.muted = true; - }); - proxy($close, 'click', ()=>{ - art.muted = false; - }); - if (0, _utils.isMobile) (0, _utils.setStyle)($panel, 'display', 'none'); - else { - let isDragging = false; - proxy($slider, 'mousedown', (event)=>{ - isDragging = event.button === 0; - art.volume = getVolumeFromEvent(event); - }); - art.on('document:mousemove', (event)=>{ - if (isDragging) { - art.muted = false; - art.volume = getVolumeFromEvent(event); - } - }); - art.on('document:mouseup', ()=>{ - if (isDragging) isDragging = false; - }); - } - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"dQzlM":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _clickInit = require("./clickInit"); -var _clickInitDefault = parcelHelpers.interopDefault(_clickInit); -var _gestureInit = require("./gestureInit"); -var _gestureInitDefault = parcelHelpers.interopDefault(_gestureInit); -var _globalInit = require("./globalInit"); -var _globalInitDefault = parcelHelpers.interopDefault(_globalInit); -var _hoverInit = require("./hoverInit"); -var _hoverInitDefault = parcelHelpers.interopDefault(_hoverInit); -var _moveInit = require("./moveInit"); -var _moveInitDefault = parcelHelpers.interopDefault(_moveInit); -var _resizeInit = require("./resizeInit"); -var _resizeInitDefault = parcelHelpers.interopDefault(_resizeInit); -var _updateInit = require("./updateInit"); -var _updateInitDefault = parcelHelpers.interopDefault(_updateInit); -var _viewInit = require("./viewInit"); -var _viewInitDefault = parcelHelpers.interopDefault(_viewInit); -class Events { - constructor(art){ - this.destroyEvents = new Set(); - this.proxy = this.proxy.bind(this); - this.hover = this.hover.bind(this); - (0, _clickInitDefault.default)(art, this); - (0, _hoverInitDefault.default)(art, this); - (0, _moveInitDefault.default)(art, this); - (0, _resizeInitDefault.default)(art, this); - (0, _gestureInitDefault.default)(art, this); - (0, _viewInitDefault.default)(art, this); - (0, _globalInitDefault.default)(art, this); - (0, _updateInitDefault.default)(art, this); - } - proxy(target, name, callback, option = {}) { - if (Array.isArray(name)) return name.map((item)=>this.proxy(target, item, callback, option)); - target.addEventListener(name, callback, option); - const destroy = ()=>target.removeEventListener(name, callback, option); - this.destroyEvents.add(destroy); - return destroy; - } - hover(target, mouseenter, mouseleave) { - if (mouseenter) this.proxy(target, 'mouseenter', mouseenter); - if (mouseleave) this.proxy(target, 'mouseleave', mouseleave); - } - remove(destroyEvent) { - if (this.destroyEvents.has(destroyEvent)) try { - destroyEvent(); - } catch (error) { - console.warn('Failed to remove event listener:', error); - } finally{ - this.destroyEvents.delete(destroyEvent); - } - } - destroy() { - for (const destroyEvent of this.destroyEvents)try { - destroyEvent(); - } catch (error) { - console.warn('Failed to destroy event listener:', error); - } - this.destroyEvents.clear(); - } -} -exports.default = Events; - -},{"./clickInit":"jci0Q","./gestureInit":"55SCY","./globalInit":"5R6Zc","./hoverInit":"hY9ON","./moveInit":"cJ7iV","./resizeInit":"15qnS","./updateInit":"2iqzD","./viewInit":"lGG7W","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"jci0Q":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>clickInit); -var _utils = require("../utils"); -function clickInit(art, events) { - const { constructor, template: { $player, $video } } = art; - function onDocumentClick(event) { - if ((0, _utils.includeFromEvent)(event, $player)) { - art.isInput = event.target.tagName === 'INPUT'; - art.isFocus = true; - art.emit('focus', event); - } else { - art.isInput = false; - art.isFocus = false; - art.emit('blur', event); - } - } - art.on('document:click', onDocumentClick); - art.on('document:contextmenu', onDocumentClick); - let clickTimes = []; - events.proxy($video, 'click', (event)=>{ - const now = Date.now(); - clickTimes.push(now); - const { MOBILE_CLICK_PLAY, DBCLICK_TIME, MOBILE_DBCLICK_PLAY, DBCLICK_FULLSCREEN } = constructor; - const clicks = clickTimes.filter((t)=>now - t <= DBCLICK_TIME); - switch(clicks.length){ - case 1: - art.emit('click', event); - if (0, _utils.isMobile) { - if (!art.isLock && MOBILE_CLICK_PLAY) art.toggle(); - } else art.toggle(); - clickTimes = clicks; - break; - case 2: - art.emit('dblclick', event); - if (0, _utils.isMobile) { - if (!art.isLock && MOBILE_DBCLICK_PLAY) art.toggle(); - } else if (DBCLICK_FULLSCREEN) art.fullscreen = !art.fullscreen; - clickTimes = []; - break; - default: - clickTimes = []; - } + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"55SCY":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>gestureInit); -var _progress = require("../control/progress"); -var _utils = require("../utils"); -function GetSlideAngle(dx, dy) { + } + function setting$1(option) { + return (art) => ({ + ...option, + tooltip: art.i18n.get("Show Setting"), + mounted: ($control) => { + const { proxy, icons, i18n } = art; + append($control, icons.setting); + proxy($control, "click", () => { + art.setting.toggle(); + art.setting.resize(); + }); + art.on("setting", (value) => { + tooltip($control, i18n.get(value ? "Hide Setting" : "Show Setting")); + }); + } + }); + } + function time(option) { + return (art) => ({ + ...option, + style: isMobile ? { + fontSize: "12px", + padding: "0 5px" + } : { + cursor: "auto", + padding: "0 10px" + }, + mounted: ($control) => { + function getTime() { + const newTime = `${secondToTime(art.currentTime)} / ${secondToTime(art.duration)}`; + if (newTime !== $control.textContent) { + $control.textContent = newTime; + } + } + getTime(); + const events = ["video:loadedmetadata", "video:timeupdate", "video:progress"]; + for (let index = 0; index < events.length; index++) { + art.on(events[index], getTime); + } + } + }); + } + function volume$1(option) { + return (art) => ({ + ...option, + mounted: ($control) => { + const { proxy, icons } = art; + const $volume = append($control, icons.volume); + const $close = append($control, icons.volumeClose); + const $panel = append($control, '
'); + const $inner = append($panel, '
'); + const $value = append($inner, `
`); + const $slider = append($inner, `
`); + const $handle = append($slider, `
`); + const $loaded = append($handle, `
`); + const $indicator = append($slider, `
`); + function getVolumeFromEvent(event) { + const { top, height } = getRect($slider); + return 1 - (event.clientY - top) / height; + } + function update() { + if (art.muted || art.volume === 0) { + setStyle($volume, "display", "none"); + setStyle($close, "display", "flex"); + setStyle($indicator, "top", "100%"); + setStyle($loaded, "top", "100%"); + $value.textContent = 0; + } else { + const percentage = art.volume * 100; + setStyle($volume, "display", "flex"); + setStyle($close, "display", "none"); + setStyle($indicator, "top", `${100 - percentage}%`); + setStyle($loaded, "top", `${100 - percentage}%`); + $value.textContent = Math.floor(percentage); + } + } + update(); + art.on("video:volumechange", update); + proxy($volume, "click", () => { + art.muted = true; + }); + proxy($close, "click", () => { + art.muted = false; + }); + if (isMobile) { + setStyle($panel, "display", "none"); + } else { + let isDragging = false; + proxy($slider, "mousedown", (event) => { + isDragging = event.button === 0; + art.volume = getVolumeFromEvent(event); + }); + art.on("document:mousemove", (event) => { + if (isDragging) { + art.muted = false; + art.volume = getVolumeFromEvent(event); + } + }); + art.on("document:mouseup", () => { + if (isDragging) { + isDragging = false; + } + }); + } + } + }); + } + class Control extends Component { + constructor(art) { + super(art); + this.isHover = false; + this.name = "control"; + this.timer = Date.now(); + const { constructor } = art; + const { $player, $bottom } = this.art.template; + art.on("mousemove", () => { + if (!isMobile) { + this.show = true; + } + }); + art.on("click", () => { + if (isMobile) { + this.toggle(); + } else { + this.show = true; + } + }); + art.on("document:mousemove", (event) => { + this.isHover = includeFromEvent(event, $bottom); + }); + art.on("video:timeupdate", () => { + if (!art.setting.show && !this.isHover && !art.isInput && art.playing && this.show && Date.now() - this.timer >= constructor.CONTROL_HIDE_TIME) { + this.show = false; + } + }); + art.on("control", (state2) => { + if (state2) { + removeClass($player, "art-hide-cursor"); + addClass($player, "art-hover"); + this.timer = Date.now(); + } else { + addClass($player, "art-hide-cursor"); + removeClass($player, "art-hover"); + } + }); + this.init(); + } + init() { + const { option } = this.art; + if (!option.isLive) { + this.add( + progress({ + name: "progress", + position: "top", + index: 10 + }) + ); + } + this.add({ + name: "thumbnails", + position: "top", + index: 20 + }); + this.add( + playAndPause({ + name: "playAndPause", + position: "left", + index: 10 + }) + ); + this.add( + volume$1({ + name: "volume", + position: "left", + index: 20 + }) + ); + if (!option.isLive) { + this.add( + time({ + name: "time", + position: "left", + index: 30 + }) + ); + } + if (option.quality.length) { + sleep().then(() => { + this.art.quality = option.quality; + }); + } + if (option.screenshot && !isMobile) { + this.add( + screenshot$1({ + name: "screenshot", + position: "right", + index: 20 + }) + ); + } + if (option.setting) { + this.add( + setting$1({ + name: "setting", + position: "right", + index: 30 + }) + ); + } + if (option.pip) { + this.add( + pip$1({ + name: "pip", + position: "right", + index: 40 + }) + ); + } + if (option.airplay && window.WebKitPlaybackTargetAvailabilityEvent) { + this.add( + airplay$1({ + name: "airplay", + position: "right", + index: 50 + }) + ); + } + if (option.fullscreenWeb) { + this.add( + fullscreenWeb({ + name: "fullscreenWeb", + position: "right", + index: 60 + }) + ); + } + if (option.fullscreen) { + this.add( + fullscreen({ + name: "fullscreen", + position: "right", + index: 70 + }) + ); + } + for (let index = 0; index < option.controls.length; index++) { + this.add(option.controls[index]); + } + } + add(getOption) { + const option = typeof getOption === "function" ? getOption(this.art) : getOption; + const { $progress, $controlsLeft, $controlsRight } = this.art.template; + switch (option.position) { + case "top": + this.$parent = $progress; + break; + case "left": + this.$parent = $controlsLeft; + break; + case "right": + this.$parent = $controlsRight; + break; + default: + errorHandle(false, `Control option.position must one of 'top', 'left', 'right'`); + break; + } + super.add(option); + } + check(target) { + if (!target) { + return; + } + target.$control_value.innerHTML = target.html; + for (let index = 0; index < target.$control_option.length; index++) { + const item = target.$control_option[index]; + item.default = item === target; + if (item.default) { + inverseClass(item.$control_item, "art-current"); + } + } + } + selector(option, $ref, events) { + const { proxy } = this.art.events; + addClass($ref, "art-control-selector"); + const $value = createElement("div"); + addClass($value, "art-selector-value"); + append($value, option.html); + $ref.textContent = ""; + append($ref, $value); + const $list = createElement("div"); + addClass($list, "art-selector-list"); + append($ref, $list); + for (let index = 0; index < option.selector.length; index++) { + const item = option.selector[index]; + const $item = createElement("div"); + addClass($item, "art-selector-item"); + if (item.default) + addClass($item, "art-current"); + $item.dataset.index = index; + $item.dataset.value = item.value; + $item.innerHTML = item.html; + append($list, $item); + def(item, "$control_option", { + get: () => option.selector + }); + def(item, "$control_item", { + get: () => $item + }); + def(item, "$control_value", { + get: () => $value + }); + } + const event = proxy($list, "click", async (event2) => { + const path = getComposedPath(event2); + const item = option.selector.find( + (item2) => item2.$control_item === path.find(($item) => item2.$control_item === $item) + ); + this.check(item); + if (option.onSelect) { + $value.innerHTML = await option.onSelect.call(this.art, item, item.$control_item, event2); + } + }); + events.push(event); + } + } + function clickInit(art, events) { + const { + constructor, + template: { $player, $video } + } = art; + function onDocumentClick(event) { + if (includeFromEvent(event, $player)) { + art.isInput = event.target.tagName === "INPUT"; + art.isFocus = true; + art.emit("focus", event); + } else { + art.isInput = false; + art.isFocus = false; + art.emit("blur", event); + } + } + art.on("document:click", onDocumentClick); + art.on("document:contextmenu", onDocumentClick); + let clickTimes = []; + events.proxy($video, "click", (event) => { + const now = Date.now(); + clickTimes.push(now); + const { MOBILE_CLICK_PLAY, DBCLICK_TIME, MOBILE_DBCLICK_PLAY, DBCLICK_FULLSCREEN } = constructor; + const clicks = clickTimes.filter((t) => now - t <= DBCLICK_TIME); + switch (clicks.length) { + case 1: + art.emit("click", event); + if (isMobile) { + if (!art.isLock && MOBILE_CLICK_PLAY) { + art.toggle(); + } + } else { + art.toggle(); + } + clickTimes = clicks; + break; + case 2: + art.emit("dblclick", event); + if (isMobile) { + if (!art.isLock && MOBILE_DBCLICK_PLAY) { + art.toggle(); + } + } else { + if (DBCLICK_FULLSCREEN) { + art.fullscreen = !art.fullscreen; + } + } + clickTimes = []; + break; + default: + clickTimes = []; + } + }); + } + function GetSlideAngle(dx, dy) { return Math.atan2(dy, dx) * 180 / Math.PI; -} -function GetSlideDirection(startX, startY, endX, endY) { + } + function GetSlideDirection(startX, startY, endX, endY) { const dy = startY - endY; const dx = endX - startX; let result = 0; - if (Math.abs(dx) < 2 && Math.abs(dy) < 2) return result; - const angle = GetSlideAngle(dx, dy); - if (angle >= -45 && angle < 45) result = 4; - else if (angle >= 45 && angle < 135) result = 1; - else if (angle >= -135 && angle < -45) result = 2; - else if (angle >= 135 && angle <= 180 || angle >= -180 && angle < -135) result = 3; - return result; -} -function gestureInit(art, events) { - if ((0, _utils.isMobile) && !art.option.isLive) { - const { $video, $progress } = art.template; - let touchTarget = null; - let isDragging = false; - let startX = 0; - let startY = 0; - let startTime = 0; - const onTouchStart = (event)=>{ - if (event.touches.length === 1 && !art.isLock) { - if (touchTarget === $progress) (0, _progress.setCurrentTime)(art, event); - isDragging = true; - const { pageX, pageY } = event.touches[0]; - startX = pageX; - startY = pageY; - startTime = art.currentTime; - } - }; - const onTouchMove = (event)=>{ - if (event.touches.length === 1 && isDragging && art.duration) { - const { pageX, pageY } = event.touches[0]; - const direction = GetSlideDirection(startX, startY, pageX, pageY); - const isHorizontal = [ - 3, - 4 - ].includes(direction); - const isVertical = [ - 1, - 2 - ].includes(direction); - const isLegal = isHorizontal && !art.isRotate || isVertical && art.isRotate; - if (isLegal) { - const ratioX = (0, _utils.clamp)((pageX - startX) / art.width, -1, 1); - const ratioY = (0, _utils.clamp)((pageY - startY) / art.height, -1, 1); - const ratio = art.isRotate ? ratioY : ratioX; - const TOUCH_MOVE_RATIO = touchTarget === $video ? art.constructor.TOUCH_MOVE_RATIO : 1; - const currentTime = (0, _utils.clamp)(startTime + art.duration * ratio * TOUCH_MOVE_RATIO, 0, art.duration); - art.seek = currentTime; - art.emit('setBar', 'played', (0, _utils.clamp)(currentTime / art.duration, 0, 1), event); - art.notice.show = `${(0, _utils.secondToTime)(currentTime)} / ${(0, _utils.secondToTime)(art.duration)}`; - } - } - }; - const onTouchEnd = ()=>{ - if (isDragging) { - startX = 0; - startY = 0; - startTime = 0; - isDragging = false; - touchTarget = null; - } - }; - if (art.option.gesture) { - events.proxy($video, 'touchstart', (event)=>{ - touchTarget = $video; - onTouchStart(event); - }); - events.proxy($video, 'touchmove', onTouchMove); - } - events.proxy($progress, 'touchstart', (event)=>{ - touchTarget = $progress; - onTouchStart(event); - }); - events.proxy($progress, 'touchmove', onTouchMove); - art.on('document:touchend', onTouchEnd); + if (Math.abs(dx) < 2 && Math.abs(dy) < 2) { + return result; } -} - -},{"../control/progress":"7uH4F","../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"5R6Zc":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>globalInit); -function globalInit(art, events) { + const angle = GetSlideAngle(dx, dy); + if (angle >= -45 && angle < 45) { + result = 4; + } else if (angle >= 45 && angle < 135) { + result = 1; + } else if (angle >= -135 && angle < -45) { + result = 2; + } else if (angle >= 135 && angle <= 180 || angle >= -180 && angle < -135) { + result = 3; + } + return result; + } + function gestureInit(art, events) { + if (isMobile && !art.option.isLive) { + const { $video, $progress } = art.template; + let touchTarget = null; + let isDragging = false; + let startX = 0; + let startY = 0; + let startTime = 0; + const onTouchStart = (event) => { + if (event.touches.length === 1 && !art.isLock) { + if (touchTarget === $progress) { + setCurrentTime(art, event); + } + isDragging = true; + const { pageX, pageY } = event.touches[0]; + startX = pageX; + startY = pageY; + startTime = art.currentTime; + } + }; + const onTouchMove = (event) => { + if (event.touches.length === 1 && isDragging && art.duration) { + const { pageX, pageY } = event.touches[0]; + const direction = GetSlideDirection(startX, startY, pageX, pageY); + const isHorizontal = [3, 4].includes(direction); + const isVertical = [1, 2].includes(direction); + const isLegal = isHorizontal && !art.isRotate || isVertical && art.isRotate; + if (isLegal) { + const ratioX = clamp((pageX - startX) / art.width, -1, 1); + const ratioY = clamp((pageY - startY) / art.height, -1, 1); + const ratio = art.isRotate ? ratioY : ratioX; + const TOUCH_MOVE_RATIO = touchTarget === $video ? art.constructor.TOUCH_MOVE_RATIO : 1; + const currentTime = clamp(startTime + art.duration * ratio * TOUCH_MOVE_RATIO, 0, art.duration); + art.seek = currentTime; + art.emit("setBar", "played", clamp(currentTime / art.duration, 0, 1), event); + art.notice.show = `${secondToTime(currentTime)} / ${secondToTime(art.duration)}`; + } + } + }; + const onTouchEnd = () => { + if (isDragging) { + startX = 0; + startY = 0; + startTime = 0; + isDragging = false; + touchTarget = null; + } + }; + if (art.option.gesture) { + events.proxy($video, "touchstart", (event) => { + touchTarget = $video; + onTouchStart(event); + }); + events.proxy($video, "touchmove", onTouchMove); + } + events.proxy($progress, "touchstart", (event) => { + touchTarget = $progress; + onTouchStart(event); + }); + events.proxy($progress, "touchmove", onTouchMove); + art.on("document:touchend", onTouchEnd); + } + } + function globalInit(art, events) { const documentEvents = [ - 'click', - 'mouseup', - 'keydown', - 'touchend', - 'touchmove', - 'mousemove', - 'pointerup', - 'contextmenu', - 'pointermove', - 'visibilitychange', - 'webkitfullscreenchange' + "click", + "mouseup", + "keydown", + "touchend", + "touchmove", + "mousemove", + "pointerup", + "contextmenu", + "pointermove", + "visibilitychange", + "webkitfullscreenchange" ]; const windowEvents = [ - 'resize', - 'scroll', - 'orientationchange' + "resize", + "scroll", + "orientationchange" ]; const destroyEvents = []; function bindGlobalEvents(source = {}) { - for(let index = 0; index < destroyEvents.length; index++)events.remove(destroyEvents[index]); - destroyEvents.length = 0; - const { $player } = art.template; - documentEvents.forEach((name)=>{ - const doc = source.document || $player.ownerDocument || document; - const destroy = events.proxy(doc, name, (event)=>{ - art.emit(`document:${name}`, event); - }); - destroyEvents.push(destroy); + for (let index = 0; index < destroyEvents.length; index++) { + events.remove(destroyEvents[index]); + } + destroyEvents.length = 0; + const { $player } = art.template; + documentEvents.forEach((name) => { + const doc = source.document || $player.ownerDocument || document; + const destroy = events.proxy(doc, name, (event) => { + art.emit(`document:${name}`, event); }); - windowEvents.forEach((name)=>{ - const win = source.window || $player.ownerDocument?.defaultView || window; - const destroy = events.proxy(win, name, (event)=>{ - art.emit(`window:${name}`, event); - }); - destroyEvents.push(destroy); + destroyEvents.push(destroy); + }); + windowEvents.forEach((name) => { + const win = source.window || $player.ownerDocument?.defaultView || window; + const destroy = events.proxy(win, name, (event) => { + art.emit(`window:${name}`, event); }); + destroyEvents.push(destroy); + }); } bindGlobalEvents(); events.bindGlobalEvents = bindGlobalEvents; -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"hY9ON":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>hoverInit); -var _utils = require("../utils"); -function hoverInit(art, events) { + } + function hoverInit(art, events) { const { $player } = art.template; - events.hover($player, (event)=>{ - (0, _utils.addClass)($player, 'art-hover'); - art.emit('hover', true, event); - }, (event)=>{ - (0, _utils.removeClass)($player, 'art-hover'); - art.emit('hover', false, event); - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"cJ7iV":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>moveInit); -function moveInit(art, events) { + events.hover( + $player, + (event) => { + addClass($player, "art-hover"); + art.emit("hover", true, event); + }, + (event) => { + removeClass($player, "art-hover"); + art.emit("hover", false, event); + } + ); + } + function moveInit(art, events) { const { $player } = art.template; - events.proxy($player, 'mousemove', (event)=>{ - art.emit('mousemove', event); + events.proxy($player, "mousemove", (event) => { + art.emit("mousemove", event); }); -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"15qnS":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>resizeInit); -var _utils = require("../utils"); -function resizeInit(art, events) { + } + function resizeInit(art, events) { const { option, constructor } = art; - art.on('resize', ()=>{ - const { aspectRatio, notice } = art; - if (art.state === 'standard' && option.autoSize) art.autoSize(); - art.aspectRatio = aspectRatio; - notice.show = ''; + art.on("resize", () => { + const { aspectRatio: aspectRatio2, notice } = art; + if (art.state === "standard" && option.autoSize) { + art.autoSize(); + } + art.aspectRatio = aspectRatio2; + notice.show = ""; }); - const resizeFn = (0, _utils.debounce)(()=>art.emit('resize'), constructor.RESIZE_TIME); - art.on('window:orientationchange', ()=>resizeFn()); - art.on('window:resize', ()=>resizeFn()); - if (screen && screen.orientation && screen.orientation.onchange) events.proxy(screen.orientation, 'change', ()=>resizeFn()); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"2iqzD":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>updateInit); -function updateInit(art) { + const resizeFn = debounce(() => art.emit("resize"), constructor.RESIZE_TIME); + art.on("window:orientationchange", () => resizeFn()); + art.on("window:resize", () => resizeFn()); + if (screen && screen.orientation && screen.orientation.onchange) { + events.proxy(screen.orientation, "change", () => resizeFn()); + } + } + function updateInit(art) { if (art.constructor.USE_RAF) { - let timer = null; - (function update() { - if (art.playing) art.emit('raf'); - if (!art.isDestroy) timer = requestAnimationFrame(update); - })(); - art.on('destroy', ()=>{ - cancelAnimationFrame(timer); - }); + let timer = null; + (function update() { + if (art.playing) { + art.emit("raf"); + } + if (!art.isDestroy) { + timer = requestAnimationFrame(update); + } + })(); + art.on("destroy", () => { + cancelAnimationFrame(timer); + }); } -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"lGG7W":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>viewInit); -var _utils = require("../utils"); -function viewInit(art) { - const { option, constructor, template: { $container } } = art; - const scrollFn = (0, _utils.throttle)(()=>{ - art.emit('view', (0, _utils.isInViewport)($container, constructor.SCROLL_GAP)); + } + function viewInit(art) { + const { + option, + constructor, + template: { $container } + } = art; + const scrollFn = throttle(() => { + art.emit("view", isInViewport($container, constructor.SCROLL_GAP)); }, constructor.SCROLL_TIME); - art.on('window:scroll', ()=>scrollFn()); - art.on('view', (state)=>{ - if (option.autoMini) art.mini = !state; + art.on("window:scroll", () => scrollFn()); + art.on("view", (state2) => { + if (option.autoMini) { + art.mini = !state2; + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"drylQ":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _utils = require("./utils"); -class Hotkey { - constructor(art){ - this.art = art; - this.keys = {}; - if (!(0, _utils.isMobile)) this.init(); + } + class Events { + constructor(art) { + this.destroyEvents = /* @__PURE__ */ new Set(); + this.proxy = this.proxy.bind(this); + this.hover = this.hover.bind(this); + clickInit(art, this); + hoverInit(art, this); + moveInit(art, this); + resizeInit(art, this); + gestureInit(art, this); + viewInit(art); + globalInit(art, this); + updateInit(art); } - init() { - const { constructor } = this.art; - if (this.art.option.hotkey) { - this.add('Escape', ()=>{ - if (this.art.fullscreenWeb) this.art.fullscreenWeb = false; - }); - this.add('Space', ()=>{ - this.art.toggle(); - }); - this.add('ArrowLeft', ()=>{ - this.art.backward = constructor.SEEK_STEP; - }); - this.add('ArrowUp', ()=>{ - this.art.volume += constructor.VOLUME_STEP; - }); - this.add('ArrowRight', ()=>{ - this.art.forward = constructor.SEEK_STEP; - }); - this.add('ArrowDown', ()=>{ - this.art.volume -= constructor.VOLUME_STEP; - }); + proxy(target, name, callback, option = {}) { + if (Array.isArray(name)) { + return name.map((item) => this.proxy(target, item, callback, option)); + } + target.addEventListener(name, callback, option); + const destroy = () => target.removeEventListener(name, callback, option); + this.destroyEvents.add(destroy); + return destroy; + } + hover(target, mouseenter, mouseleave) { + if (mouseenter) { + this.proxy(target, "mouseenter", mouseenter); + } + if (mouseleave) { + this.proxy(target, "mouseleave", mouseleave); + } + } + remove(destroyEvent) { + if (this.destroyEvents.has(destroyEvent)) { + try { + destroyEvent(); + } catch (error2) { + console.warn("Failed to remove event listener:", error2); + } finally { + this.destroyEvents.delete(destroyEvent); } - this.art.on('document:keydown', (event)=>{ - if (this.art.isFocus) { - const tag = document.activeElement.tagName.toUpperCase(); - const editable = document.activeElement.getAttribute('contenteditable'); - if (tag !== 'INPUT' && tag !== 'TEXTAREA' && editable !== '' && editable !== 'true' && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { - const events = this.keys[event.code]; - if (events) { - event.preventDefault(); - for(let index = 0; index < events.length; index++)events[index].call(this.art, event); - this.art.emit('hotkey', event); - } - } - } - this.art.emit('keydown', event); - }); - } - add(key, event) { - if (this.keys[key]) { - if (!this.keys[key].includes(event)) this.keys[key].push(event); - } else this.keys[key] = [ - event - ]; - return this; - } - remove(key, event) { - if (this.keys[key]) { - const index = this.keys[key].indexOf(event); - if (index !== -1) this.keys[key].splice(index, 1); - if (this.keys[key].length === 0) delete this.keys[key]; - } - return this; - } -} -exports.default = Hotkey; - -},{"./utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"3Jf1s":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _utils = require("../utils"); -var _zhCn = require("./zh-cn"); -var _zhCnDefault = parcelHelpers.interopDefault(_zhCn); -class I18n { - constructor(art){ - this.art = art; - this.languages = { - 'zh-cn': (0, _zhCnDefault.default) - }; - this.language = {}; - this.update(art.option.i18n); - } - init() { - const lang = this.art.option.lang.toLowerCase(); - this.language = this.languages[lang] || {}; - } - get(key) { - return this.language[key] || key; - } - update(value) { - this.languages = (0, _utils.mergeDeep)(this.languages, value); - this.init(); - } -} -exports.default = I18n; - -},{"../utils":"gGxPm","./zh-cn":"5Zwl9","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"5Zwl9":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -const zhCn = { - 'Video Info': "\u7EDF\u8BA1\u4FE1\u606F", - 'Close': "\u5173\u95ED", - 'Video Load Failed': "\u52A0\u8F7D\u5931\u8D25", - 'Volume': "\u97F3\u91CF", - 'Play': "\u64AD\u653E", - 'Pause': "\u6682\u505C", - 'Rate': "\u901F\u5EA6", - 'Mute': "\u9759\u97F3", - 'Video Flip': "\u753B\u9762\u7FFB\u8F6C", - 'Horizontal': "\u6C34\u5E73", - 'Vertical': "\u5782\u76F4", - 'Reconnect': "\u91CD\u65B0\u8FDE\u63A5", - 'Show Setting': "\u663E\u793A\u8BBE\u7F6E", - 'Hide Setting': "\u9690\u85CF\u8BBE\u7F6E", - 'Screenshot': "\u622A\u56FE", - 'Play Speed': "\u64AD\u653E\u901F\u5EA6", - 'Aspect Ratio': "\u753B\u9762\u6BD4\u4F8B", - 'Default': "\u9ED8\u8BA4", - 'Normal': "\u6B63\u5E38", - 'Open': "\u6253\u5F00", - 'Switch Video': "\u5207\u6362", - 'Switch Subtitle': "\u5207\u6362\u5B57\u5E55", - 'Fullscreen': "\u5168\u5C4F", - 'Exit Fullscreen': "\u9000\u51FA\u5168\u5C4F", - 'Web Fullscreen': "\u7F51\u9875\u5168\u5C4F", - 'Exit Web Fullscreen': "\u9000\u51FA\u7F51\u9875\u5168\u5C4F", - 'Mini Player': "\u8FF7\u4F60\u64AD\u653E\u5668", - 'PIP Mode': "\u5F00\u542F\u753B\u4E2D\u753B", - 'Exit PIP Mode': "\u9000\u51FA\u753B\u4E2D\u753B", - 'PIP Not Supported': "\u4E0D\u652F\u6301\u753B\u4E2D\u753B", - 'Fullscreen Not Supported': "\u4E0D\u652F\u6301\u5168\u5C4F", - 'Subtitle Offset': "\u5B57\u5E55\u504F\u79FB", - 'Last Seen': "\u4E0A\u6B21\u770B\u5230", - 'Jump Play': "\u8DF3\u8F6C\u64AD\u653E", - 'AirPlay': "\u9694\u7A7A\u64AD\u653E", - 'AirPlay Not Available': "\u9694\u7A7A\u64AD\u653E\u4E0D\u53EF\u7528" -}; -exports.default = zhCn; -if (typeof window !== 'undefined') window['artplayer-i18n-zh-cn'] = zhCn; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"avFu3":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _airplaySvg = require("bundle-text:./airplay.svg"); -var _airplaySvgDefault = parcelHelpers.interopDefault(_airplaySvg); -var _arrowLeftSvg = require("bundle-text:./arrow-left.svg"); -var _arrowLeftSvgDefault = parcelHelpers.interopDefault(_arrowLeftSvg); -var _arrowRightSvg = require("bundle-text:./arrow-right.svg"); -var _arrowRightSvgDefault = parcelHelpers.interopDefault(_arrowRightSvg); -var _aspectRatioSvg = require("bundle-text:./aspect-ratio.svg"); -var _aspectRatioSvgDefault = parcelHelpers.interopDefault(_aspectRatioSvg); -var _checkSvg = require("bundle-text:./check.svg"); -var _checkSvgDefault = parcelHelpers.interopDefault(_checkSvg); -var _closeSvg = require("bundle-text:./close.svg"); -var _closeSvgDefault = parcelHelpers.interopDefault(_closeSvg); -var _configSvg = require("bundle-text:./config.svg"); -var _configSvgDefault = parcelHelpers.interopDefault(_configSvg); -var _errorSvg = require("bundle-text:./error.svg"); -var _errorSvgDefault = parcelHelpers.interopDefault(_errorSvg); -var _flipSvg = require("bundle-text:./flip.svg"); -var _flipSvgDefault = parcelHelpers.interopDefault(_flipSvg); -var _fullscreenOffSvg = require("bundle-text:./fullscreen-off.svg"); -var _fullscreenOffSvgDefault = parcelHelpers.interopDefault(_fullscreenOffSvg); -var _fullscreenOnSvg = require("bundle-text:./fullscreen-on.svg"); -var _fullscreenOnSvgDefault = parcelHelpers.interopDefault(_fullscreenOnSvg); -var _fullscreenWebOffSvg = require("bundle-text:./fullscreen-web-off.svg"); -var _fullscreenWebOffSvgDefault = parcelHelpers.interopDefault(_fullscreenWebOffSvg); -var _fullscreenWebOnSvg = require("bundle-text:./fullscreen-web-on.svg"); -var _fullscreenWebOnSvgDefault = parcelHelpers.interopDefault(_fullscreenWebOnSvg); -var _loadingSvg = require("bundle-text:./loading.svg"); -var _loadingSvgDefault = parcelHelpers.interopDefault(_loadingSvg); -var _lockSvg = require("bundle-text:./lock.svg"); -var _lockSvgDefault = parcelHelpers.interopDefault(_lockSvg); -var _pauseSvg = require("bundle-text:./pause.svg"); -var _pauseSvgDefault = parcelHelpers.interopDefault(_pauseSvg); -var _pipSvg = require("bundle-text:./pip.svg"); -var _pipSvgDefault = parcelHelpers.interopDefault(_pipSvg); -var _playSvg = require("bundle-text:./play.svg"); -var _playSvgDefault = parcelHelpers.interopDefault(_playSvg); -var _playbackRateSvg = require("bundle-text:./playback-rate.svg"); -var _playbackRateSvgDefault = parcelHelpers.interopDefault(_playbackRateSvg); -var _screenshotSvg = require("bundle-text:./screenshot.svg"); -var _screenshotSvgDefault = parcelHelpers.interopDefault(_screenshotSvg); -var _settingSvg = require("bundle-text:./setting.svg"); -var _settingSvgDefault = parcelHelpers.interopDefault(_settingSvg); -var _stateSvg = require("bundle-text:./state.svg"); -var _stateSvgDefault = parcelHelpers.interopDefault(_stateSvg); -var _switchOffSvg = require("bundle-text:./switch-off.svg"); -var _switchOffSvgDefault = parcelHelpers.interopDefault(_switchOffSvg); -var _switchOnSvg = require("bundle-text:./switch-on.svg"); -var _switchOnSvgDefault = parcelHelpers.interopDefault(_switchOnSvg); -var _unlockSvg = require("bundle-text:./unlock.svg"); -var _unlockSvgDefault = parcelHelpers.interopDefault(_unlockSvg); -var _volumeCloseSvg = require("bundle-text:./volume-close.svg"); -var _volumeCloseSvgDefault = parcelHelpers.interopDefault(_volumeCloseSvg); -var _volumeSvg = require("bundle-text:./volume.svg"); -var _volumeSvgDefault = parcelHelpers.interopDefault(_volumeSvg); -var _utils = require("../utils"); -class Icons { - constructor(art){ - const icons = { - loading: (0, _loadingSvgDefault.default), - state: (0, _stateSvgDefault.default), - play: (0, _playSvgDefault.default), - pause: (0, _pauseSvgDefault.default), - check: (0, _checkSvgDefault.default), - volume: (0, _volumeSvgDefault.default), - volumeClose: (0, _volumeCloseSvgDefault.default), - screenshot: (0, _screenshotSvgDefault.default), - setting: (0, _settingSvgDefault.default), - pip: (0, _pipSvgDefault.default), - arrowLeft: (0, _arrowLeftSvgDefault.default), - arrowRight: (0, _arrowRightSvgDefault.default), - playbackRate: (0, _playbackRateSvgDefault.default), - aspectRatio: (0, _aspectRatioSvgDefault.default), - config: (0, _configSvgDefault.default), - lock: (0, _lockSvgDefault.default), - flip: (0, _flipSvgDefault.default), - unlock: (0, _unlockSvgDefault.default), - fullscreenOff: (0, _fullscreenOffSvgDefault.default), - fullscreenOn: (0, _fullscreenOnSvgDefault.default), - fullscreenWebOff: (0, _fullscreenWebOffSvgDefault.default), - fullscreenWebOn: (0, _fullscreenWebOnSvgDefault.default), - switchOn: (0, _switchOnSvgDefault.default), - switchOff: (0, _switchOffSvgDefault.default), - error: (0, _errorSvgDefault.default), - close: (0, _closeSvgDefault.default), - airplay: (0, _airplaySvgDefault.default), - ...art.option.icons - }; - for(const key in icons)(0, _utils.def)(this, key, { - get: ()=>(0, _utils.getIcon)(key, icons[key]) - }); - } -} -exports.default = Icons; - -},{"bundle-text:./airplay.svg":"gtvwT","bundle-text:./arrow-left.svg":"lcTQw","bundle-text:./arrow-right.svg":"gFlrD","bundle-text:./aspect-ratio.svg":"jEt3d","bundle-text:./check.svg":"aiplG","bundle-text:./close.svg":"5K1Ys","bundle-text:./config.svg":"e5yY6","bundle-text:./error.svg":"85f9B","bundle-text:./flip.svg":"k6eqp","bundle-text:./fullscreen-off.svg":"abDO6","bundle-text:./fullscreen-on.svg":"053Ce","bundle-text:./fullscreen-web-off.svg":"6YHfk","bundle-text:./fullscreen-web-on.svg":"iUjB4","bundle-text:./loading.svg":"a8tLL","bundle-text:./lock.svg":"KAFOJ","bundle-text:./pause.svg":"J3in3","bundle-text:./pip.svg":"bf3DE","bundle-text:./play.svg":"beYr7","bundle-text:./playback-rate.svg":"j3gVX","bundle-text:./screenshot.svg":"8LOBK","bundle-text:./setting.svg":"8Yj97","bundle-text:./state.svg":"3saNl","bundle-text:./switch-off.svg":"5Q8fg","bundle-text:./switch-on.svg":"90Mh0","bundle-text:./unlock.svg":"gxaqy","bundle-text:./volume-close.svg":"6JUKA","bundle-text:./volume.svg":"ukTSv","../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"gtvwT":[function(require,module,exports,__globalThis) { -module.exports = "\n \n \n \n \n"; - -},{}],"lcTQw":[function(require,module,exports,__globalThis) { -module.exports = "\n \n"; - -},{}],"gFlrD":[function(require,module,exports,__globalThis) { -module.exports = "\n \n"; - -},{}],"jEt3d":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"aiplG":[function(require,module,exports,__globalThis) { -module.exports = "\n\n"; - -},{}],"5K1Ys":[function(require,module,exports,__globalThis) { -module.exports = "\n\n\n"; - -},{}],"e5yY6":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"85f9B":[function(require,module,exports,__globalThis) { -module.exports = "\n\n\n"; - -},{}],"k6eqp":[function(require,module,exports,__globalThis) { -module.exports = "\n\n\n"; - -},{}],"abDO6":[function(require,module,exports,__globalThis) { -module.exports = "\n\n"; - -},{}],"053Ce":[function(require,module,exports,__globalThis) { -module.exports = "\n\n"; - -},{}],"6YHfk":[function(require,module,exports,__globalThis) { -module.exports = "\n\n"; - -},{}],"iUjB4":[function(require,module,exports,__globalThis) { -module.exports = "\n\n"; - -},{}],"a8tLL":[function(require,module,exports,__globalThis) { -module.exports = "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n"; - -},{}],"KAFOJ":[function(require,module,exports,__globalThis) { -module.exports = "\n\n"; - -},{}],"J3in3":[function(require,module,exports,__globalThis) { -module.exports = "\n \n"; - -},{}],"bf3DE":[function(require,module,exports,__globalThis) { -module.exports = "\n\n"; - -},{}],"beYr7":[function(require,module,exports,__globalThis) { -module.exports = "\n \n"; - -},{}],"j3gVX":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"8LOBK":[function(require,module,exports,__globalThis) { -module.exports = "\n\t\n"; - -},{}],"8Yj97":[function(require,module,exports,__globalThis) { -module.exports = "\n \n \n"; - -},{}],"3saNl":[function(require,module,exports,__globalThis) { -module.exports = "\n\n"; - -},{}],"5Q8fg":[function(require,module,exports,__globalThis) { -module.exports = "\n \n"; - -},{}],"90Mh0":[function(require,module,exports,__globalThis) { -module.exports = "\n \n"; - -},{}],"gxaqy":[function(require,module,exports,__globalThis) { -module.exports = ""; - -},{}],"6JUKA":[function(require,module,exports,__globalThis) { -module.exports = "\n \n \n"; - -},{}],"ukTSv":[function(require,module,exports,__globalThis) { -module.exports = "\n \n \n"; - -},{}],"gvEup":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _utils = require("./utils"); -var _component = require("./utils/component"); -var _componentDefault = parcelHelpers.interopDefault(_component); -class Info extends (0, _componentDefault.default) { - constructor(art){ - super(art); - this.name = 'info'; - if (!(0, _utils.isMobile)) this.init(); - } - init() { - const { proxy, constructor, template: { $infoPanel, $infoClose, $video } } = this.art; - proxy($infoClose, 'click', ()=>{ - this.show = false; - }); - let timer = null; - const $types = (0, _utils.queryAll)('[data-video]', $infoPanel) || []; - this.art.on('destroy', ()=>clearTimeout(timer)); - function loop() { - for(let index = 0; index < $types.length; index++){ - const item = $types[index]; - const value = $video[item.dataset.video]; - const textContent = typeof value === 'number' ? value.toFixed(2) : value; - if (item.textContent !== textContent) item.textContent = textContent; - } - timer = setTimeout(loop, constructor.INFO_LOOP_TIME); - } - loop(); - } -} -exports.default = Info; - -},{"./utils":"gGxPm","./utils/component":"1wQH1","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"7Oas9":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _component = require("./utils/component"); -var _componentDefault = parcelHelpers.interopDefault(_component); -class Layer extends (0, _componentDefault.default) { - constructor(art){ - super(art); - const { option, template: { $layer } } = art; - this.name = 'layer'; - this.$parent = $layer; - for(let index = 0; index < option.layers.length; index++)this.add(option.layers[index]); - } -} -exports.default = Layer; - -},{"./utils/component":"1wQH1","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"glZdQ":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _utils = require("./utils"); -var _component = require("./utils/component"); -var _componentDefault = parcelHelpers.interopDefault(_component); -class Loading extends (0, _componentDefault.default) { - constructor(art){ - super(art); - this.name = 'loading'; - (0, _utils.append)(art.template.$loading, art.icons.loading); - } -} -exports.default = Loading; - -},{"./utils":"gGxPm","./utils/component":"1wQH1","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"iGxU6":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _utils = require("./utils"); -var _component = require("./utils/component"); -var _componentDefault = parcelHelpers.interopDefault(_component); -class Mask extends (0, _componentDefault.default) { - constructor(art){ - super(art); - this.name = 'mask'; - const { template, icons, events } = art; - const $state = (0, _utils.append)(template.$state, icons.state); - const $error = (0, _utils.append)(template.$state, icons.error); - (0, _utils.setStyle)($error, 'display', 'none'); - art.on('destroy', ()=>{ - (0, _utils.setStyle)($state, 'display', 'none'); - (0, _utils.setStyle)($error, 'display', null); - }); - events.proxy(template.$state, 'click', ()=>art.play()); - } -} -exports.default = Mask; - -},{"./utils":"gGxPm","./utils/component":"1wQH1","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"jZEIz":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _utils = require("./utils"); -class Notice { - constructor(art){ - this.art = art; - this.timer = null; - art.on('destroy', ()=>this.destroy()); + } } destroy() { - if (this.timer) { - clearTimeout(this.timer); - this.timer = null; + for (const destroyEvent of this.destroyEvents) { + try { + destroyEvent(); + } catch (error2) { + console.warn("Failed to destroy event listener:", error2); } + } + this.destroyEvents.clear(); + } + } + class Hotkey { + constructor(art) { + this.art = art; + this.keys = {}; + if (!isMobile) { + this.init(); + } + } + init() { + const { constructor } = this.art; + if (this.art.option.hotkey) { + this.add("Escape", () => { + if (this.art.fullscreenWeb) { + this.art.fullscreenWeb = false; + } + }); + this.add("Space", () => { + this.art.toggle(); + }); + this.add("ArrowLeft", () => { + this.art.backward = constructor.SEEK_STEP; + }); + this.add("ArrowUp", () => { + this.art.volume += constructor.VOLUME_STEP; + }); + this.add("ArrowRight", () => { + this.art.forward = constructor.SEEK_STEP; + }); + this.add("ArrowDown", () => { + this.art.volume -= constructor.VOLUME_STEP; + }); + } + this.art.on("document:keydown", (event) => { + if (this.art.isFocus) { + const tag = document.activeElement.tagName.toUpperCase(); + const editable = document.activeElement.getAttribute("contenteditable"); + if (tag !== "INPUT" && tag !== "TEXTAREA" && editable !== "" && editable !== "true" && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { + const events = this.keys[event.code]; + if (events) { + event.preventDefault(); + for (let index = 0; index < events.length; index++) { + events[index].call(this.art, event); + } + this.art.emit("hotkey", event); + } + } + } + this.art.emit("keydown", event); + }); + } + add(key, event) { + if (this.keys[key]) { + if (!this.keys[key].includes(event)) { + this.keys[key].push(event); + } + } else { + this.keys[key] = [event]; + } + return this; + } + remove(key, event) { + if (this.keys[key]) { + const index = this.keys[key].indexOf(event); + if (index !== -1) { + this.keys[key].splice(index, 1); + } + if (this.keys[key].length === 0) { + delete this.keys[key]; + } + } + return this; + } + } + const zhCn = { + "Video Info": "统计信息", + "Close": "关闭", + "Video Load Failed": "加载失败", + "Volume": "音量", + "Play": "播放", + "Pause": "暂停", + "Rate": "速度", + "Mute": "静音", + "Video Flip": "画面翻转", + "Horizontal": "水平", + "Vertical": "垂直", + "Reconnect": "重新连接", + "Show Setting": "显示设置", + "Hide Setting": "隐藏设置", + "Screenshot": "截图", + "Play Speed": "播放速度", + "Aspect Ratio": "画面比例", + "Default": "默认", + "Normal": "正常", + "Open": "打开", + "Switch Video": "切换", + "Switch Subtitle": "切换字幕", + "Fullscreen": "全屏", + "Exit Fullscreen": "退出全屏", + "Web Fullscreen": "网页全屏", + "Exit Web Fullscreen": "退出网页全屏", + "Mini Player": "迷你播放器", + "PIP Mode": "开启画中画", + "Exit PIP Mode": "退出画中画", + "PIP Not Supported": "不支持画中画", + "Fullscreen Not Supported": "不支持全屏", + "Subtitle Offset": "字幕偏移", + "Last Seen": "上次看到", + "Jump Play": "跳转播放", + "AirPlay": "隔空播放", + "AirPlay Not Available": "隔空播放不可用" + }; + if (typeof window !== "undefined") { + window["artplayer-i18n-zh-cn"] = zhCn; + } + class I18n { + constructor(art) { + this.art = art; + this.languages = { + "zh-cn": zhCn + }; + this.language = {}; + this.update(art.option.i18n); + } + init() { + const lang = this.art.option.lang.toLowerCase(); + this.language = this.languages[lang] || {}; + } + get(key) { + return this.language[key] || key; + } + update(value) { + this.languages = mergeDeep(this.languages, value); + this.init(); + } + } + const airplay = '\n \n \n \n \n\n'; + const arrowLeft = '\n \n'; + const arrowRight = '\n \n'; + const aspectRatio$1 = ''; + const check = '\n\n'; + const close = '\n\n\n\n\n'; + const config = ''; + const error = '\n\n\n\n\n'; + const flip$1 = '\n\n\n\n\n\n'; + const fullscreenOff = '\n\n\n\n\n'; + const fullscreenOn = '\n\n\n\n\n'; + const fullscreenWebOff = '\n\n\n\n\n'; + const fullscreenWebOn = '\n\n\n\n\n'; + const loading = '\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n'; + const lock$1 = '\n\n\n\n\n'; + const pause = '\n \n'; + const pip = '\n\n'; + const play = '\n \n'; + const playbackRate$1 = ''; + const screenshot = '\n \n\n'; + const setting = '\n \n \n'; + const state = '\n\n\n'; + const switchOff = '\n\n\n \n\n'; + const switchOn = '\n\n\n \n'; + const unlock = '\n\n\n'; + const volumeClose = '\n \n \n'; + const volume = '\n \n \n'; + class Icons { + constructor(art) { + const icons = { + loading, + state, + play, + pause, + check, + volume, + volumeClose, + screenshot, + setting, + pip, + arrowLeft, + arrowRight, + playbackRate: playbackRate$1, + aspectRatio: aspectRatio$1, + config, + lock: lock$1, + flip: flip$1, + unlock, + fullscreenOff, + fullscreenOn, + fullscreenWebOff, + fullscreenWebOn, + switchOn, + switchOff, + error, + close, + airplay, + ...art.option.icons + }; + for (const key in icons) { + def(this, key, { + get: () => getIcon(key, icons[key]) + }); + } + } + } + class Info extends Component { + constructor(art) { + super(art); + this.name = "info"; + if (!isMobile) { + this.init(); + } + } + init() { + const { + proxy, + constructor, + template: { $infoPanel, $infoClose, $video } + } = this.art; + proxy($infoClose, "click", () => { + this.show = false; + }); + let timer = null; + const $types = queryAll("[data-video]", $infoPanel) || []; + this.art.on("destroy", () => clearTimeout(timer)); + function loop() { + for (let index = 0; index < $types.length; index++) { + const item = $types[index]; + const value = $video[item.dataset.video]; + const textContent = typeof value === "number" ? value.toFixed(2) : value; + if (item.textContent !== textContent) { + item.textContent = textContent; + } + } + timer = setTimeout(loop, constructor.INFO_LOOP_TIME); + } + loop(); + } + } + class Layer extends Component { + constructor(art) { + super(art); + const { + option, + template: { $layer } + } = art; + this.name = "layer"; + this.$parent = $layer; + for (let index = 0; index < option.layers.length; index++) { + this.add(option.layers[index]); + } + } + } + class Loading extends Component { + constructor(art) { + super(art); + this.name = "loading"; + append(art.template.$loading, art.icons.loading); + } + } + class Mask extends Component { + constructor(art) { + super(art); + this.name = "mask"; + const { template, icons, events } = art; + const $state = append(template.$state, icons.state); + const $error = append(template.$state, icons.error); + setStyle($error, "display", "none"); + art.on("destroy", () => { + setStyle($state, "display", "none"); + setStyle($error, "display", null); + }); + events.proxy(template.$state, "click", () => art.play()); + } + } + class Notice { + constructor(art) { + this.art = art; + this.timer = null; + art.on("destroy", () => this.destroy()); + } + destroy() { + if (this.timer) { + clearTimeout(this.timer); + this.timer = null; + } } set show(msg) { - const { constructor, template: { $player, $noticeInner } } = this.art; - if (msg) { - $noticeInner.textContent = msg instanceof Error ? msg.message.trim() : msg; - (0, _utils.addClass)($player, 'art-notice-show'); - clearTimeout(this.timer); - this.timer = setTimeout(()=>{ - $noticeInner.textContent = ''; - (0, _utils.removeClass)($player, 'art-notice-show'); - }, constructor.NOTICE_TIME); - } else (0, _utils.removeClass)($player, 'art-notice-show'); + const { + constructor, + template: { $player, $noticeInner } + } = this.art; + if (msg) { + $noticeInner.textContent = msg instanceof Error ? msg.message.trim() : msg; + addClass($player, "art-notice-show"); + clearTimeout(this.timer); + this.timer = setTimeout(() => { + $noticeInner.textContent = ""; + removeClass($player, "art-notice-show"); + }, constructor.NOTICE_TIME); + } else { + removeClass($player, "art-notice-show"); + } } get show() { - const { template: { $player } } = this.art; - return $player.classList.contains('art-notice-show'); + const { + template: { $player } + } = this.art; + return $player.classList.contains("art-notice-show"); } -} -exports.default = Notice; - -},{"./utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"iA4EC":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _airplayMix = require("./airplayMix"); -var _airplayMixDefault = parcelHelpers.interopDefault(_airplayMix); -var _aspectRatioMix = require("./aspectRatioMix"); -var _aspectRatioMixDefault = parcelHelpers.interopDefault(_aspectRatioMix); -var _attrMix = require("./attrMix"); -var _attrMixDefault = parcelHelpers.interopDefault(_attrMix); -var _autoHeightMix = require("./autoHeightMix"); -var _autoHeightMixDefault = parcelHelpers.interopDefault(_autoHeightMix); -var _autoSizeMix = require("./autoSizeMix"); -var _autoSizeMixDefault = parcelHelpers.interopDefault(_autoSizeMix); -var _cssVarMix = require("./cssVarMix"); -var _cssVarMixDefault = parcelHelpers.interopDefault(_cssVarMix); -var _currentTimeMix = require("./currentTimeMix"); -var _currentTimeMixDefault = parcelHelpers.interopDefault(_currentTimeMix); -var _durationMix = require("./durationMix"); -var _durationMixDefault = parcelHelpers.interopDefault(_durationMix); -var _eventInit = require("./eventInit"); -var _eventInitDefault = parcelHelpers.interopDefault(_eventInit); -var _flipMix = require("./flipMix"); -var _flipMixDefault = parcelHelpers.interopDefault(_flipMix); -var _fullscreenMix = require("./fullscreenMix"); -var _fullscreenMixDefault = parcelHelpers.interopDefault(_fullscreenMix); -var _fullscreenWebMix = require("./fullscreenWebMix"); -var _fullscreenWebMixDefault = parcelHelpers.interopDefault(_fullscreenWebMix); -var _loadedMix = require("./loadedMix"); -var _loadedMixDefault = parcelHelpers.interopDefault(_loadedMix); -var _miniMix = require("./miniMix"); -var _miniMixDefault = parcelHelpers.interopDefault(_miniMix); -var _optionInit = require("./optionInit"); -var _optionInitDefault = parcelHelpers.interopDefault(_optionInit); -var _pauseMix = require("./pauseMix"); -var _pauseMixDefault = parcelHelpers.interopDefault(_pauseMix); -var _pipMix = require("./pipMix"); -var _pipMixDefault = parcelHelpers.interopDefault(_pipMix); -var _playbackRateMix = require("./playbackRateMix"); -var _playbackRateMixDefault = parcelHelpers.interopDefault(_playbackRateMix); -var _playedMix = require("./playedMix"); -var _playedMixDefault = parcelHelpers.interopDefault(_playedMix); -var _playingMix = require("./playingMix"); -var _playingMixDefault = parcelHelpers.interopDefault(_playingMix); -var _playMix = require("./playMix"); -var _playMixDefault = parcelHelpers.interopDefault(_playMix); -var _posterMix = require("./posterMix"); -var _posterMixDefault = parcelHelpers.interopDefault(_posterMix); -var _qualityMix = require("./qualityMix"); -var _qualityMixDefault = parcelHelpers.interopDefault(_qualityMix); -var _rectMix = require("./rectMix"); -var _rectMixDefault = parcelHelpers.interopDefault(_rectMix); -var _screenshotMix = require("./screenshotMix"); -var _screenshotMixDefault = parcelHelpers.interopDefault(_screenshotMix); -var _seekMix = require("./seekMix"); -var _seekMixDefault = parcelHelpers.interopDefault(_seekMix); -var _stateMix = require("./stateMix"); -var _stateMixDefault = parcelHelpers.interopDefault(_stateMix); -var _subtitleOffsetMix = require("./subtitleOffsetMix"); -var _subtitleOffsetMixDefault = parcelHelpers.interopDefault(_subtitleOffsetMix); -var _switchMix = require("./switchMix"); -var _switchMixDefault = parcelHelpers.interopDefault(_switchMix); -var _themeMix = require("./themeMix"); -var _themeMixDefault = parcelHelpers.interopDefault(_themeMix); -var _thumbnailsMix = require("./thumbnailsMix"); -var _thumbnailsMixDefault = parcelHelpers.interopDefault(_thumbnailsMix); -var _toggleMix = require("./toggleMix"); -var _toggleMixDefault = parcelHelpers.interopDefault(_toggleMix); -var _typeMix = require("./typeMix"); -var _typeMixDefault = parcelHelpers.interopDefault(_typeMix); -var _urlMix = require("./urlMix"); -var _urlMixDefault = parcelHelpers.interopDefault(_urlMix); -var _volumeMix = require("./volumeMix"); -var _volumeMixDefault = parcelHelpers.interopDefault(_volumeMix); -class Player { - constructor(art){ - (0, _urlMixDefault.default)(art); - (0, _attrMixDefault.default)(art); - (0, _playMixDefault.default)(art); - (0, _pauseMixDefault.default)(art); - (0, _toggleMixDefault.default)(art); - (0, _seekMixDefault.default)(art); - (0, _volumeMixDefault.default)(art); - (0, _currentTimeMixDefault.default)(art); - (0, _durationMixDefault.default)(art); - (0, _switchMixDefault.default)(art); - (0, _playbackRateMixDefault.default)(art); - (0, _aspectRatioMixDefault.default)(art); - (0, _screenshotMixDefault.default)(art); - (0, _fullscreenMixDefault.default)(art); - (0, _fullscreenWebMixDefault.default)(art); - (0, _pipMixDefault.default)(art); - (0, _loadedMixDefault.default)(art); - (0, _playedMixDefault.default)(art); - (0, _playingMixDefault.default)(art); - (0, _autoSizeMixDefault.default)(art); - (0, _rectMixDefault.default)(art); - (0, _flipMixDefault.default)(art); - (0, _miniMixDefault.default)(art); - (0, _posterMixDefault.default)(art); - (0, _autoHeightMixDefault.default)(art); - (0, _cssVarMixDefault.default)(art); - (0, _themeMixDefault.default)(art); - (0, _typeMixDefault.default)(art); - (0, _stateMixDefault.default)(art); - (0, _subtitleOffsetMixDefault.default)(art); - (0, _airplayMixDefault.default)(art); - (0, _qualityMixDefault.default)(art); - (0, _thumbnailsMixDefault.default)(art); - (0, _eventInitDefault.default)(art); - (0, _optionInitDefault.default)(art); - } -} -exports.default = Player; - -},{"./airplayMix":"2xawd","./aspectRatioMix":"3f0n5","./attrMix":"bI9nt","./autoHeightMix":"5MwjN","./autoSizeMix":"cbo97","./cssVarMix":"awlhX","./currentTimeMix":"1nPI2","./durationMix":"gKWyP","./eventInit":"8E0KF","./flipMix":"9KwcF","./fullscreenMix":"bdfra","./fullscreenWebMix":"3ug77","./loadedMix":"lmx0A","./miniMix":"5xcsH","./optionInit":"2TEf9","./pauseMix":"j7SoA","./pipMix":"iz9Aq","./playbackRateMix":"b6rDz","./playedMix":"CTEqN","./playingMix":"jMFse","./playMix":"lsQBb","./posterMix":"iVqmF","./qualityMix":"2gM0L","./rectMix":"iR6EQ","./screenshotMix":"kwHom","./seekMix":"aOXnw","./stateMix":"ls3ui","./subtitleOffsetMix":"exULR","./switchMix":"fhErJ","./themeMix":"61Zjc","./thumbnailsMix":"1gQEa","./toggleMix":"gt5Qh","./typeMix":"gtfHf","./urlMix":"esLaT","./volumeMix":"fIzu0","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"2xawd":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>airplayMix); -var _utils = require("../utils"); -function airplayMix(art) { - const { i18n, notice, proxy, template: { $video } } = art; + } + function airplayMix(art) { + const { + i18n, + notice, + proxy, + template: { $video } + } = art; let available = true; - if (window.WebKitPlaybackTargetAvailabilityEvent && $video.webkitShowPlaybackTargetPicker) proxy($video, 'webkitplaybacktargetavailabilitychanged', (event)=>{ - switch(event.availability){ - case 'available': - available = true; - break; - case 'not-available': - available = false; - break; + if (window.WebKitPlaybackTargetAvailabilityEvent && $video.webkitShowPlaybackTargetPicker) { + proxy($video, "webkitplaybacktargetavailabilitychanged", (event) => { + switch (event.availability) { + case "available": + available = true; + break; + case "not-available": + available = false; + break; } - }); - else available = false; - (0, _utils.def)(art, 'airplay', { - value () { - if (available) { - $video.webkitShowPlaybackTargetPicker(); - art.emit('airplay'); - } else notice.show = i18n.get('AirPlay Not Available'); + }); + } else { + available = false; + } + def(art, "airplay", { + value() { + if (available) { + $video.webkitShowPlaybackTargetPicker(); + art.emit("airplay"); + } else { + notice.show = i18n.get("AirPlay Not Available"); } + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"3f0n5":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>aspectRatioMix); -var _utils = require("../utils"); -function aspectRatioMix(art) { - const { i18n, notice, template: { $video, $player } } = art; - (0, _utils.def)(art, 'aspectRatio', { - get () { - return $player.dataset.aspectRatio || 'default'; - }, - set (ratio) { - if (!ratio) ratio = 'default'; - if (ratio === 'default') { - (0, _utils.setStyle)($video, 'width', null); - (0, _utils.setStyle)($video, 'height', null); - (0, _utils.setStyle)($video, 'margin', null); - delete $player.dataset.aspectRatio; - } else { - const ratioArray = ratio.split(':').map(Number); - const { clientWidth, clientHeight } = $player; - const playerRatio = clientWidth / clientHeight; - const setupRatio = ratioArray[0] / ratioArray[1]; - if (playerRatio > setupRatio) { - (0, _utils.setStyle)($video, 'width', `${setupRatio * clientHeight}px`); - (0, _utils.setStyle)($video, 'height', '100%'); - (0, _utils.setStyle)($video, 'margin', '0 auto'); - } else { - (0, _utils.setStyle)($video, 'width', '100%'); - (0, _utils.setStyle)($video, 'height', `${clientWidth / setupRatio}px`); - (0, _utils.setStyle)($video, 'margin', 'auto 0'); - } - $player.dataset.aspectRatio = ratio; - } - notice.show = `${i18n.get('Aspect Ratio')}: ${ratio === 'default' ? i18n.get('Default') : ratio}`; - art.emit('aspectRatio', ratio); + } + function aspectRatioMix(art) { + const { + i18n, + notice, + template: { $video, $player } + } = art; + def(art, "aspectRatio", { + get() { + return $player.dataset.aspectRatio || "default"; + }, + set(ratio) { + if (!ratio) + ratio = "default"; + if (ratio === "default") { + setStyle($video, "width", null); + setStyle($video, "height", null); + setStyle($video, "margin", null); + delete $player.dataset.aspectRatio; + } else { + const ratioArray = ratio.split(":").map(Number); + const { clientWidth, clientHeight } = $player; + const playerRatio = clientWidth / clientHeight; + const setupRatio = ratioArray[0] / ratioArray[1]; + if (playerRatio > setupRatio) { + setStyle($video, "width", `${setupRatio * clientHeight}px`); + setStyle($video, "height", "100%"); + setStyle($video, "margin", "0 auto"); + } else { + setStyle($video, "width", "100%"); + setStyle($video, "height", `${clientWidth / setupRatio}px`); + setStyle($video, "margin", "auto 0"); + } + $player.dataset.aspectRatio = ratio; } + notice.show = `${i18n.get("Aspect Ratio")}: ${ratio === "default" ? i18n.get("Default") : ratio}`; + art.emit("aspectRatio", ratio); + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"bI9nt":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>attrMix); -var _utils = require("../utils"); -function attrMix(art) { - const { template: { $video } } = art; - (0, _utils.def)(art, 'attr', { - value (key, value) { - if (value === undefined) return $video[key]; - $video[key] = value; - } + } + function attrMix(art) { + const { + template: { $video } + } = art; + def(art, "attr", { + value(key, value) { + if (value === void 0) + return $video[key]; + $video[key] = value; + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"5MwjN":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>autoHeightMix); -var _utils = require("../utils"); -function autoHeightMix(art) { - const { template: { $container, $video } } = art; - (0, _utils.def)(art, 'autoHeight', { - value () { - const { clientWidth } = $container; - const { videoHeight, videoWidth } = $video; - const height = videoHeight * (clientWidth / videoWidth); - (0, _utils.setStyle)($container, 'height', `${height}px`); - art.emit('autoHeight', height); - } + } + function autoHeightMix(art) { + const { + template: { $container, $video } + } = art; + def(art, "autoHeight", { + value() { + const { clientWidth } = $container; + const { videoHeight, videoWidth } = $video; + const height = videoHeight * (clientWidth / videoWidth); + setStyle($container, "height", `${height}px`); + art.emit("autoHeight", height); + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"cbo97":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>autoSizeMix); -var _utils = require("../utils"); -function autoSizeMix(art) { + } + function autoSizeMix(art) { const { $container, $player, $video } = art.template; - (0, _utils.def)(art, 'autoSize', { - value () { - const { videoWidth, videoHeight } = $video; - const { width, height } = (0, _utils.getRect)($container); - const videoRatio = videoWidth / videoHeight; - const containerRatio = width / height; - if (containerRatio > videoRatio) { - const percentage = height * videoRatio / width * 100; - (0, _utils.setStyle)($player, 'width', `${percentage}%`); - (0, _utils.setStyle)($player, 'height', '100%'); - } else { - const percentage = width / videoRatio / height * 100; - (0, _utils.setStyle)($player, 'width', '100%'); - (0, _utils.setStyle)($player, 'height', `${percentage}%`); - } - art.emit('autoSize', { - width: art.width, - height: art.height - }); + def(art, "autoSize", { + value() { + const { videoWidth, videoHeight } = $video; + const { width, height } = getRect($container); + const videoRatio = videoWidth / videoHeight; + const containerRatio = width / height; + if (containerRatio > videoRatio) { + const percentage = height * videoRatio / width * 100; + setStyle($player, "width", `${percentage}%`); + setStyle($player, "height", "100%"); + } else { + const percentage = width / videoRatio / height * 100; + setStyle($player, "width", "100%"); + setStyle($player, "height", `${percentage}%`); } + art.emit("autoSize", { + width: art.width, + height: art.height + }); + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"awlhX":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>cssVarMix); -var _utils = require("../utils"); -function cssVarMix(art) { + } + function cssVarMix(art) { const { $player } = art.template; - (0, _utils.def)(art, 'cssVar', { - value (key, value) { - if (value) return $player.style.setProperty(key, value); - else return getComputedStyle($player).getPropertyValue(key); + def(art, "cssVar", { + value(key, value) { + if (value) { + return $player.style.setProperty(key, value); + } else { + return getComputedStyle($player).getPropertyValue(key); } + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"1nPI2":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>currentTimeMix); -var _utils = require("../utils"); -function currentTimeMix(art) { + } + function currentTimeMix(art) { const { $video } = art.template; - (0, _utils.def)(art, 'currentTime', { - get: ()=>$video.currentTime || 0, - set: (time)=>{ - time = Number.parseFloat(time); - if (Number.isNaN(time)) return; - $video.currentTime = (0, _utils.clamp)(time, 0, art.duration); - } + def(art, "currentTime", { + get: () => $video.currentTime || 0, + set: (time2) => { + time2 = Number.parseFloat(time2); + if (Number.isNaN(time2)) + return; + $video.currentTime = clamp(time2, 0, art.duration); + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"gKWyP":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>durationMix); -var _utils = require("../utils"); -function durationMix(art) { - (0, _utils.def)(art, 'duration', { - get: ()=>{ - const { duration } = art.template.$video; - if (duration === Infinity) return 0; - return duration || 0; - } + } + function durationMix(art) { + def(art, "duration", { + get: () => { + const { duration } = art.template.$video; + if (duration === Infinity) + return 0; + return duration || 0; + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"8E0KF":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>eventInit); -var _config = require("../config"); -var _configDefault = parcelHelpers.interopDefault(_config); -var _utils = require("../utils"); -function eventInit(art) { - const { i18n, notice, option, constructor, proxy, template: { $player, $video, $poster } } = art; + } + function eventInit(art) { + const { + i18n, + notice, + option, + constructor, + proxy, + template: { $player, $video, $poster } + } = art; let reconnectTime = 0; - for(let index = 0; index < (0, _configDefault.default).events.length; index++)proxy($video, (0, _configDefault.default).events[index], (event)=>{ + for (let index = 0; index < config$1.events.length; index++) { + proxy($video, config$1.events[index], (event) => { art.emit(`video:${event.type}`, event); + }); + } + art.on("video:canplay", () => { + reconnectTime = 0; + art.loading.show = false; }); - // art.on('video:abort', () => { - // }); - art.on('video:canplay', ()=>{ - reconnectTime = 0; + art.once("video:canplay", () => { + art.loading.show = false; + art.controls.show = true; + art.mask.show = true; + art.isReady = true; + art.emit("ready"); + }); + art.on("video:ended", () => { + if (option.loop) { + art.seek = 0; + art.play(); + art.controls.show = false; + art.mask.show = false; + } else { + art.controls.show = true; + art.mask.show = true; + } + }); + art.on("video:error", async (error2) => { + if (reconnectTime < constructor.RECONNECT_TIME_MAX) { + await sleep(constructor.RECONNECT_SLEEP_TIME); + reconnectTime += 1; + art.url = option.url; + notice.show = `${i18n.get("Reconnect")}: ${reconnectTime}`; + art.emit("error", error2, reconnectTime); + } else { + art.mask.show = true; art.loading.show = false; + art.controls.show = true; + addClass($player, "art-error"); + await sleep(constructor.RECONNECT_SLEEP_TIME); + notice.show = i18n.get("Video Load Failed"); + } }); - art.once('video:canplay', ()=>{ + art.on("video:loadedmetadata", () => { + art.emit("resize"); + if (isMobile) { art.loading.show = false; art.controls.show = true; art.mask.show = true; - art.isReady = true; - art.emit('ready'); + } }); - // art.on('video:canplaythrough', () => { - // }); - // art.on('video:durationchange', () => { - // }); - // art.on('video:emptied', () => { - // }); - art.on('video:ended', ()=>{ - if (option.loop) { - art.seek = 0; - art.play(); - art.controls.show = false; - art.mask.show = false; + art.on("video:loadstart", () => { + art.loading.show = true; + art.mask.show = false; + art.controls.show = true; + }); + art.on("video:pause", () => { + art.controls.show = true; + art.mask.show = true; + }); + art.on("video:play", () => { + art.mask.show = false; + setStyle($poster, "display", "none"); + }); + art.on("video:playing", () => { + art.mask.show = false; + }); + art.on("video:progress", () => { + if (art.playing) { + art.loading.show = false; + } + }); + art.on("video:seeked", () => { + art.loading.show = false; + art.mask.show = true; + }); + art.on("video:seeking", () => { + art.loading.show = true; + art.mask.show = false; + }); + art.on("video:timeupdate", () => { + art.mask.show = false; + }); + art.on("video:waiting", () => { + art.loading.show = true; + art.mask.show = false; + }); + } + function flipMix(art) { + const { + template: { $player }, + i18n, + notice + } = art; + def(art, "flip", { + get() { + return $player.dataset.flip || "normal"; + }, + set(flip2) { + if (!flip2) + flip2 = "normal"; + if (flip2 === "normal") { + delete $player.dataset.flip; } else { - art.controls.show = true; - art.mask.show = true; + $player.dataset.flip = flip2; } + notice.show = `${i18n.get("Video Flip")}: ${i18n.get(capitalize(flip2))}`; + art.emit("flip", flip2); + } }); - art.on('video:error', async (error)=>{ - if (reconnectTime < constructor.RECONNECT_TIME_MAX) { - await (0, _utils.sleep)(constructor.RECONNECT_SLEEP_TIME); - reconnectTime += 1; - art.url = option.url; - notice.show = `${i18n.get('Reconnect')}: ${reconnectTime}`; - art.emit('error', error, reconnectTime); - } else { - art.mask.show = true; - art.loading.show = false; - art.controls.show = true; - (0, _utils.addClass)($player, 'art-error'); - await (0, _utils.sleep)(constructor.RECONNECT_SLEEP_TIME); - notice.show = i18n.get('Video Load Failed'); - } - }); - // art.on('video:loadeddata', () => { - // }); - art.on('video:loadedmetadata', ()=>{ - art.emit('resize'); - if (0, _utils.isMobile) { - art.loading.show = false; - art.controls.show = true; - art.mask.show = true; - } - }); - art.on('video:loadstart', ()=>{ - art.loading.show = true; - art.mask.show = false; - art.controls.show = true; - }); - art.on('video:pause', ()=>{ - art.controls.show = true; - art.mask.show = true; - }); - art.on('video:play', ()=>{ - art.mask.show = false; - (0, _utils.setStyle)($poster, 'display', 'none'); - }); - art.on('video:playing', ()=>{ - art.mask.show = false; - }); - art.on('video:progress', ()=>{ - if (art.playing) art.loading.show = false; - }); - // art.on('video:ratechange', () => { - // }); - art.on('video:seeked', ()=>{ - art.loading.show = false; - art.mask.show = true; - }); - art.on('video:seeking', ()=>{ - art.loading.show = true; - art.mask.show = false; - }); - // art.on('video:stalled', () => { - // }); - // art.on('video:suspend', () => { - // }); - art.on('video:timeupdate', ()=>{ - art.mask.show = false; - }); - // art.on('video:volumechange', () => { - // }); - art.on('video:waiting', ()=>{ - art.loading.show = true; - art.mask.show = false; - }); -} - -},{"../config":"1dlGA","../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"9KwcF":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>flipMix); -var _utils = require("../utils"); -function flipMix(art) { - const { template: { $player }, i18n, notice } = art; - (0, _utils.def)(art, 'flip', { - get () { - return $player.dataset.flip || 'normal'; - }, - set (flip) { - if (!flip) flip = 'normal'; - if (flip === 'normal') delete $player.dataset.flip; - else $player.dataset.flip = flip; - notice.show = `${i18n.get('Video Flip')}: ${i18n.get((0, _utils.capitalize)(flip))}`; - art.emit('flip', flip); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"bdfra":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>fullscreenMix); -var _screenfull = require("../libs/screenfull"); -var _screenfullDefault = parcelHelpers.interopDefault(_screenfull); -var _utils = require("../utils"); -function fullscreenMix(art) { - const { i18n, notice, template: { $video, $player } } = art; - const nativeScreenfull = (art)=>{ - (0, _screenfullDefault.default).on('change', ()=>{ - art.emit('fullscreen', (0, _screenfullDefault.default).isFullscreen); - if ((0, _screenfullDefault.default).isFullscreen) { - art.state = 'fullscreen'; - (0, _utils.addClass)($player, 'art-fullscreen'); - } else (0, _utils.removeClass)($player, 'art-fullscreen'); - art.emit('resize'); - }); - (0, _screenfullDefault.default).on('error', (event)=>{ - art.emit('fullscreenError', event); - }); - (0, _utils.def)(art, 'fullscreen', { - get () { - return (0, _screenfullDefault.default).isFullscreen; - }, - async set (value) { - if (value) await (0, _screenfullDefault.default).request($player); - else await (0, _screenfullDefault.default).exit(); - } - }); - }; - const webkitScreenfull = (art)=>{ - art.on('document:webkitfullscreenchange', ()=>{ - art.emit('fullscreen', art.fullscreen); - art.emit('resize'); - }); - (0, _utils.def)(art, 'fullscreen', { - get () { - return document.fullscreenElement === $video; - }, - set (value) { - if (value) { - art.state = 'fullscreen'; - $video.webkitEnterFullscreen(); - } else $video.webkitExitFullscreen(); - } - }); - }; - art.once('video:loadedmetadata', ()=>{ - if ((0, _screenfullDefault.default).isEnabled) nativeScreenfull(art); - else if ($video.webkitSupportsFullscreen) webkitScreenfull(art); - else (0, _utils.def)(art, 'fullscreen', { - get () { - return false; - }, - set () { - notice.show = i18n.get('Fullscreen Not Supported'); - } - }); - // Asynchronous setting - (0, _utils.def)(art, 'fullscreen', (0, _utils.get)(art, 'fullscreen')); - }); -} - -},{"../libs/screenfull":"7G3Ks","../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"7G3Ks":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -const methodMap = [ + } + const methodMap = [ [ - 'requestFullscreen', - 'exitFullscreen', - 'fullscreenElement', - 'fullscreenEnabled', - 'fullscreenchange', - 'fullscreenerror' + "requestFullscreen", + "exitFullscreen", + "fullscreenElement", + "fullscreenEnabled", + "fullscreenchange", + "fullscreenerror" ], // New WebKit [ - 'webkitRequestFullscreen', - 'webkitExitFullscreen', - 'webkitFullscreenElement', - 'webkitFullscreenEnabled', - 'webkitfullscreenchange', - 'webkitfullscreenerror' + "webkitRequestFullscreen", + "webkitExitFullscreen", + "webkitFullscreenElement", + "webkitFullscreenEnabled", + "webkitfullscreenchange", + "webkitfullscreenerror" ], // Old WebKit [ - 'webkitRequestFullScreen', - 'webkitCancelFullScreen', - 'webkitCurrentFullScreenElement', - 'webkitCancelFullScreen', - 'webkitfullscreenchange', - 'webkitfullscreenerror' + "webkitRequestFullScreen", + "webkitCancelFullScreen", + "webkitCurrentFullScreenElement", + "webkitCancelFullScreen", + "webkitfullscreenchange", + "webkitfullscreenerror" ], [ - 'mozRequestFullScreen', - 'mozCancelFullScreen', - 'mozFullScreenElement', - 'mozFullScreenEnabled', - 'mozfullscreenchange', - 'mozfullscreenerror' + "mozRequestFullScreen", + "mozCancelFullScreen", + "mozFullScreenElement", + "mozFullScreenEnabled", + "mozfullscreenchange", + "mozfullscreenerror" ], [ - 'msRequestFullscreen', - 'msExitFullscreen', - 'msFullscreenElement', - 'msFullscreenEnabled', - 'MSFullscreenChange', - 'MSFullscreenError' + "msRequestFullscreen", + "msExitFullscreen", + "msFullscreenElement", + "msFullscreenEnabled", + "MSFullscreenChange", + "MSFullscreenError" ] -]; -const nativeAPI = (()=>{ - if (typeof document === 'undefined') return false; + ]; + const nativeAPI = (() => { + if (typeof document === "undefined") { + return false; + } const unprefixedMethods = methodMap[0]; const returnValue = {}; - for (const methodList of methodMap){ - const exitFullscreenMethod = methodList[1]; - if (exitFullscreenMethod in document) { - for (const [index, method] of methodList.entries())returnValue[unprefixedMethods[index]] = method; - return returnValue; + for (const methodList of methodMap) { + const exitFullscreenMethod = methodList[1]; + if (exitFullscreenMethod in document) { + for (const [index, method] of methodList.entries()) { + returnValue[unprefixedMethods[index]] = method; } + return returnValue; + } } return false; -})(); -const eventNameMap = { + })(); + const eventNameMap = { change: nativeAPI.fullscreenchange, error: nativeAPI.fullscreenerror -}; -const screenfull = { - request (element = document.documentElement, options) { - return new Promise((resolve, reject)=>{ - const onFullScreenEntered = ()=>{ - screenfull.off('change', onFullScreenEntered); - resolve(); - }; - screenfull.on('change', onFullScreenEntered); - const returnPromise = element[nativeAPI.requestFullscreen](options); - if (returnPromise instanceof Promise) returnPromise.then(onFullScreenEntered).catch(reject); - }); + }; + const screenfull = { + request(element = document.documentElement, options) { + return new Promise((resolve, reject) => { + const onFullScreenEntered = () => { + screenfull.off("change", onFullScreenEntered); + resolve(); + }; + screenfull.on("change", onFullScreenEntered); + const returnPromise = element[nativeAPI.requestFullscreen](options); + if (returnPromise instanceof Promise) { + returnPromise.then(onFullScreenEntered).catch(reject); + } + }); }, - exit () { - return new Promise((resolve, reject)=>{ - if (!screenfull.isFullscreen) { - resolve(); - return; - } - const onFullScreenExit = ()=>{ - screenfull.off('change', onFullScreenExit); - resolve(); - }; - screenfull.on('change', onFullScreenExit); - const returnPromise = document[nativeAPI.exitFullscreen](); - if (returnPromise instanceof Promise) returnPromise.then(onFullScreenExit).catch(reject); - }); + exit() { + return new Promise((resolve, reject) => { + if (!screenfull.isFullscreen) { + resolve(); + return; + } + const onFullScreenExit = () => { + screenfull.off("change", onFullScreenExit); + resolve(); + }; + screenfull.on("change", onFullScreenExit); + const returnPromise = document[nativeAPI.exitFullscreen](); + if (returnPromise instanceof Promise) { + returnPromise.then(onFullScreenExit).catch(reject); + } + }); }, - toggle (element, options) { - return screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options); + toggle(element, options) { + return screenfull.isFullscreen ? screenfull.exit() : screenfull.request(element, options); }, - onchange (callback) { - screenfull.on('change', callback); + onchange(callback) { + screenfull.on("change", callback); }, - onerror (callback) { - screenfull.on('error', callback); + onerror(callback) { + screenfull.on("error", callback); }, - on (event, callback) { - const eventName = eventNameMap[event]; - if (eventName) document.addEventListener(eventName, callback, false); + on(event, callback) { + const eventName = eventNameMap[event]; + if (eventName) { + document.addEventListener(eventName, callback, false); + } }, - off (event, callback) { - const eventName = eventNameMap[event]; - if (eventName) document.removeEventListener(eventName, callback, false); + off(event, callback) { + const eventName = eventNameMap[event]; + if (eventName) { + document.removeEventListener(eventName, callback, false); + } }, raw: nativeAPI -}; -Object.defineProperties(screenfull, { + }; + Object.defineProperties(screenfull, { isFullscreen: { - get: ()=>Boolean(document[nativeAPI.fullscreenElement]) + get: () => Boolean(document[nativeAPI.fullscreenElement]) }, element: { - enumerable: true, - get: ()=>document[nativeAPI.fullscreenElement] + enumerable: true, + get: () => document[nativeAPI.fullscreenElement] }, isEnabled: { - enumerable: true, - get: ()=>Boolean(document[nativeAPI.fullscreenEnabled]) + enumerable: true, + get: () => Boolean(document[nativeAPI.fullscreenEnabled]) } -}); -exports.default = screenfull; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"3ug77":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>fullscreenWebMix); -var _utils = require("../utils"); -function fullscreenWebMix(art) { - const { constructor, template: { $container, $player } } = art; - let cssText = ''; - (0, _utils.def)(art, 'fullscreenWeb', { - get () { - return (0, _utils.hasClass)($player, 'art-fullscreen-web'); + }); + function fullscreenMix(art) { + const { + i18n, + notice, + template: { $video, $player } + } = art; + const nativeScreenfull = (art2) => { + screenfull.on("change", () => { + art2.emit("fullscreen", screenfull.isFullscreen); + if (screenfull.isFullscreen) { + art2.state = "fullscreen"; + addClass($player, "art-fullscreen"); + } else { + removeClass($player, "art-fullscreen"); + } + art2.emit("resize"); + }); + screenfull.on("error", (event) => { + art2.emit("fullscreenError", event); + }); + def(art2, "fullscreen", { + get() { + return screenfull.isFullscreen; }, - set (value) { - if (value) { - cssText = $player.style.cssText; - if (constructor.FULLSCREEN_WEB_IN_BODY) (0, _utils.append)(document.body, $player); - art.state = 'fullscreenWeb'; - (0, _utils.setStyle)($player, 'width', '100%'); - (0, _utils.setStyle)($player, 'height', '100%'); - (0, _utils.addClass)($player, 'art-fullscreen-web'); - art.emit('fullscreenWeb', true); - } else { - if (constructor.FULLSCREEN_WEB_IN_BODY) (0, _utils.append)($container, $player); - if (cssText) { - $player.style.cssText = cssText; - cssText = ''; - } - (0, _utils.removeClass)($player, 'art-fullscreen-web'); - art.emit('fullscreenWeb', false); - } - art.emit('resize'); + async set(value) { + if (value) { + await screenfull.request($player); + } else { + await screenfull.exit(); + } } + }); + }; + const webkitScreenfull = (art2) => { + art2.on("document:webkitfullscreenchange", () => { + art2.emit("fullscreen", art2.fullscreen); + art2.emit("resize"); + }); + def(art2, "fullscreen", { + get() { + return document.fullscreenElement === $video; + }, + set(value) { + if (value) { + art2.state = "fullscreen"; + $video.webkitEnterFullscreen(); + } else { + $video.webkitExitFullscreen(); + } + } + }); + }; + art.once("video:loadedmetadata", () => { + if (screenfull.isEnabled) { + nativeScreenfull(art); + } else if ($video.webkitSupportsFullscreen) { + webkitScreenfull(art); + } else { + def(art, "fullscreen", { + get() { + return false; + }, + set() { + notice.show = i18n.get("Fullscreen Not Supported"); + } + }); + } + def(art, "fullscreen", get(art, "fullscreen")); }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"lmx0A":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>loadedMix); -var _utils = require("../utils"); -function loadedMix(art) { + } + function fullscreenWebMix(art) { + const { + constructor, + template: { $container, $player } + } = art; + let cssText = ""; + def(art, "fullscreenWeb", { + get() { + return hasClass($player, "art-fullscreen-web"); + }, + set(value) { + if (value) { + cssText = $player.style.cssText; + if (constructor.FULLSCREEN_WEB_IN_BODY) { + append(document.body, $player); + } + art.state = "fullscreenWeb"; + setStyle($player, "width", "100%"); + setStyle($player, "height", "100%"); + addClass($player, "art-fullscreen-web"); + art.emit("fullscreenWeb", true); + } else { + if (constructor.FULLSCREEN_WEB_IN_BODY) { + append($container, $player); + } + if (cssText) { + $player.style.cssText = cssText; + cssText = ""; + } + removeClass($player, "art-fullscreen-web"); + art.emit("fullscreenWeb", false); + } + art.emit("resize"); + } + }); + } + function loadedMix(art) { const { $video } = art.template; - (0, _utils.def)(art, 'loaded', { - get: ()=>art.loadedTime / $video.duration + def(art, "loaded", { + get: () => art.loadedTime / $video.duration }); - (0, _utils.def)(art, 'loadedTime', { - get: ()=>{ - return $video.buffered.length ? $video.buffered.end($video.buffered.length - 1) : 0; - } + def(art, "loadedTime", { + get: () => { + return $video.buffered.length ? $video.buffered.end($video.buffered.length - 1) : 0; + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"5xcsH":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>miniMix); -var _utils = require("../utils"); -function miniMix(art) { - const { icons, proxy, storage, template: { $player, $video } } = art; + } + function miniMix(art) { + const { + icons, + proxy, + storage, + template: { $player, $video } + } = art; let isDragging = false; let lastPageX = 0; let lastPageY = 0; function hideMini() { - const { $mini } = art.template; - if ($mini) { - (0, _utils.removeClass)($player, 'art-mini'); - (0, _utils.setStyle)($mini, 'display', 'none'); - $player.prepend($video); - art.emit('mini', false); - } + const { $mini } = art.template; + if ($mini) { + removeClass($player, "art-mini"); + setStyle($mini, "display", "none"); + $player.prepend($video); + art.emit("mini", false); + } } function initState($play, $pause) { - if (art.playing) { - (0, _utils.setStyle)($play, 'display', `none`); - (0, _utils.setStyle)($pause, 'display', `flex`); - } else { - (0, _utils.setStyle)($play, 'display', `flex`); - (0, _utils.setStyle)($pause, 'display', `none`); - } + if (art.playing) { + setStyle($play, "display", `none`); + setStyle($pause, "display", `flex`); + } else { + setStyle($play, "display", `flex`); + setStyle($pause, "display", `none`); + } } function createMini() { - const { $mini } = art.template; - if ($mini) { - (0, _utils.append)($mini, $video); - return (0, _utils.setStyle)($mini, 'display', 'flex'); - } else { - const $mini = (0, _utils.createElement)('div'); - (0, _utils.addClass)($mini, 'art-mini-popup'); - (0, _utils.append)(document.body, $mini); - art.template.$mini = $mini; - (0, _utils.append)($mini, $video); - const $close = (0, _utils.append)($mini, `
`); - (0, _utils.append)($close, icons.close); - proxy($close, 'click', hideMini); - const $state = (0, _utils.append)($mini, `
`); - const $play = (0, _utils.append)($state, icons.play); - const $pause = (0, _utils.append)($state, icons.pause); - proxy($play, 'click', ()=>art.play()); - proxy($pause, 'click', ()=>art.pause()); - initState($play, $pause); - art.on('video:playing', ()=>initState($play, $pause)); - art.on('video:pause', ()=>initState($play, $pause)); - art.on('video:timeupdate', ()=>initState($play, $pause)); - proxy($mini, 'mousedown', (event)=>{ - isDragging = event.button === 0; - lastPageX = event.pageX; - lastPageY = event.pageY; - }); - art.on('document:mousemove', (event)=>{ - if (isDragging) { - (0, _utils.addClass)($mini, 'art-mini-dragging'); - const x = event.pageX - lastPageX; - const y = event.pageY - lastPageY; - (0, _utils.setStyle)($mini, 'transform', `translate(${x}px, ${y}px)`); - } - }); - art.on('document:mouseup', ()=>{ - if (isDragging) { - isDragging = false; - (0, _utils.removeClass)($mini, 'art-mini-dragging'); - const rect = (0, _utils.getRect)($mini); - storage.set('left', rect.left); - storage.set('top', rect.top); - (0, _utils.setStyle)($mini, 'left', `${rect.left}px`); - (0, _utils.setStyle)($mini, 'top', `${rect.top}px`); - (0, _utils.setStyle)($mini, 'transform', null); - } - }); - return $mini; - } + const { $mini } = art.template; + if ($mini) { + append($mini, $video); + return setStyle($mini, "display", "flex"); + } else { + const $mini2 = createElement("div"); + addClass($mini2, "art-mini-popup"); + append(document.body, $mini2); + art.template.$mini = $mini2; + append($mini2, $video); + const $close = append($mini2, `
`); + append($close, icons.close); + proxy($close, "click", hideMini); + const $state = append($mini2, `
`); + const $play = append($state, icons.play); + const $pause = append($state, icons.pause); + proxy($play, "click", () => art.play()); + proxy($pause, "click", () => art.pause()); + initState($play, $pause); + art.on("video:playing", () => initState($play, $pause)); + art.on("video:pause", () => initState($play, $pause)); + art.on("video:timeupdate", () => initState($play, $pause)); + proxy($mini2, "mousedown", (event) => { + isDragging = event.button === 0; + lastPageX = event.pageX; + lastPageY = event.pageY; + }); + art.on("document:mousemove", (event) => { + if (isDragging) { + addClass($mini2, "art-mini-dragging"); + const x = event.pageX - lastPageX; + const y = event.pageY - lastPageY; + setStyle($mini2, "transform", `translate(${x}px, ${y}px)`); + } + }); + art.on("document:mouseup", () => { + if (isDragging) { + isDragging = false; + removeClass($mini2, "art-mini-dragging"); + const rect = getRect($mini2); + storage.set("left", rect.left); + storage.set("top", rect.top); + setStyle($mini2, "left", `${rect.left}px`); + setStyle($mini2, "top", `${rect.top}px`); + setStyle($mini2, "transform", null); + } + }); + return $mini2; + } } function initMini() { - const { $mini } = art.template; - const rect = (0, _utils.getRect)($mini); - const top = window.innerHeight - rect.height - 50; - const left = window.innerWidth - rect.width - 50; - storage.set('top', top); - storage.set('left', left); - (0, _utils.setStyle)($mini, 'top', `${top}px`); - (0, _utils.setStyle)($mini, 'left', `${left}px`); + const { $mini } = art.template; + const rect = getRect($mini); + const top = window.innerHeight - rect.height - 50; + const left = window.innerWidth - rect.width - 50; + storage.set("top", top); + storage.set("left", left); + setStyle($mini, "top", `${top}px`); + setStyle($mini, "left", `${left}px`); } - (0, _utils.def)(art, 'mini', { - get () { - return (0, _utils.hasClass)($player, 'art-mini'); - }, - set (value) { - if (value) { - art.state = 'mini'; - (0, _utils.addClass)($player, 'art-mini'); - const $mini = createMini(); - const top = storage.get('top'); - const left = storage.get('left'); - if (typeof top === 'number' && typeof left === 'number') { - (0, _utils.setStyle)($mini, 'top', `${top}px`); - (0, _utils.setStyle)($mini, 'left', `${left}px`); - if (!(0, _utils.isInViewport)($mini)) initMini(); - } else initMini(); - art.emit('mini', true); - } else hideMini(); + def(art, "mini", { + get() { + return hasClass($player, "art-mini"); + }, + set(value) { + if (value) { + art.state = "mini"; + addClass($player, "art-mini"); + const $mini = createMini(); + const top = storage.get("top"); + const left = storage.get("left"); + if (typeof top === "number" && typeof left === "number") { + setStyle($mini, "top", `${top}px`); + setStyle($mini, "left", `${left}px`); + if (!isInViewport($mini)) { + initMini(); + } + } else { + initMini(); + } + art.emit("mini", true); + } else { + hideMini(); } + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"2TEf9":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>optionInit); -var _utils = require("../utils"); -function optionInit(art) { - const { option, storage, template: { $video, $poster } } = art; - for(const key in option.moreVideoAttr)art.attr(key, option.moreVideoAttr[key]); - if (option.muted) art.muted = option.muted; - if (option.volume) $video.volume = (0, _utils.clamp)(option.volume, 0, 1); - const volumeStorage = storage.get('volume'); - if (typeof volumeStorage === 'number') $video.volume = (0, _utils.clamp)(volumeStorage, 0, 1); - if (option.poster) (0, _utils.setStyle)($poster, 'backgroundImage', `url(${option.poster})`); - if (option.autoplay) $video.autoplay = option.autoplay; + } + function optionInit(art) { + const { + option, + storage, + template: { $video, $poster } + } = art; + for (const key in option.moreVideoAttr) { + art.attr(key, option.moreVideoAttr[key]); + } + if (option.muted) { + art.muted = option.muted; + } + if (option.volume) { + $video.volume = clamp(option.volume, 0, 1); + } + const volumeStorage = storage.get("volume"); + if (typeof volumeStorage === "number") { + $video.volume = clamp(volumeStorage, 0, 1); + } + if (option.poster) { + setStyle($poster, "backgroundImage", `url(${option.poster})`); + } + if (option.autoplay) { + $video.autoplay = option.autoplay; + } if (option.playsInline) { - $video.playsInline = true; - $video['webkit-playsinline'] = true; + $video.playsInline = true; + $video["webkit-playsinline"] = true; + } + if (option.theme) { + option.cssVar["--art-theme"] = option.theme; + } + for (const key in option.cssVar) { + art.cssVar(key, option.cssVar[key]); } - if (option.theme) option.cssVar['--art-theme'] = option.theme; - for(const key in option.cssVar)art.cssVar(key, option.cssVar[key]); art.url = option.url; -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"j7SoA":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>pauseMix); -var _utils = require("../utils"); -function pauseMix(art) { - const { template: { $video }, i18n, notice } = art; - (0, _utils.def)(art, 'pause', { - value () { - const result = $video.pause(); - notice.show = i18n.get('Pause'); - art.emit('pause'); - return result; - } + } + function pauseMix(art) { + const { + template: { $video }, + i18n, + notice + } = art; + def(art, "pause", { + value() { + const result = $video.pause(); + notice.show = i18n.get("Pause"); + art.emit("pause"); + return result; + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"iz9Aq":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>pipMix); -var _utils = require("../utils"); -function nativePip(art) { - const { template: { $video }, proxy, notice } = art; + } + function nativePip(art) { + const { + template: { $video }, + proxy, + notice + } = art; $video.disablePictureInPicture = false; - (0, _utils.def)(art, 'pip', { - get () { - return document.pictureInPictureElement; - }, - set (value) { - if (value) { - art.state = 'pip'; - $video.requestPictureInPicture().catch((err)=>{ - notice.show = err; - throw err; - }); - } else document.exitPictureInPicture().catch((err)=>{ - notice.show = err; - throw err; - }); + def(art, "pip", { + get() { + return document.pictureInPictureElement; + }, + set(value) { + if (value) { + art.state = "pip"; + $video.requestPictureInPicture().catch((err) => { + notice.show = err; + throw err; + }); + } else { + document.exitPictureInPicture().catch((err) => { + notice.show = err; + throw err; + }); } + } }); - proxy($video, 'enterpictureinpicture', ()=>{ - art.emit('pip', true); + proxy($video, "enterpictureinpicture", () => { + art.emit("pip", true); }); - proxy($video, 'leavepictureinpicture', ()=>{ - art.emit('pip', false); + proxy($video, "leavepictureinpicture", () => { + art.emit("pip", false); }); -} -function webkitPip(art) { + } + function webkitPip(art) { const { $video } = art.template; - $video.webkitSetPresentationMode('inline'); - (0, _utils.def)(art, 'pip', { - get () { - return $video.webkitPresentationMode === 'picture-in-picture'; + $video.webkitSetPresentationMode("inline"); + def(art, "pip", { + get() { + return $video.webkitPresentationMode === "picture-in-picture"; + }, + set(value) { + if (value) { + art.state = "pip"; + $video.webkitSetPresentationMode("picture-in-picture"); + art.emit("pip", true); + } else { + $video.webkitSetPresentationMode("inline"); + art.emit("pip", false); + } + } + }); + } + function pipMix(art) { + const { + i18n, + notice, + template: { $video } + } = art; + if (document.pictureInPictureEnabled) { + nativePip(art); + } else if ($video.webkitSupportsPresentationMode) { + webkitPip(art); + } else { + def(art, "pip", { + get() { + return false; }, - set (value) { - if (value) { - art.state = 'pip'; - $video.webkitSetPresentationMode('picture-in-picture'); - art.emit('pip', true); - } else { - $video.webkitSetPresentationMode('inline'); - art.emit('pip', false); - } + set() { + notice.show = i18n.get("PIP Not Supported"); } - }); -} -function pipMix(art) { - const { i18n, notice, template: { $video } } = art; - if (document.pictureInPictureEnabled) nativePip(art); - else if ($video.webkitSupportsPresentationMode) webkitPip(art); - else (0, _utils.def)(art, 'pip', { - get () { - return false; - }, - set () { - notice.show = i18n.get('PIP Not Supported'); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"b6rDz":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>playbackRateMix); -var _utils = require("../utils"); -function playbackRateMix(art) { - const { template: { $video }, i18n, notice } = art; - (0, _utils.def)(art, 'playbackRate', { - get () { - return $video.playbackRate; - }, - set (rate) { - if (rate) { - if (rate === $video.playbackRate) return; - $video.playbackRate = rate; - notice.show = `${i18n.get('Rate')}: ${rate === 1.0 ? i18n.get('Normal') : `${rate}x`}`; - } else art.playbackRate = 1; - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"CTEqN":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>playedMix); -var _utils = require("../utils"); -function playedMix(art) { - (0, _utils.def)(art, 'played', { - get: ()=>art.currentTime / art.duration - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"jMFse":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>playingMix); -var _utils = require("../utils"); -function playingMix(art) { - const { $video } = art.template; - (0, _utils.def)(art, 'playing', { - get: ()=>{ - if (typeof $video.playing === 'boolean') return $video.playing; - return !!($video.currentTime > 0 && !$video.paused && !$video.ended && $video.readyState > 2); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"lsQBb":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>playMix); -var _utils = require("../utils"); -function playMix(art) { - const { i18n, notice, option, constructor: { instances }, template: { $video } } = art; - (0, _utils.def)(art, 'play', { - async value () { - const result = await $video.play(); - notice.show = i18n.get('Play'); - art.emit('play'); - if (option.mutex) for(let index = 0; index < instances.length; index++){ - const instance = instances[index]; - if (instance !== art) instance.pause(); - } - return result; - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"iVqmF":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>posterMix); -var _utils = require("../utils"); -function posterMix(art) { - const { template: { $poster } } = art; - (0, _utils.def)(art, 'poster', { - get: ()=>{ - try { - return $poster.style.backgroundImage.match(/"(.*)"/)[1]; - } catch { - return ''; - } - }, - set (url) { - (0, _utils.setStyle)($poster, 'backgroundImage', `url(${url})`); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"2gM0L":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>qualityMix); -var _utils = require("../utils"); -function qualityMix(art) { - (0, _utils.def)(art, 'quality', { - set (quality) { - const { controls, notice, i18n } = art; - const qualityDefault = quality.find((item)=>item.default) || quality[0]; - controls.update({ - name: 'quality', - position: 'right', - index: 10, - style: { - marginRight: '10px' - }, - html: qualityDefault?.html || '', - selector: quality, - async onSelect (item) { - await art.switchQuality(item.url); - notice.show = `${i18n.get('Switch Video')}: ${item.html}`; - return item.html; - } - }); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"iR6EQ":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>rectMix); -var _utils = require("../utils"); -function rectMix(art) { - (0, _utils.def)(art, 'rect', { - get: ()=>{ - return (0, _utils.getRect)(art.template.$player); - } - }); - const keys = [ - 'bottom', - 'height', - 'left', - 'right', - 'top', - 'width' - ]; - for(let index = 0; index < keys.length; index++){ - const key = keys[index]; - (0, _utils.def)(art, key, { - get: ()=>{ - return art.rect[key]; - } - }); + }); } - (0, _utils.def)(art, 'x', { - get: ()=>{ - return art.left + window.pageXOffset; + } + function playbackRateMix(art) { + const { + template: { $video }, + i18n, + notice + } = art; + def(art, "playbackRate", { + get() { + return $video.playbackRate; + }, + set(rate) { + if (rate) { + if (rate === $video.playbackRate) + return; + $video.playbackRate = rate; + notice.show = `${i18n.get("Rate")}: ${rate === 1 ? i18n.get("Normal") : `${rate}x`}`; + } else { + art.playbackRate = 1; } + } }); - (0, _utils.def)(art, 'y', { - get: ()=>{ - return art.top + window.pageYOffset; + } + function playedMix(art) { + def(art, "played", { + get: () => art.currentTime / art.duration + }); + } + function playingMix(art) { + const { $video } = art.template; + def(art, "playing", { + get: () => { + if (typeof $video.playing === "boolean") + return $video.playing; + return !!($video.currentTime > 0 && !$video.paused && !$video.ended && $video.readyState > 2); + } + }); + } + function playMix(art) { + const { + i18n, + notice, + option, + constructor: { instances: instances2 }, + template: { $video } + } = art; + def(art, "play", { + async value() { + const result = await $video.play(); + notice.show = i18n.get("Play"); + art.emit("play"); + if (option.mutex) { + for (let index = 0; index < instances2.length; index++) { + const instance = instances2[index]; + if (instance !== art) { + instance.pause(); + } + } } + return result; + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"kwHom":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>screenshotMix); -var _utils = require("../utils"); -function screenshotMix(art) { - const { notice, template: { $video } } = art; - const $canvas = (0, _utils.createElement)('canvas'); - (0, _utils.def)(art, 'getDataURL', { - value: ()=>new Promise((resolve, reject)=>{ - try { - $canvas.width = $video.videoWidth; - $canvas.height = $video.videoHeight; - $canvas.getContext('2d').drawImage($video, 0, 0); - resolve($canvas.toDataURL('image/png')); - } catch (err) { - notice.show = err; - reject(err); - } - }) - }); - (0, _utils.def)(art, 'getBlobUrl', { - value: ()=>new Promise((resolve, reject)=>{ - try { - $canvas.width = $video.videoWidth; - $canvas.height = $video.videoHeight; - $canvas.getContext('2d').drawImage($video, 0, 0); - $canvas.toBlob((blob)=>{ - resolve(URL.createObjectURL(blob)); - }); - } catch (err) { - notice.show = err; - reject(err); - } - }) - }); - (0, _utils.def)(art, 'screenshot', { - value: async (name)=>{ - const dataUri = await art.getDataURL(); - const fileName = name || `artplayer_${(0, _utils.secondToTime)($video.currentTime)}`; - (0, _utils.download)(dataUri, `${fileName}.png`); - art.emit('screenshot', dataUri); - return dataUri; + } + function posterMix(art) { + const { + template: { $poster } + } = art; + def(art, "poster", { + get: () => { + try { + return $poster.style.backgroundImage.match(/"(.*)"/)[1]; + } catch { + return ""; } + }, + set(url) { + setStyle($poster, "backgroundImage", `url(${url})`); + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"aOXnw":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>seekMix); -var _utils = require("../utils"); -function seekMix(art) { + } + function qualityMix(art) { + def(art, "quality", { + set(quality) { + const { controls, notice, i18n } = art; + const qualityDefault = quality.find((item) => item.default) || quality[0]; + controls.update({ + name: "quality", + position: "right", + index: 10, + style: { + marginRight: "10px" + }, + html: qualityDefault?.html || "", + selector: quality, + async onSelect(item) { + await art.switchQuality(item.url); + notice.show = `${i18n.get("Switch Video")}: ${item.html}`; + return item.html; + } + }); + } + }); + } + function rectMix(art) { + def(art, "rect", { + get: () => { + return getRect(art.template.$player); + } + }); + const keys = ["bottom", "height", "left", "right", "top", "width"]; + for (let index = 0; index < keys.length; index++) { + const key = keys[index]; + def(art, key, { + get: () => { + return art.rect[key]; + } + }); + } + def(art, "x", { + get: () => { + return art.left + window.pageXOffset; + } + }); + def(art, "y", { + get: () => { + return art.top + window.pageYOffset; + } + }); + } + function screenshotMix(art) { + const { + notice, + template: { $video } + } = art; + const $canvas = createElement("canvas"); + def(art, "getDataURL", { + value: () => new Promise((resolve, reject) => { + try { + $canvas.width = $video.videoWidth; + $canvas.height = $video.videoHeight; + $canvas.getContext("2d").drawImage($video, 0, 0); + resolve($canvas.toDataURL("image/png")); + } catch (err) { + notice.show = err; + reject(err); + } + }) + }); + def(art, "getBlobUrl", { + value: () => new Promise((resolve, reject) => { + try { + $canvas.width = $video.videoWidth; + $canvas.height = $video.videoHeight; + $canvas.getContext("2d").drawImage($video, 0, 0); + $canvas.toBlob((blob) => { + resolve(URL.createObjectURL(blob)); + }); + } catch (err) { + notice.show = err; + reject(err); + } + }) + }); + def(art, "screenshot", { + value: async (name) => { + const dataUri = await art.getDataURL(); + const fileName = name || `artplayer_${secondToTime($video.currentTime)}`; + download(dataUri, `${fileName}.png`); + art.emit("screenshot", dataUri); + return dataUri; + } + }); + } + function seekMix(art) { const { notice } = art; - (0, _utils.def)(art, 'seek', { - set (time) { - art.currentTime = time; - if (art.duration) notice.show = `${(0, _utils.secondToTime)(art.currentTime)} / ${(0, _utils.secondToTime)(art.duration)}`; - art.emit('seek', art.currentTime, time); + def(art, "seek", { + set(time2) { + art.currentTime = time2; + if (art.duration) { + notice.show = `${secondToTime(art.currentTime)} / ${secondToTime(art.duration)}`; } + art.emit("seek", art.currentTime, time2); + } }); - (0, _utils.def)(art, 'forward', { - set (time) { - art.seek = art.currentTime + time; + def(art, "forward", { + set(time2) { + art.seek = art.currentTime + time2; + } + }); + def(art, "backward", { + set(time2) { + art.seek = art.currentTime - time2; + } + }); + } + function stateMix(art) { + const states = ["mini", "pip", "fullscreen", "fullscreenWeb"]; + def(art, "state", { + get: () => states.find((name) => art[name]) || "standard", + set(name) { + for (let index = 0; index < states.length; index++) { + const prop = states[index]; + if (prop !== name && art[prop]) { + art[prop] = false; + } } + } }); - (0, _utils.def)(art, 'backward', { - set (time) { - art.seek = art.currentTime - time; - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"ls3ui":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>stateMix); -var _utils = require("../utils"); -function stateMix(art) { - const states = [ - 'mini', - 'pip', - 'fullscreen', - 'fullscreenWeb' - ]; - (0, _utils.def)(art, 'state', { - get: ()=>states.find((name)=>art[name]) || 'standard', - set (name) { - for(let index = 0; index < states.length; index++){ - const prop = states[index]; - if (prop !== name && art[prop]) art[prop] = false; - } - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"exULR":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>subtitleOffsetMix); -var _utils = require("../utils"); -function subtitleOffsetMix(art) { + } + function subtitleOffsetMix(art) { const { notice, i18n, template } = art; - (0, _utils.def)(art, 'subtitleOffset', { - get () { - return template.$track?.offset || 0; - }, - set (value) { - const { cues } = art.subtitle; - if (!template.$track || cues.length === 0) return; - const offset = (0, _utils.clamp)(value, -10, 10); - template.$track.offset = offset; - for(let index = 0; index < cues.length; index++){ - const cue = cues[index]; - cue.originalStartTime = cue.originalStartTime ?? cue.startTime; - cue.originalEndTime = cue.originalEndTime ?? cue.endTime; - cue.startTime = (0, _utils.clamp)(cue.originalStartTime + offset, 0, art.duration); - cue.endTime = (0, _utils.clamp)(cue.originalEndTime + offset, 0, art.duration); - } - art.subtitle.update(); - notice.show = `${i18n.get('Subtitle Offset')}: ${value}s`; - art.emit('subtitleOffset', value); + def(art, "subtitleOffset", { + get() { + return template.$track?.offset || 0; + }, + set(value) { + const { cues } = art.subtitle; + if (!template.$track || cues.length === 0) + return; + const offset = clamp(value, -10, 10); + template.$track.offset = offset; + for (let index = 0; index < cues.length; index++) { + const cue = cues[index]; + cue.originalStartTime = cue.originalStartTime ?? cue.startTime; + cue.originalEndTime = cue.originalEndTime ?? cue.endTime; + cue.startTime = clamp(cue.originalStartTime + offset, 0, art.duration); + cue.endTime = clamp(cue.originalEndTime + offset, 0, art.duration); } + art.subtitle.update(); + notice.show = `${i18n.get("Subtitle Offset")}: ${value}s`; + art.emit("subtitleOffset", value); + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"fhErJ":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>switchMix); -var _utils = require("../utils"); -function switchMix(art) { + } + function switchMix(art) { function switchUrl(url, currentTime) { - return new Promise((resolve, reject)=>{ - if (url === art.url) { - resolve(); - return; - } - const { playing, aspectRatio, playbackRate } = art; - art.pause(); - art.url = url; - art.notice.show = ''; - const handlers = {}; - handlers.error = (error)=>{ - art.off('video:canplay', handlers.canplay); - art.off('video:loadedmetadata', handlers.metadata); - reject(error); - }; - handlers.metadata = ()=>{ - art.currentTime = currentTime; - }; - handlers.canplay = async ()=>{ - art.off('video:error', handlers.error); - art.playbackRate = playbackRate; - art.aspectRatio = aspectRatio; - if (playing) await art.play(); - art.notice.show = ''; - resolve(); - }; - art.once('video:error', handlers.error); - art.once('video:loadedmetadata', handlers.metadata); - art.once('video:canplay', handlers.canplay); - }); + return new Promise((resolve, reject) => { + if (url === art.url) { + resolve(); + return; + } + const { playing, aspectRatio: aspectRatio2, playbackRate: playbackRate2 } = art; + art.pause(); + art.url = url; + art.notice.show = ""; + const handlers = {}; + handlers.error = (error2) => { + art.off("video:canplay", handlers.canplay); + art.off("video:loadedmetadata", handlers.metadata); + reject(error2); + }; + handlers.metadata = () => { + art.currentTime = currentTime; + }; + handlers.canplay = async () => { + art.off("video:error", handlers.error); + art.playbackRate = playbackRate2; + art.aspectRatio = aspectRatio2; + if (playing) { + await art.play(); + } + art.notice.show = ""; + resolve(); + }; + art.once("video:error", handlers.error); + art.once("video:loadedmetadata", handlers.metadata); + art.once("video:canplay", handlers.canplay); + }); } - (0, _utils.def)(art, 'switchQuality', { - value: (url)=>{ - return switchUrl(url, art.currentTime); - } + def(art, "switchQuality", { + value: (url) => { + return switchUrl(url, art.currentTime); + } }); - (0, _utils.def)(art, 'switchUrl', { - value: (url)=>{ - return switchUrl(url, 0); - } + def(art, "switchUrl", { + value: (url) => { + return switchUrl(url, 0); + } }); - (0, _utils.def)(art, 'switch', { - set: art.switchUrl + def(art, "switch", { + set: art.switchUrl }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"61Zjc":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>themeMix); -var _utils = require("../utils"); -function themeMix(art) { - (0, _utils.def)(art, 'theme', { - get () { - return art.cssVar('--art-theme'); - }, - set (theme) { - art.cssVar('--art-theme', theme); - } + } + function themeMix(art) { + def(art, "theme", { + get() { + return art.cssVar("--art-theme"); + }, + set(theme) { + art.cssVar("--art-theme", theme); + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"1gQEa":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>thumbnailsMix); -var _utils = require("../utils"); -function thumbnailsMix(art) { - const { option, template: { $progress, $video } } = art; + } + function thumbnailsMix(art) { + const { + option, + template: { $progress, $video } + } = art; let timer = null; let loding = false; let image = null; function reset() { - clearTimeout(timer); - timer = null; - loding = false; - image = null; + clearTimeout(timer); + timer = null; + loding = false; + image = null; } function showThumbnails(posWidth) { - const $thumbnails = art.controls?.thumbnails; - if (!$thumbnails) return; - const { number, column, width, height, scale } = option.thumbnails; - const width2 = width * scale || image.naturalWidth / column; - const height2 = height * scale || width2 / ($video.videoWidth / $video.videoHeight); - const perWidth = $progress.clientWidth / number; - const perIndex = Math.floor(posWidth / perWidth); - const yIndex = Math.ceil(perIndex / column) - 1; - const xIndex = perIndex % column || column - 1; - (0, _utils.setStyle)($thumbnails, 'backgroundImage', `url(${image.src})`); - (0, _utils.setStyle)($thumbnails, 'height', `${height2}px`); - (0, _utils.setStyle)($thumbnails, 'width', `${width2}px`); - (0, _utils.setStyle)($thumbnails, 'backgroundPosition', `-${xIndex * width2}px -${yIndex * height2}px`); - if (posWidth <= width2 / 2) (0, _utils.setStyle)($thumbnails, 'left', 0); - else if (posWidth > $progress.clientWidth - width2 / 2) (0, _utils.setStyle)($thumbnails, 'left', `${$progress.clientWidth - width2}px`); - else (0, _utils.setStyle)($thumbnails, 'left', `${posWidth - width2 / 2}px`); + const $thumbnails = art.controls?.thumbnails; + if (!$thumbnails) + return; + const { number, column, width, height, scale } = option.thumbnails; + const width2 = width * scale || image.naturalWidth / column; + const height2 = height * scale || width2 / ($video.videoWidth / $video.videoHeight); + const perWidth = $progress.clientWidth / number; + const perIndex = Math.floor(posWidth / perWidth); + const yIndex = Math.ceil(perIndex / column) - 1; + const xIndex = perIndex % column || column - 1; + setStyle($thumbnails, "backgroundImage", `url(${image.src})`); + setStyle($thumbnails, "height", `${height2}px`); + setStyle($thumbnails, "width", `${width2}px`); + setStyle($thumbnails, "backgroundPosition", `-${xIndex * width2}px -${yIndex * height2}px`); + if (posWidth <= width2 / 2) { + setStyle($thumbnails, "left", 0); + } else if (posWidth > $progress.clientWidth - width2 / 2) { + setStyle($thumbnails, "left", `${$progress.clientWidth - width2}px`); + } else { + setStyle($thumbnails, "left", `${posWidth - width2 / 2}px`); + } } - art.on('setBar', async (type, percentage, event)=>{ - const $thumbnails = art.controls?.thumbnails; - const { url, scale } = option.thumbnails; - if (!$thumbnails || !url) return; - const isMobileDragging = type === 'played' && event && (0, _utils.isMobile); - if (type === 'hover' || isMobileDragging) { - if (!image && !loding) { - loding = true; - image = await (0, _utils.loadImg)(url, scale); - loding = false; + art.on("setBar", async (type, percentage, event) => { + const $thumbnails = art.controls?.thumbnails; + const { url, scale } = option.thumbnails; + if (!$thumbnails || !url) + return; + const isMobileDragging = type === "played" && event && isMobile; + if (type === "hover" || isMobileDragging) { + if (!image && !loding) { + loding = true; + image = await loadImg(url, scale); + loding = false; + } + if (!image) + return; + const width = $progress.clientWidth * percentage; + if (width > 0 && width < $progress.clientWidth) { + showThumbnails(width); + } + } + }); + def(art, "thumbnails", { + get() { + return art.option.thumbnails; + }, + set(thumbnails) { + if (thumbnails.url && !art.option.isLive) { + art.option.thumbnails = thumbnails; + reset(); + } + } + }); + } + function toggleMix(art) { + def(art, "toggle", { + value() { + if (art.playing) { + return art.pause(); + } else { + return art.play(); + } + } + }); + } + function typeMix(art) { + def(art, "type", { + get() { + return art.option.type; + }, + set(type) { + art.option.type = type; + } + }); + } + function urlMix(art) { + const { + option, + template: { $video } + } = art; + def(art, "url", { + get() { + return $video.src; + }, + async set(newUrl) { + if (newUrl) { + const oldUrl = art.url; + const typeName = option.type || getExt(newUrl); + const typeCallback = option.customType[typeName]; + if (typeName && typeCallback) { + await sleep(); + art.loading.show = true; + typeCallback.call(art, $video, newUrl, art); + } else { + URL.revokeObjectURL(oldUrl); + $video.src = newUrl; + } + if (oldUrl !== art.url) { + art.option.url = newUrl; + if (art.isReady && oldUrl) { + art.once("video:canplay", () => { + art.emit("restart", newUrl); + }); } - if (!image) return; - const width = $progress.clientWidth * percentage; - if (width > 0 && width < $progress.clientWidth) showThumbnails(width); + } + } else { + await sleep(); + art.loading.show = true; } + } }); - (0, _utils.def)(art, 'thumbnails', { - get () { - return art.option.thumbnails; - }, - set (thumbnails) { - if (thumbnails.url && !art.option.isLive) { - art.option.thumbnails = thumbnails; - reset(); - } + } + function volumeMix(art) { + const { + template: { $video }, + i18n, + notice, + storage + } = art; + def(art, "volume", { + get: () => $video.volume || 0, + set: (percentage) => { + $video.volume = clamp(percentage, 0, 1); + notice.show = `${i18n.get("Volume")}: ${Number.parseInt($video.volume * 100, 10)}`; + if ($video.volume !== 0) { + storage.set("volume", $video.volume); } + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"gt5Qh":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>toggleMix); -var _utils = require("../utils"); -function toggleMix(art) { - (0, _utils.def)(art, 'toggle', { - value () { - if (art.playing) return art.pause(); - else return art.play(); - } + def(art, "muted", { + get: () => $video.muted, + set: (muted) => { + $video.muted = muted; + art.emit("muted", muted); + } }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"gtfHf":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>typeMix); -var _utils = require("../utils"); -function typeMix(art) { - (0, _utils.def)(art, 'type', { - get () { - return art.option.type; - }, - set (type) { - art.option.type = type; - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"esLaT":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>urlMix); -var _utils = require("../utils"); -function urlMix(art) { - const { option, template: { $video } } = art; - (0, _utils.def)(art, 'url', { - get () { - return $video.src; - }, - async set (newUrl) { - if (newUrl) { - const oldUrl = art.url; - const typeName = option.type || (0, _utils.getExt)(newUrl); - const typeCallback = option.customType[typeName]; - if (typeName && typeCallback) { - await (0, _utils.sleep)(); - art.loading.show = true; - typeCallback.call(art, $video, newUrl, art); - } else { - URL.revokeObjectURL(oldUrl); - $video.src = newUrl; - } - if (oldUrl !== art.url) { - art.option.url = newUrl; - if (art.isReady && oldUrl) art.once('video:canplay', ()=>{ - art.emit('restart', newUrl); - }); - } - } else { - await (0, _utils.sleep)(); - art.loading.show = true; - } - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"fIzu0":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>volumeMix); -var _utils = require("../utils"); -function volumeMix(art) { - const { template: { $video }, i18n, notice, storage } = art; - (0, _utils.def)(art, 'volume', { - get: ()=>$video.volume || 0, - set: (percentage)=>{ - $video.volume = (0, _utils.clamp)(percentage, 0, 1); - notice.show = `${i18n.get('Volume')}: ${Number.parseInt($video.volume * 100, 10)}`; - if ($video.volume !== 0) storage.set('volume', $video.volume); - } - }); - (0, _utils.def)(art, 'muted', { - get: ()=>$video.muted, - set: (muted)=>{ - $video.muted = muted; - art.emit('muted', muted); - } - }); -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"6P64r":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _utils = require("../utils"); -var _autoOrientation = require("./autoOrientation"); -var _autoOrientationDefault = parcelHelpers.interopDefault(_autoOrientation); -var _autoPlayback = require("./autoPlayback"); -var _autoPlaybackDefault = parcelHelpers.interopDefault(_autoPlayback); -var _fastForward = require("./fastForward"); -var _fastForwardDefault = parcelHelpers.interopDefault(_fastForward); -var _lock = require("./lock"); -var _lockDefault = parcelHelpers.interopDefault(_lock); -var _miniProgressBar = require("./miniProgressBar"); -var _miniProgressBarDefault = parcelHelpers.interopDefault(_miniProgressBar); -class Plugins { - constructor(art){ - this.art = art; - this.id = 0; - const { option } = art; - if (option.miniProgressBar && !option.isLive) this.add((0, _miniProgressBarDefault.default)); - if (option.lock && (0, _utils.isMobile)) this.add((0, _lockDefault.default)); - if (option.autoPlayback && !option.isLive) this.add((0, _autoPlaybackDefault.default)); - if (option.autoOrientation && (0, _utils.isMobile)) this.add((0, _autoOrientationDefault.default)); - if (option.fastForward && (0, _utils.isMobile) && !option.isLive) this.add((0, _fastForwardDefault.default)); - for(let index = 0; index < option.plugins.length; index++)this.add(option.plugins[index]); + } + class Player { + constructor(art) { + urlMix(art); + attrMix(art); + playMix(art); + pauseMix(art); + toggleMix(art); + seekMix(art); + volumeMix(art); + currentTimeMix(art); + durationMix(art); + switchMix(art); + playbackRateMix(art); + aspectRatioMix(art); + screenshotMix(art); + fullscreenMix(art); + fullscreenWebMix(art); + pipMix(art); + loadedMix(art); + playedMix(art); + playingMix(art); + autoSizeMix(art); + rectMix(art); + flipMix(art); + miniMix(art); + posterMix(art); + autoHeightMix(art); + cssVarMix(art); + themeMix(art); + typeMix(art); + stateMix(art); + subtitleOffsetMix(art); + airplayMix(art); + qualityMix(art); + thumbnailsMix(art); + eventInit(art); + optionInit(art); } - add(plugin) { - this.id += 1; - const result = plugin.call(this.art, this.art); - if (result instanceof Promise) return result.then((res)=>this.next(plugin, res)); - else return this.next(plugin, result); - } - next(plugin, result) { - const pluginName = result && result.name || plugin.name || `plugin${this.id}`; - (0, _utils.errorHandle)(!(0, _utils.has)(this, pluginName), `Cannot add a plugin that already has the same name: ${pluginName}`); - (0, _utils.def)(this, pluginName, { - value: result - }); - return this; - } -} -exports.default = Plugins; - -},{"../utils":"gGxPm","./autoOrientation":"kQuMm","./autoPlayback":"5JFuz","./fastForward":"ae4vU","./lock":"aMHP0","./miniProgressBar":"bMAvE","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"kQuMm":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>autoOrientation); -var _utils = require("../utils"); -function autoOrientation(art) { - const { notice, constructor, template: { $player, $video } } = art; - const WEB_CLASS = 'art-auto-orientation'; - const FS_CLASS = 'art-auto-orientation-fullscreen'; + } + function autoOrientation(art) { + const { + notice, + constructor, + template: { $player, $video } + } = art; + const WEB_CLASS = "art-auto-orientation"; + const FS_CLASS = "art-auto-orientation-fullscreen"; let fsLocked = false; function applyWebRotate() { - const viewWidth = document.documentElement.clientWidth; - const viewHeight = document.documentElement.clientHeight; - (0, _utils.setStyle)($player, 'width', `${viewHeight}px`); - (0, _utils.setStyle)($player, 'height', `${viewWidth}px`); - (0, _utils.setStyle)($player, 'transform-origin', '0 0'); - (0, _utils.setStyle)($player, 'transform', `rotate(90deg) translate(0, -${viewWidth}px)`); - (0, _utils.addClass)($player, WEB_CLASS); - art.isRotate = true; - art.emit('resize'); + const viewWidth = document.documentElement.clientWidth; + const viewHeight = document.documentElement.clientHeight; + setStyle($player, "width", `${viewHeight}px`); + setStyle($player, "height", `${viewWidth}px`); + setStyle($player, "transform-origin", "0 0"); + setStyle($player, "transform", `rotate(90deg) translate(0, -${viewWidth}px)`); + addClass($player, WEB_CLASS); + art.isRotate = true; + art.emit("resize"); } function clearWebRotate() { - (0, _utils.setStyle)($player, 'width', ''); - (0, _utils.setStyle)($player, 'height', ''); - (0, _utils.setStyle)($player, 'transform-origin', ''); - (0, _utils.setStyle)($player, 'transform', ''); - (0, _utils.removeClass)($player, WEB_CLASS); - art.isRotate = false; - art.emit('resize'); + setStyle($player, "width", ""); + setStyle($player, "height", ""); + setStyle($player, "transform-origin", ""); + setStyle($player, "transform", ""); + removeClass($player, WEB_CLASS); + art.isRotate = false; + art.emit("resize"); } function needRotate() { - const { videoWidth, videoHeight } = $video; - const vw = document.documentElement.clientWidth; - const vh = document.documentElement.clientHeight; - return videoWidth > videoHeight && vw < vh || videoWidth < videoHeight && vw > vh; + const { videoWidth, videoHeight } = $video; + const vw = document.documentElement.clientWidth; + const vh = document.documentElement.clientHeight; + return videoWidth > videoHeight && vw < vh || videoWidth < videoHeight && vw > vh; } - art.on('fullscreenWeb', (state)=>{ - if (state) { - if (needRotate()) { - const delay = Number(constructor.AUTO_ORIENTATION_TIME ?? 0); - setTimeout(()=>{ - if (art.fullscreenWeb && !(0, _utils.hasClass)($player, WEB_CLASS)) applyWebRotate(); - }, delay); - } - } else if ((0, _utils.hasClass)($player, WEB_CLASS)) clearWebRotate(); - }); - art.on('fullscreen', async (state)=>{ - const canLock = !!screen?.orientation?.lock; - if (state) { - if (canLock && needRotate()) try { - const last = screen.orientation.type; - const opposite = last.startsWith('portrait') ? 'landscape' : 'portrait'; - await screen.orientation.lock(opposite); - fsLocked = true; - (0, _utils.addClass)($player, FS_CLASS); - } catch (err) { - fsLocked = false; - notice.show = err; - } - } else { - if ((0, _utils.hasClass)($player, FS_CLASS)) (0, _utils.removeClass)($player, FS_CLASS); - if (canLock && fsLocked) { - try { - screen.orientation.unlock(); - } catch {} - fsLocked = false; + art.on("fullscreenWeb", (state2) => { + if (state2) { + if (needRotate()) { + const delay = Number(constructor.AUTO_ORIENTATION_TIME ?? 0); + setTimeout(() => { + if (art.fullscreenWeb && !hasClass($player, WEB_CLASS)) { + applyWebRotate(); } + }, delay); } + } else { + if (hasClass($player, WEB_CLASS)) + clearWebRotate(); + } + }); + art.on("fullscreen", async (state2) => { + const canLock = !!screen?.orientation?.lock; + if (state2) { + if (canLock && needRotate()) { + try { + const last = screen.orientation.type; + const opposite = last.startsWith("portrait") ? "landscape" : "portrait"; + await screen.orientation.lock(opposite); + fsLocked = true; + addClass($player, FS_CLASS); + } catch (err) { + fsLocked = false; + notice.show = err; + } + } + } else { + if (hasClass($player, FS_CLASS)) { + removeClass($player, FS_CLASS); + } + if (canLock && fsLocked) { + try { + screen.orientation.unlock(); + } catch { + } + fsLocked = false; + } + } }); return { - name: 'autoOrientation', - get state () { - return (0, _utils.hasClass)($player, WEB_CLASS); - } + name: "autoOrientation", + get state() { + return hasClass($player, WEB_CLASS); + } }; -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"5JFuz":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>autoPlayback); -var _utils = require("../utils"); -function autoPlayback(art) { - const { i18n, icons, storage, constructor, proxy, template: { $poster } } = art; + } + function autoPlayback(art) { + const { + i18n, + icons, + storage, + constructor, + proxy, + template: { $poster } + } = art; const $autoPlayback = art.layers.add({ - name: 'auto-playback', - html: ` + name: "auto-playback", + html: `
` }); - const $last = (0, _utils.query)('.art-auto-playback-last', $autoPlayback); - const $jump = (0, _utils.query)('.art-auto-playback-jump', $autoPlayback); - const $close = (0, _utils.query)('.art-auto-playback-close', $autoPlayback); - (0, _utils.append)($close, icons.close); + const $last = query(".art-auto-playback-last", $autoPlayback); + const $jump = query(".art-auto-playback-jump", $autoPlayback); + const $close = query(".art-auto-playback-close", $autoPlayback); + append($close, icons.close); let timer = null; - art.on('video:timeupdate', ()=>{ - if (art.playing) { - const times = storage.get('times') || {}; - const keys = Object.keys(times); - if (keys.length > constructor.AUTO_PLAYBACK_MAX) delete times[keys[0]]; - times[art.option.id || art.option.url] = art.currentTime; - storage.set('times', times); + art.on("video:timeupdate", () => { + if (art.playing) { + const times = storage.get("times") || {}; + const keys = Object.keys(times); + if (keys.length > constructor.AUTO_PLAYBACK_MAX) { + delete times[keys[0]]; } + times[art.option.id || art.option.url] = art.currentTime; + storage.set("times", times); + } }); function init() { - const times = storage.get('times') || {}; - const currentTime = times[art.option.id || art.option.url]; - clearTimeout(timer); - (0, _utils.setStyle)($autoPlayback, 'display', 'none'); - if (currentTime && currentTime >= constructor.AUTO_PLAYBACK_MIN) { - (0, _utils.setStyle)($autoPlayback, 'display', 'flex'); - $last.textContent = `${i18n.get('Last Seen')} ${(0, _utils.secondToTime)(currentTime)}`; - $jump.textContent = i18n.get('Jump Play'); - proxy($close, 'click', ()=>{ - (0, _utils.setStyle)($autoPlayback, 'display', 'none'); - }); - proxy($jump, 'click', ()=>{ - art.seek = currentTime; - art.play(); - (0, _utils.setStyle)($poster, 'display', 'none'); - (0, _utils.setStyle)($autoPlayback, 'display', 'none'); - }); - art.once('video:timeupdate', ()=>{ - timer = setTimeout(()=>{ - (0, _utils.setStyle)($autoPlayback, 'display', 'none'); - }, constructor.AUTO_PLAYBACK_TIMEOUT); - }); - } + const times = storage.get("times") || {}; + const currentTime = times[art.option.id || art.option.url]; + clearTimeout(timer); + setStyle($autoPlayback, "display", "none"); + if (currentTime && currentTime >= constructor.AUTO_PLAYBACK_MIN) { + setStyle($autoPlayback, "display", "flex"); + $last.textContent = `${i18n.get("Last Seen")} ${secondToTime(currentTime)}`; + $jump.textContent = i18n.get("Jump Play"); + proxy($close, "click", () => { + setStyle($autoPlayback, "display", "none"); + }); + proxy($jump, "click", () => { + art.seek = currentTime; + art.play(); + setStyle($poster, "display", "none"); + setStyle($autoPlayback, "display", "none"); + }); + art.once("video:timeupdate", () => { + timer = setTimeout(() => { + setStyle($autoPlayback, "display", "none"); + }, constructor.AUTO_PLAYBACK_TIMEOUT); + }); + } } - art.on('ready', init); - art.on('restart', init); + art.on("ready", init); + art.on("restart", init); return { - name: 'auto-playback', - get times () { - return storage.get('times') || {}; - }, - clear () { - return storage.del('times'); - }, - delete (id) { - const times = storage.get('times') || {}; - delete times[id]; - storage.set('times', times); - return times; - } + name: "auto-playback", + get times() { + return storage.get("times") || {}; + }, + clear() { + return storage.del("times"); + }, + delete(id2) { + const times = storage.get("times") || {}; + delete times[id2]; + storage.set("times", times); + return times; + } }; -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"ae4vU":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>fastForward); -var _utils = require("../utils"); -function fastForward(art) { - const { constructor, proxy, template: { $player, $video } } = art; + } + function fastForward(art) { + const { + constructor, + proxy, + template: { $player, $video } + } = art; let timer = null; let isPress = false; let lastPlaybackRate = 1; - const onStart = (event)=>{ - if (event.touches.length === 1 && art.playing && !art.isLock) timer = setTimeout(()=>{ - isPress = true; - lastPlaybackRate = art.playbackRate; - art.playbackRate = constructor.FAST_FORWARD_VALUE; - (0, _utils.addClass)($player, 'art-fast-forward'); + const onStart = (event) => { + if (event.touches.length === 1 && art.playing && !art.isLock) { + timer = setTimeout(() => { + isPress = true; + lastPlaybackRate = art.playbackRate; + art.playbackRate = constructor.FAST_FORWARD_VALUE; + addClass($player, "art-fast-forward"); }, constructor.FAST_FORWARD_TIME); + } }; - const onStop = ()=>{ - clearTimeout(timer); - if (isPress) { - isPress = false; - art.playbackRate = lastPlaybackRate; - (0, _utils.removeClass)($player, 'art-fast-forward'); - } + const onStop = () => { + clearTimeout(timer); + if (isPress) { + isPress = false; + art.playbackRate = lastPlaybackRate; + removeClass($player, "art-fast-forward"); + } }; - proxy($video, 'touchstart', onStart); - art.on('document:touchmove', onStop); - art.on('document:touchend', onStop); + proxy($video, "touchstart", onStart); + art.on("document:touchmove", onStop); + art.on("document:touchend", onStop); return { - name: 'fastForward', - get state () { - return (0, _utils.hasClass)($player, 'art-fast-forward'); - } + name: "fastForward", + get state() { + return hasClass($player, "art-fast-forward"); + } }; -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"aMHP0":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>lock); -var _utils = require("../utils"); -function lock(art) { - const { layers, icons, template: { $player } } = art; + } + function lock(art) { + const { + layers, + icons, + template: { $player } + } = art; function getState() { - return (0, _utils.hasClass)($player, 'art-lock'); + return hasClass($player, "art-lock"); } function setLock() { - (0, _utils.addClass)($player, 'art-lock'); - art.isLock = true; - art.emit('lock', true); + addClass($player, "art-lock"); + art.isLock = true; + art.emit("lock", true); } function setUnlock() { - (0, _utils.removeClass)($player, 'art-lock'); - art.isLock = false; - art.emit('lock', false); + removeClass($player, "art-lock"); + art.isLock = false; + art.emit("lock", false); } layers.add({ - name: 'lock', - mounted ($el) { - const $lock = (0, _utils.append)($el, icons.lock); - const $unlock = (0, _utils.append)($el, icons.unlock); - (0, _utils.setStyle)($lock, 'display', 'none'); - art.on('lock', (state)=>{ - if (state) { - (0, _utils.setStyle)($lock, 'display', 'inline-flex'); - (0, _utils.setStyle)($unlock, 'display', 'none'); - } else { - (0, _utils.setStyle)($lock, 'display', 'none'); - (0, _utils.setStyle)($unlock, 'display', 'inline-flex'); - } - }); - }, - click () { - if (getState()) setUnlock(); - else setLock(); - } - }); - return { - name: 'lock', - get state () { - return getState(); - }, - set state (value){ - if (value) setLock(); - else setUnlock(); - } - }; -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"bMAvE":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>miniProgressBar); -var _utils = require("../utils"); -function miniProgressBar(art) { - art.on('control', (state)=>{ - if (state) (0, _utils.removeClass)(art.template.$player, 'art-mini-progress-bar'); - else (0, _utils.addClass)(art.template.$player, 'art-mini-progress-bar'); - }); - return { - name: 'mini-progress-bar' - }; -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"7ATN8":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _utils = require("../utils"); -var _component = require("../utils/component"); -var _componentDefault = parcelHelpers.interopDefault(_component); -var _aspectRatio = require("./aspectRatio"); -var _aspectRatioDefault = parcelHelpers.interopDefault(_aspectRatio); -var _flip = require("./flip"); -var _flipDefault = parcelHelpers.interopDefault(_flip); -var _playbackRate = require("./playbackRate"); -var _playbackRateDefault = parcelHelpers.interopDefault(_playbackRate); -var _subtitleOffset = require("./subtitleOffset"); -var _subtitleOffsetDefault = parcelHelpers.interopDefault(_subtitleOffset); -class Setting extends (0, _componentDefault.default) { - constructor(art){ - super(art); - const { option, controls, template: { $setting } } = art; - this.name = 'setting'; - this.$parent = $setting; - this.id = 0; - this.active = null; - this.cache = new Map(); - this.option = [ - ...this.builtin, - ...option.settings - ]; - if (option.setting) { - this.format(); - this.render(); - art.on('blur', ()=>{ - if (this.show) { - this.show = false; - this.render(); - } - }); - art.on('focus', (event)=>{ - const isControl = (0, _utils.includeFromEvent)(event, controls.setting); - const isSetting = (0, _utils.includeFromEvent)(event, this.$parent); - if (this.show && !isControl && !isSetting) { - this.show = false; - this.render(); - } - }); - art.on('resize', ()=>this.resize()); - } - } - get builtin() { - const result = []; - const { option } = this.art; - if (option.playbackRate) result.push((0, _playbackRateDefault.default)(this.art)); - if (option.aspectRatio) result.push((0, _aspectRatioDefault.default)(this.art)); - if (option.flip) result.push((0, _flipDefault.default)(this.art)); - if (option.subtitleOffset) result.push((0, _subtitleOffsetDefault.default)(this.art)); - return result; - } - traverse(callback, option = this.option) { - for(let index = 0; index < option.length; index++){ - const item = option[index]; - callback(item); - if (item.selector?.length) this.traverse(callback, item.selector); - } - } - check(target) { - if (!target) return; - target.$parent.tooltip = target.html; - this.traverse((item)=>{ - item.default = item === target; - if (item.default && item.$item) (0, _utils.inverseClass)(item.$item, 'art-current'); - }, target.$option); - this.render(target.$parents); - } - format(option = this.option, parent, parents, names = []) { - for(let index = 0; index < option.length; index++){ - const item = option[index]; - if (item?.name) { - (0, _utils.errorHandle)(!names.includes(item.name), `The [${item.name}] already exists in [setting]`); - names.push(item.name); - } else item.name = `setting-${this.id++}`; - if (!item.$formatted) { - (0, _utils.def)(item, '$parent', { - get: ()=>parent - }); - (0, _utils.def)(item, '$parents', { - get: ()=>parents - }); - (0, _utils.def)(item, '$option', { - get: ()=>option - }); - const $events = []; - (0, _utils.def)(item, '$events', { - get: ()=>$events - }); - (0, _utils.def)(item, '$formatted', { - get: ()=>true - }); - } - this.format(item.selector || [], item, option, names); - } - this.option = option; - } - find(name = '') { - let result = null; - this.traverse((item)=>{ - if (item.name === name) result = item; + name: "lock", + mounted($el) { + const $lock = append($el, icons.lock); + const $unlock = append($el, icons.unlock); + setStyle($lock, "display", "none"); + art.on("lock", (state2) => { + if (state2) { + setStyle($lock, "display", "inline-flex"); + setStyle($unlock, "display", "none"); + } else { + setStyle($lock, "display", "none"); + setStyle($unlock, "display", "inline-flex"); + } }); - return result; - } - resize() { - const { controls, constructor: { SETTING_WIDTH, SETTING_ITEM_HEIGHT }, template: { $player, $setting } } = this.art; - if (controls.setting && this.show) { - const settingWidth = this.active[0]?.$parent?.width || SETTING_WIDTH; - const { left: controlLeft, width: controlWidth } = (0, _utils.getRect)(controls.setting); - const { left: playerLeft, width: playerWidth } = (0, _utils.getRect)($player); - const settingLeft = controlLeft - playerLeft + controlWidth / 2 - settingWidth / 2; - const settingHeight = this.active === this.option ? this.active.length * SETTING_ITEM_HEIGHT : (this.active.length + 1) * SETTING_ITEM_HEIGHT; - (0, _utils.setStyle)($setting, 'height', `${settingHeight}px`); - (0, _utils.setStyle)($setting, 'width', `${settingWidth}px`); - if (this.art.isRotate || (0, _utils.isMobile)) return; - if (settingLeft + settingWidth > playerWidth) { - (0, _utils.setStyle)($setting, 'left', null); - (0, _utils.setStyle)($setting, 'right', null); - } else { - (0, _utils.setStyle)($setting, 'left', `${settingLeft}px`); - (0, _utils.setStyle)($setting, 'right', 'auto'); - } - } - } - inactivate(item) { - for(let index = 0; index < item.$events.length; index++)this.art.events.remove(item.$events[index]); - item.$events.length = 0; - } - remove(name) { - const item = this.find(name); - (0, _utils.errorHandle)(item, `Can't find [${name}] in the [setting]`); - const index = item.$option.indexOf(item); - item.$option.splice(index, 1); - this.inactivate(item); - if (item.$item) (0, _utils.remove)(item.$item); - this.render(); - } - update(target) { - const item = this.find(target.name); - if (item) { - this.inactivate(item); - Object.assign(item, target); - this.format(); - this.createItem(item, true); - this.render(); - return item; - } else return this.add(target); - } - add(item, option = this.option) { - option.push(item); - this.format(); - this.createItem(item); - this.render(); - return item; - } - createHeader(item) { - if (!this.cache.has(item.$option)) return; - const $panel = this.cache.get(item.$option); - const { proxy, icons: { arrowLeft }, constructor: { SETTING_ITEM_HEIGHT } } = this.art; - const $item = (0, _utils.createElement)('div'); - (0, _utils.setStyle)($item, 'height', `${SETTING_ITEM_HEIGHT}px`); - (0, _utils.addClass)($item, 'art-setting-item'); - (0, _utils.addClass)($item, 'art-setting-item-back'); - const $left = (0, _utils.append)($item, '
'); - const $icon = (0, _utils.createElement)('div'); - (0, _utils.addClass)($icon, 'art-setting-item-left-icon'); - (0, _utils.append)($icon, arrowLeft); - (0, _utils.append)($left, $icon); - (0, _utils.append)($left, item.$parent.html); - const event = proxy($item, 'click', ()=>this.render(item.$parents)); - item.$parent.$events.push(event); - (0, _utils.append)($panel, $item); - } - createItem(item, isUpdate = false) { - if (!this.cache.has(item.$option)) return; - const $panel = this.cache.get(item.$option); - const oldItem = item.$item; - let type = 'selector'; - if ((0, _utils.has)(item, 'switch')) type = 'switch'; - if ((0, _utils.has)(item, 'range')) type = 'range'; - if ((0, _utils.has)(item, 'onClick')) type = 'button'; - const { icons, proxy, constructor } = this.art; - const $item = (0, _utils.createElement)('div'); - (0, _utils.addClass)($item, 'art-setting-item'); - (0, _utils.setStyle)($item, 'height', `${constructor.SETTING_ITEM_HEIGHT}px`); - $item.dataset.name = item.name || ''; - $item.dataset.value = item.value || ''; - const $left = (0, _utils.append)($item, '
'); - const $right = (0, _utils.append)($item, '
'); - const $icon = (0, _utils.createElement)('div'); - (0, _utils.addClass)($icon, 'art-setting-item-left-icon'); - switch(type){ - case 'button': - case 'switch': - case 'range': - (0, _utils.append)($icon, item.icon || icons.config); - break; - case 'selector': - if (item.selector?.length) (0, _utils.append)($icon, item.icon || icons.config); - else (0, _utils.append)($icon, icons.check); - break; - default: - break; - } - (0, _utils.append)($left, $icon); - (0, _utils.def)(item, '$icon', { - configurable: true, - get: ()=>$icon - }); - (0, _utils.def)(item, 'icon', { - configurable: true, - get () { - return $icon.innerHTML; - }, - set (value) { - $icon.innerHTML = ''; - (0, _utils.append)($icon, value); - } - }); - const $html = (0, _utils.createElement)('div'); - (0, _utils.addClass)($html, 'art-setting-item-left-text'); - (0, _utils.append)($html, item.html || ''); - (0, _utils.append)($left, $html); - (0, _utils.def)(item, '$html', { - configurable: true, - get: ()=>$html - }); - (0, _utils.def)(item, 'html', { - configurable: true, - get () { - return $html.innerHTML; - }, - set (value) { - $html.innerHTML = ''; - (0, _utils.append)($html, value); - } - }); - const $tooltip = (0, _utils.createElement)('div'); - (0, _utils.addClass)($tooltip, 'art-setting-item-right-tooltip'); - (0, _utils.append)($tooltip, item.tooltip || ''); - (0, _utils.append)($right, $tooltip); - (0, _utils.def)(item, '$tooltip', { - configurable: true, - get: ()=>$tooltip - }); - (0, _utils.def)(item, 'tooltip', { - configurable: true, - get () { - return $tooltip.innerHTML; - }, - set (value) { - $tooltip.innerHTML = ''; - (0, _utils.append)($tooltip, value); - } - }); - switch(type){ - case 'switch': - { - const $switch = (0, _utils.createElement)('div'); - (0, _utils.addClass)($switch, 'art-setting-item-right-icon'); - const $switchOn = (0, _utils.append)($switch, icons.switchOn); - const $switchOff = (0, _utils.append)($switch, icons.switchOff); - (0, _utils.setStyle)(item.switch ? $switchOff : $switchOn, 'display', 'none'); - (0, _utils.append)($right, $switch); - (0, _utils.def)(item, '$switch', { - configurable: true, - get: ()=>$switch - }); - let $switchValue = item.switch; - (0, _utils.def)(item, 'switch', { - configurable: true, - get: ()=>$switchValue, - set (value) { - $switchValue = value; - if (value) { - (0, _utils.setStyle)($switchOff, 'display', 'none'); - (0, _utils.setStyle)($switchOn, 'display', null); - } else { - (0, _utils.setStyle)($switchOff, 'display', null); - (0, _utils.setStyle)($switchOn, 'display', 'none'); - } - } - }); - break; - } - case 'range': - { - const $state = (0, _utils.createElement)('div'); - (0, _utils.addClass)($state, 'art-setting-item-right-icon'); - const $range = (0, _utils.append)($state, ''); - $range.value = item.range[0]; - $range.min = item.range[1]; - $range.max = item.range[2]; - $range.step = item.range[3]; - (0, _utils.addClass)($range, 'art-setting-range'); - (0, _utils.append)($right, $state); - (0, _utils.def)(item, '$range', { - configurable: true, - get: ()=>$range - }); - let $rangeValue = [ - ...item.range - ]; - (0, _utils.def)(item, 'range', { - configurable: true, - get: ()=>$rangeValue, - set (value) { - $rangeValue = [ - ...value - ]; - $range.value = value[0]; - $range.min = value[1]; - $range.max = value[2]; - $range.step = value[3]; - } - }); - } - break; - case 'selector': - if (item.selector?.length) { - const $state = (0, _utils.createElement)('div'); - (0, _utils.addClass)($state, 'art-setting-item-right-icon'); - (0, _utils.append)($state, icons.arrowRight); - (0, _utils.append)($right, $state); - } - break; - default: - break; - } - switch(type){ - case 'switch': - if (item.onSwitch) { - const event = proxy($item, 'click', async (event)=>{ - item.switch = await item.onSwitch.call(this.art, item, $item, event); - }); - item.$events.push(event); - } - break; - case 'range': - if (item.$range) { - if (item.onRange) { - const event = proxy(item.$range, 'change', async (event)=>{ - item.range[0] = item.$range.valueAsNumber; - item.tooltip = await item.onRange.call(this.art, item, $item, event); - }); - item.$events.push(event); - } - if (item.onChange) { - const event = proxy(item.$range, 'input', async (event)=>{ - item.range[0] = item.$range.valueAsNumber; - item.tooltip = await item.onChange.call(this.art, item, $item, event); - }); - item.$events.push(event); - } - } - break; - case 'selector': - { - const event = proxy($item, 'click', async (event)=>{ - if (item.selector?.length) this.render(item.selector); - else { - this.check(item); - if (item.$parent.onSelect) item.$parent.tooltip = await item.$parent.onSelect.call(this.art, item, $item, event); - } - }); - item.$events.push(event); - if (item.default) (0, _utils.addClass)($item, 'art-current'); - } - break; - case 'button': - if (item.onClick) { - const event = proxy($item, 'click', async (event)=>{ - item.tooltip = await item.onClick.call(this.art, item, $item, event); - }); - item.$events.push(event); - } - break; - default: - break; - } - (0, _utils.def)(item, '$item', { - configurable: true, - get: ()=>$item - }); - if (isUpdate) (0, _utils.replaceElement)($item, oldItem); - else (0, _utils.append)($panel, $item); - if (item.mounted) setTimeout(()=>item.mounted.call(this.art, item.$item, item), 0); - } - render(option = this.option) { - this.active = option; - if (this.cache.has(option)) { - const $panel = this.cache.get(option); - (0, _utils.inverseClass)($panel, 'art-current'); + }, + click() { + if (getState()) { + setUnlock(); } else { - const $panel = (0, _utils.createElement)('div'); - this.cache.set(option, $panel); - (0, _utils.addClass)($panel, 'art-setting-panel'); - (0, _utils.append)(this.$parent, $panel); - (0, _utils.inverseClass)($panel, 'art-current'); - if (option[0]?.$parent) this.createHeader(option[0]); - for(let index = 0; index < option.length; index++)this.createItem(option[index]); + setLock(); } - this.resize(); + } + }); + return { + name: "lock", + get state() { + return getState(); + }, + set state(value) { + if (value) { + setLock(); + } else { + setUnlock(); + } + } + }; + } + function miniProgressBar(art) { + art.on("control", (state2) => { + if (state2) { + removeClass(art.template.$player, "art-mini-progress-bar"); + } else { + addClass(art.template.$player, "art-mini-progress-bar"); + } + }); + return { name: "mini-progress-bar" }; + } + class Plugins { + constructor(art) { + this.art = art; + this.id = 0; + const { option } = art; + if (option.miniProgressBar && !option.isLive) { + this.add(miniProgressBar); + } + if (option.lock && isMobile) { + this.add(lock); + } + if (option.autoPlayback && !option.isLive) { + this.add(autoPlayback); + } + if (option.autoOrientation && isMobile) { + this.add(autoOrientation); + } + if (option.fastForward && isMobile && !option.isLive) { + this.add(fastForward); + } + for (let index = 0; index < option.plugins.length; index++) { + this.add(option.plugins[index]); + } } -} -exports.default = Setting; - -},{"../utils":"gGxPm","../utils/component":"1wQH1","./aspectRatio":"g3wkQ","./flip":"dj3LV","./playbackRate":"33vMI","./subtitleOffset":"82BM5","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"g3wkQ":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>aspectRatio); -function aspectRatio(art) { - const { i18n, icons, constructor: { SETTING_ITEM_WIDTH, ASPECT_RATIO } } = art; + add(plugin) { + this.id += 1; + const result = plugin.call(this.art, this.art); + if (result instanceof Promise) { + return result.then((res) => this.next(plugin, res)); + } else { + return this.next(plugin, result); + } + } + next(plugin, result) { + const pluginName = result && result.name || plugin.name || `plugin${this.id}`; + errorHandle(!has(this, pluginName), `Cannot add a plugin that already has the same name: ${pluginName}`); + def(this, pluginName, { + value: result + }); + return this; + } + } + function aspectRatio(art) { + const { + i18n, + icons, + constructor: { SETTING_ITEM_WIDTH, ASPECT_RATIO } + } = art; function getI18n(value) { - return value === 'default' ? i18n.get('Default') : value; + return value === "default" ? i18n.get("Default") : value; } function update() { - const target = art.setting.find(`aspect-ratio-${art.aspectRatio}`); - art.setting.check(target); + const target = art.setting.find(`aspect-ratio-${art.aspectRatio}`); + art.setting.check(target); } return { - width: SETTING_ITEM_WIDTH, - name: 'aspect-ratio', - html: i18n.get('Aspect Ratio'), - icon: icons.aspectRatio, - tooltip: getI18n(art.aspectRatio), - selector: ASPECT_RATIO.map((item)=>{ - return { - value: item, - name: `aspect-ratio-${item}`, - default: item === art.aspectRatio, - html: getI18n(item) - }; - }), - onSelect (item) { - art.aspectRatio = item.value; - return item.html; - }, - mounted: ()=>{ - update(); - art.on('aspectRatio', ()=>update()); - } + width: SETTING_ITEM_WIDTH, + name: "aspect-ratio", + html: i18n.get("Aspect Ratio"), + icon: icons.aspectRatio, + tooltip: getI18n(art.aspectRatio), + selector: ASPECT_RATIO.map((item) => { + return { + value: item, + name: `aspect-ratio-${item}`, + default: item === art.aspectRatio, + html: getI18n(item) + }; + }), + onSelect(item) { + art.aspectRatio = item.value; + return item.html; + }, + mounted: () => { + update(); + art.on("aspectRatio", () => update()); + } }; -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"dj3LV":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>flip); -var _utils = require("../utils"); -function flip(art) { - const { i18n, icons, constructor: { SETTING_ITEM_WIDTH, FLIP } } = art; + } + function flip(art) { + const { + i18n, + icons, + constructor: { SETTING_ITEM_WIDTH, FLIP } + } = art; function getI18n(value) { - return i18n.get((0, _utils.capitalize)(value)); + return i18n.get(capitalize(value)); } function update() { - const target = art.setting.find(`flip-${art.flip}`); - art.setting.check(target); + const target = art.setting.find(`flip-${art.flip}`); + art.setting.check(target); } return { - width: SETTING_ITEM_WIDTH, - name: 'flip', - html: i18n.get('Video Flip'), - tooltip: getI18n(art.flip), - icon: icons.flip, - selector: FLIP.map((item)=>{ - return { - value: item, - name: `flip-${item}`, - default: item === art.flip, - html: getI18n(item) - }; - }), - onSelect (item) { - art.flip = item.value; - return item.html; - }, - mounted: ()=>{ - update(); - art.on('flip', ()=>update()); - } + width: SETTING_ITEM_WIDTH, + name: "flip", + html: i18n.get("Video Flip"), + tooltip: getI18n(art.flip), + icon: icons.flip, + selector: FLIP.map((item) => { + return { + value: item, + name: `flip-${item}`, + default: item === art.flip, + html: getI18n(item) + }; + }), + onSelect(item) { + art.flip = item.value; + return item.html; + }, + mounted: () => { + update(); + art.on("flip", () => update()); + } }; -} - -},{"../utils":"gGxPm","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"33vMI":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>playbackRate); -function playbackRate(art) { - const { i18n, icons, constructor: { SETTING_ITEM_WIDTH, PLAYBACK_RATE } } = art; + } + function playbackRate(art) { + const { + i18n, + icons, + constructor: { SETTING_ITEM_WIDTH, PLAYBACK_RATE } + } = art; function getI18n(value) { - return value === 1.0 ? i18n.get('Normal') : value.toFixed(1); + return value === 1 ? i18n.get("Normal") : value.toFixed(1); } function update() { - const target = art.setting.find(`playback-rate-${art.playbackRate}`); - art.setting.check(target); + const target = art.setting.find(`playback-rate-${art.playbackRate}`); + art.setting.check(target); } return { - width: SETTING_ITEM_WIDTH, - name: 'playback-rate', - html: i18n.get('Play Speed'), - tooltip: getI18n(art.playbackRate), - icon: icons.playbackRate, - selector: PLAYBACK_RATE.map((item)=>{ - return { - value: item, - name: `playback-rate-${item}`, - default: item === art.playbackRate, - html: getI18n(item) - }; - }), - onSelect (item) { - art.playbackRate = item.value; - return item.html; - }, - mounted: ()=>{ - update(); - art.on('video:ratechange', ()=>update()); - } + width: SETTING_ITEM_WIDTH, + name: "playback-rate", + html: i18n.get("Play Speed"), + tooltip: getI18n(art.playbackRate), + icon: icons.playbackRate, + selector: PLAYBACK_RATE.map((item) => { + return { + value: item, + name: `playback-rate-${item}`, + default: item === art.playbackRate, + html: getI18n(item) + }; + }), + onSelect(item) { + art.playbackRate = item.value; + return item.html; + }, + mounted: () => { + update(); + art.on("video:ratechange", () => update()); + } }; -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"82BM5":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -parcelHelpers.export(exports, "default", ()=>subtitleOffset); -function subtitleOffset(art) { + } + function subtitleOffset(art) { const { i18n, icons, constructor } = art; return { - width: constructor.SETTING_ITEM_WIDTH, - name: 'subtitle-offset', - html: i18n.get('Subtitle Offset'), - icon: icons.subtitle, - tooltip: '0s', - range: [ - 0, - -10, - 10, - 0.1 - ], - onChange (item) { - art.subtitleOffset = item.range[0]; - return `${item.range[0]}s`; - }, - mounted: (_, item)=>{ - art.on('subtitleOffset', (value)=>{ - item.$range.value = value; - item.tooltip = `${value}s`; - }); - } + width: constructor.SETTING_ITEM_WIDTH, + name: "subtitle-offset", + html: i18n.get("Subtitle Offset"), + icon: icons.subtitle, + tooltip: "0s", + range: [0, -10, 10, 0.1], + onChange(item) { + art.subtitleOffset = item.range[0]; + return `${item.range[0]}s`; + }, + mounted: (_, item) => { + art.on("subtitleOffset", (value) => { + item.$range.value = value; + item.tooltip = `${value}s`; + }); + } }; -} - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"grHII":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -class Storage { - constructor(){ - this.name = 'artplayer_settings'; - this.settings = {}; + } + class Setting extends Component { + constructor(art) { + super(art); + const { + option, + controls, + template: { $setting } + } = art; + this.name = "setting"; + this.$parent = $setting; + this.id = 0; + this.active = null; + this.cache = /* @__PURE__ */ new Map(); + this.option = [...this.builtin, ...option.settings]; + if (option.setting) { + this.format(); + this.render(); + art.on("blur", () => { + if (this.show) { + this.show = false; + this.render(); + } + }); + art.on("focus", (event) => { + const isControl = includeFromEvent(event, controls.setting); + const isSetting = includeFromEvent(event, this.$parent); + if (this.show && !isControl && !isSetting) { + this.show = false; + this.render(); + } + }); + art.on("resize", () => this.resize()); + } + } + get builtin() { + const result = []; + const { option } = this.art; + if (option.playbackRate) { + result.push(playbackRate(this.art)); + } + if (option.aspectRatio) { + result.push(aspectRatio(this.art)); + } + if (option.flip) { + result.push(flip(this.art)); + } + if (option.subtitleOffset) { + result.push(subtitleOffset(this.art)); + } + return result; + } + traverse(callback, option = this.option) { + for (let index = 0; index < option.length; index++) { + const item = option[index]; + callback(item); + if (item.selector?.length) { + this.traverse(callback, item.selector); + } + } + } + check(target) { + if (!target) { + return; + } + target.$parent.tooltip = target.html; + this.traverse((item) => { + item.default = item === target; + if (item.default && item.$item) { + inverseClass(item.$item, "art-current"); + } + }, target.$option); + this.render(target.$parents); + } + format(option = this.option, parent, parents, names = []) { + for (let index = 0; index < option.length; index++) { + const item = option[index]; + if (item?.name) { + errorHandle(!names.includes(item.name), `The [${item.name}] already exists in [setting]`); + names.push(item.name); + } else { + item.name = `setting-${this.id++}`; + } + if (!item.$formatted) { + def(item, "$parent", { + get: () => parent + }); + def(item, "$parents", { + get: () => parents + }); + def(item, "$option", { + get: () => option + }); + const $events = []; + def(item, "$events", { + get: () => $events + }); + def(item, "$formatted", { + get: () => true + }); + } + this.format(item.selector || [], item, option, names); + } + this.option = option; + } + find(name = "") { + let result = null; + this.traverse((item) => { + if (item.name === name) { + result = item; + } + }); + return result; + } + resize() { + const { + controls, + constructor: { SETTING_WIDTH, SETTING_ITEM_HEIGHT }, + template: { $player, $setting } + } = this.art; + if (controls.setting && this.show) { + const settingWidth = this.active[0]?.$parent?.width || SETTING_WIDTH; + const { left: controlLeft, width: controlWidth } = getRect(controls.setting); + const { left: playerLeft, width: playerWidth } = getRect($player); + const settingLeft = controlLeft - playerLeft + controlWidth / 2 - settingWidth / 2; + const settingHeight = this.active === this.option ? this.active.length * SETTING_ITEM_HEIGHT : (this.active.length + 1) * SETTING_ITEM_HEIGHT; + setStyle($setting, "height", `${settingHeight}px`); + setStyle($setting, "width", `${settingWidth}px`); + if (this.art.isRotate || isMobile) + return; + if (settingLeft + settingWidth > playerWidth) { + setStyle($setting, "left", null); + setStyle($setting, "right", null); + } else { + setStyle($setting, "left", `${settingLeft}px`); + setStyle($setting, "right", "auto"); + } + } + } + inactivate(item) { + for (let index = 0; index < item.$events.length; index++) { + this.art.events.remove(item.$events[index]); + } + item.$events.length = 0; + } + remove(name) { + const item = this.find(name); + errorHandle(item, `Can't find [${name}] in the [setting]`); + const index = item.$option.indexOf(item); + item.$option.splice(index, 1); + this.inactivate(item); + if (item.$item) + remove(item.$item); + this.render(); + } + update(target) { + const item = this.find(target.name); + if (item) { + this.inactivate(item); + Object.assign(item, target); + this.format(); + this.createItem(item, true); + this.render(); + return item; + } else { + return this.add(target); + } + } + add(item, option = this.option) { + option.push(item); + this.format(); + this.createItem(item); + this.render(); + return item; + } + createHeader(item) { + if (!this.cache.has(item.$option)) + return; + const $panel = this.cache.get(item.$option); + const { + proxy, + icons: { arrowLeft: arrowLeft2 }, + constructor: { SETTING_ITEM_HEIGHT } + } = this.art; + const $item = createElement("div"); + setStyle($item, "height", `${SETTING_ITEM_HEIGHT}px`); + addClass($item, "art-setting-item"); + addClass($item, "art-setting-item-back"); + const $left = append($item, '
'); + const $icon = createElement("div"); + addClass($icon, "art-setting-item-left-icon"); + append($icon, arrowLeft2); + append($left, $icon); + append($left, item.$parent.html); + const event = proxy($item, "click", () => this.render(item.$parents)); + item.$parent.$events.push(event); + append($panel, $item); + } + createItem(item, isUpdate = false) { + if (!this.cache.has(item.$option)) + return; + const $panel = this.cache.get(item.$option); + const oldItem = item.$item; + let type = "selector"; + if (has(item, "switch")) { + type = "switch"; + } + if (has(item, "range")) { + type = "range"; + } + if (has(item, "onClick")) { + type = "button"; + } + const { icons, proxy, constructor } = this.art; + const $item = createElement("div"); + addClass($item, "art-setting-item"); + setStyle($item, "height", `${constructor.SETTING_ITEM_HEIGHT}px`); + $item.dataset.name = item.name || ""; + $item.dataset.value = item.value || ""; + const $left = append($item, '
'); + const $right = append($item, '
'); + const $icon = createElement("div"); + addClass($icon, "art-setting-item-left-icon"); + switch (type) { + case "button": + case "switch": + case "range": + append($icon, item.icon || icons.config); + break; + case "selector": + if (item.selector?.length) { + append($icon, item.icon || icons.config); + } else { + append($icon, icons.check); + } + break; + } + append($left, $icon); + def(item, "$icon", { + configurable: true, + get: () => $icon + }); + def(item, "icon", { + configurable: true, + get() { + return $icon.innerHTML; + }, + set(value) { + $icon.innerHTML = ""; + append($icon, value); + } + }); + const $html = createElement("div"); + addClass($html, "art-setting-item-left-text"); + append($html, item.html || ""); + append($left, $html); + def(item, "$html", { + configurable: true, + get: () => $html + }); + def(item, "html", { + configurable: true, + get() { + return $html.innerHTML; + }, + set(value) { + $html.innerHTML = ""; + append($html, value); + } + }); + const $tooltip = createElement("div"); + addClass($tooltip, "art-setting-item-right-tooltip"); + append($tooltip, item.tooltip || ""); + append($right, $tooltip); + def(item, "$tooltip", { + configurable: true, + get: () => $tooltip + }); + def(item, "tooltip", { + configurable: true, + get() { + return $tooltip.innerHTML; + }, + set(value) { + $tooltip.innerHTML = ""; + append($tooltip, value); + } + }); + switch (type) { + case "switch": { + const $switch = createElement("div"); + addClass($switch, "art-setting-item-right-icon"); + const $switchOn = append($switch, icons.switchOn); + const $switchOff = append($switch, icons.switchOff); + setStyle(item.switch ? $switchOff : $switchOn, "display", "none"); + append($right, $switch); + def(item, "$switch", { + configurable: true, + get: () => $switch + }); + let $switchValue = item.switch; + def(item, "switch", { + configurable: true, + get: () => $switchValue, + set(value) { + $switchValue = value; + if (value) { + setStyle($switchOff, "display", "none"); + setStyle($switchOn, "display", null); + } else { + setStyle($switchOff, "display", null); + setStyle($switchOn, "display", "none"); + } + } + }); + break; + } + case "range": + { + const $state = createElement("div"); + addClass($state, "art-setting-item-right-icon"); + const $range = append($state, ''); + $range.value = item.range[0]; + $range.min = item.range[1]; + $range.max = item.range[2]; + $range.step = item.range[3]; + addClass($range, "art-setting-range"); + append($right, $state); + def(item, "$range", { + configurable: true, + get: () => $range + }); + let $rangeValue = [...item.range]; + def(item, "range", { + configurable: true, + get: () => $rangeValue, + set(value) { + $rangeValue = [...value]; + $range.value = value[0]; + $range.min = value[1]; + $range.max = value[2]; + $range.step = value[3]; + } + }); + } + break; + case "selector": + if (item.selector?.length) { + const $state = createElement("div"); + addClass($state, "art-setting-item-right-icon"); + append($state, icons.arrowRight); + append($right, $state); + } + break; + } + switch (type) { + case "switch": { + if (item.onSwitch) { + const event = proxy($item, "click", async (event2) => { + item.switch = await item.onSwitch.call(this.art, item, $item, event2); + }); + item.$events.push(event); + } + break; + } + case "range": { + if (item.$range) { + if (item.onRange) { + const event = proxy(item.$range, "change", async (event2) => { + item.range[0] = item.$range.valueAsNumber; + item.tooltip = await item.onRange.call(this.art, item, $item, event2); + }); + item.$events.push(event); + } + if (item.onChange) { + const event = proxy(item.$range, "input", async (event2) => { + item.range[0] = item.$range.valueAsNumber; + item.tooltip = await item.onChange.call(this.art, item, $item, event2); + }); + item.$events.push(event); + } + } + break; + } + case "selector": + { + const event = proxy($item, "click", async (event2) => { + if (item.selector?.length) { + this.render(item.selector); + } else { + this.check(item); + if (item.$parent.onSelect) { + item.$parent.tooltip = await item.$parent.onSelect.call(this.art, item, $item, event2); + } + } + }); + item.$events.push(event); + if (item.default) { + addClass($item, "art-current"); + } + } + break; + case "button": + if (item.onClick) { + const event = proxy($item, "click", async (event2) => { + item.tooltip = await item.onClick.call(this.art, item, $item, event2); + }); + item.$events.push(event); + } + break; + } + def(item, "$item", { + configurable: true, + get: () => $item + }); + if (isUpdate) { + replaceElement($item, oldItem); + } else { + append($panel, $item); + } + if (item.mounted) { + setTimeout(() => item.mounted.call(this.art, item.$item, item), 0); + } + } + render(option = this.option) { + this.active = option; + if (this.cache.has(option)) { + const $panel = this.cache.get(option); + inverseClass($panel, "art-current"); + } else { + const $panel = createElement("div"); + this.cache.set(option, $panel); + addClass($panel, "art-setting-panel"); + append(this.$parent, $panel); + inverseClass($panel, "art-current"); + if (option[0]?.$parent) { + this.createHeader(option[0]); + } + for (let index = 0; index < option.length; index++) { + this.createItem(option[index]); + } + } + this.resize(); + } + } + class Storage { + constructor() { + this.name = "artplayer_settings"; + this.settings = {}; } get(key) { - try { - const storage = JSON.parse(window.localStorage.getItem(this.name)) || {}; - return key ? storage[key] : storage; - } catch { - return key ? this.settings[key] : this.settings; - } + try { + const storage = JSON.parse(window.localStorage.getItem(this.name)) || {}; + return key ? storage[key] : storage; + } catch { + return key ? this.settings[key] : this.settings; + } } set(key, value) { - try { - const storage = Object.assign({}, this.get(), { - [key]: value - }); - window.localStorage.setItem(this.name, JSON.stringify(storage)); - } catch { - this.settings[key] = value; - } + try { + const storage = Object.assign({}, this.get(), { + [key]: value + }); + window.localStorage.setItem(this.name, JSON.stringify(storage)); + } catch { + this.settings[key] = value; + } } del(key) { - try { - const storage = this.get(); - delete storage[key]; - window.localStorage.setItem(this.name, JSON.stringify(storage)); - } catch { - delete this.settings[key]; - } + try { + const storage = this.get(); + delete storage[key]; + window.localStorage.setItem(this.name, JSON.stringify(storage)); + } catch { + delete this.settings[key]; + } } clear() { - try { - window.localStorage.removeItem(this.name); - } catch { - this.settings = {}; - } + try { + window.localStorage.removeItem(this.name); + } catch { + this.settings = {}; + } } -} -exports.default = Storage; - -},{"@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"hxr0l":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _optionValidator = require("option-validator"); -var _optionValidatorDefault = parcelHelpers.interopDefault(_optionValidator); -var _scheme = require("./scheme"); -var _schemeDefault = parcelHelpers.interopDefault(_scheme); -var _utils = require("./utils"); -var _component = require("./utils/component"); -var _componentDefault = parcelHelpers.interopDefault(_component); -class Subtitle extends (0, _componentDefault.default) { - constructor(art){ - super(art); - this.name = 'subtitle'; - this.option = null; - this.destroyEvent = ()=>null; - this.init(art.option.subtitle); - let lastState = false; - art.on('video:timeupdate', ()=>{ - if (!this.url) return; - const state = this.art.template.$video.webkitDisplayingFullscreen; - if (typeof state !== 'boolean') return; - if (state !== lastState) { - lastState = state; - this.createTrack(state ? 'subtitles' : 'metadata', this.url); - } - }); + } + const style = ".art-video-player {\n --art-theme: #f00;\n --art-font-color: #fff;\n --art-background-color: #000;\n --art-text-shadow-color: rgba(0, 0, 0, 0.5);\n --art-transition-duration: 0.2s;\n --art-padding: 10px;\n --art-border-radius: 3px;\n --art-progress-height: 6px;\n --art-progress-color: rgba(255, 255, 255, 0.25);\n --art-progress-top-gap: 8px;\n --art-hover-color: rgba(255, 255, 255, 0.25);\n --art-loaded-color: rgba(255, 255, 255, 0.25);\n --art-state-size: 80px;\n --art-state-opacity: 0.8;\n --art-bottom-height: 100px;\n --art-bottom-offset: 20px;\n --art-bottom-gap: 5px;\n --art-highlight-width: 8px;\n --art-highlight-color: rgba(255, 255, 255, 0.5);\n --art-control-height: 46px;\n --art-control-opacity: 0.75;\n --art-control-icon-size: 36px;\n --art-control-icon-scale: 1.1;\n --art-volume-height: 120px;\n --art-volume-handle-size: 14px;\n --art-lock-size: 36px;\n --art-indicator-scale: 0;\n --art-indicator-size: 16px;\n --art-fullscreen-web-index: 9999;\n --art-settings-icon-size: 24px;\n --art-settings-max-height: 300px;\n --art-selector-max-height: 300px;\n --art-contextmenus-min-width: 250px;\n --art-subtitle-font-size: 20px;\n --art-subtitle-gap: 5px;\n --art-subtitle-bottom: 15px;\n --art-subtitle-border: #000;\n --art-widget-background: rgba(0, 0, 0, 0.85);\n --art-tip-background: rgba(0, 0, 0, 0.7);\n --art-scrollbar-size: 4px;\n --art-scrollbar-background: rgba(255, 255, 255, 0.25);\n --art-scrollbar-background-hover: rgba(255, 255, 255, 0.5);\n --art-mini-progress-height: 2px;\n}\n.art-bg-cover {\n background-position: center center;\n background-repeat: no-repeat;\n background-size: cover;\n}\n.art-bottom-gradient {\n background-image: linear-gradient(to top, #000, rgba(0, 0, 0, 0.4), transparent);\n background-repeat: repeat-x;\n background-position: center bottom;\n}\n.art-backdrop-filter {\n -webkit-backdrop-filter: saturate(180%) blur(20px);\n backdrop-filter: saturate(180%) blur(20px);\n background-color: rgba(0, 0, 0, 0.75) !important;\n}\n.art-truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.art-video-player {\n position: relative;\n margin: 0 auto;\n width: 100%;\n height: 100%;\n outline: 0;\n zoom: 1;\n padding: 0;\n text-align: left;\n direction: ltr;\n font-size: 14px;\n line-height: 1.3;\n user-select: none;\n box-sizing: border-box;\n color: var(--art-font-color);\n background-color: var(--art-background-color);\n text-shadow: 0 0 2px var(--art-text-shadow-color);\n font-family: PingFang SC, Helvetica Neue, Microsoft YaHei, Roboto, Arial, sans-serif;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n -ms-high-contrast-adjust: none;\n}\n.art-video-player *,\n.art-video-player *::before,\n.art-video-player *::after {\n box-sizing: border-box;\n}\n.art-video-player ::-webkit-scrollbar {\n width: var(--art-scrollbar-size);\n height: var(--art-scrollbar-size);\n}\n.art-video-player ::-webkit-scrollbar-thumb {\n background-color: var(--art-scrollbar-background);\n}\n.art-video-player ::-webkit-scrollbar-thumb:hover {\n background-color: var(--art-scrollbar-background-hover);\n}\n.art-video-player img {\n max-width: 100%;\n vertical-align: top;\n}\n.art-video-player svg {\n fill: var(--art-font-color);\n}\n.art-video-player a {\n color: var(--art-font-color);\n text-decoration: none;\n}\n.art-icon {\n line-height: 1;\n display: flex;\n justify-content: center;\n align-items: center;\n}\n.art-video-player.art-backdrop .art-contextmenus,\n.art-video-player.art-backdrop .art-info,\n.art-video-player.art-backdrop .art-settings,\n.art-video-player.art-backdrop .art-layer-auto-playback,\n.art-video-player.art-backdrop .art-selector-list,\n.art-video-player.art-backdrop .art-volume-inner {\n -webkit-backdrop-filter: saturate(180%) blur(20px);\n backdrop-filter: saturate(180%) blur(20px);\n background-color: rgba(0, 0, 0, 0.75) !important;\n}\n.art-video {\n position: absolute;\n inset: 0;\n z-index: 10;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n.art-poster {\n position: absolute;\n inset: 0;\n z-index: 11;\n width: 100%;\n height: 100%;\n background-position: center center;\n background-repeat: no-repeat;\n background-size: cover;\n pointer-events: none;\n}\n.art-video-player .art-subtitle {\n display: none;\n justify-content: center;\n align-items: center;\n flex-direction: column;\n position: absolute;\n z-index: 20;\n width: 100%;\n padding: 0 5%;\n text-align: center;\n pointer-events: none;\n gap: var(--art-subtitle-gap);\n bottom: var(--art-subtitle-bottom);\n font-size: var(--art-subtitle-font-size);\n transition: bottom var(--art-transition-duration) ease;\n text-shadow: var(--art-subtitle-border) 1px 0 1px, var(--art-subtitle-border) 0 1px 1px, var(--art-subtitle-border) -1px 0 1px, var(--art-subtitle-border) 0 -1px 1px, var(--art-subtitle-border) 1px 1px 1px, var(--art-subtitle-border) -1px -1px 1px, var(--art-subtitle-border) 1px -1px 1px, var(--art-subtitle-border) -1px 1px 1px;\n}\n.art-video-player.art-subtitle-show .art-subtitle {\n display: flex;\n}\n.art-video-player.art-control-show .art-subtitle {\n bottom: calc(var(--art-control-height) + var(--art-subtitle-bottom));\n}\n.art-danmuku {\n position: absolute;\n inset: 0;\n z-index: 30;\n width: 100%;\n height: 100%;\n pointer-events: none;\n overflow: hidden;\n}\n.art-video-player .art-layers {\n position: absolute;\n inset: 0;\n z-index: 40;\n width: 100%;\n height: 100%;\n display: none;\n pointer-events: none;\n}\n.art-video-player .art-layers .art-layer {\n pointer-events: auto;\n}\n.art-video-player.art-layer-show .art-layers {\n display: flex;\n}\n.art-video-player .art-mask {\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n inset: 0;\n z-index: 50;\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n.art-video-player .art-mask .art-state {\n display: flex;\n justify-content: center;\n align-items: center;\n opacity: 0;\n transform: scale(2);\n width: var(--art-state-size);\n height: var(--art-state-size);\n transition: all var(--art-transition-duration) ease;\n}\n.art-video-player.art-mask-show .art-state {\n cursor: pointer;\n pointer-events: auto;\n opacity: var(--art-state-opacity);\n transform: scale(1);\n}\n.art-video-player.art-loading-show .art-state {\n display: none;\n}\n.art-video-player .art-loading {\n display: none;\n justify-content: center;\n align-items: center;\n position: absolute;\n inset: 0;\n z-index: 70;\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n.art-video-player.art-loading-show .art-loading {\n display: flex;\n}\n.art-video-player.art-loading-show .art-mask {\n display: none;\n}\n.art-video-player .art-bottom {\n position: absolute;\n inset: 0;\n z-index: 60;\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n justify-content: flex-end;\n opacity: 0;\n overflow: hidden;\n pointer-events: none;\n padding: 0 var(--art-padding);\n transition: all var(--art-transition-duration) ease;\n background-size: 100% var(--art-bottom-height);\n background-image: linear-gradient(to top, #000, rgba(0, 0, 0, 0.4), transparent);\n background-repeat: repeat-x;\n background-position: center bottom;\n}\n.art-video-player .art-bottom .art-controls,\n.art-video-player .art-bottom .art-progress {\n transform: translateY(var(--art-bottom-offset));\n transition: transform var(--art-transition-duration) ease;\n}\n.art-video-player.art-control-show .art-bottom,\n.art-video-player.art-hover .art-bottom {\n opacity: 1;\n}\n.art-video-player.art-control-show .art-bottom .art-controls,\n.art-video-player.art-hover .art-bottom .art-controls,\n.art-video-player.art-control-show .art-bottom .art-progress,\n.art-video-player.art-hover .art-bottom .art-progress {\n transform: translateY(0);\n}\n.art-bottom .art-progress {\n position: relative;\n z-index: 0;\n pointer-events: auto;\n padding-top: var(--art-progress-top-gap);\n padding-bottom: var(--art-bottom-gap);\n}\n.art-bottom .art-progress .art-control-progress {\n position: relative;\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n height: var(--art-progress-height);\n}\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner {\n display: flex;\n align-items: center;\n position: relative;\n height: 50%;\n width: 100%;\n transition: height var(--art-transition-duration) ease;\n background-color: var(--art-progress-color);\n}\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-hover {\n position: absolute;\n inset: 0;\n z-index: 0;\n width: 100%;\n height: 100%;\n width: 0%;\n background-color: var(--art-hover-color);\n}\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-loaded {\n position: absolute;\n inset: 0;\n z-index: 10;\n width: 100%;\n height: 100%;\n width: 0%;\n background-color: var(--art-loaded-color);\n}\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-played {\n position: absolute;\n inset: 0;\n z-index: 20;\n width: 100%;\n height: 100%;\n width: 0%;\n background-color: var(--art-theme);\n}\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight {\n position: absolute;\n inset: 0;\n z-index: 30;\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-highlight span {\n position: absolute;\n inset: 0;\n z-index: 0;\n width: 100%;\n height: 100%;\n right: auto;\n pointer-events: auto;\n width: var(--art-highlight-width) !important;\n transform: translateX(calc(var(--art-highlight-width) / -2));\n background-color: var(--art-highlight-color);\n}\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator {\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n z-index: 40;\n left: 0;\n border-radius: 50%;\n width: var(--art-indicator-size);\n height: var(--art-indicator-size);\n transform: scale(var(--art-indicator-scale));\n margin-left: calc(var(--art-indicator-size) / -2);\n transition: transform var(--art-transition-duration) ease;\n}\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator .art-icon {\n width: 100%;\n height: 100%;\n pointer-events: none;\n}\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:hover {\n transform: scale(1.2) !important;\n}\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator:active {\n transform: scale(1) !important;\n}\n.art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip {\n transform-origin: bottom center;\n transform: scale(0.5);\n opacity: 0;\n position: absolute;\n z-index: 50;\n top: -25px;\n left: 0;\n padding: 3px 5px;\n line-height: 1;\n font-size: 12px;\n border-radius: var(--art-border-radius);\n white-space: nowrap;\n background-color: var(--art-tip-background);\n transition: transform var(--art-transition-duration) ease, opacity var(--art-transition-duration) ease;\n}\n.art-bottom .art-progress .art-control-progress:hover .art-control-progress-inner {\n height: 100%;\n}\n.art-bottom .art-progress .art-control-thumbnails {\n transform-origin: bottom center;\n transform: scale(0.5);\n opacity: 0;\n position: absolute;\n bottom: calc(var(--art-bottom-gap) + 10px);\n left: 0;\n border-radius: var(--art-border-radius);\n pointer-events: none;\n background-color: var(--art-widget-background);\n transition: transform var(--art-transition-duration) ease, opacity var(--art-transition-duration) ease;\n box-shadow: 0 1px 3px 0 rgba(0, 0, 0, 0.2), 0 1px 2px -1px rgba(0, 0, 0, 0.2);\n}\n.art-bottom:hover .art-progress .art-control-progress .art-control-progress-inner .art-progress-indicator {\n transform: scale(1);\n}\n.art-progress-hover .art-bottom .art-progress .art-control-progress .art-control-progress-inner .art-progress-tip,\n.art-progress-hover .art-bottom .art-progress .art-control-thumbnails {\n transform: scale(1);\n opacity: 1;\n}\n.art-video-player .art-controls {\n position: relative;\n z-index: 10;\n pointer-events: auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n height: var(--art-control-height);\n}\n.art-video-player .art-controls .art-controls-left,\n.art-video-player .art-controls .art-controls-right {\n display: flex;\n height: 100%;\n}\n.art-video-player .art-controls .art-controls-center {\n display: none;\n justify-content: center;\n align-items: center;\n flex: 1;\n height: 100%;\n padding: 0 10px;\n}\n.art-video-player .art-controls .art-controls-right {\n justify-content: flex-end;\n}\n.art-video-player .art-controls .art-control {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n cursor: pointer;\n white-space: nowrap;\n opacity: var(--art-control-opacity);\n min-height: var(--art-control-height);\n min-width: var(--art-control-height);\n transition: opacity var(--art-transition-duration) ease;\n}\n.art-video-player .art-controls .art-control .art-icon {\n height: var(--art-control-icon-size);\n width: var(--art-control-icon-size);\n transform: scale(var(--art-control-icon-scale));\n transition: transform var(--art-transition-duration) ease;\n}\n.art-video-player .art-controls .art-control .art-icon:active {\n transform: scale(calc(var(--art-control-icon-scale) * 0.8));\n}\n.art-video-player .art-controls .art-control:hover {\n opacity: 1;\n}\n.art-control-volume {\n position: relative;\n}\n.art-control-volume .art-volume-panel {\n display: flex;\n justify-content: center;\n align-items: center;\n position: absolute;\n left: 0;\n right: 0;\n padding: 0 5px;\n font-size: 12px;\n text-align: center;\n cursor: default;\n opacity: 0;\n transform: translateY(10px);\n pointer-events: none;\n bottom: var(--art-control-height);\n width: var(--art-control-height);\n height: var(--art-volume-height);\n transition: all var(--art-transition-duration) ease;\n}\n.art-control-volume .art-volume-panel .art-volume-inner {\n display: flex;\n flex-direction: column;\n align-items: center;\n gap: 10px;\n height: 100%;\n width: 100%;\n padding: 10px 0 12px;\n border-radius: var(--art-border-radius);\n background-color: var(--art-widget-background);\n}\n.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider {\n flex: 1;\n width: 100%;\n display: flex;\n cursor: pointer;\n position: relative;\n justify-content: center;\n}\n.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle {\n position: relative;\n display: flex;\n justify-content: center;\n width: 2px;\n border-radius: var(--art-border-radius);\n overflow: hidden;\n background-color: rgba(255, 255, 255, 0.25);\n}\n.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-handle .art-volume-loaded {\n position: absolute;\n inset: 0;\n z-index: 0;\n width: 100%;\n height: 100%;\n background-color: var(--art-theme);\n}\n.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider .art-volume-indicator {\n position: absolute;\n width: var(--art-volume-handle-size);\n height: var(--art-volume-handle-size);\n margin-top: calc(var(--art-volume-handle-size) / -2);\n flex-shrink: 0;\n transform: scale(1);\n border-radius: 100%;\n background-color: var(--art-theme);\n transition: transform var(--art-transition-duration) ease;\n}\n.art-control-volume .art-volume-panel .art-volume-inner .art-volume-slider:active .art-volume-indicator {\n transform: scale(0.9);\n}\n.art-control-volume:hover .art-volume-panel {\n opacity: 1;\n transform: translateY(0);\n pointer-events: auto;\n}\n.art-video-player .art-notice {\n display: none;\n position: absolute;\n inset: 0;\n z-index: 80;\n width: 100%;\n height: 100%;\n height: auto;\n bottom: auto;\n padding: var(--art-padding);\n pointer-events: none;\n}\n.art-video-player .art-notice .art-notice-inner {\n display: inline-flex;\n padding: 5px;\n line-height: 1;\n border-radius: var(--art-border-radius);\n background-color: var(--art-tip-background);\n}\n.art-video-player.art-notice-show .art-notice {\n display: flex;\n}\n.art-video-player .art-contextmenus {\n display: none;\n flex-direction: column;\n position: absolute;\n z-index: 120;\n padding: 5px 0;\n border-radius: var(--art-border-radius);\n font-size: 12px;\n background-color: var(--art-widget-background);\n min-width: var(--art-contextmenus-min-width);\n}\n.art-video-player .art-contextmenus .art-contextmenu {\n cursor: pointer;\n display: flex;\n padding: 10px 15px;\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n.art-video-player .art-contextmenus .art-contextmenu span {\n padding: 0 8px;\n}\n.art-video-player .art-contextmenus .art-contextmenu span:hover,\n.art-video-player .art-contextmenus .art-contextmenu span.art-current {\n color: var(--art-theme);\n}\n.art-video-player .art-contextmenus .art-contextmenu:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.art-video-player .art-contextmenus .art-contextmenu:last-child {\n border-bottom: none;\n}\n.art-video-player.art-contextmenu-show .art-contextmenus {\n display: flex;\n}\n.art-video-player .art-settings {\n display: none;\n flex-direction: column;\n position: absolute;\n z-index: 90;\n left: auto;\n overflow-y: auto;\n overflow-x: hidden;\n border-radius: var(--art-border-radius);\n max-height: var(--art-settings-max-height);\n right: var(--art-padding);\n bottom: var(--art-control-height);\n transition: all var(--art-transition-duration) ease;\n background-color: var(--art-widget-background);\n}\n.art-video-player .art-settings .art-setting-panel {\n display: none;\n flex-direction: column;\n}\n.art-video-player .art-settings .art-setting-panel.art-current {\n display: flex;\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 0 5px;\n cursor: pointer;\n overflow: hidden;\n transition: background-color var(--art-transition-duration) ease;\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current {\n color: var(--art-theme);\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-icon-check {\n visibility: hidden;\n height: 15px;\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item.art-current .art-icon-check {\n visibility: visible;\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left {\n display: flex;\n justify-content: center;\n align-items: center;\n flex-shrink: 0;\n gap: 5px;\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-left .art-setting-item-left-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n height: var(--art-settings-icon-size);\n width: var(--art-settings-icon-size);\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right {\n display: flex;\n justify-content: center;\n align-items: center;\n gap: 5px;\n font-size: 12px;\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-tooltip {\n white-space: nowrap;\n color: rgba(255, 255, 255, 0.5);\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-item-right-icon {\n display: flex;\n justify-content: center;\n align-items: center;\n min-width: 32px;\n height: 24px;\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item .art-setting-item-right .art-setting-range {\n height: 3px;\n width: 80px;\n outline: none;\n appearance: none;\n background-color: rgba(255, 255, 255, 0.2);\n}\n.art-video-player .art-settings .art-setting-panel .art-setting-item-back {\n border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n.art-video-player.art-setting-show .art-settings {\n display: flex;\n}\n.art-video-player .art-info {\n display: none;\n position: absolute;\n left: var(--art-padding);\n top: var(--art-padding);\n z-index: 100;\n padding: 10px;\n font-size: 12px;\n border-radius: var(--art-border-radius);\n background-color: var(--art-widget-background);\n}\n.art-video-player .art-info .art-info-panel {\n display: flex;\n flex-direction: column;\n gap: 5px;\n}\n.art-video-player .art-info .art-info-panel .art-info-item {\n display: flex;\n align-items: center;\n gap: 5px;\n}\n.art-video-player .art-info .art-info-panel .art-info-item .art-info-title {\n width: 100px;\n text-align: right;\n}\n.art-video-player .art-info .art-info-panel .art-info-item .art-info-content {\n width: 250px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n user-select: all;\n}\n.art-video-player .art-info .art-info-close {\n position: absolute;\n top: 5px;\n right: 5px;\n cursor: pointer;\n}\n.art-video-player.art-info-show .art-info {\n display: flex;\n}\n.art-hide-cursor * {\n cursor: none !important;\n}\n.art-video-player[data-aspect-ratio] {\n overflow: hidden;\n}\n.art-video-player[data-aspect-ratio] .art-video {\n object-fit: fill;\n box-sizing: content-box;\n}\n.art-fullscreen {\n --art-progress-height: 8px;\n --art-indicator-size: 20px;\n --art-control-height: 60px;\n --art-control-icon-scale: 1.3;\n}\n.art-fullscreen-web {\n --art-progress-height: 8px;\n --art-indicator-size: 20px;\n --art-control-height: 60px;\n --art-control-icon-scale: 1.3;\n position: fixed;\n inset: 0;\n z-index: var(--art-fullscreen-web-index);\n width: 100%;\n height: 100%;\n}\n.art-mini-popup {\n position: fixed;\n z-index: 9999;\n width: 320px;\n height: 180px;\n background: #000;\n border-radius: var(--art-border-radius);\n cursor: move;\n user-select: none;\n overflow: hidden;\n transition: opacity 0.2s ease;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.5);\n}\n.art-mini-popup svg {\n fill: #fff;\n}\n.art-mini-popup .art-video {\n pointer-events: none;\n}\n.art-mini-popup .art-mini-close {\n position: absolute;\n z-index: 20;\n right: 10px;\n top: 10px;\n cursor: pointer;\n opacity: 0;\n transition: opacity 0.2s ease;\n}\n.art-mini-popup .art-mini-state {\n position: absolute;\n inset: 0;\n z-index: 30;\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n pointer-events: none;\n opacity: 0;\n transition: opacity 0.2s ease;\n background-color: rgba(0, 0, 0, 0.25);\n}\n.art-mini-popup .art-mini-state .art-icon {\n opacity: 0.75;\n cursor: pointer;\n transform: scale(3);\n pointer-events: auto;\n transition: transform 0.2s ease;\n}\n.art-mini-popup .art-mini-state .art-icon:active {\n transform: scale(2.5);\n}\n.art-mini-popup.art-mini-dragging {\n opacity: 0.9;\n}\n.art-mini-popup:hover .art-mini-close,\n.art-mini-popup:hover .art-mini-state {\n opacity: 1;\n}\n.art-video-player[data-flip='horizontal'] .art-video {\n transform: scaleX(-1);\n}\n.art-video-player[data-flip='vertical'] .art-video {\n transform: scaleY(-1);\n}\n.art-video-player .art-layer-lock {\n display: none;\n justify-content: center;\n align-items: center;\n position: absolute;\n top: 50%;\n border-radius: 50%;\n transform: translateY(-50%);\n height: var(--art-lock-size);\n width: var(--art-lock-size);\n left: var(--art-padding);\n background-color: var(--art-tip-background);\n}\n.art-video-player .art-layer-auto-playback {\n display: none;\n gap: 10px;\n align-items: center;\n position: absolute;\n border-radius: var(--art-border-radius);\n padding: 10px;\n line-height: 1;\n left: var(--art-padding);\n bottom: calc(var(--art-control-height) + var(--art-bottom-gap) + 10px);\n background-color: var(--art-widget-background);\n}\n.art-video-player .art-layer-auto-playback .art-auto-playback-close {\n display: flex;\n justify-content: center;\n align-items: center;\n cursor: pointer;\n}\n.art-video-player .art-layer-auto-playback .art-auto-playback-close svg {\n width: 15px;\n height: 15px;\n fill: var(--art-theme);\n}\n.art-video-player .art-layer-auto-playback .art-auto-playback-jump {\n color: var(--art-theme);\n cursor: pointer;\n}\n.art-video-player.art-lock .art-subtitle {\n bottom: var(--art-subtitle-bottom) !important;\n}\n.art-video-player.art-mini-progress-bar .art-bottom,\n.art-video-player.art-lock .art-bottom {\n opacity: 1;\n padding: 0;\n background-image: none;\n}\n.art-video-player.art-mini-progress-bar .art-bottom .art-controls,\n.art-video-player.art-lock .art-bottom .art-controls,\n.art-video-player.art-mini-progress-bar .art-bottom .art-progress,\n.art-video-player.art-lock .art-bottom .art-progress {\n transform: translateY(calc(var(--art-control-height) + var(--art-bottom-gap) + var(--art-progress-height) / 4));\n}\n.art-video-player.art-mini-progress-bar .art-bottom .art-progress-indicator,\n.art-video-player.art-lock .art-bottom .art-progress-indicator {\n display: none !important;\n}\n.art-video-player.art-control-show .art-layer-lock {\n display: flex;\n}\n.art-control-selector {\n position: relative;\n display: flex;\n justify-content: center;\n}\n.art-control-selector .art-selector-list {\n display: flex;\n flex-direction: column;\n align-items: center;\n text-align: center;\n position: absolute;\n border-radius: var(--art-border-radius);\n overflow-y: auto;\n overflow-x: hidden;\n opacity: 0;\n transform: translateY(10px);\n pointer-events: none;\n bottom: var(--art-control-height);\n max-height: var(--art-selector-max-height);\n background-color: var(--art-widget-background);\n transition: all var(--art-transition-duration) ease;\n}\n.art-control-selector .art-selector-list .art-selector-item {\n display: flex;\n justify-content: center;\n align-items: center;\n width: 100%;\n padding: 10px 15px;\n flex-shrink: 0;\n line-height: 1;\n}\n.art-control-selector .art-selector-list .art-selector-item:hover {\n background-color: rgba(255, 255, 255, 0.1);\n}\n.art-control-selector .art-selector-list .art-selector-item:hover,\n.art-control-selector .art-selector-list .art-selector-item.art-current {\n color: var(--art-theme);\n}\n.art-control-selector:hover .art-selector-list {\n opacity: 1;\n transform: translateY(0);\n pointer-events: auto;\n}\n.art-video-player {\n /*! Hint.css - v2.7.0 - 2021-10-01\n * https://kushagra.dev/lab/hint/\n * Copyright (c) 2021 Kushagra Gour */\n /*-------------------------------------*\\\n HINT.css - A CSS tooltip library\n \\*-------------------------------------*/\n /**\n * HINT.css is a tooltip library made in pure CSS.\n *\n * Source: https://github.com/chinchang/hint.css\n * Demo: http://kushagragour.in/lab/hint/\n *\n */\n /**\n * source: hint-core.scss\n *\n * Defines the basic styling for the tooltip.\n * Each tooltip is made of 2 parts:\n * 1) body (:after)\n * 2) arrow (:before)\n *\n * Classes added:\n * 1) hint\n */\n /**\n * source: hint-position.scss\n *\n * Defines the positoning logic for the tooltips.\n *\n * Classes added:\n * 1) hint--top\n * 2) hint--bottom\n * 3) hint--left\n * 4) hint--right\n */\n /**\n * set default color for tooltip arrows\n */\n /**\n * top tooltip\n */\n /**\n * bottom tooltip\n */\n /**\n * right tooltip\n */\n /**\n * left tooltip\n */\n /**\n * top-left tooltip\n */\n /**\n * top-right tooltip\n */\n /**\n * bottom-left tooltip\n */\n /**\n * bottom-right tooltip\n */\n /**\n * source: hint-sizes.scss\n *\n * Defines width restricted tooltips that can span\n * across multiple lines.\n *\n * Classes added:\n * 1) hint--small\n * 2) hint--medium\n * 3) hint--large\n *\n */\n /**\n * source: hint-theme.scss\n *\n * Defines basic theme for tooltips.\n *\n */\n /**\n * source: hint-color-types.scss\n *\n * Contains tooltips of various types based on color differences.\n *\n * Classes added:\n * 1) hint--error\n * 2) hint--warning\n * 3) hint--info\n * 4) hint--success\n *\n */\n /**\n * Error\n */\n /**\n * Warning\n */\n /**\n * Info\n */\n /**\n * Success\n */\n /**\n * source: hint-always.scss\n *\n * Defines a persisted tooltip which shows always.\n *\n * Classes added:\n * 1) hint--always\n *\n */\n /**\n * source: hint-rounded.scss\n *\n * Defines rounded corner tooltips.\n *\n * Classes added:\n * 1) hint--rounded\n *\n */\n /**\n * source: hint-effects.scss\n *\n * Defines various transition effects for the tooltips.\n *\n * Classes added:\n * 1) hint--no-animate\n * 2) hint--bounce\n *\n */\n}\n.art-video-player [class*='hint--'] {\n position: relative;\n display: inline-block;\n font-style: normal;\n /**\n * tooltip arrow\n */\n /**\n * tooltip body\n */\n}\n.art-video-player [class*='hint--']:before,\n.art-video-player [class*='hint--']:after {\n position: absolute;\n -webkit-transform: translate3d(0, 0, 0);\n -moz-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n visibility: hidden;\n opacity: 0;\n z-index: 1000000;\n pointer-events: none;\n -webkit-transition: 0.3s ease;\n -moz-transition: 0.3s ease;\n transition: 0.3s ease;\n -webkit-transition-delay: 0ms;\n -moz-transition-delay: 0ms;\n transition-delay: 0ms;\n}\n.art-video-player [class*='hint--']:hover:before,\n.art-video-player [class*='hint--']:hover:after {\n visibility: visible;\n opacity: 1;\n}\n.art-video-player [class*='hint--']:hover:before,\n.art-video-player [class*='hint--']:hover:after {\n -webkit-transition-delay: 100ms;\n -moz-transition-delay: 100ms;\n transition-delay: 100ms;\n}\n.art-video-player [class*='hint--']:before {\n content: '';\n position: absolute;\n background: transparent;\n border: 6px solid transparent;\n z-index: 1000001;\n}\n.art-video-player [class*='hint--']:after {\n background: #000000;\n color: white;\n padding: 8px 10px;\n font-size: 12px;\n font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n line-height: 12px;\n white-space: nowrap;\n}\n.art-video-player [class*='hint--'][aria-label]:after {\n content: attr(aria-label);\n}\n.art-video-player [class*='hint--'][data-hint]:after {\n content: attr(data-hint);\n}\n.art-video-player [aria-label='']:before,\n.art-video-player [aria-label='']:after,\n.art-video-player [data-hint='']:before,\n.art-video-player [data-hint='']:after {\n display: none !important;\n}\n.art-video-player .hint--top-left:before {\n border-top-color: #000000;\n}\n.art-video-player .hint--top-right:before {\n border-top-color: #000000;\n}\n.art-video-player .hint--top:before {\n border-top-color: #000000;\n}\n.art-video-player .hint--bottom-left:before {\n border-bottom-color: #000000;\n}\n.art-video-player .hint--bottom-right:before {\n border-bottom-color: #000000;\n}\n.art-video-player .hint--bottom:before {\n border-bottom-color: #000000;\n}\n.art-video-player .hint--left:before {\n border-left-color: #000000;\n}\n.art-video-player .hint--right:before {\n border-right-color: #000000;\n}\n.art-video-player .hint--top:before {\n margin-bottom: -11px;\n}\n.art-video-player .hint--top:before,\n.art-video-player .hint--top:after {\n bottom: 100%;\n left: 50%;\n}\n.art-video-player .hint--top:before {\n left: calc(50% - 6px);\n}\n.art-video-player .hint--top:after {\n -webkit-transform: translateX(-50%);\n -moz-transform: translateX(-50%);\n transform: translateX(-50%);\n}\n.art-video-player .hint--top:hover:before {\n -webkit-transform: translateY(-8px);\n -moz-transform: translateY(-8px);\n transform: translateY(-8px);\n}\n.art-video-player .hint--top:hover:after {\n -webkit-transform: translateX(-50%) translateY(-8px);\n -moz-transform: translateX(-50%) translateY(-8px);\n transform: translateX(-50%) translateY(-8px);\n}\n.art-video-player .hint--bottom:before {\n margin-top: -11px;\n}\n.art-video-player .hint--bottom:before,\n.art-video-player .hint--bottom:after {\n top: 100%;\n left: 50%;\n}\n.art-video-player .hint--bottom:before {\n left: calc(50% - 6px);\n}\n.art-video-player .hint--bottom:after {\n -webkit-transform: translateX(-50%);\n -moz-transform: translateX(-50%);\n transform: translateX(-50%);\n}\n.art-video-player .hint--bottom:hover:before {\n -webkit-transform: translateY(8px);\n -moz-transform: translateY(8px);\n transform: translateY(8px);\n}\n.art-video-player .hint--bottom:hover:after {\n -webkit-transform: translateX(-50%) translateY(8px);\n -moz-transform: translateX(-50%) translateY(8px);\n transform: translateX(-50%) translateY(8px);\n}\n.art-video-player .hint--right:before {\n margin-left: -11px;\n margin-bottom: -6px;\n}\n.art-video-player .hint--right:after {\n margin-bottom: -14px;\n}\n.art-video-player .hint--right:before,\n.art-video-player .hint--right:after {\n left: 100%;\n bottom: 50%;\n}\n.art-video-player .hint--right:hover:before {\n -webkit-transform: translateX(8px);\n -moz-transform: translateX(8px);\n transform: translateX(8px);\n}\n.art-video-player .hint--right:hover:after {\n -webkit-transform: translateX(8px);\n -moz-transform: translateX(8px);\n transform: translateX(8px);\n}\n.art-video-player .hint--left:before {\n margin-right: -11px;\n margin-bottom: -6px;\n}\n.art-video-player .hint--left:after {\n margin-bottom: -14px;\n}\n.art-video-player .hint--left:before,\n.art-video-player .hint--left:after {\n right: 100%;\n bottom: 50%;\n}\n.art-video-player .hint--left:hover:before {\n -webkit-transform: translateX(-8px);\n -moz-transform: translateX(-8px);\n transform: translateX(-8px);\n}\n.art-video-player .hint--left:hover:after {\n -webkit-transform: translateX(-8px);\n -moz-transform: translateX(-8px);\n transform: translateX(-8px);\n}\n.art-video-player .hint--top-left:before {\n margin-bottom: -11px;\n}\n.art-video-player .hint--top-left:before,\n.art-video-player .hint--top-left:after {\n bottom: 100%;\n left: 50%;\n}\n.art-video-player .hint--top-left:before {\n left: calc(50% - 6px);\n}\n.art-video-player .hint--top-left:after {\n -webkit-transform: translateX(-100%);\n -moz-transform: translateX(-100%);\n transform: translateX(-100%);\n}\n.art-video-player .hint--top-left:after {\n margin-left: 12px;\n}\n.art-video-player .hint--top-left:hover:before {\n -webkit-transform: translateY(-8px);\n -moz-transform: translateY(-8px);\n transform: translateY(-8px);\n}\n.art-video-player .hint--top-left:hover:after {\n -webkit-transform: translateX(-100%) translateY(-8px);\n -moz-transform: translateX(-100%) translateY(-8px);\n transform: translateX(-100%) translateY(-8px);\n}\n.art-video-player .hint--top-right:before {\n margin-bottom: -11px;\n}\n.art-video-player .hint--top-right:before,\n.art-video-player .hint--top-right:after {\n bottom: 100%;\n left: 50%;\n}\n.art-video-player .hint--top-right:before {\n left: calc(50% - 6px);\n}\n.art-video-player .hint--top-right:after {\n -webkit-transform: translateX(0);\n -moz-transform: translateX(0);\n transform: translateX(0);\n}\n.art-video-player .hint--top-right:after {\n margin-left: -12px;\n}\n.art-video-player .hint--top-right:hover:before {\n -webkit-transform: translateY(-8px);\n -moz-transform: translateY(-8px);\n transform: translateY(-8px);\n}\n.art-video-player .hint--top-right:hover:after {\n -webkit-transform: translateY(-8px);\n -moz-transform: translateY(-8px);\n transform: translateY(-8px);\n}\n.art-video-player .hint--bottom-left:before {\n margin-top: -11px;\n}\n.art-video-player .hint--bottom-left:before,\n.art-video-player .hint--bottom-left:after {\n top: 100%;\n left: 50%;\n}\n.art-video-player .hint--bottom-left:before {\n left: calc(50% - 6px);\n}\n.art-video-player .hint--bottom-left:after {\n -webkit-transform: translateX(-100%);\n -moz-transform: translateX(-100%);\n transform: translateX(-100%);\n}\n.art-video-player .hint--bottom-left:after {\n margin-left: 12px;\n}\n.art-video-player .hint--bottom-left:hover:before {\n -webkit-transform: translateY(8px);\n -moz-transform: translateY(8px);\n transform: translateY(8px);\n}\n.art-video-player .hint--bottom-left:hover:after {\n -webkit-transform: translateX(-100%) translateY(8px);\n -moz-transform: translateX(-100%) translateY(8px);\n transform: translateX(-100%) translateY(8px);\n}\n.art-video-player .hint--bottom-right:before {\n margin-top: -11px;\n}\n.art-video-player .hint--bottom-right:before,\n.art-video-player .hint--bottom-right:after {\n top: 100%;\n left: 50%;\n}\n.art-video-player .hint--bottom-right:before {\n left: calc(50% - 6px);\n}\n.art-video-player .hint--bottom-right:after {\n -webkit-transform: translateX(0);\n -moz-transform: translateX(0);\n transform: translateX(0);\n}\n.art-video-player .hint--bottom-right:after {\n margin-left: -12px;\n}\n.art-video-player .hint--bottom-right:hover:before {\n -webkit-transform: translateY(8px);\n -moz-transform: translateY(8px);\n transform: translateY(8px);\n}\n.art-video-player .hint--bottom-right:hover:after {\n -webkit-transform: translateY(8px);\n -moz-transform: translateY(8px);\n transform: translateY(8px);\n}\n.art-video-player .hint--small:after,\n.art-video-player .hint--medium:after,\n.art-video-player .hint--large:after {\n white-space: normal;\n line-height: 1.4em;\n word-wrap: break-word;\n}\n.art-video-player .hint--small:after {\n width: 80px;\n}\n.art-video-player .hint--medium:after {\n width: 150px;\n}\n.art-video-player .hint--large:after {\n width: 300px;\n}\n.art-video-player [class*='hint--'] {\n /**\n * tooltip body\n */\n}\n.art-video-player [class*='hint--']:after {\n text-shadow: 0 -1px 0px black;\n box-shadow: 4px 4px 8px rgba(0, 0, 0, 0.3);\n}\n.art-video-player .hint--error:after {\n background-color: #b34e4d;\n text-shadow: 0 -1px 0px #592726;\n}\n.art-video-player .hint--error.hint--top-left:before {\n border-top-color: #b34e4d;\n}\n.art-video-player .hint--error.hint--top-right:before {\n border-top-color: #b34e4d;\n}\n.art-video-player .hint--error.hint--top:before {\n border-top-color: #b34e4d;\n}\n.art-video-player .hint--error.hint--bottom-left:before {\n border-bottom-color: #b34e4d;\n}\n.art-video-player .hint--error.hint--bottom-right:before {\n border-bottom-color: #b34e4d;\n}\n.art-video-player .hint--error.hint--bottom:before {\n border-bottom-color: #b34e4d;\n}\n.art-video-player .hint--error.hint--left:before {\n border-left-color: #b34e4d;\n}\n.art-video-player .hint--error.hint--right:before {\n border-right-color: #b34e4d;\n}\n.art-video-player .hint--warning:after {\n background-color: #c09854;\n text-shadow: 0 -1px 0px #6c5328;\n}\n.art-video-player .hint--warning.hint--top-left:before {\n border-top-color: #c09854;\n}\n.art-video-player .hint--warning.hint--top-right:before {\n border-top-color: #c09854;\n}\n.art-video-player .hint--warning.hint--top:before {\n border-top-color: #c09854;\n}\n.art-video-player .hint--warning.hint--bottom-left:before {\n border-bottom-color: #c09854;\n}\n.art-video-player .hint--warning.hint--bottom-right:before {\n border-bottom-color: #c09854;\n}\n.art-video-player .hint--warning.hint--bottom:before {\n border-bottom-color: #c09854;\n}\n.art-video-player .hint--warning.hint--left:before {\n border-left-color: #c09854;\n}\n.art-video-player .hint--warning.hint--right:before {\n border-right-color: #c09854;\n}\n.art-video-player .hint--info:after {\n background-color: #3986ac;\n text-shadow: 0 -1px 0px #1a3c4d;\n}\n.art-video-player .hint--info.hint--top-left:before {\n border-top-color: #3986ac;\n}\n.art-video-player .hint--info.hint--top-right:before {\n border-top-color: #3986ac;\n}\n.art-video-player .hint--info.hint--top:before {\n border-top-color: #3986ac;\n}\n.art-video-player .hint--info.hint--bottom-left:before {\n border-bottom-color: #3986ac;\n}\n.art-video-player .hint--info.hint--bottom-right:before {\n border-bottom-color: #3986ac;\n}\n.art-video-player .hint--info.hint--bottom:before {\n border-bottom-color: #3986ac;\n}\n.art-video-player .hint--info.hint--left:before {\n border-left-color: #3986ac;\n}\n.art-video-player .hint--info.hint--right:before {\n border-right-color: #3986ac;\n}\n.art-video-player .hint--success:after {\n background-color: #458746;\n text-shadow: 0 -1px 0px #1a321a;\n}\n.art-video-player .hint--success.hint--top-left:before {\n border-top-color: #458746;\n}\n.art-video-player .hint--success.hint--top-right:before {\n border-top-color: #458746;\n}\n.art-video-player .hint--success.hint--top:before {\n border-top-color: #458746;\n}\n.art-video-player .hint--success.hint--bottom-left:before {\n border-bottom-color: #458746;\n}\n.art-video-player .hint--success.hint--bottom-right:before {\n border-bottom-color: #458746;\n}\n.art-video-player .hint--success.hint--bottom:before {\n border-bottom-color: #458746;\n}\n.art-video-player .hint--success.hint--left:before {\n border-left-color: #458746;\n}\n.art-video-player .hint--success.hint--right:before {\n border-right-color: #458746;\n}\n.art-video-player .hint--always:after,\n.art-video-player .hint--always:before {\n opacity: 1;\n visibility: visible;\n}\n.art-video-player .hint--always.hint--top:before {\n -webkit-transform: translateY(-8px);\n -moz-transform: translateY(-8px);\n transform: translateY(-8px);\n}\n.art-video-player .hint--always.hint--top:after {\n -webkit-transform: translateX(-50%) translateY(-8px);\n -moz-transform: translateX(-50%) translateY(-8px);\n transform: translateX(-50%) translateY(-8px);\n}\n.art-video-player .hint--always.hint--top-left:before {\n -webkit-transform: translateY(-8px);\n -moz-transform: translateY(-8px);\n transform: translateY(-8px);\n}\n.art-video-player .hint--always.hint--top-left:after {\n -webkit-transform: translateX(-100%) translateY(-8px);\n -moz-transform: translateX(-100%) translateY(-8px);\n transform: translateX(-100%) translateY(-8px);\n}\n.art-video-player .hint--always.hint--top-right:before {\n -webkit-transform: translateY(-8px);\n -moz-transform: translateY(-8px);\n transform: translateY(-8px);\n}\n.art-video-player .hint--always.hint--top-right:after {\n -webkit-transform: translateY(-8px);\n -moz-transform: translateY(-8px);\n transform: translateY(-8px);\n}\n.art-video-player .hint--always.hint--bottom:before {\n -webkit-transform: translateY(8px);\n -moz-transform: translateY(8px);\n transform: translateY(8px);\n}\n.art-video-player .hint--always.hint--bottom:after {\n -webkit-transform: translateX(-50%) translateY(8px);\n -moz-transform: translateX(-50%) translateY(8px);\n transform: translateX(-50%) translateY(8px);\n}\n.art-video-player .hint--always.hint--bottom-left:before {\n -webkit-transform: translateY(8px);\n -moz-transform: translateY(8px);\n transform: translateY(8px);\n}\n.art-video-player .hint--always.hint--bottom-left:after {\n -webkit-transform: translateX(-100%) translateY(8px);\n -moz-transform: translateX(-100%) translateY(8px);\n transform: translateX(-100%) translateY(8px);\n}\n.art-video-player .hint--always.hint--bottom-right:before {\n -webkit-transform: translateY(8px);\n -moz-transform: translateY(8px);\n transform: translateY(8px);\n}\n.art-video-player .hint--always.hint--bottom-right:after {\n -webkit-transform: translateY(8px);\n -moz-transform: translateY(8px);\n transform: translateY(8px);\n}\n.art-video-player .hint--always.hint--left:before {\n -webkit-transform: translateX(-8px);\n -moz-transform: translateX(-8px);\n transform: translateX(-8px);\n}\n.art-video-player .hint--always.hint--left:after {\n -webkit-transform: translateX(-8px);\n -moz-transform: translateX(-8px);\n transform: translateX(-8px);\n}\n.art-video-player .hint--always.hint--right:before {\n -webkit-transform: translateX(8px);\n -moz-transform: translateX(8px);\n transform: translateX(8px);\n}\n.art-video-player .hint--always.hint--right:after {\n -webkit-transform: translateX(8px);\n -moz-transform: translateX(8px);\n transform: translateX(8px);\n}\n.art-video-player .hint--rounded:after {\n border-radius: 4px;\n}\n.art-video-player .hint--no-animate:before,\n.art-video-player .hint--no-animate:after {\n -webkit-transition-duration: 0ms;\n -moz-transition-duration: 0ms;\n transition-duration: 0ms;\n}\n.art-video-player .hint--bounce:before,\n.art-video-player .hint--bounce:after {\n -webkit-transition: opacity 0.3s ease, visibility 0.3s ease, -webkit-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);\n -moz-transition: opacity 0.3s ease, visibility 0.3s ease, -moz-transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);\n transition: opacity 0.3s ease, visibility 0.3s ease, transform 0.3s cubic-bezier(0.71, 1.7, 0.77, 1.24);\n}\n.art-video-player .hint--no-shadow:before,\n.art-video-player .hint--no-shadow:after {\n text-shadow: initial;\n box-shadow: initial;\n}\n.art-video-player .hint--no-arrow:before {\n display: none;\n}\n.art-video-player.art-mobile {\n --art-bottom-gap: 10px;\n --art-control-height: 38px;\n --art-control-icon-scale: 1;\n --art-state-size: 60px;\n --art-settings-max-height: 180px;\n --art-selector-max-height: 180px;\n --art-indicator-scale: 1;\n --art-control-opacity: 1;\n}\n.art-video-player.art-mobile .art-controls-left {\n margin-left: calc(var(--art-padding) / -1);\n}\n.art-video-player.art-mobile .art-controls-right {\n margin-right: calc(var(--art-padding) / -1);\n}\n"; + class Subtitle extends Component { + constructor(art) { + super(art); + this.name = "subtitle"; + this.option = null; + this.destroyEvent = () => null; + this.init(art.option.subtitle); + let lastState = false; + art.on("video:timeupdate", () => { + if (!this.url) + return; + const state2 = this.art.template.$video.webkitDisplayingFullscreen; + if (typeof state2 !== "boolean") + return; + if (state2 !== lastState) { + lastState = state2; + this.createTrack(state2 ? "subtitles" : "metadata", this.url); + } + }); } get url() { - return this.art.template.$track.src; + return this.art.template.$track.src; } set url(url) { - this.switch(url); + this.switch(url); } get textTrack() { - return this.art.template.$video?.textTracks?.[0]; + return this.art.template.$video?.textTracks?.[0]; } get activeCues() { - if (!this.textTrack) return []; - return Array.from(this.textTrack.activeCues); + if (!this.textTrack) + return []; + return Array.from(this.textTrack.activeCues); } get cues() { - if (!this.textTrack) return []; - return Array.from(this.textTrack.cues); + if (!this.textTrack) + return []; + return Array.from(this.textTrack.cues); } style(key, value) { - const { $subtitle } = this.art.template; - if (typeof key === 'object') return (0, _utils.setStyles)($subtitle, key); - return (0, _utils.setStyle)($subtitle, key, value); + const { $subtitle } = this.art.template; + if (typeof key === "object") { + return setStyles($subtitle, key); + } + return setStyle($subtitle, key, value); } update() { - const { option: { subtitle }, template: { $subtitle } } = this.art; - $subtitle.innerHTML = ''; - if (!this.activeCues.length) return; - this.art.emit('subtitleBeforeUpdate', this.activeCues); - $subtitle.innerHTML = this.activeCues.map((cue, index)=>cue.text.split(/\r?\n/).filter((line)=>line.trim()).map((line)=>`
- ${subtitle.escape ? (0, _utils.escape)(line) : line} -
`).join('')).join(''); - this.art.emit('subtitleAfterUpdate', this.activeCues); + const { + option: { subtitle }, + template: { $subtitle } + } = this.art; + $subtitle.innerHTML = ""; + if (!this.activeCues.length) + return; + this.art.emit("subtitleBeforeUpdate", this.activeCues); + $subtitle.innerHTML = this.activeCues.map( + (cue, index) => cue.text.split(/\r?\n/).filter((line) => line.trim()).map( + (line) => `
+ ${subtitle.escape ? escape(line) : line} +
` + ).join("") + ).join(""); + this.art.emit("subtitleAfterUpdate", this.activeCues); } async switch(url, newOption = {}) { - const { i18n, notice, option } = this.art; - const subtitleOption = { - ...option.subtitle, - ...newOption, - url - }; - const subUrl = await this.init(subtitleOption); - if (newOption.name) notice.show = `${i18n.get('Switch Subtitle')}: ${newOption.name}`; - return subUrl; + const { i18n, notice, option } = this.art; + const subtitleOption = { ...option.subtitle, ...newOption, url }; + const subUrl = await this.init(subtitleOption); + if (newOption.name) { + notice.show = `${i18n.get("Switch Subtitle")}: ${newOption.name}`; + } + return subUrl; } createTrack(kind, url) { - const { template, proxy, option } = this.art; - const { $video, $track } = template; - const $newTrack = (0, _utils.createElement)('track'); - $newTrack.default = true; - $newTrack.kind = kind; - $newTrack.src = url; - $newTrack.label = option.subtitle.name || 'Artplayer'; - $newTrack.track.mode = 'hidden'; - $newTrack.onload = ()=>{ - this.art.emit('subtitleLoad', this.cues, this.option); - }; - this.art.events.remove(this.destroyEvent); - $track.onload = null; - (0, _utils.remove)($track); - (0, _utils.append)($video, $newTrack); - template.$track = $newTrack; - this.destroyEvent = proxy(this.textTrack, 'cuechange', ()=>this.update()); + const { template, proxy, option } = this.art; + const { $video, $track } = template; + const $newTrack = createElement("track"); + $newTrack.default = true; + $newTrack.kind = kind; + $newTrack.src = url; + $newTrack.label = option.subtitle.name || "Artplayer"; + $newTrack.track.mode = "hidden"; + $newTrack.onload = () => { + this.art.emit("subtitleLoad", this.cues, this.option); + }; + this.art.events.remove(this.destroyEvent); + $track.onload = null; + remove($track); + append($video, $newTrack); + template.$track = $newTrack; + this.destroyEvent = proxy(this.textTrack, "cuechange", () => this.update()); } async init(subtitleOption) { - const { notice, template: { $subtitle } } = this.art; - if (!this.textTrack) return null; - (0, _optionValidatorDefault.default)(subtitleOption, (0, _schemeDefault.default).subtitle); - if (!subtitleOption.url) return; - this.option = subtitleOption; - this.style(subtitleOption.style); - return fetch(subtitleOption.url).then((response)=>response.arrayBuffer()).then((buffer)=>{ - const decoder = new TextDecoder(subtitleOption.encoding); - const text = decoder.decode(buffer); - switch(subtitleOption.type || (0, _utils.getExt)(subtitleOption.url)){ - case 'srt': - { - const vtt = (0, _utils.srtToVtt)(text); - const vttNew = subtitleOption.onVttLoad(vtt); - return (0, _utils.vttToBlob)(vttNew); - } - case 'ass': - { - const vtt = (0, _utils.assToVtt)(text); - const vttNew = subtitleOption.onVttLoad(vtt); - return (0, _utils.vttToBlob)(vttNew); - } - case 'vtt': - { - const vttNew = subtitleOption.onVttLoad(text); - return (0, _utils.vttToBlob)(vttNew); - } - default: - return subtitleOption.url; - } - }).then((subUrl)=>{ - $subtitle.innerHTML = ''; - if (this.url === subUrl) return subUrl; - URL.revokeObjectURL(this.url); - this.createTrack('metadata', subUrl); - return subUrl; - }).catch((err)=>{ - $subtitle.innerHTML = ''; - notice.show = err; - throw err; - }); - } -} -exports.default = Subtitle; - -},{"option-validator":"9hUEm","./scheme":"8YPbR","./utils":"gGxPm","./utils/component":"1wQH1","@parcel/transformer-js/src/esmodule-helpers.js":"8oCsH"}],"5JwMQ":[function(require,module,exports,__globalThis) { -var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js"); -parcelHelpers.defineInteropFlag(exports); -var _packageJson = require("../package.json"); -var _utils = require("./utils"); -class Template { - constructor(art){ - this.art = art; - const { option, constructor } = art; - if (option.container instanceof Element) this.$container = option.container; - else { - this.$container = (0, _utils.query)(option.container); - (0, _utils.errorHandle)(this.$container, `No container element found by ${option.container}`); + const { + notice, + template: { $subtitle } + } = this.art; + if (!this.textTrack) + return null; + validator(subtitleOption, scheme.subtitle); + if (!subtitleOption.url) + return; + this.option = subtitleOption; + this.style(subtitleOption.style); + return fetch(subtitleOption.url).then((response) => response.arrayBuffer()).then((buffer) => { + const decoder = new TextDecoder(subtitleOption.encoding); + const text = decoder.decode(buffer); + switch (subtitleOption.type || getExt(subtitleOption.url)) { + case "srt": { + const vtt = srtToVtt(text); + const vttNew = subtitleOption.onVttLoad(vtt); + return vttToBlob(vttNew); + } + case "ass": { + const vtt = assToVtt(text); + const vttNew = subtitleOption.onVttLoad(vtt); + return vttToBlob(vttNew); + } + case "vtt": { + const vttNew = subtitleOption.onVttLoad(text); + return vttToBlob(vttNew); + } + default: + return subtitleOption.url; } - (0, _utils.errorHandle)((0, _utils.supportsFlex)(), 'The current browser does not support flex layout'); - const type = this.$container.tagName.toLowerCase(); - (0, _utils.errorHandle)(type === 'div', `Unsupported container element type, only support 'div' but got '${type}'`); - (0, _utils.errorHandle)(constructor.instances.every((ins)=>ins.template.$container !== this.$container), 'Cannot mount multiple instances on the same dom element'); - this.query = this.query.bind(this); - this.$container.dataset.artId = art.id; - this.init(); + }).then((subUrl) => { + $subtitle.innerHTML = ""; + if (this.url === subUrl) + return subUrl; + URL.revokeObjectURL(this.url); + this.createTrack("metadata", subUrl); + return subUrl; + }).catch((err) => { + $subtitle.innerHTML = ""; + notice.show = err; + throw err; + }); + } + } + class Template { + constructor(art) { + this.art = art; + const { option, constructor } = art; + if (option.container instanceof Element) { + this.$container = option.container; + } else { + this.$container = query(option.container); + errorHandle(this.$container, `No container element found by ${option.container}`); + } + errorHandle(supportsFlex(), "The current browser does not support flex layout"); + const type = this.$container.tagName.toLowerCase(); + errorHandle(type === "div", `Unsupported container element type, only support 'div' but got '${type}'`); + errorHandle( + constructor.instances.every((ins) => ins.template.$container !== this.$container), + "Cannot mount multiple instances on the same dom element" + ); + this.query = this.query.bind(this); + this.$container.dataset.artId = art.id; + this.init(); } static get html() { - return ` + return `