@videojs/html 10.0.0-beta.28 → 10.0.0-beta.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cdn/{adapter-XTen-YVQ.js → adapter-CEnNWvii.js} +17 -4
- package/cdn/adapter-CEnNWvii.js.map +1 -0
- package/cdn/adapter-DaKW8NzI.js +2 -0
- package/cdn/adapter-DaKW8NzI.js.map +1 -0
- package/cdn/audio-headless.dev.js +1 -1
- package/cdn/audio-headless.js +1 -1
- package/cdn/audio-minimal-ui.dev.js +2 -2
- package/cdn/audio-minimal-ui.js +1 -1
- package/cdn/audio-minimal.dev.js +5 -5
- package/cdn/audio-minimal.dev.js.map +1 -1
- package/cdn/audio-minimal.js +1 -1
- package/cdn/audio-minimal.js.map +1 -1
- package/cdn/audio-ui.dev.js +2 -2
- package/cdn/audio-ui.js +1 -1
- package/cdn/audio.dev.js +5 -5
- package/cdn/audio.dev.js.map +1 -1
- package/cdn/audio.js +1 -1
- package/cdn/audio.js.map +1 -1
- package/cdn/background.dev.js +1 -1
- package/cdn/background.js +1 -1
- package/cdn/background.js.map +1 -1
- package/cdn/compounds-C4YYLyL2.js +8 -0
- package/cdn/compounds-C4YYLyL2.js.map +1 -0
- package/cdn/{compounds-nk9RJtBK.js → compounds-C73u1MeO.js} +63 -59
- package/cdn/compounds-C73u1MeO.js.map +1 -0
- package/cdn/create-player-BU8LDJDL.js +2 -0
- package/cdn/create-player-BU8LDJDL.js.map +1 -0
- package/cdn/{create-player-DK9WOywd.js → create-player-Db1CIvlK.js} +58 -46
- package/cdn/create-player-Db1CIvlK.js.map +1 -0
- package/cdn/{default-BqQDVloS.js → default-A3aM0skz.js} +2 -2
- package/cdn/default-A3aM0skz.js.map +1 -0
- package/cdn/default-BDyhiTCm.js +2 -0
- package/cdn/default-BDyhiTCm.js.map +1 -0
- package/cdn/{default-I2LasfxC.js → default-C1_k1NeB.js} +2 -2
- package/cdn/default-C1_k1NeB.js.map +1 -0
- package/cdn/default-DHrMd4ie.js +2 -0
- package/cdn/default-DHrMd4ie.js.map +1 -0
- package/cdn/error-surface-BID4D3DW.js +59 -0
- package/cdn/error-surface-BID4D3DW.js.map +1 -0
- package/cdn/{select-tracks-nRPBa1NC.js → error-surface-D0bo71gD.js} +442 -48
- package/cdn/error-surface-D0bo71gD.js.map +1 -0
- package/cdn/gesture-element-CeRy1IVs.js +2 -0
- package/cdn/gesture-element-CeRy1IVs.js.map +1 -0
- package/cdn/{gesture-element-6Ld1YwIL.js → gesture-element-DB67OYCE.js} +3 -3
- package/cdn/gesture-element-DB67OYCE.js.map +1 -0
- package/cdn/{hls-js-C4P_b2tT.js → hls-js-CiE4wOrG.js} +2 -2
- package/cdn/{hls-js-C4P_b2tT.js.map → hls-js-CiE4wOrG.js.map} +1 -1
- package/cdn/{hls-js-CATW7NBm.js → hls-js-DBKRCbQm.js} +2 -2
- package/cdn/{hls-js-CATW7NBm.js.map → hls-js-DBKRCbQm.js.map} +1 -1
- package/cdn/{hls-js-BEuVm0u9.js → hls-js-DX2NGCAr.js} +2 -2
- package/cdn/{hls-js-BEuVm0u9.js.map → hls-js-DX2NGCAr.js.map} +1 -1
- package/cdn/{hls-js-WCNy9MVh.js → hls-js-JeH8yvsP.js} +2 -2
- package/cdn/{hls-js-WCNy9MVh.js.map → hls-js-JeH8yvsP.js.map} +1 -1
- package/cdn/i18n-CpBDXf6M.js +2 -0
- package/cdn/{i18n-Dc7WM2xd.js.map → i18n-CpBDXf6M.js.map} +1 -1
- package/cdn/{i18n-Ch4t6EjV.js → i18n-D0nhPa0m.js} +2 -2
- package/cdn/{i18n-Ch4t6EjV.js.map → i18n-D0nhPa0m.js.map} +1 -1
- package/cdn/{live-button-element-DaHgnYdw.js → live-button-element-Co8z2LkI.js} +2 -2
- package/cdn/{live-button-element-DaHgnYdw.js.map → live-button-element-Co8z2LkI.js.map} +1 -1
- package/cdn/{live-button-element-Bae44kBN.js → live-button-element-zE-8uoR2.js} +3 -3
- package/cdn/{live-button-element-Bae44kBN.js.map → live-button-element-zE-8uoR2.js.map} +1 -1
- package/cdn/live-video-minimal.dev.js +11 -9
- package/cdn/live-video-minimal.dev.js.map +1 -1
- package/cdn/live-video-minimal.js +1 -1
- package/cdn/live-video-minimal.js.map +1 -1
- package/cdn/live-video.dev.js +12 -10
- package/cdn/live-video.dev.js.map +1 -1
- package/cdn/live-video.js +1 -1
- package/cdn/live-video.js.map +1 -1
- package/cdn/media/hls-audio.dev.js +1 -1
- package/cdn/media/hls-audio.js +1 -1
- package/cdn/media/hls-background-video.dev.js +1 -1
- package/cdn/media/hls-background-video.js +1 -1
- package/cdn/media/hls-video.dev.js +1 -1
- package/cdn/media/hls-video.js +1 -1
- package/cdn/media/mux-audio/hls-js.dev.js +1 -1
- package/cdn/media/mux-audio/hls-js.js +1 -1
- package/cdn/media/mux-audio/spf.dev.js +2 -2
- package/cdn/media/mux-audio/spf.js +1 -1
- package/cdn/media/mux-audio.dev.js +1 -1
- package/cdn/media/mux-audio.js +1 -1
- package/cdn/media/mux-background-video.dev.js +1 -1
- package/cdn/media/mux-background-video.js +1 -1
- package/cdn/media/mux-data.dev.js +1 -1
- package/cdn/media/mux-data.dev.js.map +1 -1
- package/cdn/media/mux-data.js +1 -1
- package/cdn/media/mux-data.js.map +1 -1
- package/cdn/media/mux-video/hls-js.dev.js +1 -1
- package/cdn/media/mux-video/hls-js.js +1 -1
- package/cdn/media/mux-video/spf.dev.js +2 -2
- package/cdn/media/mux-video/spf.js +1 -1
- package/cdn/media/mux-video.dev.js +1 -1
- package/cdn/media/mux-video.js +1 -1
- package/cdn/media/vimeo-video.dev.js +27 -5
- package/cdn/media/vimeo-video.dev.js.map +1 -1
- package/cdn/media/vimeo-video.js +1 -1
- package/cdn/media/vimeo-video.js.map +1 -1
- package/cdn/{media-Uxm0d3Vx.js → media-BI8caj07.js} +3 -3
- package/cdn/{media-Uxm0d3Vx.js.map → media-BI8caj07.js.map} +1 -1
- package/cdn/{media-COIe3uI5.js → media-BNuI0Im7.js} +19 -6
- package/cdn/media-BNuI0Im7.js.map +1 -0
- package/cdn/media-CQxFuDcv.js +2 -0
- package/cdn/{media-CPVSKLdk.js.map → media-CQxFuDcv.js.map} +1 -1
- package/cdn/media-D4tG62L5.js +2 -0
- package/cdn/{media-BTipOcKo.js.map → media-D4tG62L5.js.map} +1 -1
- package/cdn/{media-oa3nyL2o.js → media-DI6DvYm3.js} +3 -3
- package/cdn/{media-oa3nyL2o.js.map → media-DI6DvYm3.js.map} +1 -1
- package/cdn/media-DU3Xf5XR.js +2 -0
- package/cdn/media-DU3Xf5XR.js.map +1 -0
- package/cdn/media-mYKOAsk3.js +825 -0
- package/cdn/media-mYKOAsk3.js.map +1 -0
- package/cdn/media-zReLnePj.js +2 -0
- package/cdn/media-zReLnePj.js.map +1 -0
- package/cdn/{minimal-DQCLKRyR.js → minimal-3OmH0xQS.js} +2 -2
- package/cdn/minimal-3OmH0xQS.js.map +1 -0
- package/cdn/{minimal-DLosvq31.js → minimal-6w_Vyyl9.js} +2 -2
- package/cdn/minimal-6w_Vyyl9.js.map +1 -0
- package/cdn/minimal-BWLTn7oQ.js +2 -0
- package/cdn/minimal-BWLTn7oQ.js.map +1 -0
- package/cdn/minimal-DIGrklyh.js +2 -0
- package/cdn/minimal-DIGrklyh.js.map +1 -0
- package/cdn/{minimal-ui-CRKvUmB8.js → minimal-ui-BCIESK8f.js} +8 -8
- package/cdn/{minimal-ui-CRKvUmB8.js.map → minimal-ui-BCIESK8f.js.map} +1 -1
- package/cdn/minimal-ui-BXrq3z4U.js +2 -0
- package/cdn/{minimal-ui-Et2Wcn7r.js.map → minimal-ui-BXrq3z4U.js.map} +1 -1
- package/cdn/{minimal-ui-BpHxIo4z.js → minimal-ui-DEalpMk6.js} +4 -4
- package/cdn/{minimal-ui-BpHxIo4z.js.map → minimal-ui-DEalpMk6.js.map} +1 -1
- package/cdn/{minimal-ui-8iRZf_72.js → minimal-ui-vY3QgohH.js} +2 -2
- package/cdn/{minimal-ui-8iRZf_72.js.map → minimal-ui-vY3QgohH.js.map} +1 -1
- package/cdn/{player-DM9rUXg-.js → player-B3GlPF90.js} +2 -2
- package/cdn/{player-DM9rUXg-.js.map → player-B3GlPF90.js.map} +1 -1
- package/cdn/player-CtTC7qa5.js +2 -0
- package/cdn/{player-rCFqzWrA.js.map → player-CtTC7qa5.js.map} +1 -1
- package/cdn/player-DKkph8UM.js +2 -0
- package/cdn/{player-BRQLp5bX.js.map → player-DKkph8UM.js.map} +1 -1
- package/cdn/{player-CKTAtwit.js → player-DPDmTRvg.js} +2 -2
- package/cdn/{player-CKTAtwit.js.map → player-DPDmTRvg.js.map} +1 -1
- package/cdn/player-DrDd7LJi.js +2 -0
- package/cdn/{player-BloX4l6F.js.map → player-DrDd7LJi.js.map} +1 -1
- package/cdn/{player-B2oraRyD.js → player-L5UpZmT4.js} +2 -2
- package/cdn/{player-B2oraRyD.js.map → player-L5UpZmT4.js.map} +1 -1
- package/cdn/{poster-element-BGr1VQJB.js → poster-element-B5tdJ2ub.js} +179 -38
- package/cdn/poster-element-B5tdJ2ub.js.map +1 -0
- package/cdn/poster-element-B8QwXSU_.js +2 -0
- package/cdn/poster-element-B8QwXSU_.js.map +1 -0
- package/cdn/{error-surface-drmCvBVW.js → relocation-pipelines-Dh8CcgHw.js} +5 -343
- package/cdn/relocation-pipelines-Dh8CcgHw.js.map +1 -0
- package/cdn/relocation-pipelines-DunE4gcV.js +2 -0
- package/cdn/relocation-pipelines-DunE4gcV.js.map +1 -0
- package/cdn/{seek-button-element-XMTLIxZj.js → seek-button-element-5co-k0Dx.js} +4 -4
- package/cdn/seek-button-element-5co-k0Dx.js.map +1 -0
- package/cdn/{seek-button-element-FlgBVoGM.js → seek-button-element-B8TkILg-.js} +2 -2
- package/cdn/{seek-button-element-FlgBVoGM.js.map → seek-button-element-B8TkILg-.js.map} +1 -1
- package/cdn/shallow-equal-C7S8rj2f.js +16 -0
- package/cdn/shallow-equal-C7S8rj2f.js.map +1 -0
- package/cdn/shallow-equal-KV1zFqZi.js +2 -0
- package/cdn/shallow-equal-KV1zFqZi.js.map +1 -0
- package/cdn/{skin-element-DL-Kqa5f.js → skin-element-DrkI8xuM.js} +2 -2
- package/cdn/{skin-element-DL-Kqa5f.js.map → skin-element-DrkI8xuM.js.map} +1 -1
- package/cdn/{skin-element-DNytI-uu.js → skin-element-DvX6Bxsv.js} +2 -2
- package/cdn/{skin-element-DNytI-uu.js.map → skin-element-DvX6Bxsv.js.map} +1 -1
- package/cdn/{text-element-DeWBNKXb.js → text-element-BoY6AhMn.js} +2 -2
- package/cdn/{text-element-DeWBNKXb.js.map → text-element-BoY6AhMn.js.map} +1 -1
- package/cdn/{text-element-D88ArbZz.js → text-element-cg6l21cd.js} +2 -2
- package/cdn/{text-element-D88ArbZz.js.map → text-element-cg6l21cd.js.map} +1 -1
- package/cdn/time-slider-chapters-element-BfLjdnU4.js +2 -0
- package/cdn/time-slider-chapters-element-BfLjdnU4.js.map +1 -0
- package/cdn/{time-slider-chapters-element-DJ0abZXI.js → time-slider-chapters-element-CznFQWFm.js} +5 -5
- package/cdn/time-slider-chapters-element-CznFQWFm.js.map +1 -0
- package/cdn/{ui-BU3_2gDQ.js → ui-BwzqkJNK.js} +7 -7
- package/cdn/{ui-BU3_2gDQ.js.map → ui-BwzqkJNK.js.map} +1 -1
- package/cdn/ui-DayfItun.js +2 -0
- package/cdn/{ui-C0isALTQ.js.map → ui-DayfItun.js.map} +1 -1
- package/cdn/ui-PSnD-pv8.js +2 -0
- package/cdn/{ui-DVpkE1MN.js.map → ui-PSnD-pv8.js.map} +1 -1
- package/cdn/{ui-BsaWWE4y.js → ui-fnKp94a7.js} +9 -9
- package/cdn/{ui-BsaWWE4y.js.map → ui-fnKp94a7.js.map} +1 -1
- package/cdn/video-headless.dev.js +1 -1
- package/cdn/video-headless.js +1 -1
- package/cdn/video-minimal-ui.dev.js +2 -2
- package/cdn/video-minimal-ui.js +1 -1
- package/cdn/video-minimal.dev.js +8 -6
- package/cdn/video-minimal.dev.js.map +1 -1
- package/cdn/video-minimal.js +1 -1
- package/cdn/video-minimal.js.map +1 -1
- package/cdn/video-ui.dev.js +2 -2
- package/cdn/video-ui.js +1 -1
- package/cdn/video.dev.js +9 -7
- package/cdn/video.dev.js.map +1 -1
- package/cdn/video.js +1 -1
- package/cdn/video.js.map +1 -1
- package/dist/default/__generated__/skins/default-video/styles/buttons.css +132 -18
- package/dist/default/__generated__/skins/default-video/styles/captions.css +22 -0
- package/dist/default/__generated__/skins/default-video/styles/container.css +121 -8
- package/dist/default/__generated__/skins/default-video/styles/controls.css +436 -21
- package/dist/default/__generated__/skins/default-video/styles/dialog.css +169 -0
- package/dist/default/__generated__/skins/default-video/styles/indicator.css +459 -0
- package/dist/default/__generated__/skins/default-video/styles/menus.css +254 -0
- package/dist/default/__generated__/skins/default-video/styles/overlays.css +26 -2
- package/dist/default/__generated__/skins/default-video/styles/popups.css +338 -12
- package/dist/default/__generated__/skins/default-video/styles/poster.css +4 -4
- package/dist/default/__generated__/skins/default-video/styles/sliders.css +355 -31
- package/dist/default/__generated__/skins/default-video/styles/styles.css +2455 -216
- package/dist/default/__generated__/skins/default-video/styles/theme.css +4 -19
- package/dist/default/__generated__/skins/default-video/styles/video.css +29 -0
- package/dist/default/__generated__/skins/minimal-video/styles/base.css +25 -0
- package/dist/default/__generated__/skins/minimal-video/styles/buttons.css +266 -0
- package/dist/default/__generated__/skins/minimal-video/styles/captions.css +22 -0
- package/dist/default/__generated__/skins/minimal-video/styles/container.css +158 -0
- package/dist/default/__generated__/skins/minimal-video/styles/controls.css +182 -0
- package/dist/default/__generated__/skins/minimal-video/styles/dialog.css +77 -0
- package/dist/default/__generated__/skins/minimal-video/styles/indicator.css +322 -0
- package/dist/default/__generated__/skins/minimal-video/styles/menus.css +254 -0
- package/dist/default/__generated__/skins/minimal-video/styles/overlays.css +35 -0
- package/dist/default/__generated__/skins/minimal-video/styles/popups.css +371 -0
- package/dist/default/__generated__/skins/minimal-video/styles/poster.css +47 -0
- package/dist/default/__generated__/skins/minimal-video/styles/sliders.css +436 -0
- package/dist/default/__generated__/skins/minimal-video/styles/styles.css +2246 -0
- package/dist/default/__generated__/skins/minimal-video/styles/theme.css +7 -0
- package/dist/default/__generated__/skins/minimal-video/styles/video.css +29 -0
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
- package/dist/default/define/audio/minimal-skin.css +103 -101
- package/dist/default/define/audio/skin.css +68 -69
- package/dist/default/define/live-audio/minimal-skin.css +103 -101
- package/dist/default/define/live-audio/skin.css +68 -69
- package/dist/default/define/live-video/minimal-skin.css +140 -120
- package/dist/default/define/live-video/minimal-skin.js +1 -1
- package/dist/default/define/live-video/minimal-skin.js.map +1 -1
- package/dist/default/define/live-video/minimal-skin.tailwind.js +1 -1
- package/dist/default/define/live-video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/live-video/skin.css +89 -76
- package/dist/default/define/live-video/skin.js +1 -1
- package/dist/default/define/live-video/skin.js.map +1 -1
- package/dist/default/define/live-video/skin.tailwind.js +1 -1
- package/dist/default/define/live-video/skin.tailwind.js.map +1 -1
- package/dist/default/define/ui/gesture.js +7 -0
- package/dist/default/define/ui/gesture.js.map +1 -0
- package/dist/default/define/video/minimal-skin.css +140 -120
- package/dist/default/define/video/minimal-skin.js +1 -1
- package/dist/default/define/video/minimal-skin.js.map +1 -1
- package/dist/default/define/video/minimal-skin.tailwind.js +1 -1
- package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/video/skin.css +89 -76
- package/dist/default/define/video/skin.js +1 -1
- package/dist/default/define/video/skin.js.map +1 -1
- package/dist/default/define/video/skin.tailwind.js +1 -1
- package/dist/default/define/video/skin.tailwind.js.map +1 -1
- package/dist/default/icons/dist/element/default/icons.js +1 -1
- package/dist/default/icons/dist/element/default/icons.js.map +1 -1
- package/dist/default/icons/dist/element/minimal/icons.js +1 -1
- package/dist/default/icons/dist/element/minimal/icons.js.map +1 -1
- package/dist/default/icons/dist/html/default/airplay-exit.js +1 -1
- package/dist/default/icons/dist/html/default/airplay-exit.js.map +1 -1
- package/dist/default/icons/dist/html/minimal/airplay-exit.js +1 -1
- package/dist/default/icons/dist/html/minimal/airplay-exit.js.map +1 -1
- package/dist/default/icons/dist/render/default/index.js +1 -1
- package/dist/default/icons/dist/render/default/index.js.map +1 -1
- package/dist/default/icons/dist/render/minimal/index.js +1 -1
- package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
- package/dist/default/media/hls-background-video/media.js +18 -0
- package/dist/default/media/hls-background-video/media.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js +3 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js +8 -1
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js +10 -10
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +4 -4
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
- package/dist/default/store/provider-mixin.js +22 -8
- package/dist/default/store/provider-mixin.js.map +1 -1
- package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
- package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
- package/dist/default/ui/captions-radio-group/captions-radio-group-element.js +1 -1
- package/dist/default/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
- package/dist/default/ui/gesture/gesture-element.js.map +1 -1
- package/dist/default/ui/hotkey/hotkey-element.js.map +1 -1
- package/dist/default/ui/menu/context.js.map +1 -1
- package/dist/default/ui/menu/menu-element.js +28 -27
- package/dist/default/ui/menu/menu-element.js.map +1 -1
- package/dist/default/ui/menu/menu-radio-group-element.js +14 -14
- package/dist/default/ui/menu/menu-radio-group-element.js.map +1 -1
- package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
- package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
- package/dist/default/ui/poster/poster-element.js +138 -8
- package/dist/default/ui/poster/poster-element.js.map +1 -1
- package/dist/default/ui/quality-radio-group/quality-radio-group-element.js +1 -1
- package/dist/default/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
- package/dist/default/ui/slider/slider-preview-element.js.map +1 -1
- package/dist/dev/__generated__/skins/default-video/styles/buttons.css +132 -18
- package/dist/dev/__generated__/skins/default-video/styles/captions.css +22 -0
- package/dist/dev/__generated__/skins/default-video/styles/container.css +121 -8
- package/dist/dev/__generated__/skins/default-video/styles/controls.css +436 -21
- package/dist/dev/__generated__/skins/default-video/styles/dialog.css +169 -0
- package/dist/dev/__generated__/skins/default-video/styles/indicator.css +459 -0
- package/dist/dev/__generated__/skins/default-video/styles/menus.css +254 -0
- package/dist/dev/__generated__/skins/default-video/styles/overlays.css +26 -2
- package/dist/dev/__generated__/skins/default-video/styles/popups.css +338 -12
- package/dist/dev/__generated__/skins/default-video/styles/poster.css +4 -4
- package/dist/dev/__generated__/skins/default-video/styles/sliders.css +355 -31
- package/dist/dev/__generated__/skins/default-video/styles/styles.css +2455 -216
- package/dist/dev/__generated__/skins/default-video/styles/theme.css +4 -19
- package/dist/dev/__generated__/skins/default-video/styles/video.css +29 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/base.css +25 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/buttons.css +266 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/captions.css +22 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/container.css +158 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/controls.css +182 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/dialog.css +77 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/indicator.css +322 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/menus.css +254 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/overlays.css +35 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/popups.css +371 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/poster.css +47 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/sliders.css +436 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/styles.css +2246 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/theme.css +7 -0
- package/dist/dev/__generated__/skins/minimal-video/styles/video.css +29 -0
- package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
- package/dist/dev/define/audio/minimal-skin.css +103 -101
- package/dist/dev/define/audio/skin.css +68 -69
- package/dist/dev/define/live-audio/minimal-skin.css +103 -101
- package/dist/dev/define/live-audio/skin.css +68 -69
- package/dist/dev/define/live-video/minimal-skin.css +140 -120
- package/dist/dev/define/live-video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.js +3 -1
- package/dist/dev/define/live-video/minimal-skin.js.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/live-video/minimal-skin.tailwind.js +3 -1
- package/dist/dev/define/live-video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/live-video/skin.css +89 -76
- package/dist/dev/define/live-video/skin.d.ts.map +1 -1
- package/dist/dev/define/live-video/skin.js +3 -1
- package/dist/dev/define/live-video/skin.js.map +1 -1
- package/dist/dev/define/live-video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/live-video/skin.tailwind.js +4 -2
- package/dist/dev/define/live-video/skin.tailwind.js.map +1 -1
- package/dist/dev/define/ui/gesture.d.ts +8 -0
- package/dist/dev/define/ui/gesture.d.ts.map +1 -0
- package/dist/dev/define/ui/gesture.js +7 -0
- package/dist/dev/define/ui/gesture.js.map +1 -0
- package/dist/dev/define/video/minimal-skin.css +140 -120
- package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/video/minimal-skin.js +3 -1
- package/dist/dev/define/video/minimal-skin.js.map +1 -1
- package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/video/minimal-skin.tailwind.js +3 -1
- package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/video/skin.css +89 -76
- package/dist/dev/define/video/skin.d.ts.map +1 -1
- package/dist/dev/define/video/skin.js +3 -1
- package/dist/dev/define/video/skin.js.map +1 -1
- package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/video/skin.tailwind.js +4 -2
- package/dist/dev/define/video/skin.tailwind.js.map +1 -1
- package/dist/dev/media/hls-background-video/media.d.ts +16 -0
- package/dist/dev/media/hls-background-video/media.d.ts.map +1 -1
- package/dist/dev/media/hls-background-video/media.js +18 -0
- package/dist/dev/media/hls-background-video/media.js.map +1 -1
- package/dist/dev/packages/icons/dist/element/default/icons.js +1 -1
- package/dist/dev/packages/icons/dist/element/default/icons.js.map +1 -1
- package/dist/dev/packages/icons/dist/element/minimal/icons.js +1 -1
- package/dist/dev/packages/icons/dist/element/minimal/icons.js.map +1 -1
- package/dist/dev/packages/icons/dist/html/default/airplay-exit.js +1 -1
- package/dist/dev/packages/icons/dist/html/default/airplay-exit.js.map +1 -1
- package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js +1 -1
- package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js.map +1 -1
- package/dist/dev/packages/icons/dist/render/default/index.js +1 -1
- package/dist/dev/packages/icons/dist/render/default/index.js.map +1 -1
- package/dist/dev/packages/icons/dist/render/minimal/index.js +1 -1
- package/dist/dev/packages/icons/dist/render/minimal/index.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js +3 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js +8 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js +10 -10
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
- package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
- package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js +4 -4
- package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
- package/dist/dev/store/provider-mixin.d.ts.map +1 -1
- package/dist/dev/store/provider-mixin.js +24 -8
- package/dist/dev/store/provider-mixin.js.map +1 -1
- package/dist/dev/store/types.d.ts +2 -2
- package/dist/dev/store/types.d.ts.map +1 -1
- package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
- package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
- package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js +1 -1
- package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
- package/dist/dev/ui/gesture/gesture-element.d.ts +7 -7
- package/dist/dev/ui/gesture/gesture-element.d.ts.map +1 -1
- package/dist/dev/ui/gesture/gesture-element.js.map +1 -1
- package/dist/dev/ui/hotkey/hotkey-element.d.ts +6 -6
- package/dist/dev/ui/hotkey/hotkey-element.d.ts.map +1 -1
- package/dist/dev/ui/hotkey/hotkey-element.js.map +1 -1
- package/dist/dev/ui/menu/context.d.ts +8 -8
- package/dist/dev/ui/menu/context.d.ts.map +1 -1
- package/dist/dev/ui/menu/context.js.map +1 -1
- package/dist/dev/ui/menu/menu-element.d.ts.map +1 -1
- package/dist/dev/ui/menu/menu-element.js +28 -27
- package/dist/dev/ui/menu/menu-element.js.map +1 -1
- package/dist/dev/ui/menu/menu-radio-group-element.d.ts +1 -1
- package/dist/dev/ui/menu/menu-radio-group-element.d.ts.map +1 -1
- package/dist/dev/ui/menu/menu-radio-group-element.js +14 -14
- package/dist/dev/ui/menu/menu-radio-group-element.js.map +1 -1
- package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
- package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
- package/dist/dev/ui/poster/poster-element.d.ts +20 -18
- package/dist/dev/ui/poster/poster-element.d.ts.map +1 -1
- package/dist/dev/ui/poster/poster-element.js +145 -8
- package/dist/dev/ui/poster/poster-element.js.map +1 -1
- package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js +1 -1
- package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
- package/dist/dev/ui/slider/slider-preview-element.d.ts +2 -2
- package/dist/dev/ui/slider/slider-preview-element.d.ts.map +1 -1
- package/dist/dev/ui/slider/slider-preview-element.js.map +1 -1
- package/docs/README.md +1 -1
- package/docs/concepts/skins.md +91 -78
- package/docs/how-to/customize-skins.md +411 -377
- package/docs/reference/menu.md +3 -19
- package/docs/reference/popover.md +2 -2
- package/docs/reference/poster.md +211 -21
- package/docs/reference/slider.md +1 -1
- package/docs/reference/time-slider.md +1 -1
- package/docs/reference/tooltip.md +6 -6
- package/docs/reference/volume-slider.md +1 -1
- package/package.json +14 -9
- package/cdn/adapter-Bk03SAxn.js +0 -2
- package/cdn/adapter-Bk03SAxn.js.map +0 -1
- package/cdn/adapter-XTen-YVQ.js.map +0 -1
- package/cdn/compounds-BEO1d3ZM.js +0 -8
- package/cdn/compounds-BEO1d3ZM.js.map +0 -1
- package/cdn/compounds-nk9RJtBK.js.map +0 -1
- package/cdn/create-player-DK9WOywd.js.map +0 -1
- package/cdn/create-player-hSdQMP5p.js +0 -2
- package/cdn/create-player-hSdQMP5p.js.map +0 -1
- package/cdn/default-BqQDVloS.js.map +0 -1
- package/cdn/default-CXWVp2oG.js +0 -2
- package/cdn/default-CXWVp2oG.js.map +0 -1
- package/cdn/default-Dw6cIEqT.js +0 -2
- package/cdn/default-Dw6cIEqT.js.map +0 -1
- package/cdn/default-I2LasfxC.js.map +0 -1
- package/cdn/error-surface-DCT1m2p1.js +0 -2
- package/cdn/error-surface-DCT1m2p1.js.map +0 -1
- package/cdn/error-surface-drmCvBVW.js.map +0 -1
- package/cdn/gesture-element-6Ld1YwIL.js.map +0 -1
- package/cdn/gesture-element-BC48ucj9.js +0 -2
- package/cdn/gesture-element-BC48ucj9.js.map +0 -1
- package/cdn/i18n-Dc7WM2xd.js +0 -2
- package/cdn/media-BTipOcKo.js +0 -2
- package/cdn/media-Bmablv4g.js +0 -2
- package/cdn/media-Bmablv4g.js.map +0 -1
- package/cdn/media-COIe3uI5.js.map +0 -1
- package/cdn/media-CPVSKLdk.js +0 -2
- package/cdn/media-Dq4zmIJa.js +0 -2
- package/cdn/media-Dq4zmIJa.js.map +0 -1
- package/cdn/media-suYcjCG2.js +0 -445
- package/cdn/media-suYcjCG2.js.map +0 -1
- package/cdn/minimal-BedCvMBG.js +0 -2
- package/cdn/minimal-BedCvMBG.js.map +0 -1
- package/cdn/minimal-BoP112ye.js +0 -2
- package/cdn/minimal-BoP112ye.js.map +0 -1
- package/cdn/minimal-DLosvq31.js.map +0 -1
- package/cdn/minimal-DQCLKRyR.js.map +0 -1
- package/cdn/minimal-ui-Et2Wcn7r.js +0 -2
- package/cdn/player-BRQLp5bX.js +0 -2
- package/cdn/player-BloX4l6F.js +0 -2
- package/cdn/player-rCFqzWrA.js +0 -2
- package/cdn/poster-element-BGr1VQJB.js.map +0 -1
- package/cdn/poster-element-DBmgOyep.js +0 -2
- package/cdn/poster-element-DBmgOyep.js.map +0 -1
- package/cdn/seek-button-element-XMTLIxZj.js.map +0 -1
- package/cdn/select-tracks-nRPBa1NC.js.map +0 -1
- package/cdn/select-tracks-xV1s28xD.js +0 -59
- package/cdn/select-tracks-xV1s28xD.js.map +0 -1
- package/cdn/time-slider-chapters-element-DJ0abZXI.js.map +0 -1
- package/cdn/time-slider-chapters-element-DW8YyJn8.js +0 -2
- package/cdn/time-slider-chapters-element-DW8YyJn8.js.map +0 -1
- package/cdn/ui-C0isALTQ.js +0 -2
- package/cdn/ui-DVpkE1MN.js +0 -2
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e,r as t,s as n,u as r}from"./predicate-LbFu-fPH.js";import{n as i,t as a}from"./i18n-CE4KxKuj.js";import{t as o}from"./shallow-equal-KV1zFqZi.js";import{n as s}from"./media-element-Cp5PrNre.js";import{n as c,r as l,t as u}from"./context-C2rsoDxk.js";import{l as d}from"./container-element-Dd0ZCdhK.js";import{n as f,t as p}from"./casing-CxqC0yQL.js";import{t as m}from"./listen-4VrUltMW.js";import{t as h}from"./noop-Ch0IHcOP.js";import{n as g,t as _}from"./text-track-CG8USvNG.js";import{t as v}from"./webkit-DljEkldb.js";import{t as y}from"./abort-BhNYXtuF.js";import{n as b,r as x,t as ee}from"./constants-B4LD5zrj.js";function S(e){let t=e.composedPath();return t.length>0?t[0]:e.target}function C(e,t,n){return new Promise((r,i)=>{let a=()=>{i(n?.signal?.reason??`Aborted`)};if(n?.signal?.aborted){a();return}n?.signal?.addEventListener(`abort`,a,{once:!0}),e.addEventListener(t,e=>{n?.signal?.removeEventListener(`abort`,a),r(e)},{...n,once:!0})})}const te=[`button`,`input`,`select`,`textarea`,`a[href]`,`[role="button"]`,`[role="menu"]`,`[role="menuitem"]`,`[role="menuitemcheckbox"]`,`[role="menuitemradio"]`,`[role="slider"]`,`[data-interactive]`].join(`,`),ne=[`textarea`,`select`,`input:not([type])`,...[`text`,`search`,`url`,`tel`,`email`,`password`,`number`].map(e=>`input[type="${e}"]`),`[contenteditable]:not([contenteditable="false"])`].join(`,`);function re(e){return e.matches(ne)}function ie(e){let t=S(e);return t instanceof Element&&re(t)}function ae(e){let t=S(e);return t instanceof Element&&t.closest(te)!==null}const oe=new Set([` `,`Enter`]);function se(e){if(!oe.has(e.key))return!1;let t=S(e);return t instanceof Element&&t.matches(`button,a[href],[role="slider"],[role="button"]`)}function ce(e){let t=[];for(let n=0;n<e.length;n++)t.push([e.start(n),e.end(n)]);return t}var le=class{#e;#t=new Map;get base(){return(this.#e??=new AbortController).signal}clear(){for(let e of this.#t.values())e.abort();this.#t.clear()}reset(){this.clear(),this.#e?.abort(),this.#e=void 0}supersede(e){this.#t.get(e)?.abort();let t=new AbortController;return this.#t.set(e,t),y([this.base,t.signal])}};function ue(...e){let t=e.map(e=>e.derived??{});return{state:t=>{let n=e.map(e=>e.state(t));return Object.assign({},...n)},preserve:Array.from(new Set(e.flatMap(e=>e.preserve??[]))),derived:Object.assign({},...t),attach:t=>{for(let n of e)try{n.attach?.(t)}catch(e){t.reportError(e)}}}}var de=class extends Error{code;cause;constructor(e,t){super(t?.message??e),this.name=`StoreError`,this.code=e,this.cause=t?.cause}};function fe(){throw new de(`NO_TARGET`)}function pe(){throw new de(`DESTROYED`)}function me(){return(e=>e)}let w=!1;function he(){w||(w=!0,queueMicrotask(_e))}const ge=new Set;function _e(){w=!1;for(let e of ge)e.flush();ge.clear()}const ve=Object.prototype.hasOwnProperty;var ye=class{#e;#t=new Set;#n=!1;constructor(e){this.#e=Object.freeze({...e})}get current(){return this.#e}patch(e){let t={...this.#e},n=!1;for(let r of Reflect.ownKeys(e)){if(!ve.call(e,r))continue;let i=e[r];Object.is(this.#e[r],i)||(t[r]=i,n=!0)}n&&(this.#e=Object.freeze(t),this.#r())}replace(e){o(this.#e,e)||(this.#e=Object.freeze({...e}),this.#r())}subscribe(e,t){let n=t?.signal;if(n?.aborted)return h;if(this.#t.add(e),!n)return()=>this.#t.delete(e);let r=()=>this.#t.delete(e);return n.addEventListener(`abort`,r,{once:!0}),()=>{n.removeEventListener(`abort`,r),this.#t.delete(e)}}flush(){if(this.#n){this.#n=!1;for(let e of this.#t)e()}}#r(){this.#n=!0,ge.add(this),he()}};function be(e){return new ye(e)}const xe=Symbol.for(`@videojs/store`),Se=Object.prototype.hasOwnProperty;function Ce(){return((t,n={})=>{let r=null,i=!1,a=new AbortController,o=new le,s,c;function l(){i&&pe(),r||fe()}let u=we(t.state({target:()=>(l(),r),signals:o,get:()=>s,set:e=>h(e)}));s=u;let d=p(s);c=be(m(s,d));let f={[xe]:!0,get $state(){return c},get target(){return r},get destroyed(){return i},get state(){return c.current},attach:g,destroy:v,subscribe:y};for(let e of Object.keys(c.current))Object.defineProperty(f,e,{get:()=>c.current[e],enumerable:!0});for(let e of Object.getOwnPropertySymbols(s))typeof s[e]==`function`&&Object.defineProperty(f,e,{get:()=>s[e]});try{n.onSetup?.({store:f,signal:a.signal})}catch(e){b(e)}return f;function p(e){let n={},r=t.derived;if(!r)return n;let i={get:()=>e};for(let e of Object.keys(r))n[e]=r[e](i);return n}function m(e,t){let n={};for(let t of Object.keys(e))n[t]=e[t];return Object.assign(n,t)}function h(e){let t=Te(s,e);if(!t)return;let n=p(t.next);s=t.next,c.replace(m(s,n))}function g(e){i&&pe(),o.reset(),r=e;let a={target:e,signal:o.base,get:()=>s,set:e=>{try{h(e)}catch(e){b(e)}},reportError:b,store:{get state(){return c.current},subscribe:y}};try{t.attach?.(a)}catch(e){b(e)}try{n.onAttach?.({store:f,target:e,signal:o.base})}catch(e){b(e)}return _}function _(){if(e(r))return;o.reset(),r=null;let n={...u};for(let e of t.preserve??[])n[e]=s[e];h(n)}function v(){i||(i=!0,_(),a.abort())}function y(e,t){return c.subscribe(e,t)}function b(e){n.onError?n.onError({store:f,error:e}):console.error(`[vjs-store]`,e)}})}function we(e){return Object.freeze({...e})}function Te(e,t){let n={...e},r=!1;for(let i of Reflect.ownKeys(t)){if(!Se.call(t,i))continue;let a=t[i];Object.is(e[i],a)||(n[i]=a,r=!0)}return r?{next:Object.freeze(n)}:null}function Ee(e){return n(e)&&xe in e}const De=me();function T(e,t){if(arguments.length===1){let t=e,n=Object.values(t.config??{}).map(e=>e.state);return{...t,...n.length>0?{preserve:n}:{}}}let{name:n,state:i,attach:a}=e,o=e=>De({...r(n)?{}:{name:n},state:t=>i(t,e),...a?{attach:t=>a(t,e)}:{}}),s=o(t),c=(e=>r(e)?s:o(e));return c.state=s.state,s.attach&&(c.attach=s.attach),r(n)||Object.defineProperty(c,"name",{value:n}),c}function Oe(e){let t=e.map(e=>e.config??{});return Object.assign({},...t)}function ke(e,t,n){let r=e[t.action];if(typeof r!=`function`)throw TypeError(`Missing config action "${String(t.action)}"`);r(n)}function Ae(e){return e.readyState>=1}function E(e){if(!n(e))return!1;let i=e;return!r(i.paused)&&!r(i.ended)&&t(i.pause)}function D(e){if(!n(e))return!1;let t=e;return!r(t.currentTime)&&!r(t.duration)&&!r(t.seeking)}function O(e){if(!n(e))return!1;let i=e;return!r(i.src)&&!r(i.currentSrc)&&!r(i.readyState)&&t(i.load)}function k(e){if(!n(e))return!1;let t=e;return!r(t.volume)&&!r(t.muted)}function je(e){return n(e)?!r(e.muted):!1}function Me(e){return n(e)?!r(e.playbackRate):!1}function Ne(e){return n(e)?t(e.requestPictureInPicture):!1}function A(e){if(!n(e))return!1;let t=e;return!r(t.buffered)&&t.buffered!==x&&!r(t.seekable)&&t.seekable!==x}function Pe(e){return n(e)?!r(e.error):!1}function j(e){if(!n(e))return!1;let t=e;return!r(t.textTracks)&&t.textTracks!==b}function Fe(e){return n(e)?!r(e.videoRenditions):!1}function Ie(e){return n(e)?!r(e.audioTracks):!1}function Le(e){if(!n(e))return!1;let t=e;return!r(t.videoWidth)&&!r(t.videoHeight)}function Re(e){if(!n(e))return!1;let t=e;return n(t.remote)&&t.remote!==ee}function ze(e){return n(e)?!r(e.streamType):!1}function Be(e){return n(e)?!r(e.contentData):!1}function Ve(e){if(!n(e))return!1;let t=e;return!r(t.liveEdgeStart)&&!r(t.targetLiveWindow)}function He(e){return n(e)&&`querySelectorAll`in e&&t(e.querySelectorAll)}function Ue(e,t){return e.id||String(t)}function We(e){return{...e.id!==void 0&&{id:e.id},...e.kind!==void 0&&{kind:e.kind},label:e.label,language:e.language,enabled:e.enabled}}const Ge=T({name:`audioTrack`,state:({target:e})=>({audioTrackList:[],selectAudioTrack(t){let{media:n}=e();if(!Ie(n))return;let r=[...n.audioTracks],i=r.find((e,n)=>Ue(e,n)===t);if(i)for(let e of r)e.enabled=e===i}}),attach({target:e,signal:t,set:n}){let{media:r}=e,i=null,a=null,o=()=>Ie(r)?r.audioTracks:null,s=(e=o())=>{n({audioTrackList:e?[...e].map(We):[]})},c=()=>{let e=o();if(e===i){s(e);return}a?.abort(),a=new AbortController,i=e,i&&(m(i,`addtrack`,()=>s(i),{signal:a.signal}),m(i,`removetrack`,()=>s(i),{signal:a.signal}),m(i,`change`,()=>s(i),{signal:a.signal})),s(i)};c(),m(r,`loadstart`,c,{signal:t}),t.addEventListener(`abort`,()=>a?.abort(),{once:!0})}}),M=T({name:`buffer`,state:()=>({buffered:[],seekable:[]}),attach({target:e,signal:t,set:n}){let{media:r}=e;if(!A(r))return;let i=()=>n({buffered:ce(r.buffered),seekable:ce(r.seekable)});i(),m(r,`progress`,i,{signal:t}),m(r,`emptied`,i,{signal:t})}});function Ke(e,t,n){if(n.size===0)return null;let r=e-t.left,i=t.width;if(i===0)return null;let a=r/i;return n.size===2&&n.has(`left`)&&n.has(`right`)?a<.5?`left`:`right`:n.size===3?a<1/3?`left`:a<2/3?`center`:`right`:n.has(`left`)&&a<.5?`left`:n.has(`right`)&&a>=.5?`right`:n.has(`center`)&&(n.size===1||a>=1/3&&a<2/3)?`center`:null}var qe=class{#e;#t=[];#n=new Set;#r=null;#i=new Set;constructor(e){this.#e=e}get bindings(){return this.#t}subscribe(e){return this.#i.add(e),()=>this.#i.delete(e)}claimsTap(e,t){return!ae(e)&&this.#t.some(n=>n.type===`tap`&&n.action===t&&(!n.pointer||n.pointer===e.pointerType))}add(e){let t={...e,onActivate:t=>{if(this.#i.size>0){let n={type:e.type,source:`gesture`,action:e.action,value:e.value,region:e.region,pointer:e.pointer,event:t};for(let e of this.#i)try{e(n)}catch{}}e.onActivate(t)}};this.#t.push(t),this.#n.add(t.recognizer),this.#a();let n=!1;return()=>{if(n)return;n=!0;let e=this.#t.indexOf(t);e!==-1&&this.#t.splice(e,1),this.#o()}}#a(){if(this.#r)return;this.#r=new AbortController;let{signal:e}=this.#r,t=0;m(this.#e,`pointerdown`,e=>{e.button===0&&(t=Date.now())},{signal:e}),m(this.#e,`pointerup`,e=>{if(e.button!==0||Date.now()-t>250||ae(e))return;let n=e.pointerType,r=e.clientX,i=this.#e,a=this.#t,o={resolve:e=>Xe(a,e,n,r,i)};for(let t of this.#n)t.handleUp(o,e)},{signal:e})}#o(){if(!(this.#t.length>0)){for(let e of this.#n)e.reset();this.#n.clear(),this.#r?.abort(),this.#r=null}}};const N=new WeakMap;function Je(e){return N.get(e)}function Ye(e){let t=N.get(e);return t||(t=new qe(e),N.set(e,t)),t}function Xe(e,t,n,r,i){let a=i.getBoundingClientRect(),o=Ze(e,t,n),s=o.size>0?Ke(r,a,o):null,c=[];for(let r of e)if(!r.disabled&&r.type===t&&!(r.pointer&&r.pointer!==n)){if(r.region){if(r.region!==s)continue}else if(s!==null)continue;c.push(r)}return c}function Ze(e,t,n){let r=new Set;for(let i of e)i.disabled||i.type===t&&(i.pointer&&i.pointer!==n||i.region&&r.add(i.region));return r}function P(e){let t=e;if(n(t.remote)&&`state`in t.remote&&`prompt`in t.remote)return t.remote}function Qe(e){return P(e)?.state===`connected`}function $e(e){return P(e)?.state===`connecting`}async function et(e){let t=P(e);if(!t)throw new DOMException(`Remote playback not supported`,`NotSupportedError`);return t.prompt()}const tt=new WeakMap,F=T({name:`controls`,state:({get:e,set:t})=>{let n=nt(()=>(t({controlsVisible:!0}),()=>{}),()=>{let n=!e().userActive;return t({userActive:n,controlsVisible:n}),n});return tt.set(n.requestControlsLock,n),{userActive:!0,controlsVisible:!0,requestControlsLock:n.requestControlsLock,toggleControls:n.toggleControls}},attach({target:t,signal:n,get:r,set:i}){let{media:a,container:o}=t;if(!E(a)||e(o))return;let s,c=0,l=e=>c>0||e||a.paused||Qe(a)||$e(a);function u(){clearTimeout(s),s=void 0}function d(){u(),!(c>0)&&(s=setTimeout(p,2e3))}function f(){r().userActive||i({userActive:!0,controlsVisible:!0}),d()}function p(){u(),i({userActive:!1,controlsVisible:l(!1)})}function h(){c++,u(),r().controlsVisible||i({controlsVisible:!0});let e=!1;return()=>{e||n.aborted||(e=!0,c--,c===0&&f())}}function g(){return r().controlsVisible?p():f(),r().controlsVisible}let _=tt.get(r().requestControlsLock);_.setDelegates(h,g);let v=0,y=0,b=()=>y>0&&Date.now()-y<500;function x(e){v=Date.now(),e.pointerType===`touch`&&(y=v)}function ee(e){if(e.pointerType===`touch`&&(y=Date.now()),e.pointerType===`touch`&&Date.now()-v<250){if(Je(o)?.claimsTap(e,`toggleControls`))return;let t=[a,o].includes(e.target);r().controlsVisible&&t?p():f()}else f()}let S=()=>{let{userActive:e}=r();i({controlsVisible:l(e)}),!a.paused&&e&&d()};function C(e){if(e.pointerType===`touch`){r().userActive&&d();return}f()}if(m(o,`pointermove`,C,{signal:n}),m(o,`pointerdown`,x,{signal:n}),m(o,`pointerup`,ee,{signal:n}),m(o,`keyup`,f,{signal:n}),m(o,`focusin`,()=>{b()||f()},{signal:n}),m(o,`mouseleave`,()=>{b()||p()},{signal:n}),m(a,`play`,S,{signal:n}),m(a,`pause`,S,{signal:n}),m(a,`ended`,S,{signal:n}),Re(a)){let e=()=>{let{userActive:e}=r();i({controlsVisible:l(e)})};m(a.remote,`connect`,e,{signal:n}),m(a.remote,`connecting`,e,{signal:n}),m(a.remote,`disconnect`,e,{signal:n})}n.addEventListener(`abort`,()=>{_.reset(),c=0,u()},{once:!0}),d()}});function nt(e,t){let n=e,r=t,i=new Set,a={requestControlsLock:()=>{let e={release:n()},t=!1;return i.add(e),()=>{t||(t=!0,i.delete(e),e.release())}},toggleControls:()=>r(),setDelegates(e,t){if(e!==n){n=e;for(let t of i)t.release(),t.release=e()}r=t},reset(){a.setDelegates(e,t)}};return a}const I=T({name:`error`,state:({set:e})=>({error:null,dismissError(){e({error:null})}}),attach({target:e,signal:t,set:n}){let{media:r}=e;Pe(r)&&(m(r,`error`,()=>n({error:r.error}),{signal:t}),m(r,`emptied`,()=>n({error:null}),{signal:t}))}});function rt(){let e=document;return e.fullscreenEnabled||e.webkitFullscreenEnabled?!0:t(document.createElement(`video`).webkitSetPresentationMode)}function it(){let e=document;return e.fullscreenElement??e.webkitFullscreenElement??null}function at(e){if(!(e instanceof Element))return!1;try{return e.matches(`:fullscreen`)}catch{return!1}}function L(e,t){if(t.webkitPresentationMode===`fullscreen`)return!0;let n=it();return n&&(n===e||n===t)||at(e)||at(t)?!0:t.isFullscreen??!1}async function ot(e,n){let r=document;if(e&&(r.fullscreenEnabled||r.webkitFullscreenEnabled)){let n=e;if(t(n.requestFullscreen))return n.requestFullscreen();if(t(n.webkitRequestFullscreen))return n.webkitRequestFullscreen()}let i=n;if(t(i.webkitSetPresentationMode)){i.webkitSetPresentationMode(`fullscreen`);return}let a=n;if(t(a.requestFullscreen))return a.requestFullscreen()}async function R(e){let n=document,r=e;if(r.webkitPresentationMode===`fullscreen`&&t(r.webkitSetPresentationMode)){r.webkitSetPresentationMode(`inline`);return}if(t(n.exitFullscreen))return n.exitFullscreen();if(t(n.webkitExitFullscreen))return n.webkitExitFullscreen();let i=e;if(t(i.exitFullscreen))return i.exitFullscreen()}function st(){if(document.pictureInPictureEnabled){let e=/.*Version\/.*Safari\/.*/.test(navigator.userAgent),t=typeof matchMedia==`function`&&matchMedia(`(display-mode: standalone)`).matches;return!e||!t}return t(document.createElement(`video`).webkitSetPresentationMode)}function ct(e){return t(e.webkitSetPresentationMode)?!0:Ne(e)}function z(e){return e.webkitPresentationMode===`picture-in-picture`||document.pictureInPictureElement===e?!0:e.isPictureInPicture??!1}async function lt(e){let n=e;if(t(n.webkitSetPresentationMode)){n.webkitSetPresentationMode(`picture-in-picture`);return}let r=e;if(t(r.requestPictureInPicture))return r.requestPictureInPicture()}async function B(e){let n=e;if(n.webkitPresentationMode===`picture-in-picture`&&t(n.webkitSetPresentationMode)){n.webkitSetPresentationMode(`inline`);return}if(t(document.exitPictureInPicture))return document.exitPictureInPicture();let r=e;if(t(r.exitPictureInPicture))return r.exitPictureInPicture()}const V=T({name:`fullscreen`,state:({target:e})=>({fullscreen:!1,fullscreenAvailability:`unavailable`,async requestFullscreen(){let{media:t,container:n}=e();return z(t)&&await B(t),ot(n,t)},async exitFullscreen(){let{media:t}=e();return R(t)},async toggleFullscreen(){let{media:t,container:n}=e();return L(n,t)?R(t):(z(t)&&await B(t),ot(n,t))}}),attach({target:e,signal:t,set:n}){let{media:r,container:i}=e;n({fullscreenAvailability:rt()?`available`:`unsupported`});let a=()=>n({fullscreen:L(i,r)});a(),m(document,`fullscreenchange`,a,{signal:t}),m(document,`webkitfullscreenchange`,a,{signal:t}),`webkitPresentationMode`in r&&m(r,`webkitpresentationmodechanged`,a,{signal:t})}}),ut=T({name:`live`,state:()=>({liveEdgeStart:NaN,targetLiveWindow:NaN}),attach({target:e,signal:t,set:n}){let{media:r}=e;if(!Ve(r))return;let i=()=>n({liveEdgeStart:r.liveEdgeStart,targetLiveWindow:r.targetLiveWindow});i(),m(r,`targetlivewindowchange`,i,{signal:t}),m(r,`streamtypechange`,i,{signal:t}),m(r,`loadedmetadata`,i,{signal:t}),m(r,`canplay`,i,{signal:t}),m(r,`progress`,i,{signal:t}),m(r,`durationchange`,i,{signal:t}),m(r,`timeupdate`,i,{signal:t}),m(r,`emptied`,i,{signal:t})}}),H=Symbol(`@videojs/media-title`),U=Symbol(`@videojs/user-title`),dt=Symbol(`@videojs/set-user-title`),W=Symbol(`@videojs/media-poster`),G=Symbol(`@videojs/user-poster`),ft=Symbol(`@videojs/set-user-poster`),K=T({name:`metadata`,config:{title:{action:dt,state:U,html:{attribute:`content-title`}},poster:{action:ft,state:G}},state:({set:e})=>({[H]:void 0,[U]:void 0,[dt]:t=>e({[U]:t}),[W]:void 0,[G]:void 0,[ft]:t=>e({[G]:t})}),derived:{title:({get:e})=>e()[U]??e()[H]??``,poster:({get:e})=>e()[G]??e()[W]??``},attach({target:e,signal:t,set:n}){let{media:r}=e;if(!Be(r))return;let i=()=>n({[H]:r.contentData?.title,[W]:r.contentData?.poster});i(),m(r,`contentdatachange`,i,{signal:t})}}),q=T({name:`pip`,state:({target:e})=>({pip:!1,pipAvailability:`unavailable`,async requestPictureInPicture(){let{media:t,container:n}=e();return L(n,t)&&await R(t),lt(t)},async exitPictureInPicture(){let{media:t}=e();return B(t)},async togglePictureInPicture(){let{media:t,container:n}=e();return z(t)?B(t):(L(n,t)&&await R(t),lt(t))}}),attach({target:e,signal:t,set:n}){let{media:r}=e;n({pipAvailability:st()&&ct(r)?`available`:`unsupported`});let i=()=>n({pip:z(r)});i(),m(r,`enterpictureinpicture`,i,{signal:t}),m(r,`leavepictureinpicture`,i,{signal:t}),`webkitPresentationMode`in r&&m(r,`webkitpresentationmodechanged`,i,{signal:t})}}),J=T({name:`playback`,state:({target:e})=>({paused:!0,ended:!1,started:!1,waiting:!1,play(){return e().media.play()},pause(){let{media:t}=e();E(t)&&t.pause()},togglePaused(){let t=e().media;return E(t)?t.paused?(t.play(),!0):(t.pause(),!1):!1}}),attach({target:e,signal:t,set:n}){let{media:r}=e;if(!E(r)||!D(r)||!O(r))return;let i=()=>n({paused:r.paused,ended:r.ended,started:!r.paused||r.currentTime>0,waiting:r.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&!r.paused});i(),m(r,`emptied`,i,{signal:t}),m(r,`play`,i,{signal:t}),m(r,`pause`,i,{signal:t}),m(r,`ended`,i,{signal:t}),m(r,`playing`,i,{signal:t}),m(r,`waiting`,i,{signal:t}),m(r,`seeked`,i,{signal:t})}}),pt=[.2,.5,.7,1,1.2,1.5,1.7,2],Y=T({name:`playbackRate`,state:({target:e})=>({playbackRates:pt,playbackRate:1,setPlaybackRate(t){let{media:n}=e();Me(n)&&(n.playbackRate=t)}}),attach({target:e,signal:t,set:n}){let{media:r}=e;if(!Me(r))return;let i=()=>n({playbackRate:r.playbackRate});i(),m(r,`ratechange`,i,{signal:t})}});function mt(e,t){return e.id||String(t)}function ht(e){return{...e.id!==void 0&&{id:e.id},...e.width!==void 0&&{width:e.width},...e.height!==void 0&&{height:e.height},...e.bitrate!==void 0&&{bitrate:e.bitrate},...e.frameRate!==void 0&&{frameRate:e.frameRate},...e.codec!==void 0&&{codec:e.codec},selected:e.selected}}function gt(e){return e.width&&e.height?Math.min(e.width,e.height):e.height??e.width}const _t=T({name:`quality`,state:({target:e})=>({videoRenditionList:[],activeVideoRendition:null,selectVideoRendition(t){let{media:n}=e();if(!Fe(n))return;if(t===`auto`){n.videoRenditions.selectedIndex=-1;return}let r=[...n.videoRenditions].findIndex((e,n)=>mt(e,n)===t);r!==-1&&(n.videoRenditions.selectedIndex=r)}}),attach({target:e,signal:t,set:n}){let{media:r}=e,i=null,a=null,o=()=>Fe(r)?r.videoRenditions:null,s=e=>{if(!e)return null;let t=[...e],n=t.find(e=>e.active);if(n)return n;if(!Le(r)||!r.videoWidth&&!r.videoHeight)return null;let i=gt({width:r.videoWidth||void 0,height:r.videoHeight||void 0}),a=t.filter(e=>gt(e)===i);return a.length===1?a[0]:null},c=(e=o())=>{let t=s(e);n({videoRenditionList:e?[...e].map(ht):[],activeVideoRendition:t?ht(t):null})},l=()=>{let e=o();if(e===i){c(e);return}a?.abort(),a=new AbortController,i=e,i&&(m(i,`addrendition`,()=>c(i),{signal:a.signal}),m(i,`removerendition`,()=>c(i),{signal:a.signal}),m(i,`change`,()=>c(i),{signal:a.signal}),m(i,`activechange`,()=>c(i),{signal:a.signal})),c(i)};l(),m(r,`loadstart`,l,{signal:t}),m(r,`resize`,()=>c(i),{signal:t}),t.addEventListener(`abort`,()=>a?.abort(),{once:!0})}}),vt=T({name:`remotePlayback`,state:({target:e})=>({remotePlaybackState:`disconnected`,remotePlaybackAvailability:`unsupported`,async toggleRemotePlayback(){let{media:t,container:n}=e();return Qe(t)?et(t):(L(n,t)&&await R(t),await et(t))}}),attach({target:e,signal:t,set:n}){let{media:r}=e;if(!Re(r))return;if(v(r)){let e=()=>{n({remotePlaybackState:r.webkitCurrentPlaybackTargetIsWireless?`connected`:`disconnected`})};m(r,`webkitplaybacktargetavailabilitychanged`,e=>{let{availability:t}=e;n({remotePlaybackAvailability:t===`available`?`available`:`unavailable`})},{signal:t}),m(r,`webkitcurrentplaybacktargetiswirelesschanged`,e,{signal:t}),e();return}let i=()=>n({remotePlaybackState:r.remote.state});i(),m(r.remote,`connect`,i,{signal:t}),m(r.remote,`connecting`,i,{signal:t}),m(r.remote,`disconnect`,i,{signal:t}),r.remote.watchAvailability(e=>{n({remotePlaybackAvailability:e?`available`:`unavailable`})}).catch(()=>{n({remotePlaybackAvailability:`unsupported`})}),t.addEventListener(`abort`,()=>{r.remote?.cancelWatchAvailability?.().catch(()=>{})})}}),X=T({name:`source`,state:({target:e,signals:t})=>({source:null,canPlay:!1,loadSource(n){t.clear();let{media:r}=e();return O(r)?(r.src=n,r.load(),n):n}}),attach({target:e,signal:t,set:n}){let{media:r}=e;if(!O(r))return;let i=()=>n({source:r.currentSrc||r.src||null,canPlay:r.readyState>=HTMLMediaElement.HAVE_ENOUGH_DATA});i(),m(r,`canplay`,i,{signal:t}),m(r,`canplaythrough`,i,{signal:t}),m(r,`loadstart`,i,{signal:t}),m(r,`emptied`,i,{signal:t})}});function yt(e,t){return e.id||`track:${t}:${e.kind}:${e.language}:${e.label}`}function bt(e){return Array.from(e.textTracks).map((e,t)=>({id:yt(e,t),track:e})).filter(({track:e})=>g(e)).sort((e,t)=>e.track.kind>t.track.kind?1:e.track.kind<t.track.kind?-1:0)}function Z(e,t){for(let{track:n}of e){let e=n===t?`showing`:`disabled`;n.mode!==e&&(n.mode=e)}}function xt(e,t){let n=i(t),r=a(t);n!==`en`&&!n.startsWith(`en-`)&&r.pop();for(let t of r){let n=e.find(({track:e})=>i(e.language)===t);if(n)return n;let r=e.find(({track:e})=>i(e.language).startsWith(`${t}-`));if(r)return r}}const St=T({name:`textTrack`,state:({target:e})=>{let t=null;return{chaptersCues:[],thumbnailCues:[],thumbnailTrackSrc:null,textTrackList:[],subtitlesShowing:!1,toggleSubtitles(n){let{media:r}=e();if(!j(r))return!1;let i=bt(r);if(!i.length)return!1;let a=i.find(({track:e})=>e.mode===`showing`),o=n??!a;if(a&&(t=a.id),!o)return Z(i,null),!1;let s=a??i.find(({id:e})=>e===t)??xt(i,globalThis.navigator?.language??``)??i[0];return t=s.id,Z(i,s.track),!0},selectSubtitlesTrack(n){let{media:r}=e();if(!j(r))return;let i=bt(r);if(!i.length)return;if(n===`off`){let e=i.find(({track:e})=>e.mode===`showing`);e&&(t=e.id),Z(i,null);return}let a=i.find(({id:e})=>e===n);a&&(t=a.id,Z(i,a.track))}}},attach({target:e,signal:t,set:n}){let{media:r}=e;if(!j(r))return;let i=null,a=()=>{i?.abort(),i=new AbortController;let e=null,t=null,o=[],s=!1;for(let n=0;n<r.textTracks.length;n++){let i=r.textTracks[n];!e&&i.kind===`chapters`&&(e=i),!t&&i.kind===`metadata`&&i.label===`thumbnails`&&(t=i),o.push({id:yt(i,n),kind:i.kind,label:i.label,language:i.language,mode:i.mode}),g(i)&&i.mode===`showing`&&(s=!0)}let c=e?.cues?Array.from(e.cues):[],l=t?.cues?Array.from(t.cues):[],u=null;t&&(u=_(r,t)?.src??null);let d=He(r)&&r.querySelectorAll(`track`)||[],f=r instanceof HTMLElement&&r.shadowRoot?.querySelectorAll(`track`)||[];for(let e of[...d,...f])e.track?.cues?.length||m(e,`load`,a,{signal:i.signal});n({chaptersCues:c,thumbnailCues:l,thumbnailTrackSrc:u,textTrackList:o,subtitlesShowing:s})};a();let o=r.textTracks;o instanceof EventTarget&&(m(o,`addtrack`,a,{signal:t}),m(o,`removetrack`,a,{signal:t}),m(o,`change`,a,{signal:t})),m(r,`loadstart`,a,{signal:t}),t.addEventListener(`abort`,()=>i?.abort(),{once:!0})}}),Ct={seek:Symbol.for(`@videojs/seek`)},Q=T({name:`time`,state:({target:e,signals:t,set:n})=>({currentTime:0,duration:0,seeking:!1,async seek(r){let{media:i}=e(),a=t.supersede(Ct.seek);if(!D(i)||!O(i))return 0;if(!Ae(i)&&!await C(i,`loadedmetadata`,{signal:a}).catch(()=>!1))return i.currentTime;let o=Math.max(0,Math.min(r,i.duration||1/0));return n({currentTime:o,seeking:!0}),i.currentTime=o,await C(i,`seeked`,{signal:a}).catch(h),i.currentTime}}),attach({target:e,signal:t,set:n,get:r}){let{media:i}=e;if(!D(i))return;let a=()=>{let{duration:e}=i;if(e===1/0&&A(i)){let{seekable:e}=i;return e.length>0?e.end(e.length-1):0}return Number.isFinite(e)?e:0},o=()=>n({currentTime:i.currentTime,duration:a(),seeking:i.seeking}),s=()=>{r().seeking||o()};o(),m(i,`timeupdate`,s,{signal:t}),m(i,`durationchange`,o,{signal:t}),m(i,`seeking`,o,{signal:t}),m(i,`seeked`,o,{signal:t}),m(i,`loadedmetadata`,o,{signal:t}),m(i,`emptied`,o,{signal:t}),m(i,`progress`,s,{signal:t})}}),$=T({name:`volume`,state:({target:e})=>({volume:1,muted:!1,volumeAvailability:`unavailable`,mutedAvailability:`unavailable`,setVolume(t){let{media:n}=e();if(!k(n))return 0;let r=Math.max(0,Math.min(1,t));return r>0&&n.muted&&(n.muted=!1),n.volume=r,n.volume},toggleMuted(){let{media:t}=e();return je(t)?k(t)?(t.muted||t.volume===0?(t.muted=!1,t.volume===0&&(t.volume=.25)):t.muted=!0,t.muted):(t.muted=!t.muted,t.muted):!1}}),attach({target:e,signal:t,set:n}){let{media:r}=e,i=k(r),a=je(r);if(!i&&!a)return;n({volumeAvailability:i?wt():`unavailable`,mutedAvailability:a?`available`:`unavailable`});let o=()=>n({volume:i?r.volume:1,muted:a?r.muted:!1});o(),m(r,`volumechange`,o,{signal:t})}});function wt(){let e=document.createElement(`video`);try{return e.volume=.5,e.volume===.5?`available`:`unsupported`}catch{return`unsupported`}}const Tt=[J,Y,_t,Ge,$,Q,X,M,V,q,vt,F,St,I,K],Et=[J,Y,$,Q,X,M,I,K],Dt=[],Ot=[J,$,Q,X,M,V,q,vt,F,St,I,ut,K];var kt=class{#e;#t;#n;#r;#i=h;constructor(e,t,n){this.#e=e,this.#n=t,this.#t=n,e.addController(this)}get value(){return this.#t?(this.#r??=this.#t(this.#n.current),this.#r):this.#n.current}track(e){this.#n=e,this.#a()}hostConnected(){this.#a()}hostDisconnected(){this.#i(),this.#i=h,this.#r=void 0}#a(){if(this.#i(),!this.#t){this.#i=this.#n.subscribe(()=>this.#e.requestUpdate());return}let e=this.#t;this.#r=e(this.#n.current),this.#i=this.#n.subscribe(()=>{let t=e(this.#n.current);o(this.#r,t)||(this.#r=t,this.#e.requestUpdate())})}},At=class{#e;#t;#n;constructor(e,t,n){this.#e=n??h,Ee(t)?(this.#n=t,this.#t=null):(this.#n=null,this.#t=new s(e,{context:t,callback:e=>this.#e(e),subscribe:!1})),e.addController(this)}get value(){return this.#t?this.#t.value??null:this.#n}hostConnected(){this.#n&&this.#e(this.#n)}},jt=class{#e;#t;#n;#r=null;constructor(e,t,n){this.#e=e,this.#t=n,this.#n=new At(e,t,e=>this.#i(e)),e.addController(this)}get value(){let t=this.#n.value;if(e(t))throw Error(`Store not available`);return r(this.#t)?t:this.#r.value}hostConnected(){}#i(e){r(this.#t)||(this.#r?this.#r.track(e.$state):this.#r=new kt(this.#e,e.$state,this.#t))}},Mt=class{#e;#t;#n;#r=null;constructor(e,t,n){this.#e=e,this.#t=n,this.#n=new s(e,{context:t,callback:e=>this.#i(e),subscribe:!0}),e.addController(this)}get value(){let e=this.#n.value;if(e)return this.#t?this.#r?.value:e}get displayName(){return this.#t?.displayName}hostConnected(){let e=this.#n.value;e&&this.#i(e)}hostDisconnected(){this.#r=null}#i(e){!this.#r&&this.#t&&(this.#r=new jt(this.#e,e,this.#t))}};function Nt(e){return Object.entries(e).map(([e,t])=>{let n=t.html?.attribute??f(e);return{property:p(n),attribute:n,entry:t}})}function Pt(t){let n=Nt(t.config);return r=>{class i extends r{static{this.properties={...r.properties,...Object.fromEntries(n.map(({property:e,attribute:t})=>[e,{type:String,attribute:t}]))}}#e=t.factory();#t=null;#n=null;#r=null;#i=null;#a=!1;#o=e=>{this.#r!==e&&(this.#r=e,this.#l.setValue({media:e,setMedia:this.#o}),this.#d())};#s=e=>{this.#i!==e&&(this.#i=e,this.#u.setValue({container:e,setContainer:this.#s}),this.#d())};#c=new d(this,{context:t.playerContext,initialValue:this.store});#l=new d(this,{context:t.mediaContext,initialValue:{media:this.#r,setMedia:this.#o}});#u=new d(this,{context:t.containerContext,initialValue:{container:this.#i,setContainer:this.#s}});get store(){return e(this.#e)&&(this.#e=t.factory()),this.#e}connectedCallback(){this.#p(),super.connectedCallback(),this.#c.setValue(this.store),this.#l.setValue({media:this.#r,setMedia:this.#o}),this.#u.setValue({container:this.#i,setContainer:this.#s}),this.#d(),this.#m()}disconnectedCallback(){super.disconnectedCallback(),this.#f()}destroyCallback(){this.#f(),this.#e?.destroy(),this.#e=null,super.destroyCallback()}willUpdate(e){super.willUpdate(e);for(let{property:t,entry:r}of n)e.has(t)&&ke(this.store,r,this[t])}#d(){let e=this.#e;if(!e)return;if(!this.#r){this.#f();return}let t={media:this.#r,container:this.#i},n=e.target?.media!==t.media,r=e.target?.container!==t.container;(n||r)&&(this.#f(),this.#n=e.attach(t))}#f(){this.#n?.(),this.#n=null}#p(){let e=this.store;if(this.#t!==e){for(let{property:t,entry:r}of n)ke(e,r,this[t]);this.#t=e}}#m(){this.#r||this.#a||(this.#a=!0,queueMicrotask(()=>{if(this.#a=!1,this.#r)return;let e=this.querySelector(`video, audio`);e&&this.#o(e)}))}}return i}}function Ft(e){let t=ue(...e.features),n=Oe(e.features);function r(){return Ce()(t)}return{context:l,create:r,PlayerController:Mt,ProviderMixin:Pt({playerContext:l,mediaContext:c,containerContext:u,factory:r,config:n})}}export{fe as A,M as C,ze as D,D as E,ie as M,se as N,T as O,Ye as S,A as T,K as _,Dt as a,I as b,$ as c,X as d,vt as f,q as g,J as h,Et as i,le as j,be as k,Q as l,Y as m,Mt as n,Ot as o,_t as p,kt as r,Tt as s,Ft as t,St as u,ut as v,Ge as w,F as x,V as y};
|
|
2
|
+
//# sourceMappingURL=create-player-BU8LDJDL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-player-BU8LDJDL.js","names":["#base","#keys","hasOwnProp","#current","#markPending","#listeners","#pending","TAP_THRESHOLD","#target","#bindings","#subscribers","#recognizers","#connect","#maybeDisconnect","#disconnect","#host","#state","#selector","#cached","#subscribe","#unsubscribe","#onAvailable","#directStore","#consumer","ContextConsumer","#host","#selector","#accessor","#connect","#snapshot","#host","#selector","#consumer","ContextConsumer","#connect","#store","#media","#mediaProvider","#setMedia","#tryAttach","#container","#containerProvider","#setContainer","ContextProvider","#store","#syncInitialConfig","#playerProvider","#queueFallbackDiscovery","#detachStore","#detach","#configuredStore","#fallbackQueued"],"sources":["../../utils/dist/dom/event.js","../../utils/dist/dom/interactive.js","../../utils/dist/dom/time-ranges.js","../../store/dist/default/core/abort-controller-registry.js","../../store/dist/default/core/combine.js","../../store/dist/default/core/errors.js","../../store/dist/default/core/slice.js","../../store/dist/default/core/state.js","../../store/dist/default/core/store.js","../../core/dist/default/dom/feature.js","../../media/dist/default/core/predicate.js","../../core/dist/default/dom/store/features/audio-track.js","../../core/dist/default/dom/store/features/buffer.js","../../core/dist/default/dom/gesture/region.js","../../core/dist/default/dom/gesture/coordinator.js","../../core/dist/default/dom/presentation/remote-playback.js","../../core/dist/default/dom/store/features/controls.js","../../core/dist/default/dom/store/features/error.js","../../core/dist/default/dom/presentation/fullscreen.js","../../core/dist/default/dom/presentation/pip.js","../../core/dist/default/dom/store/features/fullscreen.js","../../core/dist/default/dom/store/features/live.js","../../core/dist/default/dom/store/features/metadata.js","../../core/dist/default/dom/store/features/pip.js","../../core/dist/default/dom/store/features/playback.js","../../core/dist/default/dom/store/features/playback-rate.js","../../core/dist/default/dom/store/features/quality.js","../../core/dist/default/dom/store/features/remote-playback.js","../../core/dist/default/dom/store/features/source.js","../../core/dist/default/dom/store/features/text-track.js","../../core/dist/default/dom/store/signal-keys.js","../../core/dist/default/dom/store/features/time.js","../../core/dist/default/dom/store/features/volume.js","../../core/dist/default/dom/store/features/presets.js","../../store/dist/default/html/controllers/snapshot-controller.js","../../store/dist/default/html/store-accessor.js","../../store/dist/default/html/controllers/store-controller.js","../src/player/player-controller.ts","../src/store/provider-mixin.ts","../src/player/create-player.ts"],"sourcesContent":["//#region src/dom/event.ts\n/** Resolve the deepest event target, preferring composedPath for shadow DOM. */\nfunction resolveEventTarget(event) {\n\tconst path = event.composedPath();\n\treturn path.length > 0 ? path[0] : event.target;\n}\nfunction onEvent(target, type, options) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst handleAbort = () => {\n\t\t\treject(options?.signal?.reason ?? \"Aborted\");\n\t\t};\n\t\tif (options?.signal?.aborted) {\n\t\t\thandleAbort();\n\t\t\treturn;\n\t\t}\n\t\toptions?.signal?.addEventListener(\"abort\", handleAbort, { once: true });\n\t\ttarget.addEventListener(type, (event) => {\n\t\t\toptions?.signal?.removeEventListener(\"abort\", handleAbort);\n\t\t\tresolve(event);\n\t\t}, {\n\t\t\t...options,\n\t\t\tonce: true\n\t\t});\n\t});\n}\n//#endregion\nexport { onEvent, resolveEventTarget };\n\n//# sourceMappingURL=event.js.map","import { resolveEventTarget } from \"./event.js\";\n//#region src/dom/interactive.ts\nconst INTERACTIVE_SELECTOR = [\n\t\"button\",\n\t\"input\",\n\t\"select\",\n\t\"textarea\",\n\t\"a[href]\",\n\t\"[role=\\\"button\\\"]\",\n\t\"[role=\\\"menu\\\"]\",\n\t\"[role=\\\"menuitem\\\"]\",\n\t\"[role=\\\"menuitemcheckbox\\\"]\",\n\t\"[role=\\\"menuitemradio\\\"]\",\n\t\"[role=\\\"slider\\\"]\",\n\t\"[data-interactive]\"\n].join(\",\");\nconst EDITABLE_SELECTOR = [\n\t\"textarea\",\n\t\"select\",\n\t\"input:not([type])\",\n\t...[\n\t\t\"text\",\n\t\t\"search\",\n\t\t\"url\",\n\t\t\"tel\",\n\t\t\"email\",\n\t\t\"password\",\n\t\t\"number\"\n\t].map((type) => `input[type=\"${type}\"]`),\n\t\"[contenteditable]:not([contenteditable=\\\"false\\\"])\"\n].join(\",\");\nfunction isEditableElement(el) {\n\treturn el.matches(EDITABLE_SELECTOR);\n}\n/** Whether the keyboard event target is an editable element (input, textarea, etc). */\nfunction isEditableTarget(event) {\n\tconst target = resolveEventTarget(event);\n\treturn target instanceof Element && isEditableElement(target);\n}\n/** Whether the event originated from an interactive control (button, slider, etc). */\nfunction isInteractiveTarget(event) {\n\tconst target = resolveEventTarget(event);\n\tif (!(target instanceof Element)) return false;\n\treturn target.closest(INTERACTIVE_SELECTOR) !== null;\n}\nconst ACTIVATION_KEYS = /* @__PURE__ */ new Set([\" \", \"Enter\"]);\n/**\n* Selector for elements that use Space/Enter as a native activation key.\n* Narrower than `INTERACTIVE_SELECTOR` — excludes editable elements like\n* `input`, `textarea`, `select` where Space/Enter is text input, not activation.\n*/\nconst ACTIVATABLE_SELECTOR = \"button,a[href],[role=\\\"slider\\\"],[role=\\\"button\\\"]\";\n/** Whether the event is an activation key on an activatable element (button, link, slider). */\nfunction isInteractiveActivation(event) {\n\tif (!ACTIVATION_KEYS.has(event.key)) return false;\n\tconst target = resolveEventTarget(event);\n\treturn target instanceof Element && target.matches(ACTIVATABLE_SELECTOR);\n}\n//#endregion\nexport { EDITABLE_SELECTOR, INTERACTIVE_SELECTOR, isEditableElement, isEditableTarget, isInteractiveActivation, isInteractiveTarget };\n\n//# sourceMappingURL=interactive.js.map","//#region src/dom/time-ranges.ts\n/** Converts a TimeRanges object to an array of [start, end] tuples. */\nfunction serializeTimeRanges(ranges) {\n\tconst result = [];\n\tfor (let i = 0; i < ranges.length; i++) result.push([ranges.start(i), ranges.end(i)]);\n\treturn result;\n}\n//#endregion\nexport { serializeTimeRanges };\n\n//# sourceMappingURL=time-ranges.js.map","import { anyAbortSignal } from \"@videojs/utils/events\";\n//#region src/core/abort-controller-registry.ts\nvar AbortControllerRegistry = class {\n\t#base;\n\t#keys = /* @__PURE__ */ new Map();\n\t/** The attach-scoped signal. Aborts on detach or reattach. */\n\tget base() {\n\t\treturn (this.#base ??= new AbortController()).signal;\n\t}\n\t/** Clears all keyed signals, leaving base intact. */\n\tclear() {\n\t\tfor (const controller of this.#keys.values()) controller.abort();\n\t\tthis.#keys.clear();\n\t}\n\t/** Resets base and clears all keyed signals. */\n\treset() {\n\t\tthis.clear();\n\t\tthis.#base?.abort();\n\t\tthis.#base = void 0;\n\t}\n\t/** Creates a new signal for the key, superseding any previous signal. */\n\tsupersede(key) {\n\t\tthis.#keys.get(key)?.abort();\n\t\tconst controller = new AbortController();\n\t\tthis.#keys.set(key, controller);\n\t\treturn anyAbortSignal([this.base, controller.signal]);\n\t}\n};\n//#endregion\nexport { AbortControllerRegistry };\n\n//# sourceMappingURL=abort-controller-registry.js.map","//#region src/core/combine.ts\n/**\n* Combines multiple slices into a single slice.\n*\n* @param slices - The slices to combine.\n* @returns A new slice that represents the combination of the input slices.\n*/\nfunction combine(...slices) {\n\tconst derivedDefinitions = slices.map((slice) => slice.derived ?? {});\n\treturn {\n\t\tstate: (ctx) => {\n\t\t\tconst states = slices.map((slice) => slice.state(ctx));\n\t\t\treturn Object.assign({}, ...states);\n\t\t},\n\t\tpreserve: Array.from(new Set(slices.flatMap((slice) => slice.preserve ?? []))),\n\t\tderived: Object.assign({}, ...derivedDefinitions),\n\t\tattach: (ctx) => {\n\t\t\tfor (const slice of slices) try {\n\t\t\t\tslice.attach?.(ctx);\n\t\t\t} catch (err) {\n\t\t\t\tctx.reportError(err);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\nexport { combine };\n\n//# sourceMappingURL=combine.js.map","//#region src/core/errors.ts\nvar StoreError = class extends Error {\n\tcode;\n\tcause;\n\tconstructor(code, options) {\n\t\tsuper(options?.message ?? code);\n\t\tthis.name = \"StoreError\";\n\t\tthis.code = code;\n\t\tthis.cause = options?.cause;\n\t}\n};\nfunction isStoreError(error) {\n\treturn error instanceof StoreError;\n}\nfunction throwNoTargetError() {\n\tthrow new StoreError(\"NO_TARGET\");\n}\nfunction throwDestroyedError() {\n\tthrow new StoreError(\"DESTROYED\");\n}\n//#endregion\nexport { StoreError, isStoreError, throwDestroyedError, throwNoTargetError };\n\n//# sourceMappingURL=errors.js.map","//#region src/core/slice.ts\nfunction defineSlice() {\n\treturn ((config) => config);\n}\n//#endregion\nexport { defineSlice };\n\n//# sourceMappingURL=slice.js.map","import { shallowEqual } from \"@videojs/utils/object\";\nimport { noop } from \"@videojs/utils/function\";\n//#region src/core/state.ts\nlet isFlushScheduled = false;\nfunction scheduleFlush() {\n\tif (isFlushScheduled) return;\n\tisFlushScheduled = true;\n\tqueueMicrotask(flush);\n}\nconst pendingContainers = /* @__PURE__ */ new Set();\nfunction flush() {\n\tisFlushScheduled = false;\n\tfor (const container of pendingContainers) container.flush();\n\tpendingContainers.clear();\n}\nconst hasOwnProp = Object.prototype.hasOwnProperty;\nvar StateContainer = class {\n\t#current;\n\t#listeners = /* @__PURE__ */ new Set();\n\t#pending = false;\n\tconstructor(initial) {\n\t\tthis.#current = Object.freeze({ ...initial });\n\t}\n\tget current() {\n\t\treturn this.#current;\n\t}\n\tpatch(partial) {\n\t\tconst next = { ...this.#current };\n\t\tlet changed = false;\n\t\tfor (const key of Reflect.ownKeys(partial)) {\n\t\t\tif (!hasOwnProp.call(partial, key)) continue;\n\t\t\tconst value = partial[key];\n\t\t\tif (!Object.is(this.#current[key], value)) {\n\t\t\t\tnext[key] = value;\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}\n\t\tif (changed) {\n\t\t\tthis.#current = Object.freeze(next);\n\t\t\tthis.#markPending();\n\t\t}\n\t}\n\treplace(next) {\n\t\tif (shallowEqual(this.#current, next)) return;\n\t\tthis.#current = Object.freeze({ ...next });\n\t\tthis.#markPending();\n\t}\n\tsubscribe(callback, options) {\n\t\tconst signal = options?.signal;\n\t\tif (signal?.aborted) return noop;\n\t\tthis.#listeners.add(callback);\n\t\tif (!signal) return () => this.#listeners.delete(callback);\n\t\tconst onAbort = () => this.#listeners.delete(callback);\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\treturn () => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tthis.#listeners.delete(callback);\n\t\t};\n\t}\n\tflush() {\n\t\tif (!this.#pending) return;\n\t\tthis.#pending = false;\n\t\tfor (const fn of this.#listeners) fn();\n\t}\n\t#markPending() {\n\t\tthis.#pending = true;\n\t\tpendingContainers.add(this);\n\t\tscheduleFlush();\n\t}\n};\nfunction createState(initial) {\n\treturn new StateContainer(initial);\n}\nfunction isState(value) {\n\treturn value instanceof StateContainer;\n}\n//#endregion\nexport { createState, flush, isState };\n\n//# sourceMappingURL=state.js.map","import { AbortControllerRegistry } from \"./abort-controller-registry.js\";\nimport { throwDestroyedError, throwNoTargetError } from \"./errors.js\";\nimport { createState } from \"./state.js\";\nimport { isNull, isObject } from \"@videojs/utils/predicate\";\n//#region src/core/store.ts\nconst STORE_SYMBOL = Symbol.for(\"@videojs/store\");\nconst hasOwnProp = Object.prototype.hasOwnProperty;\nfunction createStore() {\n\treturn ((slice, options = {}) => {\n\t\tlet target = null;\n\t\tlet destroyed = false;\n\t\tconst setupAbort = new AbortController();\n\t\tconst signals = new AbortControllerRegistry();\n\t\tlet sourceState;\n\t\tlet state;\n\t\tfunction validate() {\n\t\t\tif (destroyed) throwDestroyedError();\n\t\t\tif (!target) throwNoTargetError();\n\t\t}\n\t\tconst initialSourceState = freezeCopy(slice.state({\n\t\t\ttarget: () => {\n\t\t\t\tvalidate();\n\t\t\t\treturn target;\n\t\t\t},\n\t\t\tsignals,\n\t\t\tget: () => sourceState,\n\t\t\tset: (partial) => setSource(partial)\n\t\t}));\n\t\tsourceState = initialSourceState;\n\t\tconst initialDerivedState = derive(sourceState);\n\t\tstate = createState(publish(sourceState, initialDerivedState));\n\t\tconst store = {\n\t\t\t[STORE_SYMBOL]: true,\n\t\t\tget $state() {\n\t\t\t\treturn state;\n\t\t\t},\n\t\t\tget target() {\n\t\t\t\treturn target;\n\t\t\t},\n\t\t\tget destroyed() {\n\t\t\t\treturn destroyed;\n\t\t\t},\n\t\t\tget state() {\n\t\t\t\treturn state.current;\n\t\t\t},\n\t\t\tattach,\n\t\t\tdestroy,\n\t\t\tsubscribe\n\t\t};\n\t\tfor (const key of Object.keys(state.current)) Object.defineProperty(store, key, {\n\t\t\tget: () => state.current[key],\n\t\t\tenumerable: true\n\t\t});\n\t\tfor (const key of Object.getOwnPropertySymbols(sourceState)) {\n\t\t\tif (typeof sourceState[key] !== \"function\") continue;\n\t\t\tObject.defineProperty(store, key, { get: () => sourceState[key] });\n\t\t}\n\t\ttry {\n\t\t\toptions.onSetup?.({\n\t\t\t\tstore,\n\t\t\t\tsignal: setupAbort.signal\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treportError(error);\n\t\t}\n\t\treturn store;\n\t\tfunction derive(source) {\n\t\t\tconst result = {};\n\t\t\tconst definitions = slice.derived;\n\t\t\tif (!definitions) return result;\n\t\t\tconst ctx = { get: () => source };\n\t\t\tfor (const key of Object.keys(definitions)) result[key] = definitions[key](ctx);\n\t\t\treturn result;\n\t\t}\n\t\tfunction publish(source, derived) {\n\t\t\tconst result = {};\n\t\t\tfor (const key of Object.keys(source)) result[key] = source[key];\n\t\t\treturn Object.assign(result, derived);\n\t\t}\n\t\tfunction setSource(partial) {\n\t\t\tconst patched = patchSource(sourceState, partial);\n\t\t\tif (!patched) return;\n\t\t\tconst nextDerived = derive(patched.next);\n\t\t\tsourceState = patched.next;\n\t\t\tstate.replace(publish(sourceState, nextDerived));\n\t\t}\n\t\tfunction attach(newTarget) {\n\t\t\tif (destroyed) throwDestroyedError();\n\t\t\tsignals.reset();\n\t\t\ttarget = newTarget;\n\t\t\tconst attachContext = {\n\t\t\t\ttarget: newTarget,\n\t\t\t\tsignal: signals.base,\n\t\t\t\tget: () => sourceState,\n\t\t\t\tset: (partial) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tsetSource(partial);\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treportError(error);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\treportError,\n\t\t\t\tstore: {\n\t\t\t\t\tget state() {\n\t\t\t\t\t\treturn state.current;\n\t\t\t\t\t},\n\t\t\t\t\tsubscribe\n\t\t\t\t}\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tslice.attach?.(attachContext);\n\t\t\t} catch (error) {\n\t\t\t\treportError(error);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\toptions.onAttach?.({\n\t\t\t\t\tstore,\n\t\t\t\t\ttarget: newTarget,\n\t\t\t\t\tsignal: signals.base\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\treportError(error);\n\t\t\t}\n\t\t\treturn detach;\n\t\t}\n\t\tfunction detach() {\n\t\t\tif (isNull(target)) return;\n\t\t\tsignals.reset();\n\t\t\ttarget = null;\n\t\t\tconst resetState = { ...initialSourceState };\n\t\t\tfor (const key of slice.preserve ?? []) resetState[key] = sourceState[key];\n\t\t\tsetSource(resetState);\n\t\t}\n\t\tfunction destroy() {\n\t\t\tif (destroyed) return;\n\t\t\tdestroyed = true;\n\t\t\tdetach();\n\t\t\tsetupAbort.abort();\n\t\t}\n\t\tfunction subscribe(callback, options) {\n\t\t\treturn state.subscribe(callback, options);\n\t\t}\n\t\tfunction reportError(error) {\n\t\t\tif (options.onError) options.onError({\n\t\t\t\tstore,\n\t\t\t\terror\n\t\t\t});\n\t\t\telse console.error(\"[vjs-store]\", error);\n\t\t}\n\t});\n}\nfunction freezeCopy(value) {\n\treturn Object.freeze({ ...value });\n}\nfunction patchSource(current, partial) {\n\tconst next = { ...current };\n\tlet changed = false;\n\tfor (const key of Reflect.ownKeys(partial)) {\n\t\tif (!hasOwnProp.call(partial, key)) continue;\n\t\tconst value = partial[key];\n\t\tif (Object.is(current[key], value)) continue;\n\t\tnext[key] = value;\n\t\tchanged = true;\n\t}\n\treturn changed ? { next: Object.freeze(next) } : null;\n}\nfunction isStore(value) {\n\treturn isObject(value) && STORE_SYMBOL in value;\n}\n//#endregion\nexport { createStore, isStore };\n\n//# sourceMappingURL=store.js.map","import { defineSlice } from \"@videojs/store\";\nimport { isUndefined } from \"@videojs/utils/predicate\";\n//#region src/dom/feature.ts\nconst definePlayerSlice = defineSlice();\nfunction definePlayerFeature(definition, defaultConfig) {\n\tif (arguments.length === 1) {\n\t\tconst feature = definition;\n\t\tconst preserved = Object.values(feature.config ?? {}).map((entry) => entry.state);\n\t\treturn {\n\t\t\t...feature,\n\t\t\t...preserved.length > 0 ? { preserve: preserved } : {}\n\t\t};\n\t}\n\tconst { name, state, attach } = definition;\n\tconst forConfig = (featureConfig) => definePlayerSlice({\n\t\t...isUndefined(name) ? {} : { name },\n\t\tstate: (ctx) => state(ctx, featureConfig),\n\t\t...attach ? { attach: (ctx) => attach(ctx, featureConfig) } : {}\n\t});\n\tconst defaultFeature = forConfig(defaultConfig);\n\tconst feature = ((featureConfig) => isUndefined(featureConfig) ? defaultFeature : forConfig(featureConfig));\n\tfeature.state = defaultFeature.state;\n\tif (defaultFeature.attach) feature.attach = defaultFeature.attach;\n\tif (!isUndefined(name)) Object.defineProperty(feature, \"name\", { value: name });\n\treturn feature;\n}\n/** Merge the configuration declarations from the selected player features. */\nfunction combinePlayerFeatureConfigs(features) {\n\tconst definitions = features.map((feature) => feature.config ?? {});\n\treturn Object.assign({}, ...definitions);\n}\n/** Forward one configuration input through its feature-owned private action. */\nfunction setPlayerConfigValue(store, entry, value) {\n\tconst action = store[entry.action];\n\tif (typeof action !== \"function\") throw new TypeError(`Missing config action \"${String(entry.action)}\"`);\n\taction(value);\n}\n//#endregion\nexport { combinePlayerFeatureConfigs, definePlayerFeature, setPlayerConfigValue };\n\n//# sourceMappingURL=feature.js.map","import { EMPTY_REMOTE, EMPTY_TEXT_TRACKS, EMPTY_TIME_RANGES } from \"./constants.js\";\nimport { isFunction, isObject, isUndefined } from \"@videojs/utils/predicate\";\n//#region src/core/predicate.ts\nfunction hasMetadata(media) {\n\treturn media.readyState >= 1;\n}\nfunction isMediaPauseCapable(value) {\n\tif (!isObject(value)) return false;\n\tconst media = value;\n\treturn !isUndefined(media.paused) && !isUndefined(media.ended) && isFunction(media.pause);\n}\nfunction isMediaSeekCapable(value) {\n\tif (!isObject(value)) return false;\n\tconst media = value;\n\treturn !isUndefined(media.currentTime) && !isUndefined(media.duration) && !isUndefined(media.seeking);\n}\nfunction isMediaSourceCapable(value) {\n\tif (!isObject(value)) return false;\n\tconst media = value;\n\treturn !isUndefined(media.src) && !isUndefined(media.currentSrc) && !isUndefined(media.readyState) && isFunction(media.load);\n}\nfunction isMediaVolumeCapable(value) {\n\tif (!isObject(value)) return false;\n\tconst media = value;\n\treturn !isUndefined(media.volume) && !isUndefined(media.muted);\n}\n/**\n* Whether the media reports a mute at all, which is a narrower question than\n* `isMediaVolumeCapable`: an embed can take a mute command while offering no way\n* to set a level.\n*/\nfunction isMediaMutedCapable(value) {\n\tif (!isObject(value)) return false;\n\treturn !isUndefined(value.muted);\n}\nfunction isMediaPlaybackRateCapable(value) {\n\tif (!isObject(value)) return false;\n\treturn !isUndefined(value.playbackRate);\n}\n/**\n* Only `requestPictureInPicture` is required. A native video element carries it\n* but leaves exiting to `document`, so demanding the pair would rule out the one\n* media that most certainly can.\n*/\nfunction isMediaPictureInPictureCapable(value) {\n\tif (!isObject(value)) return false;\n\treturn isFunction(value.requestPictureInPicture);\n}\nfunction isMediaBufferCapable(value) {\n\tif (!isObject(value)) return false;\n\tconst media = value;\n\treturn !isUndefined(media.buffered) && media.buffered !== EMPTY_TIME_RANGES && !isUndefined(media.seekable) && media.seekable !== EMPTY_TIME_RANGES;\n}\nfunction isMediaErrorCapable(value) {\n\tif (!isObject(value)) return false;\n\treturn !isUndefined(value.error);\n}\nfunction isMediaTextTrackCapable(value) {\n\tif (!isObject(value)) return false;\n\tconst media = value;\n\treturn !isUndefined(media.textTracks) && media.textTracks !== EMPTY_TEXT_TRACKS;\n}\nfunction isMediaVideoRenditionCapable(value) {\n\tif (!isObject(value)) return false;\n\treturn !isUndefined(value.videoRenditions);\n}\nfunction isMediaAudioTrackCapable(value) {\n\tif (!isObject(value)) return false;\n\treturn !isUndefined(value.audioTracks);\n}\nfunction isMediaVideoDimensionsCapable(value) {\n\tif (!isObject(value)) return false;\n\tconst media = value;\n\treturn !isUndefined(media.videoWidth) && !isUndefined(media.videoHeight);\n}\nfunction isMediaRemotePlaybackCapable(value) {\n\tif (!isObject(value)) return false;\n\tconst media = value;\n\treturn isObject(media.remote) && media.remote !== EMPTY_REMOTE;\n}\nfunction isMediaStreamTypeCapable(value) {\n\tif (!isObject(value)) return false;\n\treturn !isUndefined(value.streamType);\n}\nfunction isMediaContentDataCapable(value) {\n\tif (!isObject(value)) return false;\n\treturn !isUndefined(value.contentData);\n}\nfunction isMediaLiveCapable(value) {\n\tif (!isObject(value)) return false;\n\tconst media = value;\n\treturn !isUndefined(media.liveEdgeStart) && !isUndefined(media.targetLiveWindow);\n}\nfunction isQuerySelectorAllCapable(value) {\n\treturn isObject(value) && \"querySelectorAll\" in value && isFunction(value.querySelectorAll);\n}\n//#endregion\nexport { hasMetadata, isMediaAudioTrackCapable, isMediaBufferCapable, isMediaContentDataCapable, isMediaErrorCapable, isMediaLiveCapable, isMediaMutedCapable, isMediaPauseCapable, isMediaPictureInPictureCapable, isMediaPlaybackRateCapable, isMediaRemotePlaybackCapable, isMediaSeekCapable, isMediaSourceCapable, isMediaStreamTypeCapable, isMediaTextTrackCapable, isMediaVideoDimensionsCapable, isMediaVideoRenditionCapable, isMediaVolumeCapable, isQuerySelectorAllCapable };\n\n//# sourceMappingURL=predicate.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { listen } from \"@videojs/utils/dom\";\nimport { isMediaAudioTrackCapable } from \"@videojs/media\";\n//#region src/dom/store/features/audio-track.ts\nfunction getTrackValue(track, index) {\n\treturn track.id || String(index);\n}\nfunction toMediaTrack(track) {\n\treturn {\n\t\t...track.id !== void 0 && { id: track.id },\n\t\t...track.kind !== void 0 && { kind: track.kind },\n\t\tlabel: track.label,\n\t\tlanguage: track.language,\n\t\tenabled: track.enabled\n\t};\n}\nconst audioTrackFeature = definePlayerFeature({\n\tname: \"audioTrack\",\n\tstate: ({ target }) => ({\n\t\taudioTrackList: [],\n\t\tselectAudioTrack(value) {\n\t\t\tconst { media } = target();\n\t\t\tif (!isMediaAudioTrackCapable(media)) return;\n\t\t\tconst tracks = [...media.audioTracks];\n\t\t\tconst track = tracks.find((candidate, index) => getTrackValue(candidate, index) === value);\n\t\t\tif (!track) return;\n\t\t\tfor (const candidate of tracks) candidate.enabled = candidate === track;\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tlet audioTracks = null;\n\t\tlet cleanup = null;\n\t\tconst getAudioTracks = () => isMediaAudioTrackCapable(media) ? media.audioTracks : null;\n\t\tconst sync = (list = getAudioTracks()) => {\n\t\t\tset({ audioTrackList: list ? [...list].map(toMediaTrack) : [] });\n\t\t};\n\t\tconst bind = () => {\n\t\t\tconst nextAudioTracks = getAudioTracks();\n\t\t\tif (nextAudioTracks === audioTracks) {\n\t\t\t\tsync(nextAudioTracks);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup?.abort();\n\t\t\tcleanup = new AbortController();\n\t\t\taudioTracks = nextAudioTracks;\n\t\t\tif (audioTracks) {\n\t\t\t\tlisten(audioTracks, \"addtrack\", () => sync(audioTracks), { signal: cleanup.signal });\n\t\t\t\tlisten(audioTracks, \"removetrack\", () => sync(audioTracks), { signal: cleanup.signal });\n\t\t\t\tlisten(audioTracks, \"change\", () => sync(audioTracks), { signal: cleanup.signal });\n\t\t\t}\n\t\t\tsync(audioTracks);\n\t\t};\n\t\tbind();\n\t\tlisten(media, \"loadstart\", bind, { signal });\n\t\tsignal.addEventListener(\"abort\", () => cleanup?.abort(), { once: true });\n\t}\n});\n//#endregion\nexport { audioTrackFeature };\n\n//# sourceMappingURL=audio-track.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { listen, serializeTimeRanges } from \"@videojs/utils/dom\";\nimport { isMediaBufferCapable } from \"@videojs/media\";\n//#region src/dom/store/features/buffer.ts\nconst bufferFeature = definePlayerFeature({\n\tname: \"buffer\",\n\tstate: () => ({\n\t\tbuffered: [],\n\t\tseekable: []\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaBufferCapable(media)) return;\n\t\tconst sync = () => set({\n\t\t\tbuffered: serializeTimeRanges(media.buffered),\n\t\t\tseekable: serializeTimeRanges(media.seekable)\n\t\t});\n\t\tsync();\n\t\tlisten(media, \"progress\", sync, { signal });\n\t\tlisten(media, \"emptied\", sync, { signal });\n\t}\n});\n//#endregion\nexport { bufferFeature };\n\n//# sourceMappingURL=buffer.js.map","//#region src/dom/gesture/region.ts\n/**\n* Determine which named region a pointer position falls into.\n*\n* Regions divide the container width equally based on how many are active:\n* - `left` + `right` → halves (50% / 50%)\n* - `left` + `center` + `right` → thirds (33% / 34% / 33%)\n*\n* Single region: `left` covers the left half, `right` the right half,\n* and `center` covers the full surface. Partial two-region combos\n* (e.g. `left` + `center`) use the same natural zones — positions outside\n* all active zones return `null` so full-surface gestures can handle them.\n*/\nfunction resolveRegion(clientX, containerRect, activeRegions) {\n\tif (activeRegions.size === 0) return null;\n\tconst relativeX = clientX - containerRect.left;\n\tconst width = containerRect.width;\n\tif (width === 0) return null;\n\tconst ratio = relativeX / width;\n\tif (activeRegions.size === 2 && activeRegions.has(\"left\") && activeRegions.has(\"right\")) return ratio < .5 ? \"left\" : \"right\";\n\tif (activeRegions.size === 3) {\n\t\tif (ratio < 1 / 3) return \"left\";\n\t\tif (ratio < 2 / 3) return \"center\";\n\t\treturn \"right\";\n\t}\n\tif (activeRegions.has(\"left\") && ratio < .5) return \"left\";\n\tif (activeRegions.has(\"right\") && ratio >= .5) return \"right\";\n\tif (activeRegions.has(\"center\")) {\n\t\tif (activeRegions.size === 1) return \"center\";\n\t\tif (ratio >= 1 / 3 && ratio < 2 / 3) return \"center\";\n\t}\n\treturn null;\n}\n//#endregion\nexport { resolveRegion };\n\n//# sourceMappingURL=region.js.map","import { resolveRegion } from \"./region.js\";\nimport { isInteractiveTarget, listen } from \"@videojs/utils/dom\";\n//#region src/dom/gesture/coordinator.ts\nconst TAP_THRESHOLD = 250;\nvar GestureCoordinator = class {\n\t#target;\n\t#bindings = [];\n\t#recognizers = /* @__PURE__ */ new Set();\n\t#disconnect = null;\n\t#subscribers = /* @__PURE__ */ new Set();\n\tconstructor(target) {\n\t\tthis.#target = target;\n\t}\n\tget bindings() {\n\t\treturn this.#bindings;\n\t}\n\tsubscribe(callback) {\n\t\tthis.#subscribers.add(callback);\n\t\treturn () => this.#subscribers.delete(callback);\n\t}\n\t/**\n\t* Whether a registered binding claims this tap for the given action. A claimed tap\n\t* belongs to the gesture layer, so callers should leave it alone. Taps on interactive\n\t* targets (buttons, sliders) are never claimed — the same filtering the pointerup\n\t* listener applies. A disabled binding still claims: disabling a gesture opts out of\n\t* the action, it doesn't hand the tap back to a fallback handler.\n\t*/\n\tclaimsTap(event, action) {\n\t\tif (isInteractiveTarget(event)) return false;\n\t\treturn this.#bindings.some((b) => b.type === \"tap\" && b.action === action && (!b.pointer || b.pointer === event.pointerType));\n\t}\n\tadd(binding) {\n\t\tconst wrapped = {\n\t\t\t...binding,\n\t\t\tonActivate: (event) => {\n\t\t\t\tif (this.#subscribers.size > 0) {\n\t\t\t\t\tconst activateEvent = {\n\t\t\t\t\t\ttype: binding.type,\n\t\t\t\t\t\tsource: \"gesture\",\n\t\t\t\t\t\taction: binding.action,\n\t\t\t\t\t\tvalue: binding.value,\n\t\t\t\t\t\tregion: binding.region,\n\t\t\t\t\t\tpointer: binding.pointer,\n\t\t\t\t\t\tevent\n\t\t\t\t\t};\n\t\t\t\t\tfor (const cb of this.#subscribers) try {\n\t\t\t\t\t\tcb(activateEvent);\n\t\t\t\t\t} catch (error) {}\n\t\t\t\t}\n\t\t\t\tbinding.onActivate(event);\n\t\t\t}\n\t\t};\n\t\tthis.#bindings.push(wrapped);\n\t\tthis.#recognizers.add(wrapped.recognizer);\n\t\tthis.#connect();\n\t\tlet removed = false;\n\t\treturn () => {\n\t\t\tif (removed) return;\n\t\t\tremoved = true;\n\t\t\tconst idx = this.#bindings.indexOf(wrapped);\n\t\t\tif (idx !== -1) this.#bindings.splice(idx, 1);\n\t\t\tthis.#maybeDisconnect();\n\t\t};\n\t}\n\t#connect() {\n\t\tif (this.#disconnect) return;\n\t\tthis.#disconnect = new AbortController();\n\t\tconst { signal } = this.#disconnect;\n\t\tlet pointerDownTime = 0;\n\t\tlisten(this.#target, \"pointerdown\", (event) => {\n\t\t\tif (event.button !== 0) return;\n\t\t\tpointerDownTime = Date.now();\n\t\t}, { signal });\n\t\tlisten(this.#target, \"pointerup\", (event) => {\n\t\t\tif (event.button !== 0) return;\n\t\t\tif (Date.now() - pointerDownTime > TAP_THRESHOLD) return;\n\t\t\tif (isInteractiveTarget(event)) return;\n\t\t\tconst pointerType = event.pointerType;\n\t\t\tconst clientX = event.clientX;\n\t\t\tconst target = this.#target;\n\t\t\tconst bindings = this.#bindings;\n\t\t\tconst matches = { resolve: (type) => matchBindings(bindings, type, pointerType, clientX, target) };\n\t\t\tfor (const recognizer of this.#recognizers) recognizer.handleUp(matches, event);\n\t\t}, { signal });\n\t}\n\t#maybeDisconnect() {\n\t\tif (this.#bindings.length > 0) return;\n\t\tfor (const recognizer of this.#recognizers) recognizer.reset();\n\t\tthis.#recognizers.clear();\n\t\tthis.#disconnect?.abort();\n\t\tthis.#disconnect = null;\n\t}\n};\nconst coordinators = /* @__PURE__ */ new WeakMap();\n/** Look up the gesture coordinator for a target element, if one exists. */\nfunction findGestureCoordinator(target) {\n\treturn coordinators.get(target);\n}\nfunction getGestureCoordinator(target) {\n\tlet coordinator = coordinators.get(target);\n\tif (!coordinator) {\n\t\tcoordinator = new GestureCoordinator(target);\n\t\tcoordinators.set(target, coordinator);\n\t}\n\treturn coordinator;\n}\nfunction matchBindings(bindings, type, pointerType, clientX, target) {\n\tconst rect = target.getBoundingClientRect();\n\tconst activeRegions = getActiveRegions(bindings, type, pointerType);\n\tconst region = activeRegions.size > 0 ? resolveRegion(clientX, rect, activeRegions) : null;\n\tconst matches = [];\n\tfor (const binding of bindings) {\n\t\tif (binding.disabled) continue;\n\t\tif (binding.type !== type) continue;\n\t\tif (binding.pointer && binding.pointer !== pointerType) continue;\n\t\tif (binding.region) {\n\t\t\tif (binding.region !== region) continue;\n\t\t} else if (region !== null) continue;\n\t\tmatches.push(binding);\n\t}\n\treturn matches;\n}\nfunction getActiveRegions(bindings, type, pointerType) {\n\tconst regions = /* @__PURE__ */ new Set();\n\tfor (const binding of bindings) {\n\t\tif (binding.disabled) continue;\n\t\tif (binding.type !== type) continue;\n\t\tif (binding.pointer && binding.pointer !== pointerType) continue;\n\t\tif (binding.region) regions.add(binding.region);\n\t}\n\treturn regions;\n}\n//#endregion\nexport { GestureCoordinator, findGestureCoordinator, getGestureCoordinator };\n\n//# sourceMappingURL=coordinator.js.map","import { isObject } from \"@videojs/utils/predicate\";\n//#region src/dom/presentation/remote-playback.ts\nfunction resolveRemote(media) {\n\tconst target = media;\n\tif (isObject(target.remote) && \"state\" in target.remote && \"prompt\" in target.remote) return target.remote;\n}\nfunction isRemotePlaybackConnected(media) {\n\treturn resolveRemote(media)?.state === \"connected\";\n}\nfunction isRemotePlaybackConnecting(media) {\n\treturn resolveRemote(media)?.state === \"connecting\";\n}\nasync function requestRemotePlayback(media) {\n\tconst remote = resolveRemote(media);\n\tif (!remote) throw new DOMException(\"Remote playback not supported\", \"NotSupportedError\");\n\treturn remote.prompt();\n}\n//#endregion\nexport { isRemotePlaybackConnected, isRemotePlaybackConnecting, requestRemotePlayback };\n\n//# sourceMappingURL=remote-playback.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { findGestureCoordinator } from \"../../gesture/coordinator.js\";\nimport { isRemotePlaybackConnected, isRemotePlaybackConnecting } from \"../../presentation/remote-playback.js\";\nimport { listen } from \"@videojs/utils/dom\";\nimport { isNull } from \"@videojs/utils/predicate\";\nimport { isMediaPauseCapable, isMediaRemotePlaybackCapable } from \"@videojs/media\";\n//#region src/dom/store/features/controls.ts\nconst IDLE_DELAY = 2e3;\nconst TAP_THRESHOLD = 250;\nconst TOUCH_SETTLE_DELAY = 500;\nconst controlsActionsByRequest = /* @__PURE__ */ new WeakMap();\nconst controlsFeature = definePlayerFeature({\n\tname: \"controls\",\n\tstate: ({ get, set }) => {\n\t\tconst fallbackRequestControlsLock = () => {\n\t\t\tset({ controlsVisible: true });\n\t\t\treturn () => {};\n\t\t};\n\t\tconst fallbackToggleControls = () => {\n\t\t\tconst next = !get().userActive;\n\t\t\tset({\n\t\t\t\tuserActive: next,\n\t\t\t\tcontrolsVisible: next\n\t\t\t});\n\t\t\treturn next;\n\t\t};\n\t\tconst actions = createControlsActions(fallbackRequestControlsLock, fallbackToggleControls);\n\t\tcontrolsActionsByRequest.set(actions.requestControlsLock, actions);\n\t\treturn {\n\t\t\tuserActive: true,\n\t\t\tcontrolsVisible: true,\n\t\t\trequestControlsLock: actions.requestControlsLock,\n\t\t\ttoggleControls: actions.toggleControls\n\t\t};\n\t},\n\tattach({ target, signal, get, set }) {\n\t\tconst { media, container } = target;\n\t\tif (!isMediaPauseCapable(media) || isNull(container)) return;\n\t\tlet idleTimer;\n\t\tlet controlsLockCount = 0;\n\t\tconst computeVisible = (userActive) => {\n\t\t\treturn controlsLockCount > 0 || userActive || media.paused || isRemotePlaybackConnected(media) || isRemotePlaybackConnecting(media);\n\t\t};\n\t\tfunction clearIdle() {\n\t\t\tclearTimeout(idleTimer);\n\t\t\tidleTimer = void 0;\n\t\t}\n\t\tfunction scheduleIdle() {\n\t\t\tclearIdle();\n\t\t\tif (controlsLockCount > 0) return;\n\t\t\tidleTimer = setTimeout(setInactive, IDLE_DELAY);\n\t\t}\n\t\tfunction setActive() {\n\t\t\tif (!get().userActive) set({\n\t\t\t\tuserActive: true,\n\t\t\t\tcontrolsVisible: true\n\t\t\t});\n\t\t\tscheduleIdle();\n\t\t}\n\t\tfunction setInactive() {\n\t\t\tclearIdle();\n\t\t\tset({\n\t\t\t\tuserActive: false,\n\t\t\t\tcontrolsVisible: computeVisible(false)\n\t\t\t});\n\t\t}\n\t\tfunction requestControlsLock() {\n\t\t\tcontrolsLockCount++;\n\t\t\tclearIdle();\n\t\t\tif (!get().controlsVisible) set({ controlsVisible: true });\n\t\t\tlet released = false;\n\t\t\treturn () => {\n\t\t\t\tif (released || signal.aborted) return;\n\t\t\t\treleased = true;\n\t\t\t\tcontrolsLockCount--;\n\t\t\t\tif (controlsLockCount === 0) setActive();\n\t\t\t};\n\t\t}\n\t\tfunction toggleControls() {\n\t\t\tif (get().controlsVisible) setInactive();\n\t\t\telse setActive();\n\t\t\treturn get().controlsVisible;\n\t\t}\n\t\tconst actions = controlsActionsByRequest.get(get().requestControlsLock);\n\t\tactions.setDelegates(requestControlsLock, toggleControls);\n\t\tlet pointerDownTime = 0;\n\t\tlet lastTouchAt = 0;\n\t\tconst isRecentTouch = () => lastTouchAt > 0 && Date.now() - lastTouchAt < TOUCH_SETTLE_DELAY;\n\t\tfunction onPointerDown(event) {\n\t\t\tpointerDownTime = Date.now();\n\t\t\tif (event.pointerType === \"touch\") lastTouchAt = pointerDownTime;\n\t\t}\n\t\tfunction onPointerUp(event) {\n\t\t\tif (event.pointerType === \"touch\") lastTouchAt = Date.now();\n\t\t\tif (event.pointerType === \"touch\" && Date.now() - pointerDownTime < TAP_THRESHOLD) {\n\t\t\t\tif (findGestureCoordinator(container)?.claimsTap(event, \"toggleControls\")) return;\n\t\t\t\tconst isMediaOrContainer = [media, container].includes(event.target);\n\t\t\t\tif (get().controlsVisible && isMediaOrContainer) setInactive();\n\t\t\t\telse setActive();\n\t\t\t} else setActive();\n\t\t}\n\t\tconst onPlaybackChange = () => {\n\t\t\tconst { userActive } = get();\n\t\t\tset({ controlsVisible: computeVisible(userActive) });\n\t\t\tif (!media.paused && userActive) scheduleIdle();\n\t\t};\n\t\tfunction onPointerMove(event) {\n\t\t\tif (event.pointerType === \"touch\") {\n\t\t\t\tif (get().userActive) scheduleIdle();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsetActive();\n\t\t}\n\t\tlisten(container, \"pointermove\", onPointerMove, { signal });\n\t\tlisten(container, \"pointerdown\", onPointerDown, { signal });\n\t\tlisten(container, \"pointerup\", onPointerUp, { signal });\n\t\tlisten(container, \"keyup\", setActive, { signal });\n\t\tlisten(container, \"focusin\", () => {\n\t\t\tif (isRecentTouch()) return;\n\t\t\tsetActive();\n\t\t}, { signal });\n\t\tlisten(container, \"mouseleave\", () => {\n\t\t\tif (isRecentTouch()) return;\n\t\t\tsetInactive();\n\t\t}, { signal });\n\t\tlisten(media, \"play\", onPlaybackChange, { signal });\n\t\tlisten(media, \"pause\", onPlaybackChange, { signal });\n\t\tlisten(media, \"ended\", onPlaybackChange, { signal });\n\t\tif (isMediaRemotePlaybackCapable(media)) {\n\t\t\tconst onCastChange = () => {\n\t\t\t\tconst { userActive } = get();\n\t\t\t\tset({ controlsVisible: computeVisible(userActive) });\n\t\t\t};\n\t\t\tlisten(media.remote, \"connect\", onCastChange, { signal });\n\t\t\tlisten(media.remote, \"connecting\", onCastChange, { signal });\n\t\t\tlisten(media.remote, \"disconnect\", onCastChange, { signal });\n\t\t}\n\t\tsignal.addEventListener(\"abort\", () => {\n\t\t\tactions.reset();\n\t\t\tcontrolsLockCount = 0;\n\t\t\tclearIdle();\n\t\t}, { once: true });\n\t\tscheduleIdle();\n\t}\n});\nfunction createControlsActions(fallbackRequestControlsLock, fallbackToggleControls) {\n\tlet requestControlsLockDelegate = fallbackRequestControlsLock;\n\tlet toggleControlsDelegate = fallbackToggleControls;\n\tconst locks = /* @__PURE__ */ new Set();\n\tconst requestControlsLock = () => {\n\t\tconst lock = { release: requestControlsLockDelegate() };\n\t\tlet released = false;\n\t\tlocks.add(lock);\n\t\treturn () => {\n\t\t\tif (released) return;\n\t\t\treleased = true;\n\t\t\tlocks.delete(lock);\n\t\t\tlock.release();\n\t\t};\n\t};\n\tconst toggleControls = () => toggleControlsDelegate();\n\tconst actions = {\n\t\trequestControlsLock,\n\t\ttoggleControls,\n\t\tsetDelegates(nextRequestControlsLock, nextToggleControls) {\n\t\t\tif (nextRequestControlsLock !== requestControlsLockDelegate) {\n\t\t\t\trequestControlsLockDelegate = nextRequestControlsLock;\n\t\t\t\tfor (const lock of locks) {\n\t\t\t\t\tlock.release();\n\t\t\t\t\tlock.release = nextRequestControlsLock();\n\t\t\t\t}\n\t\t\t}\n\t\t\ttoggleControlsDelegate = nextToggleControls;\n\t\t},\n\t\treset() {\n\t\t\tactions.setDelegates(fallbackRequestControlsLock, fallbackToggleControls);\n\t\t}\n\t};\n\treturn actions;\n}\n//#endregion\nexport { controlsFeature };\n\n//# sourceMappingURL=controls.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { listen } from \"@videojs/utils/dom\";\nimport { isMediaErrorCapable } from \"@videojs/media\";\n//#region src/dom/store/features/error.ts\nconst errorFeature = definePlayerFeature({\n\tname: \"error\",\n\tstate: ({ set }) => ({\n\t\terror: null,\n\t\tdismissError() {\n\t\t\tset({ error: null });\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaErrorCapable(media)) return;\n\t\tconst syncError = () => set({ error: media.error });\n\t\tlisten(media, \"error\", syncError, { signal });\n\t\tlisten(media, \"emptied\", () => set({ error: null }), { signal });\n\t}\n});\n//#endregion\nexport { errorFeature };\n\n//# sourceMappingURL=error.js.map","import { isFunction } from \"@videojs/utils/predicate\";\n//#region src/dom/presentation/fullscreen.ts\nfunction isFullscreenEnabled() {\n\tconst doc = document;\n\tif (doc.fullscreenEnabled || doc.webkitFullscreenEnabled) return true;\n\treturn isFunction(document.createElement(\"video\").webkitSetPresentationMode);\n}\nfunction getFullscreenElement() {\n\tconst doc = document;\n\treturn doc.fullscreenElement ?? doc.webkitFullscreenElement ?? null;\n}\nfunction matchesFullscreen(element) {\n\tif (!(element instanceof Element)) return false;\n\ttry {\n\t\treturn element.matches(\":fullscreen\");\n\t} catch {\n\t\treturn false;\n\t}\n}\nfunction isFullscreen(container, media) {\n\tif (media.webkitPresentationMode === \"fullscreen\") return true;\n\tconst fullscreenElement = getFullscreenElement();\n\tif (fullscreenElement && (fullscreenElement === container || fullscreenElement === media)) return true;\n\tif (matchesFullscreen(container) || matchesFullscreen(media)) return true;\n\treturn media.isFullscreen ?? false;\n}\nasync function requestFullscreen(container, media) {\n\tconst doc = document;\n\tif (container && (doc.fullscreenEnabled || doc.webkitFullscreenEnabled)) {\n\t\tconst el = container;\n\t\tif (isFunction(el.requestFullscreen)) return el.requestFullscreen();\n\t\tif (isFunction(el.webkitRequestFullscreen)) return el.webkitRequestFullscreen();\n\t}\n\tconst webkitVideo = media;\n\tif (isFunction(webkitVideo.webkitSetPresentationMode)) {\n\t\twebkitVideo.webkitSetPresentationMode(\"fullscreen\");\n\t\treturn;\n\t}\n\tconst video = media;\n\tif (isFunction(video.requestFullscreen)) return video.requestFullscreen();\n}\nasync function exitFullscreen(media) {\n\tconst doc = document;\n\tconst webkitVideo = media;\n\tif (webkitVideo.webkitPresentationMode === \"fullscreen\" && isFunction(webkitVideo.webkitSetPresentationMode)) {\n\t\twebkitVideo.webkitSetPresentationMode(\"inline\");\n\t\treturn;\n\t}\n\tif (isFunction(doc.exitFullscreen)) return doc.exitFullscreen();\n\tif (isFunction(doc.webkitExitFullscreen)) return doc.webkitExitFullscreen();\n\tconst video = media;\n\tif (isFunction(video.exitFullscreen)) return video.exitFullscreen();\n}\n//#endregion\nexport { exitFullscreen, getFullscreenElement, isFullscreen, isFullscreenEnabled, requestFullscreen };\n\n//# sourceMappingURL=fullscreen.js.map","import { isFunction } from \"@videojs/utils/predicate\";\nimport { isMediaPictureInPictureCapable } from \"@videojs/media\";\n//#region src/dom/presentation/pip.ts\nfunction isPictureInPictureEnabled() {\n\tif (document.pictureInPictureEnabled) {\n\t\tconst isSafari = /.*Version\\/.*Safari\\/.*/.test(navigator.userAgent);\n\t\tconst isPWA = typeof matchMedia === \"function\" && matchMedia(\"(display-mode: standalone)\").matches;\n\t\treturn !isSafari || !isPWA;\n\t}\n\treturn isFunction(document.createElement(\"video\").webkitSetPresentationMode);\n}\n/**\n* Whether this media can enter picture-in-picture at all, which is a separate\n* question from whether the browser supports it. Mirrors the branches\n* `requestPictureInPicture` takes below, so anything it would refuse to act on\n* reports as incapable here — an iframe embed whose provider has no\n* picture-in-picture can never enter it, however capable the browser is.\n*/\nfunction isPictureInPictureCapable(media) {\n\tif (isFunction(media.webkitSetPresentationMode)) return true;\n\treturn isMediaPictureInPictureCapable(media);\n}\nfunction isPictureInPicture(media) {\n\tif (media.webkitPresentationMode === \"picture-in-picture\") return true;\n\tif (document.pictureInPictureElement === media) return true;\n\treturn media.isPictureInPicture ?? false;\n}\nasync function requestPictureInPicture(media) {\n\tconst webkitVideo = media;\n\tif (isFunction(webkitVideo.webkitSetPresentationMode)) {\n\t\twebkitVideo.webkitSetPresentationMode(\"picture-in-picture\");\n\t\treturn;\n\t}\n\tconst video = media;\n\tif (isFunction(video.requestPictureInPicture)) return video.requestPictureInPicture();\n}\nasync function exitPictureInPicture(media) {\n\tconst webkitVideo = media;\n\tif (webkitVideo.webkitPresentationMode === \"picture-in-picture\" && isFunction(webkitVideo.webkitSetPresentationMode)) {\n\t\twebkitVideo.webkitSetPresentationMode(\"inline\");\n\t\treturn;\n\t}\n\tif (isFunction(document.exitPictureInPicture)) return document.exitPictureInPicture();\n\tconst video = media;\n\tif (isFunction(video.exitPictureInPicture)) return video.exitPictureInPicture();\n}\n//#endregion\nexport { exitPictureInPicture, isPictureInPicture, isPictureInPictureCapable, isPictureInPictureEnabled, requestPictureInPicture };\n\n//# sourceMappingURL=pip.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { exitFullscreen, isFullscreen, isFullscreenEnabled, requestFullscreen } from \"../../presentation/fullscreen.js\";\nimport { exitPictureInPicture, isPictureInPicture } from \"../../presentation/pip.js\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/fullscreen.ts\nconst fullscreenFeature = definePlayerFeature({\n\tname: \"fullscreen\",\n\tstate: ({ target }) => ({\n\t\tfullscreen: false,\n\t\tfullscreenAvailability: \"unavailable\",\n\t\tasync requestFullscreen() {\n\t\t\tconst { media, container } = target();\n\t\t\tif (isPictureInPicture(media)) await exitPictureInPicture(media);\n\t\t\treturn requestFullscreen(container, media);\n\t\t},\n\t\tasync exitFullscreen() {\n\t\t\tconst { media } = target();\n\t\t\treturn exitFullscreen(media);\n\t\t},\n\t\tasync toggleFullscreen() {\n\t\t\tconst { media, container } = target();\n\t\t\tif (isFullscreen(container, media)) return exitFullscreen(media);\n\t\t\tif (isPictureInPicture(media)) await exitPictureInPicture(media);\n\t\t\treturn requestFullscreen(container, media);\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media, container } = target;\n\t\tset({ fullscreenAvailability: isFullscreenEnabled() ? \"available\" : \"unsupported\" });\n\t\tconst sync = () => set({ fullscreen: isFullscreen(container, media) });\n\t\tsync();\n\t\tlisten(document, \"fullscreenchange\", sync, { signal });\n\t\tlisten(document, \"webkitfullscreenchange\", sync, { signal });\n\t\tif (\"webkitPresentationMode\" in media) listen(media, \"webkitpresentationmodechanged\", sync, { signal });\n\t}\n});\n//#endregion\nexport { fullscreenFeature };\n\n//# sourceMappingURL=fullscreen.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { listen } from \"@videojs/utils/dom\";\nimport { isMediaLiveCapable } from \"@videojs/media\";\n//#region src/dom/store/features/live.ts\n/**\n* Player feature exposing `liveEdgeStart` and `targetLiveWindow` in store\n* state for media that implements `MediaLiveCapability` (currently\n* `HlsJsMedia` and its delegates).\n*\n* - `liveEdgeStart` — presentation time marking the start of the Live Edge\n* Window. Playing at the live edge when `currentTime >= liveEdgeStart`.\n* `NaN` when the stream isn't live or the value is unknown.\n* - `targetLiveWindow` — `0` for standard latency live, `Infinity` for DVR,\n* `NaN` for on-demand or unknown.\n*\n* Included by the {@link liveVideoFeatures} and {@link liveAudioFeatures}\n* presets; apps can also compose it into a custom preset.\n*\n* @see https://github.com/video-dev/media-ui-extensions/blob/main/proposals/0007-live-edge.md\n*/\nconst liveFeature = definePlayerFeature({\n\tname: \"live\",\n\tstate: () => ({\n\t\tliveEdgeStart: NaN,\n\t\ttargetLiveWindow: NaN\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaLiveCapable(media)) return;\n\t\tconst sync = () => set({\n\t\t\tliveEdgeStart: media.liveEdgeStart,\n\t\t\ttargetLiveWindow: media.targetLiveWindow\n\t\t});\n\t\tsync();\n\t\tlisten(media, \"targetlivewindowchange\", sync, { signal });\n\t\tlisten(media, \"streamtypechange\", sync, { signal });\n\t\tlisten(media, \"loadedmetadata\", sync, { signal });\n\t\tlisten(media, \"canplay\", sync, { signal });\n\t\tlisten(media, \"progress\", sync, { signal });\n\t\tlisten(media, \"durationchange\", sync, { signal });\n\t\tlisten(media, \"timeupdate\", sync, { signal });\n\t\tlisten(media, \"emptied\", sync, { signal });\n\t}\n});\n//#endregion\nexport { liveFeature };\n\n//# sourceMappingURL=live.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { listen } from \"@videojs/utils/dom\";\nimport { isMediaContentDataCapable } from \"@videojs/media\";\n//#region src/dom/store/features/metadata.ts\nconst MEDIA_TITLE = Symbol(\"@videojs/media-title\");\nconst USER_TITLE = Symbol(\"@videojs/user-title\");\nconst SET_USER_TITLE = Symbol(\"@videojs/set-user-title\");\nconst DEFAULT_TITLE = \"\";\nconst MEDIA_POSTER = Symbol(\"@videojs/media-poster\");\nconst USER_POSTER = Symbol(\"@videojs/user-poster\");\nconst SET_USER_POSTER = Symbol(\"@videojs/set-user-poster\");\nconst DEFAULT_POSTER = \"\";\n/**\n* Resolves content metadata into player state, preferring what the author set\n* over what the media carries. Included in the standard audio, video, and live\n* presets.\n*/\nconst metadataFeature = definePlayerFeature({\n\tname: \"metadata\",\n\tconfig: {\n\t\ttitle: {\n\t\t\taction: SET_USER_TITLE,\n\t\t\tstate: USER_TITLE,\n\t\t\thtml: { attribute: \"content-title\" }\n\t\t},\n\t\tposter: {\n\t\t\taction: SET_USER_POSTER,\n\t\t\tstate: USER_POSTER\n\t\t}\n\t},\n\tstate: ({ set }) => ({\n\t\t[MEDIA_TITLE]: void 0,\n\t\t[USER_TITLE]: void 0,\n\t\t[SET_USER_TITLE]: (value) => set({ [USER_TITLE]: value }),\n\t\t[MEDIA_POSTER]: void 0,\n\t\t[USER_POSTER]: void 0,\n\t\t[SET_USER_POSTER]: (value) => set({ [USER_POSTER]: value })\n\t}),\n\tderived: {\n\t\ttitle: ({ get }) => get()[USER_TITLE] ?? get()[MEDIA_TITLE] ?? DEFAULT_TITLE,\n\t\tposter: ({ get }) => get()[USER_POSTER] ?? get()[MEDIA_POSTER] ?? DEFAULT_POSTER\n\t},\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaContentDataCapable(media)) return;\n\t\tconst sync = () => set({\n\t\t\t[MEDIA_TITLE]: media.contentData?.title,\n\t\t\t[MEDIA_POSTER]: media.contentData?.poster\n\t\t});\n\t\tsync();\n\t\tlisten(media, \"contentdatachange\", sync, { signal });\n\t}\n});\n//#endregion\nexport { metadataFeature };\n\n//# sourceMappingURL=metadata.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { exitFullscreen, isFullscreen } from \"../../presentation/fullscreen.js\";\nimport { exitPictureInPicture, isPictureInPicture, isPictureInPictureCapable, isPictureInPictureEnabled, requestPictureInPicture } from \"../../presentation/pip.js\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/pip.ts\nconst pipFeature = definePlayerFeature({\n\tname: \"pip\",\n\tstate: ({ target }) => ({\n\t\tpip: false,\n\t\tpipAvailability: \"unavailable\",\n\t\tasync requestPictureInPicture() {\n\t\t\tconst { media, container } = target();\n\t\t\tif (isFullscreen(container, media)) await exitFullscreen(media);\n\t\t\treturn requestPictureInPicture(media);\n\t\t},\n\t\tasync exitPictureInPicture() {\n\t\t\tconst { media } = target();\n\t\t\treturn exitPictureInPicture(media);\n\t\t},\n\t\tasync togglePictureInPicture() {\n\t\t\tconst { media, container } = target();\n\t\t\tif (isPictureInPicture(media)) return exitPictureInPicture(media);\n\t\t\tif (isFullscreen(container, media)) await exitFullscreen(media);\n\t\t\treturn requestPictureInPicture(media);\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tset({ pipAvailability: isPictureInPictureEnabled() && isPictureInPictureCapable(media) ? \"available\" : \"unsupported\" });\n\t\tconst sync = () => set({ pip: isPictureInPicture(media) });\n\t\tsync();\n\t\tlisten(media, \"enterpictureinpicture\", sync, { signal });\n\t\tlisten(media, \"leavepictureinpicture\", sync, { signal });\n\t\tif (\"webkitPresentationMode\" in media) listen(media, \"webkitpresentationmodechanged\", sync, { signal });\n\t}\n});\n//#endregion\nexport { pipFeature };\n\n//# sourceMappingURL=pip.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { listen } from \"@videojs/utils/dom\";\nimport { isMediaPauseCapable, isMediaSeekCapable, isMediaSourceCapable } from \"@videojs/media\";\n//#region src/dom/store/features/playback.ts\nconst playbackFeature = definePlayerFeature({\n\tname: \"playback\",\n\tstate: ({ target }) => ({\n\t\tpaused: true,\n\t\tended: false,\n\t\tstarted: false,\n\t\twaiting: false,\n\t\tplay() {\n\t\t\treturn target().media.play();\n\t\t},\n\t\tpause() {\n\t\t\tconst { media } = target();\n\t\t\tif (isMediaPauseCapable(media)) media.pause();\n\t\t},\n\t\ttogglePaused() {\n\t\t\tconst media = target().media;\n\t\t\tif (!isMediaPauseCapable(media)) return false;\n\t\t\tif (media.paused) {\n\t\t\t\tmedia.play();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tmedia.pause();\n\t\t\treturn false;\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaPauseCapable(media) || !isMediaSeekCapable(media) || !isMediaSourceCapable(media)) return;\n\t\tconst sync = () => set({\n\t\t\tpaused: media.paused,\n\t\t\tended: media.ended,\n\t\t\tstarted: !media.paused || media.currentTime > 0,\n\t\t\twaiting: media.readyState < HTMLMediaElement.HAVE_FUTURE_DATA && !media.paused\n\t\t});\n\t\tsync();\n\t\tlisten(media, \"emptied\", sync, { signal });\n\t\tlisten(media, \"play\", sync, { signal });\n\t\tlisten(media, \"pause\", sync, { signal });\n\t\tlisten(media, \"ended\", sync, { signal });\n\t\tlisten(media, \"playing\", sync, { signal });\n\t\tlisten(media, \"waiting\", sync, { signal });\n\t\tlisten(media, \"seeked\", sync, { signal });\n\t}\n});\n//#endregion\nexport { playbackFeature };\n\n//# sourceMappingURL=playback.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { listen } from \"@videojs/utils/dom\";\nimport { isMediaPlaybackRateCapable } from \"@videojs/media\";\n//#region src/dom/store/features/playback-rate.ts\nconst DEFAULT_RATES = [\n\t.2,\n\t.5,\n\t.7,\n\t1,\n\t1.2,\n\t1.5,\n\t1.7,\n\t2\n];\nconst playbackRateFeature = definePlayerFeature({\n\tname: \"playbackRate\",\n\tstate: ({ target }) => ({\n\t\tplaybackRates: DEFAULT_RATES,\n\t\tplaybackRate: 1,\n\t\tsetPlaybackRate(rate) {\n\t\t\tconst { media } = target();\n\t\t\tif (isMediaPlaybackRateCapable(media)) media.playbackRate = rate;\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaPlaybackRateCapable(media)) return;\n\t\tconst sync = () => set({ playbackRate: media.playbackRate });\n\t\tsync();\n\t\tlisten(media, \"ratechange\", sync, { signal });\n\t}\n});\n//#endregion\nexport { playbackRateFeature };\n\n//# sourceMappingURL=playback-rate.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { listen } from \"@videojs/utils/dom\";\nimport { isMediaVideoDimensionsCapable, isMediaVideoRenditionCapable } from \"@videojs/media\";\n//#region src/dom/store/features/quality.ts\nconst QUALITY_AUTO_VALUE = \"auto\";\nfunction getRenditionValue(rendition, index) {\n\treturn rendition.id || String(index);\n}\nfunction toMediaRendition(rendition) {\n\treturn {\n\t\t...rendition.id !== void 0 && { id: rendition.id },\n\t\t...rendition.width !== void 0 && { width: rendition.width },\n\t\t...rendition.height !== void 0 && { height: rendition.height },\n\t\t...rendition.bitrate !== void 0 && { bitrate: rendition.bitrate },\n\t\t...rendition.frameRate !== void 0 && { frameRate: rendition.frameRate },\n\t\t...rendition.codec !== void 0 && { codec: rendition.codec },\n\t\tselected: rendition.selected\n\t};\n}\nfunction getSize(rendition) {\n\tif (rendition.width && rendition.height) return Math.min(rendition.width, rendition.height);\n\treturn rendition.height ?? rendition.width;\n}\nconst qualityFeature = definePlayerFeature({\n\tname: \"quality\",\n\tstate: ({ target }) => ({\n\t\tvideoRenditionList: [],\n\t\tactiveVideoRendition: null,\n\t\tselectVideoRendition(value) {\n\t\t\tconst { media } = target();\n\t\t\tif (!isMediaVideoRenditionCapable(media)) return;\n\t\t\tif (value === QUALITY_AUTO_VALUE) {\n\t\t\t\tmedia.videoRenditions.selectedIndex = -1;\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst index = [...media.videoRenditions].findIndex((rendition, renditionIndex) => getRenditionValue(rendition, renditionIndex) === value);\n\t\t\tif (index !== -1) media.videoRenditions.selectedIndex = index;\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tlet videoRenditions = null;\n\t\tlet cleanup = null;\n\t\tconst getVideoRenditions = () => isMediaVideoRenditionCapable(media) ? media.videoRenditions : null;\n\t\tconst getActiveRendition = (list) => {\n\t\t\tif (!list) return null;\n\t\t\tconst renditions = [...list];\n\t\t\tconst active = renditions.find((rendition) => rendition.active);\n\t\t\tif (active) return active;\n\t\t\tif (!isMediaVideoDimensionsCapable(media) || !media.videoWidth && !media.videoHeight) return null;\n\t\t\tconst size = getSize({\n\t\t\t\twidth: media.videoWidth || void 0,\n\t\t\t\theight: media.videoHeight || void 0\n\t\t\t});\n\t\t\tconst matches = renditions.filter((rendition) => getSize(rendition) === size);\n\t\t\treturn matches.length === 1 ? matches[0] : null;\n\t\t};\n\t\tconst sync = (list = getVideoRenditions()) => {\n\t\t\tconst active = getActiveRendition(list);\n\t\t\tset({\n\t\t\t\tvideoRenditionList: list ? [...list].map(toMediaRendition) : [],\n\t\t\t\tactiveVideoRendition: active ? toMediaRendition(active) : null\n\t\t\t});\n\t\t};\n\t\tconst bind = () => {\n\t\t\tconst nextVideoRenditions = getVideoRenditions();\n\t\t\tif (nextVideoRenditions === videoRenditions) {\n\t\t\t\tsync(nextVideoRenditions);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tcleanup?.abort();\n\t\t\tcleanup = new AbortController();\n\t\t\tvideoRenditions = nextVideoRenditions;\n\t\t\tif (videoRenditions) {\n\t\t\t\tlisten(videoRenditions, \"addrendition\", () => sync(videoRenditions), { signal: cleanup.signal });\n\t\t\t\tlisten(videoRenditions, \"removerendition\", () => sync(videoRenditions), { signal: cleanup.signal });\n\t\t\t\tlisten(videoRenditions, \"change\", () => sync(videoRenditions), { signal: cleanup.signal });\n\t\t\t\tlisten(videoRenditions, \"activechange\", () => sync(videoRenditions), { signal: cleanup.signal });\n\t\t\t}\n\t\t\tsync(videoRenditions);\n\t\t};\n\t\tbind();\n\t\tlisten(media, \"loadstart\", bind, { signal });\n\t\tlisten(media, \"resize\", () => sync(videoRenditions), { signal });\n\t\tsignal.addEventListener(\"abort\", () => cleanup?.abort(), { once: true });\n\t}\n});\n//#endregion\nexport { qualityFeature };\n\n//# sourceMappingURL=quality.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { isRemotePlaybackConnected, requestRemotePlayback } from \"../../presentation/remote-playback.js\";\nimport { exitFullscreen, isFullscreen } from \"../../presentation/fullscreen.js\";\nimport { isWebKitAirPlayCapable, listen } from \"@videojs/utils/dom\";\nimport { isMediaRemotePlaybackCapable } from \"@videojs/media\";\n//#region src/dom/store/features/remote-playback.ts\nconst remotePlaybackFeature = definePlayerFeature({\n\tname: \"remotePlayback\",\n\tstate: ({ target }) => ({\n\t\tremotePlaybackState: \"disconnected\",\n\t\tremotePlaybackAvailability: \"unsupported\",\n\t\tasync toggleRemotePlayback() {\n\t\t\tconst { media, container } = target();\n\t\t\tif (isRemotePlaybackConnected(media)) return requestRemotePlayback(media);\n\t\t\tif (isFullscreen(container, media)) await exitFullscreen(media);\n\t\t\treturn await requestRemotePlayback(media);\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaRemotePlaybackCapable(media)) return;\n\t\tif (isWebKitAirPlayCapable(media)) {\n\t\t\tconst syncConnection = () => {\n\t\t\t\tset({ remotePlaybackState: media.webkitCurrentPlaybackTargetIsWireless ? \"connected\" : \"disconnected\" });\n\t\t\t};\n\t\t\tconst syncAvailability = (event) => {\n\t\t\t\tconst { availability } = event;\n\t\t\t\tset({ remotePlaybackAvailability: availability === \"available\" ? \"available\" : \"unavailable\" });\n\t\t\t};\n\t\t\tlisten(media, \"webkitplaybacktargetavailabilitychanged\", syncAvailability, { signal });\n\t\t\tlisten(media, \"webkitcurrentplaybacktargetiswirelesschanged\", syncConnection, { signal });\n\t\t\tsyncConnection();\n\t\t\treturn;\n\t\t}\n\t\tconst syncState = () => set({ remotePlaybackState: media.remote.state });\n\t\tsyncState();\n\t\tlisten(media.remote, \"connect\", syncState, { signal });\n\t\tlisten(media.remote, \"connecting\", syncState, { signal });\n\t\tlisten(media.remote, \"disconnect\", syncState, { signal });\n\t\tmedia.remote.watchAvailability((available) => {\n\t\t\tset({ remotePlaybackAvailability: available ? \"available\" : \"unavailable\" });\n\t\t}).catch(() => {\n\t\t\tset({ remotePlaybackAvailability: \"unsupported\" });\n\t\t});\n\t\tsignal.addEventListener(\"abort\", () => {\n\t\t\tmedia.remote?.cancelWatchAvailability?.().catch(() => {});\n\t\t});\n\t}\n});\n//#endregion\nexport { remotePlaybackFeature };\n\n//# sourceMappingURL=remote-playback.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { listen } from \"@videojs/utils/dom\";\nimport { isMediaSourceCapable } from \"@videojs/media\";\n//#region src/dom/store/features/source.ts\nconst sourceFeature = definePlayerFeature({\n\tname: \"source\",\n\tstate: ({ target, signals }) => ({\n\t\tsource: null,\n\t\tcanPlay: false,\n\t\tloadSource(src) {\n\t\t\tsignals.clear();\n\t\t\tconst { media } = target();\n\t\t\tif (!isMediaSourceCapable(media)) return src;\n\t\t\tmedia.src = src;\n\t\t\tmedia.load();\n\t\t\treturn src;\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaSourceCapable(media)) return;\n\t\tconst sync = () => set({\n\t\t\tsource: media.currentSrc || media.src || null,\n\t\t\tcanPlay: media.readyState >= HTMLMediaElement.HAVE_ENOUGH_DATA\n\t\t});\n\t\tsync();\n\t\tlisten(media, \"canplay\", sync, { signal });\n\t\tlisten(media, \"canplaythrough\", sync, { signal });\n\t\tlisten(media, \"loadstart\", sync, { signal });\n\t\tlisten(media, \"emptied\", sync, { signal });\n\t}\n});\n//#endregion\nexport { sourceFeature };\n\n//# sourceMappingURL=source.js.map","import { findLocaleKeys, getCanonicalLocaleKey } from \"../../../core/i18n/registry.js\";\nimport { DEFAULT_LOCALE } from \"../../../i18n.js\";\nimport { definePlayerFeature } from \"../../feature.js\";\nimport { findTrackElement, isCaptionOrSubtitleTrack, listen } from \"@videojs/utils/dom\";\nimport { isMediaTextTrackCapable, isQuerySelectorAllCapable } from \"@videojs/media\";\n//#region src/dom/store/features/text-track.ts\nfunction getTrackId(track, index) {\n\treturn track.id || `track:${index}:${track.kind}:${track.language}:${track.label}`;\n}\n/**\n* Caption/subtitle tracks paired with the ids exposed through `textTrackList`,\n* ordered like the captions menu so index-based fallbacks agree with the UI.\n*/\nfunction getSubtitlesTracks(media) {\n\treturn Array.from(media.textTracks).map((track, index) => ({\n\t\tid: getTrackId(track, index),\n\t\ttrack\n\t})).filter(({ track }) => isCaptionOrSubtitleTrack(track)).sort((a, b) => a.track.kind > b.track.kind ? 1 : a.track.kind < b.track.kind ? -1 : 0);\n}\n/** Show at most one caption/subtitle track; passing `null` disables them all. */\nfunction showOnly(tracks, active) {\n\tfor (const { track } of tracks) {\n\t\tconst mode = track === active ? \"showing\" : \"disabled\";\n\t\tif (track.mode !== mode) track.mode = mode;\n\t}\n}\nfunction findLocaleTrack(tracks, locale) {\n\tconst localeKey = getCanonicalLocaleKey(locale);\n\tconst keys = findLocaleKeys(locale);\n\tif (localeKey !== DEFAULT_LOCALE && !localeKey.startsWith(`${DEFAULT_LOCALE}-`)) keys.pop();\n\tfor (const key of keys) {\n\t\tconst exact = tracks.find(({ track }) => getCanonicalLocaleKey(track.language) === key);\n\t\tif (exact) return exact;\n\t\tconst regional = tracks.find(({ track }) => getCanonicalLocaleKey(track.language).startsWith(`${key}-`));\n\t\tif (regional) return regional;\n\t}\n}\nconst textTrackFeature = definePlayerFeature({\n\tname: \"textTrack\",\n\tstate: ({ target }) => {\n\t\tlet lastShownId = null;\n\t\treturn {\n\t\t\tchaptersCues: [],\n\t\t\tthumbnailCues: [],\n\t\t\tthumbnailTrackSrc: null,\n\t\t\ttextTrackList: [],\n\t\t\tsubtitlesShowing: false,\n\t\t\ttoggleSubtitles(forceShow) {\n\t\t\t\tconst { media } = target();\n\t\t\t\tif (!isMediaTextTrackCapable(media)) return false;\n\t\t\t\tconst subtitlesTracks = getSubtitlesTracks(media);\n\t\t\t\tif (!subtitlesTracks.length) return false;\n\t\t\t\tconst showing = subtitlesTracks.find(({ track }) => track.mode === \"showing\");\n\t\t\t\tconst nextShowing = forceShow ?? !showing;\n\t\t\t\tif (showing) lastShownId = showing.id;\n\t\t\t\tif (!nextShowing) {\n\t\t\t\t\tshowOnly(subtitlesTracks, null);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst next = showing ?? subtitlesTracks.find(({ id }) => id === lastShownId) ?? findLocaleTrack(subtitlesTracks, globalThis.navigator?.language ?? \"\") ?? subtitlesTracks[0];\n\t\t\t\tlastShownId = next.id;\n\t\t\t\tshowOnly(subtitlesTracks, next.track);\n\t\t\t\treturn true;\n\t\t\t},\n\t\t\tselectSubtitlesTrack(value) {\n\t\t\t\tconst { media } = target();\n\t\t\t\tif (!isMediaTextTrackCapable(media)) return;\n\t\t\t\tconst subtitlesTracks = getSubtitlesTracks(media);\n\t\t\t\tif (!subtitlesTracks.length) return;\n\t\t\t\tif (value === \"off\") {\n\t\t\t\t\tconst showing = subtitlesTracks.find(({ track }) => track.mode === \"showing\");\n\t\t\t\t\tif (showing) lastShownId = showing.id;\n\t\t\t\t\tshowOnly(subtitlesTracks, null);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst active = subtitlesTracks.find(({ id }) => id === value);\n\t\t\t\tif (!active) return;\n\t\t\t\tlastShownId = active.id;\n\t\t\t\tshowOnly(subtitlesTracks, active.track);\n\t\t\t}\n\t\t};\n\t},\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaTextTrackCapable(media)) return;\n\t\tlet trackCleanup = null;\n\t\tconst sync = () => {\n\t\t\ttrackCleanup?.abort();\n\t\t\ttrackCleanup = new AbortController();\n\t\t\tlet chaptersTrack = null;\n\t\t\tlet thumbnailTrack = null;\n\t\t\tconst textTrackList = [];\n\t\t\tlet subtitlesShowing = false;\n\t\t\tfor (let i = 0; i < media.textTracks.length; i++) {\n\t\t\t\tconst track = media.textTracks[i];\n\t\t\t\tif (!chaptersTrack && track.kind === \"chapters\") chaptersTrack = track;\n\t\t\t\tif (!thumbnailTrack && track.kind === \"metadata\" && track.label === \"thumbnails\") thumbnailTrack = track;\n\t\t\t\ttextTrackList.push({\n\t\t\t\t\tid: getTrackId(track, i),\n\t\t\t\t\tkind: track.kind,\n\t\t\t\t\tlabel: track.label,\n\t\t\t\t\tlanguage: track.language,\n\t\t\t\t\tmode: track.mode\n\t\t\t\t});\n\t\t\t\tif (isCaptionOrSubtitleTrack(track) && track.mode === \"showing\") subtitlesShowing = true;\n\t\t\t}\n\t\t\tconst chaptersCues = chaptersTrack?.cues ? Array.from(chaptersTrack.cues) : [];\n\t\t\tconst thumbnailCues = thumbnailTrack?.cues ? Array.from(thumbnailTrack.cues) : [];\n\t\t\tlet thumbnailTrackSrc = null;\n\t\t\tif (thumbnailTrack) thumbnailTrackSrc = findTrackElement(media, thumbnailTrack)?.src ?? null;\n\t\t\tconst tracks = isQuerySelectorAllCapable(media) && media.querySelectorAll(\"track\") || [];\n\t\t\tconst shadowTracks = media instanceof HTMLElement && media.shadowRoot?.querySelectorAll(\"track\") || [];\n\t\t\tfor (const trackEl of [...tracks, ...shadowTracks]) if (!trackEl.track?.cues?.length) listen(trackEl, \"load\", sync, { signal: trackCleanup.signal });\n\t\t\tset({\n\t\t\t\tchaptersCues,\n\t\t\t\tthumbnailCues,\n\t\t\t\tthumbnailTrackSrc,\n\t\t\t\ttextTrackList,\n\t\t\t\tsubtitlesShowing\n\t\t\t});\n\t\t};\n\t\tsync();\n\t\tconst textTracks = media.textTracks;\n\t\tif (textTracks instanceof EventTarget) {\n\t\t\tlisten(textTracks, \"addtrack\", sync, { signal });\n\t\t\tlisten(textTracks, \"removetrack\", sync, { signal });\n\t\t\tlisten(textTracks, \"change\", sync, { signal });\n\t\t}\n\t\tlisten(media, \"loadstart\", sync, { signal });\n\t\tsignal.addEventListener(\"abort\", () => trackCleanup?.abort(), { once: true });\n\t}\n});\n//#endregion\nexport { textTrackFeature };\n\n//# sourceMappingURL=text-track.js.map","//#region src/dom/store/signal-keys.ts\nconst signalKeys = { seek: Symbol.for(\"@videojs/seek\") };\n//#endregion\nexport { signalKeys };\n\n//# sourceMappingURL=signal-keys.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { signalKeys } from \"../signal-keys.js\";\nimport { listen, onEvent } from \"@videojs/utils/dom\";\nimport { hasMetadata, isMediaBufferCapable, isMediaSeekCapable, isMediaSourceCapable } from \"@videojs/media\";\nimport { noop } from \"@videojs/utils/function\";\n//#region src/dom/store/features/time.ts\nconst timeFeature = definePlayerFeature({\n\tname: \"time\",\n\tstate: ({ target, signals, set }) => ({\n\t\tcurrentTime: 0,\n\t\tduration: 0,\n\t\tseeking: false,\n\t\tasync seek(time) {\n\t\t\tconst { media } = target(), signal = signals.supersede(signalKeys.seek);\n\t\t\tif (!isMediaSeekCapable(media) || !isMediaSourceCapable(media)) return 0;\n\t\t\tif (!hasMetadata(media)) {\n\t\t\t\tif (!await onEvent(media, \"loadedmetadata\", { signal }).catch(() => false)) return media.currentTime;\n\t\t\t}\n\t\t\tconst clampedTime = Math.max(0, Math.min(time, media.duration || Infinity));\n\t\t\tset({\n\t\t\t\tcurrentTime: clampedTime,\n\t\t\t\tseeking: true\n\t\t\t});\n\t\t\tmedia.currentTime = clampedTime;\n\t\t\tawait onEvent(media, \"seeked\", { signal }).catch(noop);\n\t\t\treturn media.currentTime;\n\t\t}\n\t}),\n\tattach({ target, signal, set, get }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaSeekCapable(media)) return;\n\t\tconst resolveDuration = () => {\n\t\t\tconst { duration } = media;\n\t\t\tif (duration === Number.POSITIVE_INFINITY && isMediaBufferCapable(media)) {\n\t\t\t\tconst { seekable } = media;\n\t\t\t\treturn seekable.length > 0 ? seekable.end(seekable.length - 1) : 0;\n\t\t\t}\n\t\t\treturn Number.isFinite(duration) ? duration : 0;\n\t\t};\n\t\tconst sync = () => set({\n\t\t\tcurrentTime: media.currentTime,\n\t\t\tduration: resolveDuration(),\n\t\t\tseeking: media.seeking\n\t\t});\n\t\tconst syncUnlessSeeking = () => {\n\t\t\tif (get().seeking) return;\n\t\t\tsync();\n\t\t};\n\t\tsync();\n\t\tlisten(media, \"timeupdate\", syncUnlessSeeking, { signal });\n\t\tlisten(media, \"durationchange\", sync, { signal });\n\t\tlisten(media, \"seeking\", sync, { signal });\n\t\tlisten(media, \"seeked\", sync, { signal });\n\t\tlisten(media, \"loadedmetadata\", sync, { signal });\n\t\tlisten(media, \"emptied\", sync, { signal });\n\t\tlisten(media, \"progress\", syncUnlessSeeking, { signal });\n\t}\n});\n//#endregion\nexport { timeFeature };\n\n//# sourceMappingURL=time.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { listen } from \"@videojs/utils/dom\";\nimport { isMediaMutedCapable, isMediaVolumeCapable } from \"@videojs/media\";\n//#region src/dom/store/features/volume.ts\n/** Volume to restore when unmuting at zero. */\nconst UNMUTE_VOLUME = .25;\nconst volumeFeature = definePlayerFeature({\n\tname: \"volume\",\n\tstate: ({ target }) => ({\n\t\tvolume: 1,\n\t\tmuted: false,\n\t\tvolumeAvailability: \"unavailable\",\n\t\tmutedAvailability: \"unavailable\",\n\t\tsetVolume(volume) {\n\t\t\tconst { media } = target();\n\t\t\tif (!isMediaVolumeCapable(media)) return 0;\n\t\t\tconst clamped = Math.max(0, Math.min(1, volume));\n\t\t\tif (clamped > 0 && media.muted) media.muted = false;\n\t\t\tmedia.volume = clamped;\n\t\t\treturn media.volume;\n\t\t},\n\t\ttoggleMuted() {\n\t\t\tconst { media } = target();\n\t\t\tif (!isMediaMutedCapable(media)) return false;\n\t\t\tif (!isMediaVolumeCapable(media)) {\n\t\t\t\tmedia.muted = !media.muted;\n\t\t\t\treturn media.muted;\n\t\t\t}\n\t\t\tif (media.muted || media.volume === 0) {\n\t\t\t\tmedia.muted = false;\n\t\t\t\tif (media.volume === 0) media.volume = UNMUTE_VOLUME;\n\t\t\t} else media.muted = true;\n\t\t\treturn media.muted;\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tconst volumeCapable = isMediaVolumeCapable(media);\n\t\tconst mutedCapable = isMediaMutedCapable(media);\n\t\tif (!volumeCapable && !mutedCapable) return;\n\t\tset({\n\t\t\tvolumeAvailability: volumeCapable ? canSetVolume() : \"unavailable\",\n\t\t\tmutedAvailability: mutedCapable ? \"available\" : \"unavailable\"\n\t\t});\n\t\tconst sync = () => set({\n\t\t\tvolume: volumeCapable ? media.volume : 1,\n\t\t\tmuted: mutedCapable ? media.muted : false\n\t\t});\n\t\tsync();\n\t\tlisten(media, \"volumechange\", sync, { signal });\n\t}\n});\n/** Check if volume can be programmatically set (fails on iOS Safari). */\nfunction canSetVolume() {\n\tconst video = document.createElement(\"video\");\n\ttry {\n\t\tvideo.volume = .5;\n\t\treturn video.volume === .5 ? \"available\" : \"unsupported\";\n\t} catch {\n\t\treturn \"unsupported\";\n\t}\n}\n//#endregion\nexport { volumeFeature };\n\n//# sourceMappingURL=volume.js.map","import { audioTrackFeature } from \"./audio-track.js\";\nimport { bufferFeature } from \"./buffer.js\";\nimport { controlsFeature } from \"./controls.js\";\nimport { errorFeature } from \"./error.js\";\nimport { fullscreenFeature } from \"./fullscreen.js\";\nimport { liveFeature } from \"./live.js\";\nimport { metadataFeature } from \"./metadata.js\";\nimport { pipFeature } from \"./pip.js\";\nimport { playbackFeature } from \"./playback.js\";\nimport { playbackRateFeature } from \"./playback-rate.js\";\nimport { qualityFeature } from \"./quality.js\";\nimport { remotePlaybackFeature } from \"./remote-playback.js\";\nimport { sourceFeature } from \"./source.js\";\nimport { textTrackFeature } from \"./text-track.js\";\nimport { timeFeature } from \"./time.js\";\nimport { volumeFeature } from \"./volume.js\";\n//#region src/dom/store/features/presets.ts\nconst videoFeatures = [\n\tplaybackFeature,\n\tplaybackRateFeature,\n\tqualityFeature,\n\taudioTrackFeature,\n\tvolumeFeature,\n\ttimeFeature,\n\tsourceFeature,\n\tbufferFeature,\n\tfullscreenFeature,\n\tpipFeature,\n\tremotePlaybackFeature,\n\tcontrolsFeature,\n\ttextTrackFeature,\n\terrorFeature,\n\tmetadataFeature\n];\nconst audioFeatures = [\n\tplaybackFeature,\n\tplaybackRateFeature,\n\tvolumeFeature,\n\ttimeFeature,\n\tsourceFeature,\n\tbufferFeature,\n\terrorFeature,\n\tmetadataFeature\n];\nconst backgroundFeatures = [];\n/**\n* Features for a live video player. Mirrors {@link videoFeatures} but drops\n* {@link playbackRateFeature} (not meaningful for live) and adds\n* {@link liveFeature} so store consumers can read `liveEdgeStart` and\n* `targetLiveWindow`.\n*/\nconst liveVideoFeatures = [\n\tplaybackFeature,\n\tvolumeFeature,\n\ttimeFeature,\n\tsourceFeature,\n\tbufferFeature,\n\tfullscreenFeature,\n\tpipFeature,\n\tremotePlaybackFeature,\n\tcontrolsFeature,\n\ttextTrackFeature,\n\terrorFeature,\n\tliveFeature,\n\tmetadataFeature\n];\n/**\n* Features for a live audio player. Mirrors {@link audioFeatures} but drops\n* {@link playbackRateFeature} (not meaningful for live) and adds\n* {@link liveFeature} so store consumers can read `liveEdgeStart` and\n* `targetLiveWindow`.\n*/\nconst liveAudioFeatures = [\n\tplaybackFeature,\n\tvolumeFeature,\n\ttimeFeature,\n\tsourceFeature,\n\tbufferFeature,\n\terrorFeature,\n\tliveFeature,\n\tmetadataFeature\n];\n//#endregion\nexport { audioFeatures, backgroundFeatures, liveAudioFeatures, liveVideoFeatures, videoFeatures };\n\n//# sourceMappingURL=presets.js.map","import { shallowEqual } from \"../../core/shallow-equal.js\";\nimport { noop } from \"@videojs/utils/function\";\n//#region src/html/controllers/snapshot-controller.ts\n/**\n* Subscribe to a `State<T>` container with optional selector.\n*\n* Without selector: returns full state, re-renders on any state change.\n* With selector: returns selected slice, re-renders only when the slice changes (shallowEqual).\n*\n* @example\n* ```ts\n* #state = new SnapshotController(this, sliderState, (s) => s.value);\n* ```\n*/\nvar SnapshotController = class {\n\t#host;\n\t#selector;\n\t#state;\n\t#cached;\n\t#unsubscribe = noop;\n\tconstructor(host, state, selector) {\n\t\tthis.#host = host;\n\t\tthis.#state = state;\n\t\tthis.#selector = selector;\n\t\thost.addController(this);\n\t}\n\tget value() {\n\t\tif (!this.#selector) return this.#state.current;\n\t\tthis.#cached ??= this.#selector(this.#state.current);\n\t\treturn this.#cached;\n\t}\n\t/** Switch to tracking a different state container. */\n\ttrack(state) {\n\t\tthis.#state = state;\n\t\tthis.#subscribe();\n\t}\n\thostConnected() {\n\t\tthis.#subscribe();\n\t}\n\thostDisconnected() {\n\t\tthis.#unsubscribe();\n\t\tthis.#unsubscribe = noop;\n\t\tthis.#cached = void 0;\n\t}\n\t#subscribe() {\n\t\tthis.#unsubscribe();\n\t\tif (!this.#selector) {\n\t\t\tthis.#unsubscribe = this.#state.subscribe(() => this.#host.requestUpdate());\n\t\t\treturn;\n\t\t}\n\t\tconst selector = this.#selector;\n\t\tthis.#cached = selector(this.#state.current);\n\t\tthis.#unsubscribe = this.#state.subscribe(() => {\n\t\t\tconst next = selector(this.#state.current);\n\t\t\tif (!shallowEqual(this.#cached, next)) {\n\t\t\t\tthis.#cached = next;\n\t\t\t\tthis.#host.requestUpdate();\n\t\t\t}\n\t\t});\n\t}\n};\n//#endregion\nexport { SnapshotController };\n\n//# sourceMappingURL=snapshot-controller.js.map","import { isStore } from \"../core/store.js\";\nimport { noop } from \"@videojs/utils/function\";\nimport { ContextConsumer } from \"@videojs/element/context\";\n//#region src/html/store-accessor.ts\n/**\n* Resolves a store from either a direct instance or context.\n*\n* When given a direct store, provides immediate access.\n* When given a context, sets up a ContextConsumer to receive the store.\n*\n* @example Direct store\n* ```ts\n* const accessor = new StoreAccessor(host, store, (s) => console.log('available', s));\n* accessor.value; // Store (immediately available)\n* ```\n*\n* @example Context source\n* ```ts\n* const accessor = new StoreAccessor(host, context, (s) => console.log('available', s));\n* accessor.value; // null until context provides store\n* ```\n*/\nvar StoreAccessor = class {\n\t#onAvailable;\n\t#consumer;\n\t#directStore;\n\tconstructor(host, source, onAvailable) {\n\t\tthis.#onAvailable = onAvailable ?? noop;\n\t\tif (isStore(source)) {\n\t\t\tthis.#directStore = source;\n\t\t\tthis.#consumer = null;\n\t\t} else {\n\t\t\tthis.#directStore = null;\n\t\t\tthis.#consumer = new ContextConsumer(host, {\n\t\t\t\tcontext: source,\n\t\t\t\tcallback: (store) => this.#onAvailable(store),\n\t\t\t\tsubscribe: false\n\t\t\t});\n\t\t}\n\t\thost.addController(this);\n\t}\n\t/** Returns the store, or null if not yet available from context. */\n\tget value() {\n\t\tif (this.#consumer) return this.#consumer.value ?? null;\n\t\treturn this.#directStore;\n\t}\n\thostConnected() {\n\t\tif (this.#directStore) this.#onAvailable(this.#directStore);\n\t}\n};\n//#endregion\nexport { StoreAccessor };\n\n//# sourceMappingURL=store-accessor.js.map","import { SnapshotController } from \"./snapshot-controller.js\";\nimport { StoreAccessor } from \"../store-accessor.js\";\nimport { isNull, isUndefined } from \"@videojs/utils/predicate\";\n//#region src/html/controllers/store-controller.ts\n/**\n* Access store state and actions.\n*\n* Without selector: Returns the store, does NOT subscribe to changes.\n* With selector: Returns selected state, triggers update when selected state changes (shallowEqual).\n*\n* @example\n* ```ts\n* // Store access (no subscription) - access actions\n* class Controls extends LitElement {\n* #store = new StoreController(this, storeSource);\n*\n* handleClick() {\n* this.#store.value.setVolume(0.5);\n* }\n* }\n*\n* // Selector-based subscription - re-renders when playback changes\n* class PlayButton extends LitElement {\n* #playback = new StoreController(this, storeSource, selectPlayback);\n*\n* render() {\n* const playback = this.#playback.value;\n* if (!playback) return nothing;\n* return html`<button @click=${playback.toggle}>\n* ${playback.paused ? 'Play' : 'Pause'}\n* </button>`;\n* }\n* }\n* ```\n*/\nvar StoreController = class {\n\t#host;\n\t#selector;\n\t#accessor;\n\t#snapshot = null;\n\tconstructor(host, source, selector) {\n\t\tthis.#host = host;\n\t\tthis.#selector = selector;\n\t\tthis.#accessor = new StoreAccessor(host, source, (store) => this.#connect(store));\n\t\thost.addController(this);\n\t}\n\tget value() {\n\t\tconst store = this.#accessor.value;\n\t\tif (isNull(store)) throw new Error(\"Store not available\");\n\t\tif (isUndefined(this.#selector)) return store;\n\t\treturn this.#snapshot.value;\n\t}\n\thostConnected() {}\n\t#connect(store) {\n\t\tif (isUndefined(this.#selector)) return;\n\t\tif (!this.#snapshot) this.#snapshot = new SnapshotController(this.#host, store.$state, this.#selector);\n\t\telse this.#snapshot.track(store.$state);\n\t}\n};\n//#endregion\nexport { StoreController };\n\n//# sourceMappingURL=store-controller.js.map","import type { PlayerStore } from '@videojs/core/dom';\nimport type { ReactiveController, ReactiveControllerHost } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { InferStoreState, Selector } from '@videojs/store';\nimport { StoreController } from '@videojs/store/html';\n\nimport type { PlayerContext } from './context';\n\nexport type PlayerControllerHost = ReactiveControllerHost & HTMLElement;\n\n/**\n * Reactive controller for accessing player store state.\n *\n * Without selector: Returns the store, does NOT subscribe to changes.\n * With selector: Returns selected state, subscribes with shallowEqual comparison.\n *\n * @example\n * ```ts\n * // Store access (no subscription)\n * class Controls extends MediaElement {\n * #player = new PlayerController(this, playerContext);\n *\n * handleClick() {\n * this.#player.value.setVolume(0.5);\n * }\n * }\n *\n * // Selector-based subscription\n * class PlayButton extends MediaElement {\n * #playback = new PlayerController(this, playerContext, selectPlayback);\n * }\n * ```\n */\nexport class PlayerController<Store extends PlayerStore, Result = Store> implements ReactiveController {\n readonly #host: PlayerControllerHost;\n readonly #selector: Selector<InferStoreState<Store>, Result> | undefined;\n\n #consumer: ContextConsumer<PlayerContext<Store>, PlayerControllerHost>;\n #store: StoreController<Store, Result> | null = null;\n\n /**\n * @label Without Selector\n * @param host - The host element that owns this controller.\n * @param context - Player context to resolve the store from.\n */\n constructor(host: PlayerControllerHost, context: PlayerContext<Store>);\n /**\n * @label With Selector\n * @param host - The host element that owns this controller.\n * @param context - Player context to resolve the store from.\n * @param selector - Derives a value from the player store state.\n */\n constructor(\n host: PlayerControllerHost,\n context: PlayerContext<Store>,\n selector: Selector<InferStoreState<Store>, Result>\n );\n constructor(\n host: PlayerControllerHost,\n context: PlayerContext<Store>,\n selector?: Selector<InferStoreState<Store>, Result>\n ) {\n this.#host = host;\n this.#selector = selector;\n\n this.#consumer = new ContextConsumer(host, {\n context,\n callback: (ctx) => this.#connect(ctx),\n subscribe: true,\n });\n\n host.addController(this);\n }\n\n get value(): Result | undefined {\n const store = this.#consumer.value;\n if (!store) return undefined;\n\n // Without selector: return store directly\n if (!this.#selector) return store as unknown as Result;\n\n // With selector: use StoreController\n return this.#store?.value;\n }\n\n get displayName(): string | undefined {\n return this.#selector?.displayName;\n }\n\n hostConnected(): void {\n const store = this.#consumer.value;\n if (store) this.#connect(store);\n }\n\n hostDisconnected(): void {\n this.#store = null;\n }\n\n #connect(store: Store): void {\n if (!this.#store && this.#selector) {\n this.#store = new StoreController(this.#host, store, this.#selector);\n }\n }\n}\n\nexport namespace PlayerController {\n export type Host = PlayerControllerHost;\n\n export type Constructor<Store extends PlayerStore = PlayerStore, Result = Store> = typeof PlayerController<\n Store,\n Result\n >;\n}\n","import {\n type MediaContainer,\n type PlayerFeatureConfig,\n type PlayerStore,\n type PlayerTarget,\n setPlayerConfigValue,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport type { Media } from '@videojs/media/dom';\nimport { isNull } from '@videojs/utils/predicate';\nimport { camelCase, kebabCase } from '@videojs/utils/string';\nimport type { MediaElementConstructor } from '@/ui/media-element';\nimport type { ContainerContext, MediaContext, PlayerContext } from '../player/context';\nimport type { PlayerProviderConstructor } from './types';\n\nexport interface ProviderMixinConfig<Store extends PlayerStore> {\n playerContext: PlayerContext<Store>;\n mediaContext: MediaContext;\n containerContext: ContainerContext;\n factory: () => Store;\n config: PlayerFeatureConfig;\n}\n\nexport type ProviderMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(\n BaseClass: Class\n) => Class & PlayerProviderConstructor<Store>;\n\n/** One configuration input, under the names it goes by on the element. */\ninterface ConfigInput {\n /** Reactive property mirroring the attribute. */\n property: string;\n attribute: string;\n entry: PlayerFeatureConfig[string];\n}\n\n/**\n * Name each input on the element. A key whose own name is taken there declares\n * an `html.attribute` instead, and the property follows from that.\n */\nfunction resolveInputs(config: PlayerFeatureConfig): ConfigInput[] {\n return Object.entries(config).map(([key, entry]) => {\n const declared = entry.html?.attribute;\n const attribute = declared ?? kebabCase(key);\n\n if (__DEV__ && declared && declared !== kebabCase(declared)) {\n // Markup lowercases attribute names, so an uppercase letter here never matches.\n console.warn(`[vjs-html] config html.attribute \"${declared}\" is not kebab-case and will never match`);\n }\n\n return { property: camelCase(attribute), attribute, entry };\n });\n}\n\n/**\n * Create a mixin that provides player context to descendant elements and\n * owns the `store.attach()` lifecycle.\n *\n * Media and container elements register themselves via media/container\n * contexts that carry both the current value and a setter. When a media\n * element is available, the provider calls `store.attach({ media, container })`.\n *\n * As a fallback for plain `<video>`/`<audio>` that can't consume context,\n * the provider queries its subtree after a microtask.\n *\n * @param options - Provider options with contexts, store factory, and feature configuration.\n */\nexport function createProviderMixin<Store extends PlayerStore>(\n options: ProviderMixinConfig<Store>\n): ProviderMixin<Store> {\n const inputs = resolveInputs(options.config);\n\n return <Class extends MediaElementConstructor>(BaseClass: Class) => {\n class PlayerProviderElement extends BaseClass {\n static properties = {\n ...(BaseClass as unknown as { properties: PropertyDeclarationMap }).properties,\n ...Object.fromEntries(inputs.map(({ property, attribute }) => [property, { type: String, attribute }])),\n };\n\n #store: Store | null = options.factory();\n #configuredStore: Store | null = null;\n #detach: (() => void) | null = null;\n #media: Media | null = null;\n #container: MediaContainer | null = null;\n #fallbackQueued = false;\n\n #setMedia = (media: Media | null): void => {\n if (this.#media === media) return;\n this.#media = media;\n this.#mediaProvider.setValue({ media, setMedia: this.#setMedia });\n this.#tryAttach();\n };\n\n #setContainer = (container: MediaContainer | null): void => {\n if (this.#container === container) return;\n this.#container = container;\n this.#containerProvider.setValue({\n container,\n setContainer: this.#setContainer,\n });\n this.#tryAttach();\n };\n\n #playerProvider = new ContextProvider(this, {\n context: options.playerContext,\n initialValue: this.store,\n });\n\n #mediaProvider = new ContextProvider(this, {\n context: options.mediaContext,\n initialValue: { media: this.#media, setMedia: this.#setMedia },\n });\n\n #containerProvider = new ContextProvider(this, {\n context: options.containerContext,\n initialValue: {\n container: this.#container,\n setContainer: this.#setContainer,\n },\n });\n\n get store(): Store {\n if (isNull(this.#store)) {\n this.#store = options.factory();\n }\n\n return this.#store;\n }\n\n override connectedCallback() {\n this.#syncInitialConfig();\n super.connectedCallback();\n this.#playerProvider.setValue(this.store);\n this.#mediaProvider.setValue({ media: this.#media, setMedia: this.#setMedia });\n this.#containerProvider.setValue({\n container: this.#container,\n setContainer: this.#setContainer,\n });\n this.#tryAttach();\n this.#queueFallbackDiscovery();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.#detachStore();\n }\n\n override destroyCallback() {\n this.#detachStore();\n this.#store?.destroy();\n this.#store = null;\n super.destroyCallback();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n\n // Configuration flows one way: only actual reactive property changes\n // write to the store. Store-side writers do not reflect back here.\n for (const { property, entry } of inputs) {\n if (!changed.has(property)) continue;\n setPlayerConfigValue(this.store, entry, (this as unknown as Record<string, unknown>)[property]);\n }\n }\n\n #tryAttach(): void {\n const store = this.#store;\n if (!store) return;\n\n if (!this.#media) {\n this.#detachStore();\n return;\n }\n\n const target: PlayerTarget = {\n media: this.#media,\n container: this.#container,\n };\n\n const hasMediaChanged = store.target?.media !== target.media;\n const hasContainerChanged = store.target?.container !== target.container;\n\n if (hasMediaChanged || hasContainerChanged) {\n this.#detachStore();\n this.#detach = store.attach(target);\n }\n }\n\n #detachStore(): void {\n this.#detach?.();\n this.#detach = null;\n }\n\n #syncInitialConfig(): void {\n const store = this.store;\n if (this.#configuredStore === store) return;\n\n for (const { property, entry } of inputs) {\n setPlayerConfigValue(store, entry, (this as unknown as Record<string, unknown>)[property]);\n }\n this.#configuredStore = store;\n }\n\n #queueFallbackDiscovery(): void {\n if (this.#media || this.#fallbackQueued) return;\n this.#fallbackQueued = true;\n\n queueMicrotask(() => {\n this.#fallbackQueued = false;\n\n // Context already registered media — skip fallback.\n if (this.#media) return;\n\n const media = this.querySelector<HTMLMediaElement>('video, audio');\n if (media) {\n this.#setMedia(media);\n }\n });\n }\n }\n\n return PlayerProviderElement as unknown as Class & PlayerProviderConstructor<Store>;\n };\n}\n","import {\n type AnyPlayerFeature,\n type AudioFeatures,\n type AudioPlayerStore,\n combinePlayerFeatureConfigs,\n type PlayerStore,\n type PlayerTarget,\n type VideoFeatures,\n type VideoPlayerStore,\n} from '@videojs/core/dom';\nimport { combine, createStore } from '@videojs/store';\n\nimport { createProviderMixin, type ProviderMixin } from '../store/provider-mixin';\nimport { containerContext, mediaContext, type PlayerContext, playerContext } from './context';\nimport { PlayerController } from './player-controller';\n\nexport interface CreatePlayerConfig<Features extends AnyPlayerFeature[]> {\n features: Features;\n}\n\nexport interface CreatePlayerResult<Store extends PlayerStore> {\n /** Context for consuming player in controllers. */\n context: PlayerContext<Store>;\n\n /** Creates a store instance for imperative access. */\n create: () => Store;\n\n /** Player controller bound to this player's context. */\n PlayerController: PlayerController.Constructor<Store>;\n\n /** Mixin that provides player context to descendants. */\n ProviderMixin: ProviderMixin<Store>;\n}\n\n/**\n * Creates a player factory with a typed store, provider mixin, and controller.\n *\n * @example\n * ```ts\n * import { createPlayer, MediaElement, selectPlayback } from '@videojs/html';\n * import { videoFeatures } from '@videojs/html/video';\n *\n * const { ProviderMixin, PlayerController, context } = createPlayer({\n * features: videoFeatures,\n * });\n *\n * // Provider element: owns the store, provides context to descendants\n * class VideoPlayer extends ProviderMixin(MediaElement) {}\n * customElements.define('video-player', VideoPlayer);\n *\n * // Control element with selector\n * class PlayButton extends MediaElement {\n * #playback = new PlayerController(this, context, selectPlayback);\n * }\n * ```\n *\n * @label Video\n * @param config - Player configuration with features.\n */\nexport function createPlayer(config: CreatePlayerConfig<VideoFeatures>): CreatePlayerResult<VideoPlayerStore>;\n\n/**\n * Creates a player factory for audio media.\n *\n * @label Audio\n * @param config - Player configuration with features.\n */\nexport function createPlayer(config: CreatePlayerConfig<AudioFeatures>): CreatePlayerResult<AudioPlayerStore>;\n\n/**\n * Creates a player factory with custom features.\n *\n * @label Generic\n * @param config - Player configuration with features.\n */\nexport function createPlayer<const Features extends AnyPlayerFeature[]>(\n config: CreatePlayerConfig<Features>\n): CreatePlayerResult<PlayerStore<Features>>;\n\nexport function createPlayer(config: CreatePlayerConfig<AnyPlayerFeature[]>): CreatePlayerResult<PlayerStore> {\n const slice = combine(...config.features);\n const featureConfig = combinePlayerFeatureConfigs(config.features);\n\n function create(): PlayerStore {\n return createStore<PlayerTarget>()(slice);\n }\n\n const ProviderMixin = createProviderMixin<PlayerStore>({\n playerContext,\n mediaContext,\n containerContext,\n factory: create,\n config: featureConfig,\n });\n\n return {\n context: playerContext,\n create,\n PlayerController,\n ProviderMixin,\n };\n}\n"],"mappings":"2nBAEA,SAAS,EAAmB,EAAO,CAClC,IAAM,EAAO,EAAM,aAAa,EAChC,OAAO,EAAK,OAAS,EAAI,EAAK,GAAK,EAAM,MAC1C,CACA,SAAS,EAAQ,EAAQ,EAAM,EAAS,CACvC,OAAO,IAAI,SAAS,EAAS,IAAW,CACvC,IAAM,MAAoB,CACzB,EAAO,GAAS,QAAQ,QAAU,SAAS,CAC5C,EACA,GAAI,GAAS,QAAQ,QAAS,CAC7B,EAAY,EACZ,MACD,CACA,GAAS,QAAQ,iBAAiB,QAAS,EAAa,CAAE,KAAM,EAAK,CAAC,EACtE,EAAO,iBAAiB,EAAO,GAAU,CACxC,GAAS,QAAQ,oBAAoB,QAAS,CAAW,EACzD,EAAQ,CAAK,CACd,EAAG,CACF,GAAG,EACH,KAAM,EACP,CAAC,CACF,CAAC,CACF,CCtBA,MAAM,GAAuB,CAC5B,SACA,QACA,SACA,WACA,UACA,kBACA,gBACA,oBACA,4BACA,yBACA,kBACA,oBACD,CAAC,CAAC,KAAK,GAAG,EACJ,GAAoB,CACzB,WACA,SACA,oBACA,GAAG,CACF,OACA,SACA,MACA,MACA,QACA,WACA,QACD,CAAC,CAAC,IAAK,GAAS,eAAe,EAAK,GAAG,EACvC,kDACD,CAAC,CAAC,KAAK,GAAG,EACV,SAAS,GAAkB,EAAI,CAC9B,OAAO,EAAG,QAAQ,EAAiB,CACpC,CAEA,SAAS,GAAiB,EAAO,CAChC,IAAM,EAAS,EAAmB,CAAK,EACvC,OAAO,aAAkB,SAAW,GAAkB,CAAM,CAC7D,CAEA,SAAS,GAAoB,EAAO,CACnC,IAAM,EAAS,EAAmB,CAAK,EAEvC,OADM,aAAkB,SACjB,EAAO,QAAQ,EAAoB,IAAM,IACjD,CACA,MAAM,GAAkC,IAAI,IAAI,CAAC,IAAK,OAAO,CAAC,EAQ9D,SAAS,GAAwB,EAAO,CACvC,GAAI,CAAC,GAAgB,IAAI,EAAM,GAAG,EAAG,MAAO,GAC5C,IAAM,EAAS,EAAmB,CAAK,EACvC,OAAO,aAAkB,SAAW,EAAO,QAAQ,gDAAoB,CACxE,CCvDA,SAAS,GAAoB,EAAQ,CACpC,IAAM,EAAS,CAAC,EAChB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAO,OAAQ,IAAK,EAAO,KAAK,CAAC,EAAO,MAAM,CAAC,EAAG,EAAO,IAAI,CAAC,CAAC,CAAC,EACpF,OAAO,CACR,CCJA,IAAI,GAA0B,KAAM,CACnC,GACA,GAAwB,IAAI,IAE5B,IAAI,MAAO,CACV,OAAQ,KAAKA,KAAU,IAAI,gBAAgB,CAAG,MAC/C,CAEA,OAAQ,CACP,IAAK,IAAM,KAAc,KAAKC,GAAM,OAAO,EAAG,EAAW,MAAM,EAC/D,KAAKA,GAAM,MAAM,CAClB,CAEA,OAAQ,CACP,KAAK,MAAM,EACX,KAAKD,IAAO,MAAM,EAClB,KAAKA,GAAQ,IAAK,EACnB,CAEA,UAAU,EAAK,CACd,KAAKC,GAAM,IAAI,CAAG,CAAC,EAAE,MAAM,EAC3B,IAAM,EAAa,IAAI,gBAEvB,OADA,KAAKA,GAAM,IAAI,EAAK,CAAU,EACvB,EAAe,CAAC,KAAK,KAAM,EAAW,MAAM,CAAC,CACrD,CACD,ECpBA,SAAS,GAAQ,GAAG,EAAQ,CAC3B,IAAM,EAAqB,EAAO,IAAK,GAAU,EAAM,SAAW,CAAC,CAAC,EACpE,MAAO,CACN,MAAQ,GAAQ,CACf,IAAM,EAAS,EAAO,IAAK,GAAU,EAAM,MAAM,CAAG,CAAC,EACrD,OAAO,OAAO,OAAO,CAAC,EAAG,GAAG,CAAM,CACnC,EACA,SAAU,MAAM,KAAK,IAAI,IAAI,EAAO,QAAS,GAAU,EAAM,UAAY,CAAC,CAAC,CAAC,CAAC,EAC7E,QAAS,OAAO,OAAO,CAAC,EAAG,GAAG,CAAkB,EAChD,OAAS,GAAQ,CAChB,IAAK,IAAM,KAAS,EAAQ,GAAI,CAC/B,EAAM,SAAS,CAAG,CACnB,OAAS,EAAK,CACb,EAAI,YAAY,CAAG,CACpB,CACD,CACD,CACD,CCvBA,IAAI,GAAa,cAAc,KAAM,CACpC,KACA,MACA,YAAY,EAAM,EAAS,CAC1B,MAAM,GAAS,SAAW,CAAI,EAC9B,KAAK,KAAO,aACZ,KAAK,KAAO,EACZ,KAAK,MAAQ,GAAS,KACvB,CACD,EAIA,SAAS,IAAqB,CAC7B,MAAM,IAAI,GAAW,WAAW,CACjC,CACA,SAAS,IAAsB,CAC9B,MAAM,IAAI,GAAW,WAAW,CACjC,CClBA,SAAS,IAAc,CACtB,OAAS,GAAW,EACrB,CCAA,IAAI,EAAmB,GACvB,SAAS,IAAgB,CACpB,IACJ,EAAmB,GACnB,eAAe,EAAK,EACrB,CACA,MAAM,GAAoC,IAAI,IAC9C,SAAS,IAAQ,CAChB,EAAmB,GACnB,IAAK,IAAM,KAAa,GAAmB,EAAU,MAAM,EAC3D,GAAkB,MAAM,CACzB,CACA,MAAMC,GAAa,OAAO,UAAU,eACpC,IAAI,GAAiB,KAAM,CAC1B,GACA,GAA6B,IAAI,IACjC,GAAW,GACX,YAAY,EAAS,CACpB,KAAKC,GAAW,OAAO,OAAO,CAAE,GAAG,CAAQ,CAAC,CAC7C,CACA,IAAI,SAAU,CACb,OAAO,KAAKA,EACb,CACA,MAAM,EAAS,CACd,IAAM,EAAO,CAAE,GAAG,KAAKA,EAAS,EAC5B,EAAU,GACd,IAAK,IAAM,KAAO,QAAQ,QAAQ,CAAO,EAAG,CAC3C,GAAI,CAACD,GAAW,KAAK,EAAS,CAAG,EAAG,SACpC,IAAM,EAAQ,EAAQ,GACjB,OAAO,GAAG,KAAKC,GAAS,GAAM,CAAK,IACvC,EAAK,GAAO,EACZ,EAAU,GAEZ,CACI,IACH,KAAKA,GAAW,OAAO,OAAO,CAAI,EAClC,KAAKC,GAAa,EAEpB,CACA,QAAQ,EAAM,CACT,EAAa,KAAKD,GAAU,CAAI,IACpC,KAAKA,GAAW,OAAO,OAAO,CAAE,GAAG,CAAK,CAAC,EACzC,KAAKC,GAAa,EACnB,CACA,UAAU,EAAU,EAAS,CAC5B,IAAM,EAAS,GAAS,OACxB,GAAI,GAAQ,QAAS,OAAO,EAE5B,GADA,KAAKC,GAAW,IAAI,CAAQ,EACxB,CAAC,EAAQ,UAAa,KAAKA,GAAW,OAAO,CAAQ,EACzD,IAAM,MAAgB,KAAKA,GAAW,OAAO,CAAQ,EAErD,OADA,EAAO,iBAAiB,QAAS,EAAS,CAAE,KAAM,EAAK,CAAC,MAC3C,CACZ,EAAO,oBAAoB,QAAS,CAAO,EAC3C,KAAKA,GAAW,OAAO,CAAQ,CAChC,CACD,CACA,OAAQ,CACF,QAAKC,GACV,MAAKA,GAAW,GAChB,IAAK,IAAM,KAAM,KAAKD,GAAY,EAAG,CADrB,CAEjB,CACA,IAAe,CACd,KAAKC,GAAW,GAChB,GAAkB,IAAI,IAAI,EAC1B,GAAc,CACf,CACD,EACA,SAAS,GAAY,EAAS,CAC7B,OAAO,IAAI,GAAe,CAAO,CAClC,CCnEA,MAAM,GAAe,OAAO,IAAI,gBAAgB,EAC1C,GAAa,OAAO,UAAU,eACpC,SAAS,IAAc,CACtB,QAAS,EAAO,EAAU,CAAC,IAAM,CAChC,IAAI,EAAS,KACT,EAAY,GACV,EAAa,IAAI,gBACjB,EAAU,IAAI,GAChB,EACA,EACJ,SAAS,GAAW,CACf,GAAW,GAAoB,EAC9B,GAAQ,GAAmB,CACjC,CACA,IAAM,EAAqB,GAAW,EAAM,MAAM,CACjD,YACC,EAAS,EACF,GAER,UACA,QAAW,EACX,IAAM,GAAY,EAAU,CAAO,CACpC,CAAC,CAAC,EACF,EAAc,EACd,IAAM,EAAsB,EAAO,CAAW,EAC9C,EAAQ,GAAY,EAAQ,EAAa,CAAmB,CAAC,EAC7D,IAAM,EAAQ,EACZ,IAAe,GAChB,IAAI,QAAS,CACZ,OAAO,CACR,EACA,IAAI,QAAS,CACZ,OAAO,CACR,EACA,IAAI,WAAY,CACf,OAAO,CACR,EACA,IAAI,OAAQ,CACX,OAAO,EAAM,OACd,EACA,SACA,UACA,WACD,EACA,IAAK,IAAM,KAAO,OAAO,KAAK,EAAM,OAAO,EAAG,OAAO,eAAe,EAAO,EAAK,CAC/E,QAAW,EAAM,QAAQ,GACzB,WAAY,EACb,CAAC,EACD,IAAK,IAAM,KAAO,OAAO,sBAAsB,CAAW,EACrD,OAAO,EAAY,IAAS,YAChC,OAAO,eAAe,EAAO,EAAK,CAAE,QAAW,EAAY,EAAK,CAAC,EAElE,GAAI,CACH,EAAQ,UAAU,CACjB,QACA,OAAQ,EAAW,MACpB,CAAC,CACF,OAAS,EAAO,CACf,EAAY,CAAK,CAClB,CACA,OAAO,EACP,SAAS,EAAO,EAAQ,CACvB,IAAM,EAAS,CAAC,EACV,EAAc,EAAM,QAC1B,GAAI,CAAC,EAAa,OAAO,EACzB,IAAM,EAAM,CAAE,QAAW,CAAO,EAChC,IAAK,IAAM,KAAO,OAAO,KAAK,CAAW,EAAG,EAAO,GAAO,EAAY,EAAI,CAAC,CAAG,EAC9E,OAAO,CACR,CACA,SAAS,EAAQ,EAAQ,EAAS,CACjC,IAAM,EAAS,CAAC,EAChB,IAAK,IAAM,KAAO,OAAO,KAAK,CAAM,EAAG,EAAO,GAAO,EAAO,GAC5D,OAAO,OAAO,OAAO,EAAQ,CAAO,CACrC,CACA,SAAS,EAAU,EAAS,CAC3B,IAAM,EAAU,GAAY,EAAa,CAAO,EAChD,GAAI,CAAC,EAAS,OACd,IAAM,EAAc,EAAO,EAAQ,IAAI,EACvC,EAAc,EAAQ,KACtB,EAAM,QAAQ,EAAQ,EAAa,CAAW,CAAC,CAChD,CACA,SAAS,EAAO,EAAW,CACtB,GAAW,GAAoB,EACnC,EAAQ,MAAM,EACd,EAAS,EACT,IAAM,EAAgB,CACrB,OAAQ,EACR,OAAQ,EAAQ,KAChB,QAAW,EACX,IAAM,GAAY,CACjB,GAAI,CACH,EAAU,CAAO,CAClB,OAAS,EAAO,CACf,EAAY,CAAK,CAClB,CACD,EACA,cACA,MAAO,CACN,IAAI,OAAQ,CACX,OAAO,EAAM,OACd,EACA,WACD,CACD,EACA,GAAI,CACH,EAAM,SAAS,CAAa,CAC7B,OAAS,EAAO,CACf,EAAY,CAAK,CAClB,CACA,GAAI,CACH,EAAQ,WAAW,CAClB,QACA,OAAQ,EACR,OAAQ,EAAQ,IACjB,CAAC,CACF,OAAS,EAAO,CACf,EAAY,CAAK,CAClB,CACA,OAAO,CACR,CACA,SAAS,GAAS,CACjB,GAAI,EAAO,CAAM,EAAG,OACpB,EAAQ,MAAM,EACd,EAAS,KACT,IAAM,EAAa,CAAE,GAAG,CAAmB,EAC3C,IAAK,IAAM,KAAO,EAAM,UAAY,CAAC,EAAG,EAAW,GAAO,EAAY,GACtE,EAAU,CAAU,CACrB,CACA,SAAS,GAAU,CACd,IACJ,EAAY,GACZ,EAAO,EACP,EAAW,MAAM,EAClB,CACA,SAAS,EAAU,EAAU,EAAS,CACrC,OAAO,EAAM,UAAU,EAAU,CAAO,CACzC,CACA,SAAS,EAAY,EAAO,CACvB,EAAQ,QAAS,EAAQ,QAAQ,CACpC,QACA,OACD,CAAC,EACI,QAAQ,MAAM,cAAe,CAAK,CACxC,CACD,EACD,CACA,SAAS,GAAW,EAAO,CAC1B,OAAO,OAAO,OAAO,CAAE,GAAG,CAAM,CAAC,CAClC,CACA,SAAS,GAAY,EAAS,EAAS,CACtC,IAAM,EAAO,CAAE,GAAG,CAAQ,EACtB,EAAU,GACd,IAAK,IAAM,KAAO,QAAQ,QAAQ,CAAO,EAAG,CAC3C,GAAI,CAAC,GAAW,KAAK,EAAS,CAAG,EAAG,SACpC,IAAM,EAAQ,EAAQ,GAClB,OAAO,GAAG,EAAQ,GAAM,CAAK,IACjC,EAAK,GAAO,EACZ,EAAU,GACX,CACA,OAAO,EAAU,CAAE,KAAM,OAAO,OAAO,CAAI,CAAE,EAAI,IAClD,CACA,SAAS,GAAQ,EAAO,CACvB,OAAO,EAAS,CAAK,GAAK,MAAgB,CAC3C,CCrKA,MAAM,GAAoB,GAAY,EACtC,SAAS,EAAoB,EAAY,EAAe,CACvD,GAAI,UAAU,SAAW,EAAG,CAC3B,IAAM,EAAU,EACV,EAAY,OAAO,OAAO,EAAQ,QAAU,CAAC,CAAC,CAAC,CAAC,IAAK,GAAU,EAAM,KAAK,EAChF,MAAO,CACN,GAAG,EACH,GAAG,EAAU,OAAS,EAAI,CAAE,SAAU,CAAU,EAAI,CAAC,CACtD,CACD,CACA,GAAM,CAAE,OAAM,QAAO,UAAW,EAC1B,EAAa,GAAkB,GAAkB,CACtD,GAAG,EAAY,CAAI,EAAI,CAAC,EAAI,CAAE,MAAK,EACnC,MAAQ,GAAQ,EAAM,EAAK,CAAa,EACxC,GAAG,EAAS,CAAE,OAAS,GAAQ,EAAO,EAAK,CAAa,CAAE,EAAI,CAAC,CAChE,CAAC,EACK,EAAiB,EAAU,CAAa,EACxC,GAAY,GAAkB,EAAY,CAAa,EAAI,EAAiB,EAAU,CAAa,GAIzG,MAHA,GAAQ,MAAQ,EAAe,MAC3B,EAAe,SAAQ,EAAQ,OAAS,EAAe,QACtD,EAAY,CAAI,GAAG,OAAO,eAAe,EAAS,OAAQ,CAAE,MAAO,CAAK,CAAC,EACvE,CACR,CAEA,SAAS,GAA4B,EAAU,CAC9C,IAAM,EAAc,EAAS,IAAK,GAAY,EAAQ,QAAU,CAAC,CAAC,EAClE,OAAO,OAAO,OAAO,CAAC,EAAG,GAAG,CAAW,CACxC,CAEA,SAAS,GAAqB,EAAO,EAAO,EAAO,CAClD,IAAM,EAAS,EAAM,EAAM,QAC3B,GAAI,OAAO,GAAW,WAAY,MAAU,UAAU,0BAA0B,OAAO,EAAM,MAAM,EAAE,EAAE,EACvG,EAAO,CAAK,CACb,CCjCA,SAAS,GAAY,EAAO,CAC3B,OAAO,EAAM,YAAc,CAC5B,CACA,SAAS,EAAoB,EAAO,CACnC,GAAI,CAAC,EAAS,CAAK,EAAG,MAAO,GAC7B,IAAM,EAAQ,EACd,MAAO,CAAC,EAAY,EAAM,MAAM,GAAK,CAAC,EAAY,EAAM,KAAK,GAAK,EAAW,EAAM,KAAK,CACzF,CACA,SAAS,EAAmB,EAAO,CAClC,GAAI,CAAC,EAAS,CAAK,EAAG,MAAO,GAC7B,IAAM,EAAQ,EACd,MAAO,CAAC,EAAY,EAAM,WAAW,GAAK,CAAC,EAAY,EAAM,QAAQ,GAAK,CAAC,EAAY,EAAM,OAAO,CACrG,CACA,SAAS,EAAqB,EAAO,CACpC,GAAI,CAAC,EAAS,CAAK,EAAG,MAAO,GAC7B,IAAM,EAAQ,EACd,MAAO,CAAC,EAAY,EAAM,GAAG,GAAK,CAAC,EAAY,EAAM,UAAU,GAAK,CAAC,EAAY,EAAM,UAAU,GAAK,EAAW,EAAM,IAAI,CAC5H,CACA,SAAS,EAAqB,EAAO,CACpC,GAAI,CAAC,EAAS,CAAK,EAAG,MAAO,GAC7B,IAAM,EAAQ,EACd,MAAO,CAAC,EAAY,EAAM,MAAM,GAAK,CAAC,EAAY,EAAM,KAAK,CAC9D,CAMA,SAAS,GAAoB,EAAO,CAEnC,OADK,EAAS,CAAK,EACZ,CAAC,EAAY,EAAM,KAAK,EADF,EAE9B,CACA,SAAS,GAA2B,EAAO,CAE1C,OADK,EAAS,CAAK,EACZ,CAAC,EAAY,EAAM,YAAY,EADT,EAE9B,CAMA,SAAS,GAA+B,EAAO,CAE9C,OADK,EAAS,CAAK,EACZ,EAAW,EAAM,uBAAuB,EADlB,EAE9B,CACA,SAAS,EAAqB,EAAO,CACpC,GAAI,CAAC,EAAS,CAAK,EAAG,MAAO,GAC7B,IAAM,EAAQ,EACd,MAAO,CAAC,EAAY,EAAM,QAAQ,GAAK,EAAM,WAAa,GAAqB,CAAC,EAAY,EAAM,QAAQ,GAAK,EAAM,WAAa,CACnI,CACA,SAAS,GAAoB,EAAO,CAEnC,OADK,EAAS,CAAK,EACZ,CAAC,EAAY,EAAM,KAAK,EADF,EAE9B,CACA,SAAS,EAAwB,EAAO,CACvC,GAAI,CAAC,EAAS,CAAK,EAAG,MAAO,GAC7B,IAAM,EAAQ,EACd,MAAO,CAAC,EAAY,EAAM,UAAU,GAAK,EAAM,aAAe,CAC/D,CACA,SAAS,GAA6B,EAAO,CAE5C,OADK,EAAS,CAAK,EACZ,CAAC,EAAY,EAAM,eAAe,EADZ,EAE9B,CACA,SAAS,GAAyB,EAAO,CAExC,OADK,EAAS,CAAK,EACZ,CAAC,EAAY,EAAM,WAAW,EADR,EAE9B,CACA,SAAS,GAA8B,EAAO,CAC7C,GAAI,CAAC,EAAS,CAAK,EAAG,MAAO,GAC7B,IAAM,EAAQ,EACd,MAAO,CAAC,EAAY,EAAM,UAAU,GAAK,CAAC,EAAY,EAAM,WAAW,CACxE,CACA,SAAS,GAA6B,EAAO,CAC5C,GAAI,CAAC,EAAS,CAAK,EAAG,MAAO,GAC7B,IAAM,EAAQ,EACd,OAAO,EAAS,EAAM,MAAM,GAAK,EAAM,SAAW,EACnD,CACA,SAAS,GAAyB,EAAO,CAExC,OADK,EAAS,CAAK,EACZ,CAAC,EAAY,EAAM,UAAU,EADP,EAE9B,CACA,SAAS,GAA0B,EAAO,CAEzC,OADK,EAAS,CAAK,EACZ,CAAC,EAAY,EAAM,WAAW,EADR,EAE9B,CACA,SAAS,GAAmB,EAAO,CAClC,GAAI,CAAC,EAAS,CAAK,EAAG,MAAO,GAC7B,IAAM,EAAQ,EACd,MAAO,CAAC,EAAY,EAAM,aAAa,GAAK,CAAC,EAAY,EAAM,gBAAgB,CAChF,CACA,SAAS,GAA0B,EAAO,CACzC,OAAO,EAAS,CAAK,GAAK,qBAAsB,GAAS,EAAW,EAAM,gBAAgB,CAC3F,CC3FA,SAAS,GAAc,EAAO,EAAO,CACpC,OAAO,EAAM,IAAM,OAAO,CAAK,CAChC,CACA,SAAS,GAAa,EAAO,CAC5B,MAAO,CACN,GAAG,EAAM,KAAO,IAAK,IAAK,CAAE,GAAI,EAAM,EAAG,EACzC,GAAG,EAAM,OAAS,IAAK,IAAK,CAAE,KAAM,EAAM,IAAK,EAC/C,MAAO,EAAM,MACb,SAAU,EAAM,SAChB,QAAS,EAAM,OAChB,CACD,CACA,MAAM,GAAoB,EAAoB,CAC7C,KAAM,aACN,OAAQ,CAAE,aAAc,CACvB,eAAgB,CAAC,EACjB,iBAAiB,EAAO,CACvB,GAAM,CAAE,SAAU,EAAO,EACzB,GAAI,CAAC,GAAyB,CAAK,EAAG,OACtC,IAAM,EAAS,CAAC,GAAG,EAAM,WAAW,EAC9B,EAAQ,EAAO,MAAM,EAAW,IAAU,GAAc,EAAW,CAAK,IAAM,CAAK,EACpF,KACL,IAAK,IAAM,KAAa,EAAQ,EAAU,QAAU,IAAc,CACnE,CACD,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EACd,EAAc,KACd,EAAU,KACR,MAAuB,GAAyB,CAAK,EAAI,EAAM,YAAc,KAC7E,GAAQ,EAAO,EAAe,IAAM,CACzC,EAAI,CAAE,eAAgB,EAAO,CAAC,GAAG,CAAI,CAAC,CAAC,IAAI,EAAY,EAAI,CAAC,CAAE,CAAC,CAChE,EACM,MAAa,CAClB,IAAM,EAAkB,EAAe,EACvC,GAAI,IAAoB,EAAa,CACpC,EAAK,CAAe,EACpB,MACD,CACA,GAAS,MAAM,EACf,EAAU,IAAI,gBACd,EAAc,EACV,IACH,EAAO,EAAa,eAAkB,EAAK,CAAW,EAAG,CAAE,OAAQ,EAAQ,MAAO,CAAC,EACnF,EAAO,EAAa,kBAAqB,EAAK,CAAW,EAAG,CAAE,OAAQ,EAAQ,MAAO,CAAC,EACtF,EAAO,EAAa,aAAgB,EAAK,CAAW,EAAG,CAAE,OAAQ,EAAQ,MAAO,CAAC,GAElF,EAAK,CAAW,CACjB,EACA,EAAK,EACL,EAAO,EAAO,YAAa,EAAM,CAAE,QAAO,CAAC,EAC3C,EAAO,iBAAiB,YAAe,GAAS,MAAM,EAAG,CAAE,KAAM,EAAK,CAAC,CACxE,CACD,CAAC,ECrDK,EAAgB,EAAoB,CACzC,KAAM,SACN,WAAc,CACb,SAAU,CAAC,EACX,SAAU,CAAC,CACZ,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,EAAqB,CAAK,EAAG,OAClC,IAAM,MAAa,EAAI,CACtB,SAAU,GAAoB,EAAM,QAAQ,EAC5C,SAAU,GAAoB,EAAM,QAAQ,CAC7C,CAAC,EACD,EAAK,EACL,EAAO,EAAO,WAAY,EAAM,CAAE,QAAO,CAAC,EAC1C,EAAO,EAAO,UAAW,EAAM,CAAE,QAAO,CAAC,CAC1C,CACD,CAAC,ECRD,SAAS,GAAc,EAAS,EAAe,EAAe,CAC7D,GAAI,EAAc,OAAS,EAAG,OAAO,KACrC,IAAM,EAAY,EAAU,EAAc,KACpC,EAAQ,EAAc,MAC5B,GAAI,IAAU,EAAG,OAAO,KACxB,IAAM,EAAQ,EAAY,EAa1B,OAZI,EAAc,OAAS,GAAK,EAAc,IAAI,MAAM,GAAK,EAAc,IAAI,OAAO,EAAU,EAAQ,GAAK,OAAS,QAClH,EAAc,OAAS,EACtB,EAAQ,EAAI,EAAU,OACtB,EAAQ,EAAI,EAAU,SACnB,QAEJ,EAAc,IAAI,MAAM,GAAK,EAAQ,GAAW,OAChD,EAAc,IAAI,OAAO,GAAK,GAAS,GAAW,QAClD,EAAc,IAAI,QAAQ,IACzB,EAAc,OAAS,GACvB,GAAS,EAAI,GAAK,EAAQ,EAAI,GAAU,SAEtC,IACR,CC5BA,IAAI,GAAqB,KAAM,CAC9B,GACA,GAAY,CAAC,EACb,GAA+B,IAAI,IACnC,GAAc,KACd,GAA+B,IAAI,IACnC,YAAY,EAAQ,CACnB,KAAKE,GAAU,CAChB,CACA,IAAI,UAAW,CACd,OAAO,KAAKC,EACb,CACA,UAAU,EAAU,CAEnB,OADA,KAAKC,GAAa,IAAI,CAAQ,MACjB,KAAKA,GAAa,OAAO,CAAQ,CAC/C,CAQA,UAAU,EAAO,EAAQ,CAExB,MADA,CAAI,GAAoB,CAAK,GACtB,KAAKD,GAAU,KAAM,GAAM,EAAE,OAAS,OAAS,EAAE,SAAW,IAAW,CAAC,EAAE,SAAW,EAAE,UAAY,EAAM,YAAY,CAC7H,CACA,IAAI,EAAS,CACZ,IAAM,EAAU,CACf,GAAG,EACH,WAAa,GAAU,CACtB,GAAI,KAAKC,GAAa,KAAO,EAAG,CAC/B,IAAM,EAAgB,CACrB,KAAM,EAAQ,KACd,OAAQ,UACR,OAAQ,EAAQ,OAChB,MAAO,EAAQ,MACf,OAAQ,EAAQ,OAChB,QAAS,EAAQ,QACjB,OACD,EACA,IAAK,IAAM,KAAM,KAAKA,GAAc,GAAI,CACvC,EAAG,CAAa,CACjB,MAAgB,CAAC,CAClB,CACA,EAAQ,WAAW,CAAK,CACzB,CACD,EACA,KAAKD,GAAU,KAAK,CAAO,EAC3B,KAAKE,GAAa,IAAI,EAAQ,UAAU,EACxC,KAAKC,GAAS,EACd,IAAI,EAAU,GACd,UAAa,CACZ,GAAI,EAAS,OACb,EAAU,GACV,IAAM,EAAM,KAAKH,GAAU,QAAQ,CAAO,EACtC,IAAQ,IAAI,KAAKA,GAAU,OAAO,EAAK,CAAC,EAC5C,KAAKI,GAAiB,CACvB,CACD,CACA,IAAW,CACV,GAAI,KAAKC,GAAa,OACtB,KAAKA,GAAc,IAAI,gBACvB,GAAM,CAAE,UAAW,KAAKA,GACpB,EAAkB,EACtB,EAAO,KAAKN,GAAS,cAAgB,GAAU,CAC1C,EAAM,SAAW,IACrB,EAAkB,KAAK,IAAI,EAC5B,EAAG,CAAE,QAAO,CAAC,EACb,EAAO,KAAKA,GAAS,YAAc,GAAU,CAG5C,GAFI,EAAM,SAAW,GACjB,KAAK,IAAI,EAAI,EAAkBD,KAC/B,GAAoB,CAAK,EAAG,OAChC,IAAM,EAAc,EAAM,YACpB,EAAU,EAAM,QAChB,EAAS,KAAKC,GACd,EAAW,KAAKC,GAChB,EAAU,CAAE,QAAU,GAAS,GAAc,EAAU,EAAM,EAAa,EAAS,CAAM,CAAE,EACjG,IAAK,IAAM,KAAc,KAAKE,GAAc,EAAW,SAAS,EAAS,CAAK,CAC/E,EAAG,CAAE,QAAO,CAAC,CACd,CACA,IAAmB,CACd,UAAKF,GAAU,OAAS,GAC5B,KAAK,IAAM,KAAc,KAAKE,GAAc,EAAW,MAAM,EAC7D,KAAKA,GAAa,MAAM,EACxB,KAAKG,IAAa,MAAM,EACxB,KAAKA,GAAc,IAH0C,CAI9D,CACD,EACA,MAAM,EAA+B,IAAI,QAEzC,SAAS,GAAuB,EAAQ,CACvC,OAAO,EAAa,IAAI,CAAM,CAC/B,CACA,SAAS,GAAsB,EAAQ,CACtC,IAAI,EAAc,EAAa,IAAI,CAAM,EAKzC,OAJK,IACJ,EAAc,IAAI,GAAmB,CAAM,EAC3C,EAAa,IAAI,EAAQ,CAAW,GAE9B,CACR,CACA,SAAS,GAAc,EAAU,EAAM,EAAa,EAAS,EAAQ,CACpE,IAAM,EAAO,EAAO,sBAAsB,EACpC,EAAgB,GAAiB,EAAU,EAAM,CAAW,EAC5D,EAAS,EAAc,KAAO,EAAI,GAAc,EAAS,EAAM,CAAa,EAAI,KAChF,EAAU,CAAC,EACjB,IAAK,IAAM,KAAW,EACjB,MAAQ,UACR,EAAQ,OAAS,GACjB,IAAQ,SAAW,EAAQ,UAAY,GAC3C,IAAI,EAAQ,OACP,IAAA,EAAQ,SAAW,EAAQ,QAAA,MACzB,GAAI,IAAW,KAAM,SAC5B,EAAQ,KAAK,CAAO,CADQ,CAG7B,OAAO,CACR,CACA,SAAS,GAAiB,EAAU,EAAM,EAAa,CACtD,IAAM,EAA0B,IAAI,IACpC,IAAK,IAAM,KAAW,EACjB,EAAQ,UACR,EAAQ,OAAS,IACjB,EAAQ,SAAW,EAAQ,UAAY,GACvC,EAAQ,QAAQ,EAAQ,IAAI,EAAQ,MAAM,GAE/C,OAAO,CACR,CCjIA,SAAS,EAAc,EAAO,CAC7B,IAAM,EAAS,EACf,GAAI,EAAS,EAAO,MAAM,GAAK,UAAW,EAAO,QAAU,WAAY,EAAO,OAAQ,OAAO,EAAO,MACrG,CACA,SAAS,GAA0B,EAAO,CACzC,OAAO,EAAc,CAAK,CAAC,EAAE,QAAU,WACxC,CACA,SAAS,GAA2B,EAAO,CAC1C,OAAO,EAAc,CAAK,CAAC,EAAE,QAAU,YACxC,CACA,eAAe,GAAsB,EAAO,CAC3C,IAAM,EAAS,EAAc,CAAK,EAClC,GAAI,CAAC,EAAQ,MAAM,IAAI,aAAa,gCAAiC,mBAAmB,EACxF,OAAO,EAAO,OAAO,CACtB,CCTA,MAGM,GAA2C,IAAI,QAC/C,EAAkB,EAAoB,CAC3C,KAAM,WACN,OAAQ,CAAE,MAAK,SAAU,CAaxB,IAAM,EAAU,QAXf,EAAI,CAAE,gBAAiB,EAAK,CAAC,MAChB,CAAC,OAEsB,CACpC,IAAM,EAAO,CAAC,EAAI,CAAC,CAAC,WAKpB,OAJA,EAAI,CACH,WAAY,EACZ,gBAAiB,CAClB,CAAC,EACM,CACR,CACyF,EAEzF,OADA,GAAyB,IAAI,EAAQ,oBAAqB,CAAO,EAC1D,CACN,WAAY,GACZ,gBAAiB,GACjB,oBAAqB,EAAQ,oBAC7B,eAAgB,EAAQ,cACzB,CACD,EACA,OAAO,CAAE,SAAQ,SAAQ,MAAK,OAAO,CACpC,GAAM,CAAE,QAAO,aAAc,EAC7B,GAAI,CAAC,EAAoB,CAAK,GAAK,EAAO,CAAS,EAAG,OACtD,IAAI,EACA,EAAoB,EAClB,EAAkB,GAChB,EAAoB,GAAK,GAAc,EAAM,QAAU,GAA0B,CAAK,GAAK,GAA2B,CAAK,EAEnI,SAAS,GAAY,CACpB,aAAa,CAAS,EACtB,EAAY,IAAK,EAClB,CACA,SAAS,GAAe,CACvB,EAAU,EACN,IAAoB,KACxB,EAAY,WAAW,EAAa,GAAU,EAC/C,CACA,SAAS,GAAY,CACf,EAAI,CAAC,CAAC,YAAY,EAAI,CAC1B,WAAY,GACZ,gBAAiB,EAClB,CAAC,EACD,EAAa,CACd,CACA,SAAS,GAAc,CACtB,EAAU,EACV,EAAI,CACH,WAAY,GACZ,gBAAiB,EAAe,EAAK,CACtC,CAAC,CACF,CACA,SAAS,GAAsB,CAC9B,IACA,EAAU,EACL,EAAI,CAAC,CAAC,iBAAiB,EAAI,CAAE,gBAAiB,EAAK,CAAC,EACzD,IAAI,EAAW,GACf,UAAa,CACR,GAAY,EAAO,UACvB,EAAW,GACX,IACI,IAAsB,GAAG,EAAU,EACxC,CACD,CACA,SAAS,GAAiB,CAGzB,OAFI,EAAI,CAAC,CAAC,gBAAiB,EAAY,EAClC,EAAU,EACR,EAAI,CAAC,CAAC,eACd,CACA,IAAM,EAAU,GAAyB,IAAI,EAAI,CAAC,CAAC,mBAAmB,EACtE,EAAQ,aAAa,EAAqB,CAAc,EACxD,IAAI,EAAkB,EAClB,EAAc,EACZ,MAAsB,EAAc,GAAK,KAAK,IAAI,EAAI,EAAc,IAC1E,SAAS,EAAc,EAAO,CAC7B,EAAkB,KAAK,IAAI,EACvB,EAAM,cAAgB,UAAS,EAAc,EAClD,CACA,SAAS,GAAY,EAAO,CAE3B,GADI,EAAM,cAAgB,UAAS,EAAc,KAAK,IAAI,GACtD,EAAM,cAAgB,SAAW,KAAK,IAAI,EAAI,EAAkB,IAAe,CAClF,GAAI,GAAuB,CAAS,CAAC,EAAE,UAAU,EAAO,gBAAgB,EAAG,OAC3E,IAAM,EAAqB,CAAC,EAAO,CAAS,CAAC,CAAC,SAAS,EAAM,MAAM,EAC/D,EAAI,CAAC,CAAC,iBAAmB,EAAoB,EAAY,EACxD,EAAU,CAChB,MAAO,EAAU,CAClB,CACA,IAAM,MAAyB,CAC9B,GAAM,CAAE,cAAe,EAAI,EAC3B,EAAI,CAAE,gBAAiB,EAAe,CAAU,CAAE,CAAC,EAC/C,CAAC,EAAM,QAAU,GAAY,EAAa,CAC/C,EACA,SAAS,EAAc,EAAO,CAC7B,GAAI,EAAM,cAAgB,QAAS,CAC9B,EAAI,CAAC,CAAC,YAAY,EAAa,EACnC,MACD,CACA,EAAU,CACX,CAgBA,GAfA,EAAO,EAAW,cAAe,EAAe,CAAE,QAAO,CAAC,EAC1D,EAAO,EAAW,cAAe,EAAe,CAAE,QAAO,CAAC,EAC1D,EAAO,EAAW,YAAa,GAAa,CAAE,QAAO,CAAC,EACtD,EAAO,EAAW,QAAS,EAAW,CAAE,QAAO,CAAC,EAChD,EAAO,EAAW,cAAiB,CAC9B,EAAc,GAClB,EAAU,CACX,EAAG,CAAE,QAAO,CAAC,EACb,EAAO,EAAW,iBAAoB,CACjC,EAAc,GAClB,EAAY,CACb,EAAG,CAAE,QAAO,CAAC,EACb,EAAO,EAAO,OAAQ,EAAkB,CAAE,QAAO,CAAC,EAClD,EAAO,EAAO,QAAS,EAAkB,CAAE,QAAO,CAAC,EACnD,EAAO,EAAO,QAAS,EAAkB,CAAE,QAAO,CAAC,EAC/C,GAA6B,CAAK,EAAG,CACxC,IAAM,MAAqB,CAC1B,GAAM,CAAE,cAAe,EAAI,EAC3B,EAAI,CAAE,gBAAiB,EAAe,CAAU,CAAE,CAAC,CACpD,EACA,EAAO,EAAM,OAAQ,UAAW,EAAc,CAAE,QAAO,CAAC,EACxD,EAAO,EAAM,OAAQ,aAAc,EAAc,CAAE,QAAO,CAAC,EAC3D,EAAO,EAAM,OAAQ,aAAc,EAAc,CAAE,QAAO,CAAC,CAC5D,CACA,EAAO,iBAAiB,YAAe,CACtC,EAAQ,MAAM,EACd,EAAoB,EACpB,EAAU,CACX,EAAG,CAAE,KAAM,EAAK,CAAC,EACjB,EAAa,CACd,CACD,CAAC,EACD,SAAS,GAAsB,EAA6B,EAAwB,CACnF,IAAI,EAA8B,EAC9B,EAAyB,EACvB,EAAwB,IAAI,IAa5B,EAAU,CACf,wBAbiC,CACjC,IAAM,EAAO,CAAE,QAAS,EAA4B,CAAE,EAClD,EAAW,GAEf,OADA,EAAM,IAAI,CAAI,MACD,CACR,IACJ,EAAW,GACX,EAAM,OAAO,CAAI,EACjB,EAAK,QAAQ,EACd,CACD,EAIC,mBAH4B,EAAuB,EAInD,aAAa,EAAyB,EAAoB,CACzD,GAAI,IAA4B,EAA6B,CAC5D,EAA8B,EAC9B,IAAK,IAAM,KAAQ,EAClB,EAAK,QAAQ,EACb,EAAK,QAAU,EAAwB,CAEzC,CACA,EAAyB,CAC1B,EACA,OAAQ,CACP,EAAQ,aAAa,EAA6B,CAAsB,CACzE,CACD,EACA,OAAO,CACR,CC/KA,MAAM,EAAe,EAAoB,CACxC,KAAM,QACN,OAAQ,CAAE,UAAW,CACpB,MAAO,KACP,cAAe,CACd,EAAI,CAAE,MAAO,IAAK,CAAC,CACpB,CACD,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EACb,GAAoB,CAAK,IAE9B,EAAO,EAAO,YADU,EAAI,CAAE,MAAO,EAAM,KAAM,CAAC,EAChB,CAAE,QAAO,CAAC,EAC5C,EAAO,EAAO,cAAiB,EAAI,CAAE,MAAO,IAAK,CAAC,EAAG,CAAE,QAAO,CAAC,EAChE,CACD,CAAC,ECjBD,SAAS,IAAsB,CAC9B,IAAM,EAAM,SAEZ,OADI,EAAI,mBAAqB,EAAI,wBAAgC,GAC1D,EAAW,SAAS,cAAc,OAAO,CAAC,CAAC,yBAAyB,CAC5E,CACA,SAAS,IAAuB,CAC/B,IAAM,EAAM,SACZ,OAAO,EAAI,mBAAqB,EAAI,yBAA2B,IAChE,CACA,SAAS,GAAkB,EAAS,CACnC,GAAI,EAAE,aAAmB,SAAU,MAAO,GAC1C,GAAI,CACH,OAAO,EAAQ,QAAQ,aAAa,CACrC,MAAQ,CACP,MAAO,EACR,CACD,CACA,SAAS,EAAa,EAAW,EAAO,CACvC,GAAI,EAAM,yBAA2B,aAAc,MAAO,GAC1D,IAAM,EAAoB,GAAqB,EAG/C,OAFI,IAAsB,IAAsB,GAAa,IAAsB,IAC/E,GAAkB,CAAS,GAAK,GAAkB,CAAK,EAAU,GAC9D,EAAM,cAAgB,EAC9B,CACA,eAAe,GAAkB,EAAW,EAAO,CAClD,IAAM,EAAM,SACZ,GAAI,IAAc,EAAI,mBAAqB,EAAI,yBAA0B,CACxE,IAAM,EAAK,EACX,GAAI,EAAW,EAAG,iBAAiB,EAAG,OAAO,EAAG,kBAAkB,EAClE,GAAI,EAAW,EAAG,uBAAuB,EAAG,OAAO,EAAG,wBAAwB,CAC/E,CACA,IAAM,EAAc,EACpB,GAAI,EAAW,EAAY,yBAAyB,EAAG,CACtD,EAAY,0BAA0B,YAAY,EAClD,MACD,CACA,IAAM,EAAQ,EACd,GAAI,EAAW,EAAM,iBAAiB,EAAG,OAAO,EAAM,kBAAkB,CACzE,CACA,eAAe,EAAe,EAAO,CACpC,IAAM,EAAM,SACN,EAAc,EACpB,GAAI,EAAY,yBAA2B,cAAgB,EAAW,EAAY,yBAAyB,EAAG,CAC7G,EAAY,0BAA0B,QAAQ,EAC9C,MACD,CACA,GAAI,EAAW,EAAI,cAAc,EAAG,OAAO,EAAI,eAAe,EAC9D,GAAI,EAAW,EAAI,oBAAoB,EAAG,OAAO,EAAI,qBAAqB,EAC1E,IAAM,EAAQ,EACd,GAAI,EAAW,EAAM,cAAc,EAAG,OAAO,EAAM,eAAe,CACnE,CCjDA,SAAS,IAA4B,CACpC,GAAI,SAAS,wBAAyB,CACrC,IAAM,EAAW,0BAA0B,KAAK,UAAU,SAAS,EAC7D,EAAQ,OAAO,YAAe,YAAc,WAAW,4BAA4B,CAAC,CAAC,QAC3F,MAAO,CAAC,GAAY,CAAC,CACtB,CACA,OAAO,EAAW,SAAS,cAAc,OAAO,CAAC,CAAC,yBAAyB,CAC5E,CAQA,SAAS,GAA0B,EAAO,CAEzC,OADI,EAAW,EAAM,yBAAyB,EAAU,GACjD,GAA+B,CAAK,CAC5C,CACA,SAAS,EAAmB,EAAO,CAGlC,OAFI,EAAM,yBAA2B,sBACjC,SAAS,0BAA4B,EAAc,GAChD,EAAM,oBAAsB,EACpC,CACA,eAAe,GAAwB,EAAO,CAC7C,IAAM,EAAc,EACpB,GAAI,EAAW,EAAY,yBAAyB,EAAG,CACtD,EAAY,0BAA0B,oBAAoB,EAC1D,MACD,CACA,IAAM,EAAQ,EACd,GAAI,EAAW,EAAM,uBAAuB,EAAG,OAAO,EAAM,wBAAwB,CACrF,CACA,eAAe,EAAqB,EAAO,CAC1C,IAAM,EAAc,EACpB,GAAI,EAAY,yBAA2B,sBAAwB,EAAW,EAAY,yBAAyB,EAAG,CACrH,EAAY,0BAA0B,QAAQ,EAC9C,MACD,CACA,GAAI,EAAW,SAAS,oBAAoB,EAAG,OAAO,SAAS,qBAAqB,EACpF,IAAM,EAAQ,EACd,GAAI,EAAW,EAAM,oBAAoB,EAAG,OAAO,EAAM,qBAAqB,CAC/E,CCxCA,MAAM,EAAoB,EAAoB,CAC7C,KAAM,aACN,OAAQ,CAAE,aAAc,CACvB,WAAY,GACZ,uBAAwB,cACxB,MAAM,mBAAoB,CACzB,GAAM,CAAE,QAAO,aAAc,EAAO,EAEpC,OADI,EAAmB,CAAK,GAAG,MAAM,EAAqB,CAAK,EACxD,GAAkB,EAAW,CAAK,CAC1C,EACA,MAAM,gBAAiB,CACtB,GAAM,CAAE,SAAU,EAAO,EACzB,OAAO,EAAe,CAAK,CAC5B,EACA,MAAM,kBAAmB,CACxB,GAAM,CAAE,QAAO,aAAc,EAAO,EAGpC,OAFI,EAAa,EAAW,CAAK,EAAU,EAAe,CAAK,GAC3D,EAAmB,CAAK,GAAG,MAAM,EAAqB,CAAK,EACxD,GAAkB,EAAW,CAAK,EAC1C,CACD,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,QAAO,aAAc,EAC7B,EAAI,CAAE,uBAAwB,GAAoB,EAAI,YAAc,aAAc,CAAC,EACnF,IAAM,MAAa,EAAI,CAAE,WAAY,EAAa,EAAW,CAAK,CAAE,CAAC,EACrE,EAAK,EACL,EAAO,SAAU,mBAAoB,EAAM,CAAE,QAAO,CAAC,EACrD,EAAO,SAAU,yBAA0B,EAAM,CAAE,QAAO,CAAC,EACvD,2BAA4B,GAAO,EAAO,EAAO,gCAAiC,EAAM,CAAE,QAAO,CAAC,CACvG,CACD,CAAC,ECfK,GAAc,EAAoB,CACvC,KAAM,OACN,WAAc,CACb,cAAe,IACf,iBAAkB,GACnB,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,GAAmB,CAAK,EAAG,OAChC,IAAM,MAAa,EAAI,CACtB,cAAe,EAAM,cACrB,iBAAkB,EAAM,gBACzB,CAAC,EACD,EAAK,EACL,EAAO,EAAO,yBAA0B,EAAM,CAAE,QAAO,CAAC,EACxD,EAAO,EAAO,mBAAoB,EAAM,CAAE,QAAO,CAAC,EAClD,EAAO,EAAO,iBAAkB,EAAM,CAAE,QAAO,CAAC,EAChD,EAAO,EAAO,UAAW,EAAM,CAAE,QAAO,CAAC,EACzC,EAAO,EAAO,WAAY,EAAM,CAAE,QAAO,CAAC,EAC1C,EAAO,EAAO,iBAAkB,EAAM,CAAE,QAAO,CAAC,EAChD,EAAO,EAAO,aAAc,EAAM,CAAE,QAAO,CAAC,EAC5C,EAAO,EAAO,UAAW,EAAM,CAAE,QAAO,CAAC,CAC1C,CACD,CAAC,ECvCK,EAAc,OAAO,sBAAsB,EAC3C,EAAa,OAAO,qBAAqB,EACzC,GAAiB,OAAO,yBAAyB,EAEjD,EAAe,OAAO,uBAAuB,EAC7C,EAAc,OAAO,sBAAsB,EAC3C,GAAkB,OAAO,0BAA0B,EAOnD,EAAkB,EAAoB,CAC3C,KAAM,WACN,OAAQ,CACP,MAAO,CACN,OAAQ,GACR,MAAO,EACP,KAAM,CAAE,UAAW,eAAgB,CACpC,EACA,OAAQ,CACP,OAAQ,GACR,MAAO,CACR,CACD,EACA,OAAQ,CAAE,UAAW,EACnB,GAAc,IAAK,IACnB,GAAa,IAAK,IAClB,IAAkB,GAAU,EAAI,EAAG,GAAa,CAAM,CAAC,GACvD,GAAe,IAAK,IACpB,GAAc,IAAK,IACnB,IAAmB,GAAU,EAAI,EAAG,GAAc,CAAM,CAAC,CAC3D,GACA,QAAS,CACR,OAAQ,CAAE,SAAU,EAAI,CAAC,CAAC,IAAe,EAAI,CAAC,CAAC,IAAgB,GAC/D,QAAS,CAAE,SAAU,EAAI,CAAC,CAAC,IAAgB,EAAI,CAAC,CAAC,IAAiB,EACnE,EACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,GAA0B,CAAK,EAAG,OACvC,IAAM,MAAa,EAAI,EACrB,GAAc,EAAM,aAAa,OACjC,GAAe,EAAM,aAAa,MACpC,CAAC,EACD,EAAK,EACL,EAAO,EAAO,oBAAqB,EAAM,CAAE,QAAO,CAAC,CACpD,CACD,CAAC,EC/CK,EAAa,EAAoB,CACtC,KAAM,MACN,OAAQ,CAAE,aAAc,CACvB,IAAK,GACL,gBAAiB,cACjB,MAAM,yBAA0B,CAC/B,GAAM,CAAE,QAAO,aAAc,EAAO,EAEpC,OADI,EAAa,EAAW,CAAK,GAAG,MAAM,EAAe,CAAK,EACvD,GAAwB,CAAK,CACrC,EACA,MAAM,sBAAuB,CAC5B,GAAM,CAAE,SAAU,EAAO,EACzB,OAAO,EAAqB,CAAK,CAClC,EACA,MAAM,wBAAyB,CAC9B,GAAM,CAAE,QAAO,aAAc,EAAO,EAGpC,OAFI,EAAmB,CAAK,EAAU,EAAqB,CAAK,GAC5D,EAAa,EAAW,CAAK,GAAG,MAAM,EAAe,CAAK,EACvD,GAAwB,CAAK,EACrC,CACD,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EAClB,EAAI,CAAE,gBAAiB,GAA0B,GAAK,GAA0B,CAAK,EAAI,YAAc,aAAc,CAAC,EACtH,IAAM,MAAa,EAAI,CAAE,IAAK,EAAmB,CAAK,CAAE,CAAC,EACzD,EAAK,EACL,EAAO,EAAO,wBAAyB,EAAM,CAAE,QAAO,CAAC,EACvD,EAAO,EAAO,wBAAyB,EAAM,CAAE,QAAO,CAAC,EACnD,2BAA4B,GAAO,EAAO,EAAO,gCAAiC,EAAM,CAAE,QAAO,CAAC,CACvG,CACD,CAAC,EC/BK,EAAkB,EAAoB,CAC3C,KAAM,WACN,OAAQ,CAAE,aAAc,CACvB,OAAQ,GACR,MAAO,GACP,QAAS,GACT,QAAS,GACT,MAAO,CACN,OAAO,EAAO,CAAC,CAAC,MAAM,KAAK,CAC5B,EACA,OAAQ,CACP,GAAM,CAAE,SAAU,EAAO,EACrB,EAAoB,CAAK,GAAG,EAAM,MAAM,CAC7C,EACA,cAAe,CACd,IAAM,EAAQ,EAAO,CAAC,CAAC,MAOvB,OANK,EAAoB,CAAK,EAC1B,EAAM,QACT,EAAM,KAAK,EACJ,KAER,EAAM,MAAM,EACL,IANiC,EAOzC,CACD,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,EAAoB,CAAK,GAAK,CAAC,EAAmB,CAAK,GAAK,CAAC,EAAqB,CAAK,EAAG,OAC/F,IAAM,MAAa,EAAI,CACtB,OAAQ,EAAM,OACd,MAAO,EAAM,MACb,QAAS,CAAC,EAAM,QAAU,EAAM,YAAc,EAC9C,QAAS,EAAM,WAAa,iBAAiB,kBAAoB,CAAC,EAAM,MACzE,CAAC,EACD,EAAK,EACL,EAAO,EAAO,UAAW,EAAM,CAAE,QAAO,CAAC,EACzC,EAAO,EAAO,OAAQ,EAAM,CAAE,QAAO,CAAC,EACtC,EAAO,EAAO,QAAS,EAAM,CAAE,QAAO,CAAC,EACvC,EAAO,EAAO,QAAS,EAAM,CAAE,QAAO,CAAC,EACvC,EAAO,EAAO,UAAW,EAAM,CAAE,QAAO,CAAC,EACzC,EAAO,EAAO,UAAW,EAAM,CAAE,QAAO,CAAC,EACzC,EAAO,EAAO,SAAU,EAAM,CAAE,QAAO,CAAC,CACzC,CACD,CAAC,EC3CK,GAAgB,CACrB,GACA,GACA,GACA,EACA,IACA,IACA,IACA,CACD,EACM,EAAsB,EAAoB,CAC/C,KAAM,eACN,OAAQ,CAAE,aAAc,CACvB,cAAe,GACf,aAAc,EACd,gBAAgB,EAAM,CACrB,GAAM,CAAE,SAAU,EAAO,EACrB,GAA2B,CAAK,IAAG,EAAM,aAAe,EAC7D,CACD,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,GAA2B,CAAK,EAAG,OACxC,IAAM,MAAa,EAAI,CAAE,aAAc,EAAM,YAAa,CAAC,EAC3D,EAAK,EACL,EAAO,EAAO,aAAc,EAAM,CAAE,QAAO,CAAC,CAC7C,CACD,CAAC,EC1BD,SAAS,GAAkB,EAAW,EAAO,CAC5C,OAAO,EAAU,IAAM,OAAO,CAAK,CACpC,CACA,SAAS,GAAiB,EAAW,CACpC,MAAO,CACN,GAAG,EAAU,KAAO,IAAK,IAAK,CAAE,GAAI,EAAU,EAAG,EACjD,GAAG,EAAU,QAAU,IAAK,IAAK,CAAE,MAAO,EAAU,KAAM,EAC1D,GAAG,EAAU,SAAW,IAAK,IAAK,CAAE,OAAQ,EAAU,MAAO,EAC7D,GAAG,EAAU,UAAY,IAAK,IAAK,CAAE,QAAS,EAAU,OAAQ,EAChE,GAAG,EAAU,YAAc,IAAK,IAAK,CAAE,UAAW,EAAU,SAAU,EACtE,GAAG,EAAU,QAAU,IAAK,IAAK,CAAE,MAAO,EAAU,KAAM,EAC1D,SAAU,EAAU,QACrB,CACD,CACA,SAAS,GAAQ,EAAW,CAE3B,OADI,EAAU,OAAS,EAAU,OAAe,KAAK,IAAI,EAAU,MAAO,EAAU,MAAM,EACnF,EAAU,QAAU,EAAU,KACtC,CACA,MAAM,GAAiB,EAAoB,CAC1C,KAAM,UACN,OAAQ,CAAE,aAAc,CACvB,mBAAoB,CAAC,EACrB,qBAAsB,KACtB,qBAAqB,EAAO,CAC3B,GAAM,CAAE,SAAU,EAAO,EACzB,GAAI,CAAC,GAA6B,CAAK,EAAG,OAC1C,GAAI,IAAU,OAAoB,CACjC,EAAM,gBAAgB,cAAgB,GACtC,MACD,CACA,IAAM,EAAQ,CAAC,GAAG,EAAM,eAAe,CAAC,CAAC,WAAW,EAAW,IAAmB,GAAkB,EAAW,CAAc,IAAM,CAAK,EACpI,IAAU,KAAI,EAAM,gBAAgB,cAAgB,EACzD,CACD,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EACd,EAAkB,KAClB,EAAU,KACR,MAA2B,GAA6B,CAAK,EAAI,EAAM,gBAAkB,KACzF,EAAsB,GAAS,CACpC,GAAI,CAAC,EAAM,OAAO,KAClB,IAAM,EAAa,CAAC,GAAG,CAAI,EACrB,EAAS,EAAW,KAAM,GAAc,EAAU,MAAM,EAC9D,GAAI,EAAQ,OAAO,EACnB,GAAI,CAAC,GAA8B,CAAK,GAAK,CAAC,EAAM,YAAc,CAAC,EAAM,YAAa,OAAO,KAC7F,IAAM,EAAO,GAAQ,CACpB,MAAO,EAAM,YAAc,IAAK,GAChC,OAAQ,EAAM,aAAe,IAAK,EACnC,CAAC,EACK,EAAU,EAAW,OAAQ,GAAc,GAAQ,CAAS,IAAM,CAAI,EAC5E,OAAO,EAAQ,SAAW,EAAI,EAAQ,GAAK,IAC5C,EACM,GAAQ,EAAO,EAAmB,IAAM,CAC7C,IAAM,EAAS,EAAmB,CAAI,EACtC,EAAI,CACH,mBAAoB,EAAO,CAAC,GAAG,CAAI,CAAC,CAAC,IAAI,EAAgB,EAAI,CAAC,EAC9D,qBAAsB,EAAS,GAAiB,CAAM,EAAI,IAC3D,CAAC,CACF,EACM,MAAa,CAClB,IAAM,EAAsB,EAAmB,EAC/C,GAAI,IAAwB,EAAiB,CAC5C,EAAK,CAAmB,EACxB,MACD,CACA,GAAS,MAAM,EACf,EAAU,IAAI,gBACd,EAAkB,EACd,IACH,EAAO,EAAiB,mBAAsB,EAAK,CAAe,EAAG,CAAE,OAAQ,EAAQ,MAAO,CAAC,EAC/F,EAAO,EAAiB,sBAAyB,EAAK,CAAe,EAAG,CAAE,OAAQ,EAAQ,MAAO,CAAC,EAClG,EAAO,EAAiB,aAAgB,EAAK,CAAe,EAAG,CAAE,OAAQ,EAAQ,MAAO,CAAC,EACzF,EAAO,EAAiB,mBAAsB,EAAK,CAAe,EAAG,CAAE,OAAQ,EAAQ,MAAO,CAAC,GAEhG,EAAK,CAAe,CACrB,EACA,EAAK,EACL,EAAO,EAAO,YAAa,EAAM,CAAE,QAAO,CAAC,EAC3C,EAAO,EAAO,aAAgB,EAAK,CAAe,EAAG,CAAE,QAAO,CAAC,EAC/D,EAAO,iBAAiB,YAAe,GAAS,MAAM,EAAG,CAAE,KAAM,EAAK,CAAC,CACxE,CACD,CAAC,EChFK,GAAwB,EAAoB,CACjD,KAAM,iBACN,OAAQ,CAAE,aAAc,CACvB,oBAAqB,eACrB,2BAA4B,cAC5B,MAAM,sBAAuB,CAC5B,GAAM,CAAE,QAAO,aAAc,EAAO,EAGpC,OAFI,GAA0B,CAAK,EAAU,GAAsB,CAAK,GACpE,EAAa,EAAW,CAAK,GAAG,MAAM,EAAe,CAAK,EACvD,MAAM,GAAsB,CAAK,EACzC,CACD,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,GAA6B,CAAK,EAAG,OAC1C,GAAI,EAAuB,CAAK,EAAG,CAClC,IAAM,MAAuB,CAC5B,EAAI,CAAE,oBAAqB,EAAM,sCAAwC,YAAc,cAAe,CAAC,CACxG,EAKA,EAAO,EAAO,0CAJY,GAAU,CACnC,GAAM,CAAE,gBAAiB,EACzB,EAAI,CAAE,2BAA4B,IAAiB,YAAc,YAAc,aAAc,CAAC,CAC/F,EAC2E,CAAE,QAAO,CAAC,EACrF,EAAO,EAAO,+CAAgD,EAAgB,CAAE,QAAO,CAAC,EACxF,EAAe,EACf,MACD,CACA,IAAM,MAAkB,EAAI,CAAE,oBAAqB,EAAM,OAAO,KAAM,CAAC,EACvE,EAAU,EACV,EAAO,EAAM,OAAQ,UAAW,EAAW,CAAE,QAAO,CAAC,EACrD,EAAO,EAAM,OAAQ,aAAc,EAAW,CAAE,QAAO,CAAC,EACxD,EAAO,EAAM,OAAQ,aAAc,EAAW,CAAE,QAAO,CAAC,EACxD,EAAM,OAAO,kBAAmB,GAAc,CAC7C,EAAI,CAAE,2BAA4B,EAAY,YAAc,aAAc,CAAC,CAC5E,CAAC,CAAC,CAAC,UAAY,CACd,EAAI,CAAE,2BAA4B,aAAc,CAAC,CAClD,CAAC,EACD,EAAO,iBAAiB,YAAe,CACtC,EAAM,QAAQ,0BAA0B,CAAC,CAAC,UAAY,CAAC,CAAC,CACzD,CAAC,CACF,CACD,CAAC,EC5CK,EAAgB,EAAoB,CACzC,KAAM,SACN,OAAQ,CAAE,SAAQ,cAAe,CAChC,OAAQ,KACR,QAAS,GACT,WAAW,EAAK,CACf,EAAQ,MAAM,EACd,GAAM,CAAE,SAAU,EAAO,EAIzB,OAHK,EAAqB,CAAK,GAC/B,EAAM,IAAM,EACZ,EAAM,KAAK,EACJ,GAHkC,CAI1C,CACD,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,EAAqB,CAAK,EAAG,OAClC,IAAM,MAAa,EAAI,CACtB,OAAQ,EAAM,YAAc,EAAM,KAAO,KACzC,QAAS,EAAM,YAAc,iBAAiB,gBAC/C,CAAC,EACD,EAAK,EACL,EAAO,EAAO,UAAW,EAAM,CAAE,QAAO,CAAC,EACzC,EAAO,EAAO,iBAAkB,EAAM,CAAE,QAAO,CAAC,EAChD,EAAO,EAAO,YAAa,EAAM,CAAE,QAAO,CAAC,EAC3C,EAAO,EAAO,UAAW,EAAM,CAAE,QAAO,CAAC,CAC1C,CACD,CAAC,ECzBD,SAAS,GAAW,EAAO,EAAO,CACjC,OAAO,EAAM,IAAM,SAAS,EAAM,GAAG,EAAM,KAAK,GAAG,EAAM,SAAS,GAAG,EAAM,OAC5E,CAKA,SAAS,GAAmB,EAAO,CAClC,OAAO,MAAM,KAAK,EAAM,UAAU,CAAC,CAAC,KAAK,EAAO,KAAW,CAC1D,GAAI,GAAW,EAAO,CAAK,EAC3B,OACD,EAAE,CAAC,CAAC,QAAQ,CAAE,WAAY,EAAyB,CAAK,CAAC,CAAC,CAAC,MAAM,EAAG,IAAM,EAAE,MAAM,KAAO,EAAE,MAAM,KAAO,EAAI,EAAE,MAAM,KAAO,EAAE,MAAM,KAAO,GAAK,CAAC,CACjJ,CAEA,SAAS,EAAS,EAAQ,EAAQ,CACjC,IAAK,GAAM,CAAE,WAAW,EAAQ,CAC/B,IAAM,EAAO,IAAU,EAAS,UAAY,WACxC,EAAM,OAAS,IAAM,EAAM,KAAO,EACvC,CACD,CACA,SAAS,GAAgB,EAAQ,EAAQ,CACxC,IAAM,EAAY,EAAsB,CAAM,EACxC,EAAO,EAAe,CAAM,EAC9B,IAAA,MAAgC,CAAC,EAAU,WAAW,KAAoB,GAAG,EAAK,IAAI,EAC1F,IAAK,IAAM,KAAO,EAAM,CACvB,IAAM,EAAQ,EAAO,MAAM,CAAE,WAAY,EAAsB,EAAM,QAAQ,IAAM,CAAG,EACtF,GAAI,EAAO,OAAO,EAClB,IAAM,EAAW,EAAO,MAAM,CAAE,WAAY,EAAsB,EAAM,QAAQ,CAAC,CAAC,WAAW,GAAG,EAAI,EAAE,CAAC,EACvG,GAAI,EAAU,OAAO,CACtB,CACD,CACA,MAAM,GAAmB,EAAoB,CAC5C,KAAM,YACN,OAAQ,CAAE,YAAa,CACtB,IAAI,EAAc,KAClB,MAAO,CACN,aAAc,CAAC,EACf,cAAe,CAAC,EAChB,kBAAmB,KACnB,cAAe,CAAC,EAChB,iBAAkB,GAClB,gBAAgB,EAAW,CAC1B,GAAM,CAAE,SAAU,EAAO,EACzB,GAAI,CAAC,EAAwB,CAAK,EAAG,MAAO,GAC5C,IAAM,EAAkB,GAAmB,CAAK,EAChD,GAAI,CAAC,EAAgB,OAAQ,MAAO,GACpC,IAAM,EAAU,EAAgB,MAAM,CAAE,WAAY,EAAM,OAAS,SAAS,EACtE,EAAc,GAAa,CAAC,EAElC,GADI,IAAS,EAAc,EAAQ,IAC/B,CAAC,EAEJ,OADA,EAAS,EAAiB,IAAI,EACvB,GAER,IAAM,EAAO,GAAW,EAAgB,MAAM,CAAE,QAAS,IAAO,CAAW,GAAK,GAAgB,EAAiB,WAAW,WAAW,UAAY,EAAE,GAAK,EAAgB,GAG1K,MAFA,GAAc,EAAK,GACnB,EAAS,EAAiB,EAAK,KAAK,EAC7B,EACR,EACA,qBAAqB,EAAO,CAC3B,GAAM,CAAE,SAAU,EAAO,EACzB,GAAI,CAAC,EAAwB,CAAK,EAAG,OACrC,IAAM,EAAkB,GAAmB,CAAK,EAChD,GAAI,CAAC,EAAgB,OAAQ,OAC7B,GAAI,IAAU,MAAO,CACpB,IAAM,EAAU,EAAgB,MAAM,CAAE,WAAY,EAAM,OAAS,SAAS,EACxE,IAAS,EAAc,EAAQ,IACnC,EAAS,EAAiB,IAAI,EAC9B,MACD,CACA,IAAM,EAAS,EAAgB,MAAM,CAAE,QAAS,IAAO,CAAK,EACvD,IACL,EAAc,EAAO,GACrB,EAAS,EAAiB,EAAO,KAAK,EACvC,CACD,CACD,EACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,EAAwB,CAAK,EAAG,OACrC,IAAI,EAAe,KACb,MAAa,CAClB,GAAc,MAAM,EACpB,EAAe,IAAI,gBACnB,IAAI,EAAgB,KAChB,EAAiB,KACf,EAAgB,CAAC,EACnB,EAAmB,GACvB,IAAK,IAAI,EAAI,EAAG,EAAI,EAAM,WAAW,OAAQ,IAAK,CACjD,IAAM,EAAQ,EAAM,WAAW,GAC3B,CAAC,GAAiB,EAAM,OAAS,aAAY,EAAgB,GAC7D,CAAC,GAAkB,EAAM,OAAS,YAAc,EAAM,QAAU,eAAc,EAAiB,GACnG,EAAc,KAAK,CAClB,GAAI,GAAW,EAAO,CAAC,EACvB,KAAM,EAAM,KACZ,MAAO,EAAM,MACb,SAAU,EAAM,SAChB,KAAM,EAAM,IACb,CAAC,EACG,EAAyB,CAAK,GAAK,EAAM,OAAS,YAAW,EAAmB,GACrF,CACA,IAAM,EAAe,GAAe,KAAO,MAAM,KAAK,EAAc,IAAI,EAAI,CAAC,EACvE,EAAgB,GAAgB,KAAO,MAAM,KAAK,EAAe,IAAI,EAAI,CAAC,EAC5E,EAAoB,KACpB,IAAgB,EAAoB,EAAiB,EAAO,CAAc,CAAC,EAAE,KAAO,MACxF,IAAM,EAAS,GAA0B,CAAK,GAAK,EAAM,iBAAiB,OAAO,GAAK,CAAC,EACjF,EAAe,aAAiB,aAAe,EAAM,YAAY,iBAAiB,OAAO,GAAK,CAAC,EACrG,IAAK,IAAM,IAAW,CAAC,GAAG,EAAQ,GAAG,CAAY,EAAQ,EAAQ,OAAO,MAAM,QAAQ,EAAO,EAAS,OAAQ,EAAM,CAAE,OAAQ,EAAa,MAAO,CAAC,EACnJ,EAAI,CACH,eACA,gBACA,oBACA,gBACA,kBACD,CAAC,CACF,EACA,EAAK,EACL,IAAM,EAAa,EAAM,WACrB,aAAsB,cACzB,EAAO,EAAY,WAAY,EAAM,CAAE,QAAO,CAAC,EAC/C,EAAO,EAAY,cAAe,EAAM,CAAE,QAAO,CAAC,EAClD,EAAO,EAAY,SAAU,EAAM,CAAE,QAAO,CAAC,GAE9C,EAAO,EAAO,YAAa,EAAM,CAAE,QAAO,CAAC,EAC3C,EAAO,iBAAiB,YAAe,GAAc,MAAM,EAAG,CAAE,KAAM,EAAK,CAAC,CAC7E,CACD,CAAC,EClIK,GAAa,CAAE,KAAM,OAAO,IAAI,eAAe,CAAE,ECKjD,EAAc,EAAoB,CACvC,KAAM,OACN,OAAQ,CAAE,SAAQ,UAAS,UAAW,CACrC,YAAa,EACb,SAAU,EACV,QAAS,GACT,MAAM,KAAK,EAAM,CAChB,GAAM,CAAE,SAAU,EAAO,EAAG,EAAS,EAAQ,UAAU,GAAW,IAAI,EACtE,GAAI,CAAC,EAAmB,CAAK,GAAK,CAAC,EAAqB,CAAK,EAAG,MAAO,GACvE,GAAI,CAAC,GAAY,CAAK,GACjB,CAAC,MAAM,EAAQ,EAAO,iBAAkB,CAAE,QAAO,CAAC,CAAC,CAAC,UAAY,EAAK,EAAG,OAAO,EAAM,YAE1F,IAAM,EAAc,KAAK,IAAI,EAAG,KAAK,IAAI,EAAM,EAAM,UAAY,GAAQ,CAAC,EAO1E,OANA,EAAI,CACH,YAAa,EACb,QAAS,EACV,CAAC,EACD,EAAM,YAAc,EACpB,MAAM,EAAQ,EAAO,SAAU,CAAE,QAAO,CAAC,CAAC,CAAC,MAAM,CAAI,EAC9C,EAAM,WACd,CACD,GACA,OAAO,CAAE,SAAQ,SAAQ,MAAK,OAAO,CACpC,GAAM,CAAE,SAAU,EAClB,GAAI,CAAC,EAAmB,CAAK,EAAG,OAChC,IAAM,MAAwB,CAC7B,GAAM,CAAE,YAAa,EACrB,GAAI,IAAa,KAA4B,EAAqB,CAAK,EAAG,CACzE,GAAM,CAAE,YAAa,EACrB,OAAO,EAAS,OAAS,EAAI,EAAS,IAAI,EAAS,OAAS,CAAC,EAAI,CAClE,CACA,OAAO,OAAO,SAAS,CAAQ,EAAI,EAAW,CAC/C,EACM,MAAa,EAAI,CACtB,YAAa,EAAM,YACnB,SAAU,EAAgB,EAC1B,QAAS,EAAM,OAChB,CAAC,EACK,MAA0B,CAC3B,EAAI,CAAC,CAAC,SACV,EAAK,CACN,EACA,EAAK,EACL,EAAO,EAAO,aAAc,EAAmB,CAAE,QAAO,CAAC,EACzD,EAAO,EAAO,iBAAkB,EAAM,CAAE,QAAO,CAAC,EAChD,EAAO,EAAO,UAAW,EAAM,CAAE,QAAO,CAAC,EACzC,EAAO,EAAO,SAAU,EAAM,CAAE,QAAO,CAAC,EACxC,EAAO,EAAO,iBAAkB,EAAM,CAAE,QAAO,CAAC,EAChD,EAAO,EAAO,UAAW,EAAM,CAAE,QAAO,CAAC,EACzC,EAAO,EAAO,WAAY,EAAmB,CAAE,QAAO,CAAC,CACxD,CACD,CAAC,ECnDK,EAAgB,EAAoB,CACzC,KAAM,SACN,OAAQ,CAAE,aAAc,CACvB,OAAQ,EACR,MAAO,GACP,mBAAoB,cACpB,kBAAmB,cACnB,UAAU,EAAQ,CACjB,GAAM,CAAE,SAAU,EAAO,EACzB,GAAI,CAAC,EAAqB,CAAK,EAAG,MAAO,GACzC,IAAM,EAAU,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,CAAM,CAAC,EAG/C,OAFI,EAAU,GAAK,EAAM,QAAO,EAAM,MAAQ,IAC9C,EAAM,OAAS,EACR,EAAM,MACd,EACA,aAAc,CACb,GAAM,CAAE,SAAU,EAAO,EAUzB,OATK,GAAoB,CAAK,EACzB,EAAqB,CAAK,GAI3B,EAAM,OAAS,EAAM,SAAW,GACnC,EAAM,MAAQ,GACV,EAAM,SAAW,IAAG,EAAM,OAAS,MACjC,EAAM,MAAQ,GACd,EAAM,QAPZ,EAAM,MAAQ,CAAC,EAAM,MACd,EAAM,OAH0B,EAUzC,CACD,GACA,OAAO,CAAE,SAAQ,SAAQ,OAAO,CAC/B,GAAM,CAAE,SAAU,EACZ,EAAgB,EAAqB,CAAK,EAC1C,EAAe,GAAoB,CAAK,EAC9C,GAAI,CAAC,GAAiB,CAAC,EAAc,OACrC,EAAI,CACH,mBAAoB,EAAgB,GAAa,EAAI,cACrD,kBAAmB,EAAe,YAAc,aACjD,CAAC,EACD,IAAM,MAAa,EAAI,CACtB,OAAQ,EAAgB,EAAM,OAAS,EACvC,MAAO,EAAe,EAAM,MAAQ,EACrC,CAAC,EACD,EAAK,EACL,EAAO,EAAO,eAAgB,EAAM,CAAE,QAAO,CAAC,CAC/C,CACD,CAAC,EAED,SAAS,IAAe,CACvB,IAAM,EAAQ,SAAS,cAAc,OAAO,EAC5C,GAAI,CAEH,MADA,GAAM,OAAS,GACR,EAAM,SAAW,GAAK,YAAc,aAC5C,MAAQ,CACP,MAAO,aACR,CACD,CC5CA,MAAM,GAAgB,CACrB,EACA,EACA,GACA,GACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,GACA,EACA,CACD,EACM,GAAgB,CACrB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,CACD,EACM,GAAqB,CAAC,EAOtB,GAAoB,CACzB,EACA,EACA,EACA,EACA,EACA,EACA,EACA,GACA,EACA,GACA,EACA,GACA,CACD,ECnDA,IAAI,GAAqB,KAAM,CAC9B,GACA,GACA,GACA,GACA,GAAe,EACf,YAAY,EAAM,EAAO,EAAU,CAClC,KAAKC,GAAQ,EACb,KAAKC,GAAS,EACd,KAAKC,GAAY,EACjB,EAAK,cAAc,IAAI,CACxB,CACA,IAAI,OAAQ,CAGX,OAFK,KAAKA,IACV,KAAKC,KAAY,KAAKD,GAAU,KAAKD,GAAO,OAAO,EAC5C,KAAKE,IAFgB,KAAKF,GAAO,OAGzC,CAEA,MAAM,EAAO,CACZ,KAAKA,GAAS,EACd,KAAKG,GAAW,CACjB,CACA,eAAgB,CACf,KAAKA,GAAW,CACjB,CACA,kBAAmB,CAClB,KAAKC,GAAa,EAClB,KAAKA,GAAe,EACpB,KAAKF,GAAU,IAAK,EACrB,CACA,IAAa,CAEZ,GADA,KAAKE,GAAa,EACd,CAAC,KAAKH,GAAW,CACpB,KAAKG,GAAe,KAAKJ,GAAO,cAAgB,KAAKD,GAAM,cAAc,CAAC,EAC1E,MACD,CACA,IAAM,EAAW,KAAKE,GACtB,KAAKC,GAAU,EAAS,KAAKF,GAAO,OAAO,EAC3C,KAAKI,GAAe,KAAKJ,GAAO,cAAgB,CAC/C,IAAM,EAAO,EAAS,KAAKA,GAAO,OAAO,EACpC,EAAa,KAAKE,GAAS,CAAI,IACnC,KAAKA,GAAU,EACf,KAAKH,GAAM,cAAc,EAE3B,CAAC,CACF,CACD,ECtCI,GAAgB,KAAM,CACzB,GACA,GACA,GACA,YAAY,EAAM,EAAQ,EAAa,CACtC,KAAKM,GAAe,GAAe,EAC/B,GAAQ,CAAM,GACjB,KAAKC,GAAe,EACpB,KAAKC,GAAY,OAEjB,KAAKD,GAAe,KACpB,KAAKC,GAAY,IAAIC,EAAgB,EAAM,CAC1C,QAAS,EACT,SAAW,GAAU,KAAKH,GAAa,CAAK,EAC5C,UAAW,EACZ,CAAC,GAEF,EAAK,cAAc,IAAI,CACxB,CAEA,IAAI,OAAQ,CAEX,OADI,KAAKE,GAAkB,KAAKA,GAAU,OAAS,KAC5C,KAAKD,EACb,CACA,eAAgB,CACX,KAAKA,IAAc,KAAKD,GAAa,KAAKC,EAAY,CAC3D,CACD,ECdI,GAAkB,KAAM,CAC3B,GACA,GACA,GACA,GAAY,KACZ,YAAY,EAAM,EAAQ,EAAU,CACnC,KAAKG,GAAQ,EACb,KAAKC,GAAY,EACjB,KAAKC,GAAY,IAAI,GAAc,EAAM,EAAS,GAAU,KAAKC,GAAS,CAAK,CAAC,EAChF,EAAK,cAAc,IAAI,CACxB,CACA,IAAI,OAAQ,CACX,IAAM,EAAQ,KAAKD,GAAU,MAC7B,GAAI,EAAO,CAAK,EAAG,MAAU,MAAM,qBAAqB,EAExD,OADI,EAAY,KAAKD,EAAS,EAAU,EACjC,KAAKG,GAAU,KACvB,CACA,eAAgB,CAAC,CACjB,GAAS,EAAO,CACX,EAAY,KAAKH,EAAS,IACzB,KAAKG,GACL,KAAKA,GAAU,MAAM,EAAM,MAAM,EADjB,KAAKA,GAAY,IAAI,GAAmB,KAAKJ,GAAO,EAAM,OAAQ,KAAKC,EAAS,EAEtG,CACD,ECzBa,GAAb,KAAuG,CACrG,GACA,GAEA,GACA,GAAgD,KAmBhD,YACE,EACA,EACA,EACA,CACA,KAAKI,GAAQ,EACb,KAAKC,GAAY,EAEjB,KAAKC,GAAY,IAAIC,EAAgB,EAAM,CACzC,UACA,SAAW,GAAQ,KAAKC,GAAS,CAAG,EACpC,UAAW,EACb,CAAC,EAED,EAAK,cAAc,IAAI,CACzB,CAEA,IAAI,OAA4B,CAC9B,IAAM,EAAQ,KAAKF,GAAU,MACxB,KAML,OAHK,KAAKD,GAGH,KAAKI,IAAQ,MAHQ,CAI9B,CAEA,IAAI,aAAkC,CACpC,OAAO,KAAKJ,IAAW,WACzB,CAEA,eAAsB,CACpB,IAAM,EAAQ,KAAKC,GAAU,MACzB,GAAO,KAAKE,GAAS,CAAK,CAChC,CAEA,kBAAyB,CACvB,KAAKC,GAAS,IAChB,CAEA,GAAS,EAAoB,CACvB,CAAC,KAAKA,IAAU,KAAKJ,KACvB,KAAKI,GAAS,IAAI,GAAgB,KAAKL,GAAO,EAAO,KAAKC,EAAS,EAEvE,CACF,EC/DA,SAAS,GAAc,EAA4C,CACjE,OAAO,OAAO,QAAQ,CAAM,CAAC,CAAC,KAAK,CAAC,EAAK,KAAW,CAElD,IAAM,EADW,EAAM,MAAM,WACC,EAAU,CAAG,EAO3C,MAAO,CAAE,SAAU,EAAU,CAAS,EAAG,YAAW,OAAM,CAC5D,CAAC,CACH,CAeA,SAAgB,GACd,EACsB,CACtB,IAAM,EAAS,GAAc,EAAQ,MAAM,EAE3C,MAA+C,IAAqB,CAClE,MAAM,UAA8B,CAAU,QACxB,KAAA,WAAA,CAClB,GAAI,EAAgE,WACpE,GAAG,OAAO,YAAY,EAAO,KAAK,CAAE,WAAU,eAAgB,CAAC,EAAU,CAAE,KAAM,OAAQ,WAAU,CAAC,CAAC,CAAC,CACxG,EAEA,GAAuB,EAAQ,QAAQ,EACvC,GAAiC,KACjC,GAA+B,KAC/B,GAAuB,KACvB,GAAoC,KACpC,GAAkB,GAElB,GAAa,GAA8B,CACrC,KAAKK,KAAW,IACpB,KAAKA,GAAS,EACd,KAAKC,GAAe,SAAS,CAAE,QAAO,SAAU,KAAKC,EAAU,CAAC,EAChE,KAAKC,GAAW,EAClB,EAEA,GAAiB,GAA2C,CACtD,KAAKC,KAAe,IACxB,KAAKA,GAAa,EAClB,KAAKC,GAAmB,SAAS,CAC/B,YACA,aAAc,KAAKC,EACrB,CAAC,EACD,KAAKH,GAAW,EAClB,EAEA,GAAkB,IAAII,EAAgB,KAAM,CAC1C,QAAS,EAAQ,cACjB,aAAc,KAAK,KACrB,CAAC,EAED,GAAiB,IAAIA,EAAgB,KAAM,CACzC,QAAS,EAAQ,aACjB,aAAc,CAAE,MAAO,KAAKP,GAAQ,SAAU,KAAKE,EAAU,CAC/D,CAAC,EAED,GAAqB,IAAIK,EAAgB,KAAM,CAC7C,QAAS,EAAQ,iBACjB,aAAc,CACZ,UAAW,KAAKH,GAChB,aAAc,KAAKE,EACrB,CACF,CAAC,EAED,IAAI,OAAe,CAKjB,OAJI,EAAO,KAAKE,EAAM,IACpB,KAAKA,GAAS,EAAQ,QAAQ,GAGzB,KAAKA,EACd,CAEA,mBAA6B,CAC3B,KAAKC,GAAmB,EACxB,MAAM,kBAAkB,EACxB,KAAKC,GAAgB,SAAS,KAAK,KAAK,EACxC,KAAKT,GAAe,SAAS,CAAE,MAAO,KAAKD,GAAQ,SAAU,KAAKE,EAAU,CAAC,EAC7E,KAAKG,GAAmB,SAAS,CAC/B,UAAW,KAAKD,GAChB,aAAc,KAAKE,EACrB,CAAC,EACD,KAAKH,GAAW,EAChB,KAAKQ,GAAwB,CAC/B,CAEA,sBAAgC,CAC9B,MAAM,qBAAqB,EAC3B,KAAKC,GAAa,CACpB,CAEA,iBAA2B,CACzB,KAAKA,GAAa,EAClB,KAAKJ,IAAQ,QAAQ,EACrB,KAAKA,GAAS,KACd,MAAM,gBAAgB,CACxB,CAEA,WAA8B,EAA+B,CAC3D,MAAM,WAAW,CAAO,EAIxB,IAAK,GAAM,CAAE,WAAU,WAAW,EAC3B,EAAQ,IAAI,CAAQ,GACzB,GAAqB,KAAK,MAAO,EAAQ,KAA4C,EAAS,CAElG,CAEA,IAAmB,CACjB,IAAM,EAAQ,KAAKA,GACnB,GAAI,CAAC,EAAO,OAEZ,GAAI,CAAC,KAAKR,GAAQ,CAChB,KAAKY,GAAa,EAClB,MACF,CAEA,IAAM,EAAuB,CAC3B,MAAO,KAAKZ,GACZ,UAAW,KAAKI,EAClB,EAEM,EAAkB,EAAM,QAAQ,QAAU,EAAO,MACjD,EAAsB,EAAM,QAAQ,YAAc,EAAO,WAE3D,GAAmB,KACrB,KAAKQ,GAAa,EAClB,KAAKC,GAAU,EAAM,OAAO,CAAM,EAEtC,CAEA,IAAqB,CACnB,KAAKA,KAAU,EACf,KAAKA,GAAU,IACjB,CAEA,IAA2B,CACzB,IAAM,EAAQ,KAAK,MACf,QAAKC,KAAqB,EAE9B,KAAK,GAAM,CAAE,WAAU,WAAW,EAChC,GAAqB,EAAO,EAAQ,KAA4C,EAAS,EAE3F,KAAKA,GAAmB,CAFmE,CAG7F,CAEA,IAAgC,CAC1B,KAAKd,IAAU,KAAKe,KACxB,KAAKA,GAAkB,GAEvB,mBAAqB,CAInB,GAHA,KAAKA,GAAkB,GAGnB,KAAKf,GAAQ,OAEjB,IAAM,EAAQ,KAAK,cAAgC,cAAc,EAC7D,GACF,KAAKE,GAAU,CAAK,CAExB,CAAC,EACH,CACF,CAEA,OAAO,CACT,CACF,CChJA,SAAgB,GAAa,EAAiF,CAC5G,IAAM,EAAQ,GAAQ,GAAG,EAAO,QAAQ,EAClC,EAAgB,GAA4B,EAAO,QAAQ,EAEjE,SAAS,GAAsB,CAC7B,OAAO,GAA0B,CAAC,CAAC,CAAK,CAC1C,CAUA,MAAO,CACL,QAAS,EACT,SACA,oBACA,cAZoB,GAAiC,CACrD,gBACA,eACA,mBACA,QAAS,EACT,OAAQ,CACV,CAMc,CACd,CACF"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { a as isNull, r as isFunction, s as isObject, u as isUndefined } from "./predicate-faYxAB6Z.js";
|
|
2
2
|
import { n as getCanonicalLocaleKey, s as DEFAULT_LOCALE, t as findLocaleKeys } from "./i18n-DyF_NfCk.js";
|
|
3
|
+
import { t as shallowEqual } from "./shallow-equal-C7S8rj2f.js";
|
|
3
4
|
import { n as ContextConsumer } from "./media-element-CJY3JIgc.js";
|
|
4
5
|
import { n as mediaContext, r as playerContext, t as containerContext } from "./context-OhQY847V.js";
|
|
5
6
|
import { l as ContextProvider } from "./container-element-HHK_KZOE.js";
|
|
6
|
-
import { n as kebabCase } from "./casing-Cu0fL85w.js";
|
|
7
|
+
import { n as kebabCase, t as camelCase } from "./casing-Cu0fL85w.js";
|
|
7
8
|
import { t as listen } from "./listen-CdeggIF8.js";
|
|
8
9
|
import { t as noop } from "./noop-BxkeRIz9.js";
|
|
9
10
|
import { n as isCaptionOrSubtitleTrack, t as findTrackElement } from "./text-track-DMA7pa8W.js";
|
|
@@ -11,20 +12,6 @@ import { t as isWebKitAirPlayCapable } from "./webkit-C682yTT7.js";
|
|
|
11
12
|
import { t as anyAbortSignal } from "./abort-CUxJsUWY.js";
|
|
12
13
|
import { n as EMPTY_TEXT_TRACKS, r as EMPTY_TIME_RANGES, t as EMPTY_REMOTE } from "./constants-CsSwyIX6.js";
|
|
13
14
|
|
|
14
|
-
//#region ../utils/dist/object/shallow-equal.js
|
|
15
|
-
const hasOwn = Object.prototype.hasOwnProperty;
|
|
16
|
-
/** Shallowly compares values, including own string and symbol keys. */
|
|
17
|
-
function shallowEqual(a, b) {
|
|
18
|
-
if (Object.is(a, b)) return true;
|
|
19
|
-
if (typeof a !== "object" || a === null || typeof b !== "object" || b === null) return false;
|
|
20
|
-
const keysA = Reflect.ownKeys(a);
|
|
21
|
-
const keysB = Reflect.ownKeys(b);
|
|
22
|
-
if (keysA.length !== keysB.length) return false;
|
|
23
|
-
for (const key of keysA) if (!hasOwn.call(b, key) || !Object.is(a[key], b[key])) return false;
|
|
24
|
-
return true;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
//#endregion
|
|
28
15
|
//#region ../utils/dist/dom/event.js
|
|
29
16
|
/** Resolve the deepest event target, preferring composedPath for shadow DOM. */
|
|
30
17
|
function resolveEventTarget(event) {
|
|
@@ -1236,42 +1223,51 @@ const liveFeature = definePlayerFeature({
|
|
|
1236
1223
|
|
|
1237
1224
|
//#endregion
|
|
1238
1225
|
//#region ../core/dist/dev/dom/store/features/metadata.js
|
|
1239
|
-
const
|
|
1240
|
-
const
|
|
1241
|
-
const
|
|
1242
|
-
const
|
|
1243
|
-
const
|
|
1244
|
-
const
|
|
1226
|
+
const MEDIA_TITLE = Symbol("@videojs/media-title");
|
|
1227
|
+
const USER_TITLE = Symbol("@videojs/user-title");
|
|
1228
|
+
const SET_USER_TITLE = Symbol("@videojs/set-user-title");
|
|
1229
|
+
const DEFAULT_TITLE = "";
|
|
1230
|
+
const MEDIA_POSTER = Symbol("@videojs/media-poster");
|
|
1231
|
+
const USER_POSTER = Symbol("@videojs/user-poster");
|
|
1232
|
+
const SET_USER_POSTER = Symbol("@videojs/set-user-poster");
|
|
1233
|
+
const DEFAULT_POSTER = "";
|
|
1245
1234
|
/**
|
|
1246
|
-
* Resolves
|
|
1247
|
-
* Included in the standard audio, video, and live
|
|
1235
|
+
* Resolves content metadata into player state, preferring what the author set
|
|
1236
|
+
* over what the media carries. Included in the standard audio, video, and live
|
|
1237
|
+
* presets.
|
|
1248
1238
|
*/
|
|
1249
1239
|
const metadataFeature = definePlayerFeature({
|
|
1250
1240
|
name: "metadata",
|
|
1251
1241
|
config: {
|
|
1252
|
-
|
|
1253
|
-
action:
|
|
1254
|
-
state:
|
|
1242
|
+
title: {
|
|
1243
|
+
action: SET_USER_TITLE,
|
|
1244
|
+
state: USER_TITLE,
|
|
1245
|
+
html: { attribute: "content-title" }
|
|
1255
1246
|
},
|
|
1256
|
-
|
|
1257
|
-
action:
|
|
1258
|
-
state:
|
|
1247
|
+
poster: {
|
|
1248
|
+
action: SET_USER_POSTER,
|
|
1249
|
+
state: USER_POSTER
|
|
1259
1250
|
}
|
|
1260
1251
|
},
|
|
1261
1252
|
state: ({ set }) => ({
|
|
1262
|
-
[
|
|
1263
|
-
[
|
|
1264
|
-
[
|
|
1265
|
-
[
|
|
1266
|
-
[
|
|
1267
|
-
|
|
1268
|
-
setDefaultContentTitle: (value) => set({ [USER_DEFAULT_CONTENT_TITLE]: value })
|
|
1253
|
+
[MEDIA_TITLE]: void 0,
|
|
1254
|
+
[USER_TITLE]: void 0,
|
|
1255
|
+
[SET_USER_TITLE]: (value) => set({ [USER_TITLE]: value }),
|
|
1256
|
+
[MEDIA_POSTER]: void 0,
|
|
1257
|
+
[USER_POSTER]: void 0,
|
|
1258
|
+
[SET_USER_POSTER]: (value) => set({ [USER_POSTER]: value })
|
|
1269
1259
|
}),
|
|
1270
|
-
derived: {
|
|
1260
|
+
derived: {
|
|
1261
|
+
title: ({ get }) => get()[USER_TITLE] ?? get()[MEDIA_TITLE] ?? DEFAULT_TITLE,
|
|
1262
|
+
poster: ({ get }) => get()[USER_POSTER] ?? get()[MEDIA_POSTER] ?? DEFAULT_POSTER
|
|
1263
|
+
},
|
|
1271
1264
|
attach({ target, signal, set }) {
|
|
1272
1265
|
const { media } = target;
|
|
1273
1266
|
if (!isMediaContentDataCapable(media)) return;
|
|
1274
|
-
const sync = () => set({
|
|
1267
|
+
const sync = () => set({
|
|
1268
|
+
[MEDIA_TITLE]: media.contentData?.title,
|
|
1269
|
+
[MEDIA_POSTER]: media.contentData?.poster
|
|
1270
|
+
});
|
|
1275
1271
|
sync();
|
|
1276
1272
|
listen(media, "contentdatachange", sync, { signal });
|
|
1277
1273
|
}
|
|
@@ -2085,6 +2081,22 @@ var PlayerController = class {
|
|
|
2085
2081
|
//#endregion
|
|
2086
2082
|
//#region src/store/provider-mixin.ts
|
|
2087
2083
|
/**
|
|
2084
|
+
* Name each input on the element. A key whose own name is taken there declares
|
|
2085
|
+
* an `html.attribute` instead, and the property follows from that.
|
|
2086
|
+
*/
|
|
2087
|
+
function resolveInputs(config) {
|
|
2088
|
+
return Object.entries(config).map(([key, entry]) => {
|
|
2089
|
+
const declared = entry.html?.attribute;
|
|
2090
|
+
const attribute = declared ?? kebabCase(key);
|
|
2091
|
+
if (declared && declared !== kebabCase(declared)) console.warn(`[vjs-html] config html.attribute "${declared}" is not kebab-case and will never match`);
|
|
2092
|
+
return {
|
|
2093
|
+
property: camelCase(attribute),
|
|
2094
|
+
attribute,
|
|
2095
|
+
entry
|
|
2096
|
+
};
|
|
2097
|
+
});
|
|
2098
|
+
}
|
|
2099
|
+
/**
|
|
2088
2100
|
* Create a mixin that provides player context to descendant elements and
|
|
2089
2101
|
* owns the `store.attach()` lifecycle.
|
|
2090
2102
|
*
|
|
@@ -2098,15 +2110,15 @@ var PlayerController = class {
|
|
|
2098
2110
|
* @param options - Provider options with contexts, store factory, and feature configuration.
|
|
2099
2111
|
*/
|
|
2100
2112
|
function createProviderMixin(options) {
|
|
2101
|
-
const
|
|
2113
|
+
const inputs = resolveInputs(options.config);
|
|
2102
2114
|
return (BaseClass) => {
|
|
2103
2115
|
class PlayerProviderElement extends BaseClass {
|
|
2104
2116
|
static {
|
|
2105
2117
|
this.properties = {
|
|
2106
2118
|
...BaseClass.properties,
|
|
2107
|
-
...Object.fromEntries(
|
|
2119
|
+
...Object.fromEntries(inputs.map(({ property, attribute }) => [property, {
|
|
2108
2120
|
type: String,
|
|
2109
|
-
attribute
|
|
2121
|
+
attribute
|
|
2110
2122
|
}]))
|
|
2111
2123
|
};
|
|
2112
2124
|
}
|
|
@@ -2183,9 +2195,9 @@ function createProviderMixin(options) {
|
|
|
2183
2195
|
}
|
|
2184
2196
|
willUpdate(changed) {
|
|
2185
2197
|
super.willUpdate(changed);
|
|
2186
|
-
for (const
|
|
2187
|
-
if (!changed.has(
|
|
2188
|
-
setPlayerConfigValue(this.store,
|
|
2198
|
+
for (const { property, entry } of inputs) {
|
|
2199
|
+
if (!changed.has(property)) continue;
|
|
2200
|
+
setPlayerConfigValue(this.store, entry, this[property]);
|
|
2189
2201
|
}
|
|
2190
2202
|
}
|
|
2191
2203
|
#tryAttach() {
|
|
@@ -2213,7 +2225,7 @@ function createProviderMixin(options) {
|
|
|
2213
2225
|
#syncInitialConfig() {
|
|
2214
2226
|
const store = this.store;
|
|
2215
2227
|
if (this.#configuredStore === store) return;
|
|
2216
|
-
for (const
|
|
2228
|
+
for (const { property, entry } of inputs) setPlayerConfigValue(store, entry, this[property]);
|
|
2217
2229
|
this.#configuredStore = store;
|
|
2218
2230
|
}
|
|
2219
2231
|
#queueFallbackDiscovery() {
|
|
@@ -2255,4 +2267,4 @@ function createPlayer(config) {
|
|
|
2255
2267
|
|
|
2256
2268
|
//#endregion
|
|
2257
2269
|
export { throwNoTargetError as A, bufferFeature as C, isMediaStreamTypeCapable as D, isMediaSeekCapable as E, isEditableTarget as M, isInteractiveActivation as N, definePlayerFeature as O, getGestureCoordinator as S, isMediaBufferCapable as T, metadataFeature as _, backgroundFeatures as a, errorFeature as b, volumeFeature as c, sourceFeature as d, remotePlaybackFeature as f, pipFeature as g, playbackFeature as h, audioFeatures as i, AbortControllerRegistry as j, createState as k, timeFeature as l, playbackRateFeature as m, PlayerController as n, liveVideoFeatures as o, qualityFeature as p, SnapshotController as r, videoFeatures as s, createPlayer as t, textTrackFeature as u, liveFeature as v, audioTrackFeature as w, controlsFeature as x, fullscreenFeature as y };
|
|
2258
|
-
//# sourceMappingURL=create-player-
|
|
2270
|
+
//# sourceMappingURL=create-player-Db1CIvlK.js.map
|