@videojs/html 10.0.0-beta.21 → 10.0.0-beta.23
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/{abort-C9UiBdVU.js → abort-0nUH9HXc.js} +1 -1
- package/cdn/{abort-C9UiBdVU.js.map → abort-0nUH9HXc.js.map} +1 -1
- package/cdn/{abort-DsTff8mS.js → abort-DQxwCs92.js} +1 -1
- package/cdn/{abort-DsTff8mS.js.map → abort-DQxwCs92.js.map} +1 -1
- package/cdn/audio-minimal-ui.dev.js +1 -4
- package/cdn/audio-minimal-ui.js +1 -1
- package/cdn/audio-minimal.dev.js +5 -7
- 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 +1 -4
- package/cdn/audio-ui.js +1 -1
- package/cdn/audio.dev.js +5 -7
- 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 +3 -3
- package/cdn/background.js +1 -1
- package/cdn/background.js.map +1 -1
- package/cdn/{compounds-CM_NP-ej.js → compounds-BHHGcL_P.js} +148 -63
- package/cdn/compounds-BHHGcL_P.js.map +1 -0
- package/cdn/compounds-DJyzXLOB.js +8 -0
- package/cdn/compounds-DJyzXLOB.js.map +1 -0
- package/cdn/{create-player-Bi6WUwDZ.js → create-player-B-gVAMdr.js} +183 -94
- package/cdn/create-player-B-gVAMdr.js.map +1 -0
- package/cdn/create-player-C5ui1T2i.js +7 -0
- package/cdn/create-player-C5ui1T2i.js.map +1 -0
- package/cdn/default-Djy9PEXm.js +2 -0
- package/cdn/default-Djy9PEXm.js.map +1 -0
- package/cdn/{default-XHZAb7gP.js → default-YzaLyoYg.js} +3 -1
- package/cdn/default-YzaLyoYg.js.map +1 -0
- package/cdn/hls-DEP0AzDp.js +41 -0
- package/cdn/hls-DEP0AzDp.js.map +1 -0
- package/cdn/{hls-BotloEPN.js → hls-DR-Xxpxv.js} +163 -23
- package/cdn/hls-DR-Xxpxv.js.map +1 -0
- package/cdn/hotkey-element-BvI78DTc.js +2 -0
- package/cdn/{hotkey-element-DRGCbVj9.js.map → hotkey-element-BvI78DTc.js.map} +1 -1
- package/cdn/{hotkey-element-317kwVH5.js → hotkey-element-oEdY8YLl.js} +24 -18
- package/cdn/{hotkey-element-317kwVH5.js.map → hotkey-element-oEdY8YLl.js.map} +1 -1
- package/cdn/live-video-minimal.dev.d.ts +1 -0
- package/cdn/live-video-minimal.dev.js +115 -0
- package/cdn/live-video-minimal.dev.js.map +1 -0
- package/cdn/live-video-minimal.js +2 -0
- package/cdn/live-video-minimal.js.map +1 -0
- package/cdn/live-video.dev.d.ts +1 -0
- package/cdn/live-video.dev.js +130 -0
- package/cdn/live-video.dev.js.map +1 -0
- package/cdn/live-video.js +2 -0
- package/cdn/live-video.js.map +1 -0
- package/cdn/media/dash-video.dev.js +8 -7
- package/cdn/media/dash-video.dev.js.map +1 -1
- package/cdn/media/dash-video.js +6 -6
- package/cdn/media/dash-video.js.map +1 -1
- package/cdn/media/hls-video.dev.js +4 -4
- package/cdn/media/hls-video.js +1 -1
- package/cdn/media/hls-video.js.map +1 -1
- package/cdn/media/mux-audio.dev.js +8 -6
- package/cdn/media/mux-audio.dev.js.map +1 -1
- package/cdn/media/mux-audio.js +1 -1
- package/cdn/media/mux-audio.js.map +1 -1
- package/cdn/media/mux-video.dev.js +8 -6
- package/cdn/media/mux-video.dev.js.map +1 -1
- package/cdn/media/mux-video.js +1 -1
- package/cdn/media/mux-video.js.map +1 -1
- package/cdn/media/native-hls-video.dev.js +4 -4
- package/cdn/media/native-hls-video.js +1 -1
- package/cdn/media/native-hls-video.js.map +1 -1
- package/cdn/media/simple-hls-video.dev.js +11 -5
- package/cdn/media/simple-hls-video.dev.js.map +1 -1
- package/cdn/media/simple-hls-video.js +6 -6
- package/cdn/media/simple-hls-video.js.map +1 -1
- package/cdn/media-attach-mixin-DuquRhAk.js +2 -0
- package/cdn/{media-attach-mixin-C2wz0Qbd.js.map → media-attach-mixin-DuquRhAk.js.map} +1 -1
- package/cdn/{media-attach-mixin-CYoNe7Sh.js → media-attach-mixin-pV8deGiO.js} +2 -2
- package/cdn/{media-attach-mixin-CYoNe7Sh.js.map → media-attach-mixin-pV8deGiO.js.map} +1 -1
- package/cdn/{minimal-BnDnlwbj.js → minimal-CciG7Fsu.js} +3 -1
- package/cdn/minimal-CciG7Fsu.js.map +1 -0
- package/cdn/minimal-DSLrhnDm.js +2 -0
- package/cdn/minimal-DSLrhnDm.js.map +1 -0
- package/cdn/{minimal-ui-cy2oEbFm.js → minimal-ui-Bx-_SggT.js} +6 -5
- package/cdn/minimal-ui-Bx-_SggT.js.map +1 -0
- package/cdn/minimal-ui-CFO4ssL8.js +2 -0
- package/cdn/{minimal-ui-CroDYUGf.js.map → minimal-ui-CFO4ssL8.js.map} +1 -1
- package/cdn/minimal-ui-D6Pvbx1R.js +2 -0
- package/cdn/minimal-ui-D6Pvbx1R.js.map +1 -0
- package/cdn/{minimal-ui-DhxN21v5.js → minimal-ui-Dl-8ZL53.js} +5 -5
- package/cdn/{minimal-ui-DhxN21v5.js.map → minimal-ui-Dl-8ZL53.js.map} +1 -1
- package/cdn/{mux-B5K6kOzg.js → mux-D5M5HL6A.js} +753 -7
- package/cdn/mux-D5M5HL6A.js.map +1 -0
- package/cdn/mux-DH3Kxyot.js +27 -0
- package/cdn/mux-DH3Kxyot.js.map +1 -0
- package/cdn/native-hls-DN_aWn2z.js +2 -0
- package/cdn/native-hls-DN_aWn2z.js.map +1 -0
- package/cdn/native-hls-ak4v9DN6.js +371 -0
- package/cdn/native-hls-ak4v9DN6.js.map +1 -0
- package/cdn/player-BKKCelEs.js +2 -0
- package/cdn/player-BKKCelEs.js.map +1 -0
- package/cdn/{player-CatrGW7l.js → player-C_6YjMl7.js} +93 -8
- package/cdn/player-C_6YjMl7.js.map +1 -0
- package/cdn/player-CtegNw3g.js +2 -0
- package/cdn/{player-BK35-ndY.js.map → player-CtegNw3g.js.map} +1 -1
- package/cdn/{player-xstFHOgW.js → player-D468sScc.js} +3 -3
- package/cdn/{player-xstFHOgW.js.map → player-D468sScc.js.map} +1 -1
- package/cdn/{context-0rI_P6jf.js → predicate-BOcV_HDG.js} +23 -2
- package/cdn/predicate-BOcV_HDG.js.map +1 -0
- package/cdn/{context-CEFisYD0.js → predicate-Cad5WV4q.js} +2 -2
- package/cdn/predicate-Cad5WV4q.js.map +1 -0
- package/cdn/{shallow-equal-xh6Wj-hj.js → shallow-equal-D-fthE54.js} +1 -1
- package/cdn/{shallow-equal-xh6Wj-hj.js.map → shallow-equal-D-fthE54.js.map} +1 -1
- package/cdn/{shallow-equal-Daj3-_LC.js → shallow-equal-DSpD9PMp.js} +1 -1
- package/cdn/{shallow-equal-Daj3-_LC.js.map → shallow-equal-DSpD9PMp.js.map} +1 -1
- package/cdn/{skin-element-CDUkmCtS.js → skin-element-BcbrkgGs.js} +2 -2
- package/cdn/{skin-element-CDUkmCtS.js.map → skin-element-BcbrkgGs.js.map} +1 -1
- package/cdn/{skin-element-BGP23sop.js → skin-element-DesLkJKs.js} +2 -2
- package/cdn/{skin-element-BGP23sop.js.map → skin-element-DesLkJKs.js.map} +1 -1
- package/cdn/types-B_4Es-UH.js +20 -0
- package/cdn/types-B_4Es-UH.js.map +1 -0
- package/cdn/types-DRezN4yy.js +2 -0
- package/cdn/types-DRezN4yy.js.map +1 -0
- package/cdn/{ui-Em9rF9Ah.js → ui-CzxKbsyb.js} +7 -6
- package/cdn/ui-CzxKbsyb.js.map +1 -0
- package/cdn/ui-D6DV-Emw.js +2 -0
- package/cdn/{ui-QHwo6iyo.js.map → ui-D6DV-Emw.js.map} +1 -1
- package/cdn/ui-Dw-n2AMs.js +2 -0
- package/cdn/ui-Dw-n2AMs.js.map +1 -0
- package/cdn/{ui-AFHQtrqa.js → ui-S_eLj4ur.js} +6 -6
- package/cdn/{ui-AFHQtrqa.js.map → ui-S_eLj4ur.js.map} +1 -1
- package/cdn/{video-host-ycP7ckxU.js → video-host-BR_2vUZH.js} +82 -39
- package/cdn/video-host-BR_2vUZH.js.map +1 -0
- package/cdn/video-host-Bkh2OyyP.js +47 -0
- package/cdn/video-host-Bkh2OyyP.js.map +1 -0
- package/cdn/video-minimal-ui.dev.js +1 -4
- package/cdn/video-minimal-ui.js +1 -1
- package/cdn/video-minimal.dev.js +11 -7
- 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 +1 -4
- package/cdn/video-ui.js +1 -1
- package/cdn/video.dev.js +11 -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/_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 +6 -0
- package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -0
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +6 -0
- package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -0
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +6 -0
- package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -0
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +6 -0
- package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -0
- 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 +2 -1
- package/dist/default/define/audio/skin.css +2 -1
- package/dist/default/define/background/skin.js +1 -1
- package/dist/default/define/live-audio/minimal-skin.css +779 -0
- package/dist/default/define/live-audio/minimal-skin.js +26 -0
- package/dist/default/define/live-audio/minimal-skin.js.map +1 -0
- package/dist/default/define/live-audio/minimal-skin.tailwind.js +29 -0
- package/dist/default/define/live-audio/minimal-skin.tailwind.js.map +1 -0
- package/dist/default/define/live-audio/skin.css +795 -0
- package/dist/default/define/live-audio/skin.js +26 -0
- package/dist/default/define/live-audio/skin.js.map +1 -0
- package/dist/default/define/live-audio/skin.tailwind.js +28 -0
- package/dist/default/define/live-audio/skin.tailwind.js.map +1 -0
- package/dist/default/define/live-video/minimal-skin.css +1170 -0
- package/dist/default/define/live-video/minimal-skin.js +26 -0
- package/dist/default/define/live-video/minimal-skin.js.map +1 -0
- package/dist/default/define/live-video/minimal-skin.tailwind.js +30 -0
- package/dist/default/define/live-video/minimal-skin.tailwind.js.map +1 -0
- package/dist/default/define/live-video/skin.css +1160 -0
- package/dist/default/define/live-video/skin.js +26 -0
- package/dist/default/define/live-video/skin.js.map +1 -0
- package/dist/default/define/live-video/skin.tailwind.js +29 -0
- package/dist/default/define/live-video/skin.tailwind.js.map +1 -0
- package/dist/default/define/skin-element.js +1 -1
- package/dist/default/define/ui/cast-button.js +7 -0
- package/dist/default/define/ui/cast-button.js.map +1 -0
- package/dist/default/define/video/minimal-skin.css +8 -1
- 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/minimal-ui.js +2 -0
- package/dist/default/define/video/minimal-ui.js.map +1 -1
- package/dist/default/define/video/skin.css +8 -1
- 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/define/video/ui.js +2 -0
- package/dist/default/define/video/ui.js.map +1 -1
- package/dist/default/icons/dist/render/default/index.js +2 -0
- package/dist/default/icons/dist/render/default/index.js.map +1 -1
- package/dist/default/icons/dist/render/minimal/index.js +2 -0
- package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
- package/dist/default/index.js +3 -1
- package/dist/default/media/mux-audio/index.js +4 -1
- package/dist/default/media/mux-audio/index.js.map +1 -1
- package/dist/default/media/mux-video/index.js +4 -1
- package/dist/default/media/mux-video/index.js.map +1 -1
- package/dist/default/presets/live-audio.js +6 -0
- package/dist/default/presets/live-video.js +6 -0
- package/dist/default/skins/dist/default/default/tailwind/components/button.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +5 -0
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
- package/dist/default/ui/alert-dialog/alert-dialog-close-element.js +7 -5
- package/dist/default/ui/alert-dialog/alert-dialog-close-element.js.map +1 -1
- package/dist/default/ui/alert-dialog/alert-dialog-element.js +12 -6
- package/dist/default/ui/alert-dialog/alert-dialog-element.js.map +1 -1
- package/dist/default/ui/buffering-indicator/buffering-indicator-element.js +6 -3
- package/dist/default/ui/buffering-indicator/buffering-indicator-element.js.map +1 -1
- package/dist/default/ui/cast-button/cast-button-element.js +24 -0
- package/dist/default/ui/cast-button/cast-button-element.js.map +1 -0
- package/dist/default/ui/error-dialog/error-dialog-element.js +4 -1
- package/dist/default/ui/error-dialog/error-dialog-element.js.map +1 -1
- package/dist/default/ui/gesture/gesture-element.js +10 -7
- package/dist/default/ui/gesture/gesture-element.js.map +1 -1
- package/dist/default/ui/hotkey/hotkey-element.js +10 -7
- package/dist/default/ui/hotkey/hotkey-element.js.map +1 -1
- package/dist/default/ui/media-button-element.js +4 -2
- package/dist/default/ui/media-button-element.js.map +1 -1
- package/dist/default/ui/popover/popover-element.js +14 -7
- package/dist/default/ui/popover/popover-element.js.map +1 -1
- package/dist/default/ui/slider/slider-element.js +8 -4
- package/dist/default/ui/slider/slider-element.js.map +1 -1
- package/dist/default/ui/slider/slider-preview-element.js +9 -6
- package/dist/default/ui/slider/slider-preview-element.js.map +1 -1
- package/dist/default/ui/slider/slider-value-element.js +5 -4
- package/dist/default/ui/slider/slider-value-element.js.map +1 -1
- package/dist/default/ui/thumbnail/thumbnail-element.js +10 -5
- package/dist/default/ui/thumbnail/thumbnail-element.js.map +1 -1
- package/dist/default/ui/time/time-element.js +8 -4
- package/dist/default/ui/time/time-element.js.map +1 -1
- package/dist/default/ui/time-slider/time-slider-element.js +12 -6
- package/dist/default/ui/time-slider/time-slider-element.js.map +1 -1
- package/dist/default/ui/tooltip/tooltip-element.js +16 -8
- package/dist/default/ui/tooltip/tooltip-element.js.map +1 -1
- package/dist/default/ui/tooltip/tooltip-group-element.js +7 -5
- package/dist/default/ui/tooltip/tooltip-group-element.js.map +1 -1
- package/dist/default/ui/volume-slider/volume-slider-element.js +10 -5
- package/dist/default/ui/volume-slider/volume-slider-element.js.map +1 -1
- package/dist/dev/_virtual/_rolldown/runtime.js +27 -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 +6 -0
- package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -0
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +6 -0
- package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -0
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +6 -0
- package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -0
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +6 -0
- package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -0
- 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 +2 -1
- package/dist/dev/define/audio/minimal-skin.d.ts +2 -2
- package/dist/dev/define/audio/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/audio/player.d.ts +2 -2
- package/dist/dev/define/audio/skin.css +2 -1
- package/dist/dev/define/audio/skin.d.ts +2 -2
- package/dist/dev/define/audio/skin.d.ts.map +1 -1
- package/dist/dev/define/background/player.d.ts +2 -2
- package/dist/dev/define/background/skin.d.ts.map +1 -1
- package/dist/dev/define/background/skin.js +1 -1
- package/dist/dev/define/live-audio/minimal-skin.css +779 -0
- package/dist/dev/define/live-audio/minimal-skin.d.ts +17 -0
- package/dist/dev/define/live-audio/minimal-skin.d.ts.map +1 -0
- package/dist/dev/define/live-audio/minimal-skin.js +76 -0
- package/dist/dev/define/live-audio/minimal-skin.js.map +1 -0
- package/dist/dev/define/live-audio/minimal-skin.tailwind.d.ts +14 -0
- package/dist/dev/define/live-audio/minimal-skin.tailwind.d.ts.map +1 -0
- package/dist/dev/define/live-audio/minimal-skin.tailwind.js +79 -0
- package/dist/dev/define/live-audio/minimal-skin.tailwind.js.map +1 -0
- package/dist/dev/define/live-audio/skin.css +795 -0
- package/dist/dev/define/live-audio/skin.d.ts +17 -0
- package/dist/dev/define/live-audio/skin.d.ts.map +1 -0
- package/dist/dev/define/live-audio/skin.js +83 -0
- package/dist/dev/define/live-audio/skin.js.map +1 -0
- package/dist/dev/define/live-audio/skin.tailwind.d.ts +14 -0
- package/dist/dev/define/live-audio/skin.tailwind.d.ts.map +1 -0
- package/dist/dev/define/live-audio/skin.tailwind.js +78 -0
- package/dist/dev/define/live-audio/skin.tailwind.js.map +1 -0
- package/dist/dev/define/live-video/minimal-skin.css +1170 -0
- package/dist/dev/define/live-video/minimal-skin.d.ts +17 -0
- package/dist/dev/define/live-video/minimal-skin.d.ts.map +1 -0
- package/dist/dev/define/live-video/minimal-skin.js +112 -0
- package/dist/dev/define/live-video/minimal-skin.js.map +1 -0
- package/dist/dev/define/live-video/minimal-skin.tailwind.d.ts +14 -0
- package/dist/dev/define/live-video/minimal-skin.tailwind.d.ts.map +1 -0
- package/dist/dev/define/live-video/minimal-skin.tailwind.js +110 -0
- package/dist/dev/define/live-video/minimal-skin.tailwind.js.map +1 -0
- package/dist/dev/define/live-video/skin.css +1160 -0
- package/dist/dev/define/live-video/skin.d.ts +17 -0
- package/dist/dev/define/live-video/skin.d.ts.map +1 -0
- package/dist/dev/define/live-video/skin.js +127 -0
- package/dist/dev/define/live-video/skin.js.map +1 -0
- package/dist/dev/define/live-video/skin.tailwind.d.ts +14 -0
- package/dist/dev/define/live-video/skin.tailwind.d.ts.map +1 -0
- package/dist/dev/define/live-video/skin.tailwind.js +111 -0
- package/dist/dev/define/live-video/skin.tailwind.js.map +1 -0
- package/dist/dev/define/skin-element.d.ts +1 -1
- package/dist/dev/define/skin-element.d.ts.map +1 -1
- package/dist/dev/define/skin-element.js +1 -1
- package/dist/dev/define/ui/cast-button.d.ts +9 -0
- package/dist/dev/define/ui/cast-button.d.ts.map +1 -0
- package/dist/dev/define/ui/cast-button.js +7 -0
- package/dist/dev/define/ui/cast-button.js.map +1 -0
- package/dist/dev/define/video/minimal-skin.css +8 -1
- package/dist/dev/define/video/minimal-skin.d.ts +2 -2
- package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/video/minimal-skin.js +6 -0
- 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 +5 -0
- package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/video/minimal-ui.js +2 -0
- package/dist/dev/define/video/minimal-ui.js.map +1 -1
- package/dist/dev/define/video/player.d.ts +2 -2
- package/dist/dev/define/video/skin.css +8 -1
- package/dist/dev/define/video/skin.d.ts +2 -2
- package/dist/dev/define/video/skin.d.ts.map +1 -1
- package/dist/dev/define/video/skin.js +6 -0
- 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 +5 -0
- package/dist/dev/define/video/skin.tailwind.js.map +1 -1
- package/dist/dev/define/video/ui.js +2 -0
- package/dist/dev/define/video/ui.js.map +1 -1
- package/dist/dev/icons/dist/render/default/index.js +2 -0
- package/dist/dev/icons/dist/render/default/index.js.map +1 -1
- package/dist/dev/icons/dist/render/minimal/index.js +2 -0
- package/dist/dev/icons/dist/render/minimal/index.js.map +1 -1
- package/dist/dev/index.d.ts +13 -3
- package/dist/dev/index.d.ts.map +1 -0
- package/dist/dev/index.js +3 -1
- package/dist/dev/media/background-video/index.d.ts.map +1 -1
- package/dist/dev/media/container-element.d.ts +2 -2
- package/dist/dev/media/dash-video/index.d.ts +2 -2
- package/dist/dev/media/hls-video/index.d.ts +2 -2
- package/dist/dev/media/mux-audio/index.d.ts +2 -2
- package/dist/dev/media/mux-audio/index.js +4 -1
- package/dist/dev/media/mux-audio/index.js.map +1 -1
- package/dist/dev/media/mux-video/index.d.ts +2 -2
- package/dist/dev/media/mux-video/index.js +4 -1
- package/dist/dev/media/mux-video/index.js.map +1 -1
- package/dist/dev/media/native-hls-video/index.d.ts +2 -2
- package/dist/dev/media/simple-hls-video/index.d.ts +2 -2
- package/dist/dev/player/context.d.ts +1 -1
- package/dist/dev/player/player-controller.d.ts +1 -1
- package/dist/dev/player/player-controller.d.ts.map +1 -1
- package/dist/dev/presets/live-audio.d.ts +6 -0
- package/dist/dev/presets/live-audio.js +6 -0
- package/dist/dev/presets/live-video.d.ts +6 -0
- package/dist/dev/presets/live-video.js +6 -0
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
- package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js +5 -0
- package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
- package/dist/dev/store/container-mixin.d.ts +1 -1
- package/dist/dev/store/provider-mixin.d.ts +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-close-element.d.ts.map +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-close-element.js +7 -5
- package/dist/dev/ui/alert-dialog/alert-dialog-close-element.js.map +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-description-element.d.ts +2 -2
- package/dist/dev/ui/alert-dialog/alert-dialog-element.d.ts.map +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-element.js +12 -6
- package/dist/dev/ui/alert-dialog/alert-dialog-element.js.map +1 -1
- package/dist/dev/ui/alert-dialog/alert-dialog-title-element.d.ts +2 -2
- package/dist/dev/ui/buffering-indicator/buffering-indicator-element.d.ts.map +1 -1
- package/dist/dev/ui/buffering-indicator/buffering-indicator-element.js +6 -3
- package/dist/dev/ui/buffering-indicator/buffering-indicator-element.js.map +1 -1
- package/dist/dev/ui/captions-button/captions-button-element.d.ts +4 -4
- package/dist/dev/ui/captions-button/captions-button-element.d.ts.map +1 -1
- package/dist/dev/ui/cast-button/cast-button-element.d.ts +19 -0
- package/dist/dev/ui/cast-button/cast-button-element.d.ts.map +1 -0
- package/dist/dev/ui/cast-button/cast-button-element.js +24 -0
- package/dist/dev/ui/cast-button/cast-button-element.js.map +1 -0
- package/dist/dev/ui/error-dialog/error-dialog-element.d.ts.map +1 -1
- package/dist/dev/ui/error-dialog/error-dialog-element.js +4 -1
- package/dist/dev/ui/error-dialog/error-dialog-element.js.map +1 -1
- package/dist/dev/ui/fullscreen-button/fullscreen-button-element.d.ts +4 -4
- package/dist/dev/ui/fullscreen-button/fullscreen-button-element.d.ts.map +1 -1
- package/dist/dev/ui/gesture/gesture-element.js +10 -7
- package/dist/dev/ui/gesture/gesture-element.js.map +1 -1
- package/dist/dev/ui/hotkey/aria-key-shortcuts-controller.d.ts.map +1 -1
- package/dist/dev/ui/hotkey/hotkey-element.js +10 -7
- package/dist/dev/ui/hotkey/hotkey-element.js.map +1 -1
- package/dist/dev/ui/media-button-element.d.ts +1 -1
- package/dist/dev/ui/media-button-element.js +4 -2
- package/dist/dev/ui/media-button-element.js.map +1 -1
- package/dist/dev/ui/media-element.d.ts +2 -2
- package/dist/dev/ui/mute-button/mute-button-element.d.ts +4 -4
- package/dist/dev/ui/mute-button/mute-button-element.d.ts.map +1 -1
- package/dist/dev/ui/pip-button/pip-button-element.d.ts +4 -4
- package/dist/dev/ui/pip-button/pip-button-element.d.ts.map +1 -1
- package/dist/dev/ui/play-button/play-button-element.d.ts +5 -5
- package/dist/dev/ui/play-button/play-button-element.d.ts.map +1 -1
- package/dist/dev/ui/playback-rate-button/playback-rate-button-element.d.ts +3 -3
- package/dist/dev/ui/playback-rate-button/playback-rate-button-element.d.ts.map +1 -1
- package/dist/dev/ui/popover/popover-element.d.ts +3 -3
- package/dist/dev/ui/popover/popover-element.d.ts.map +1 -1
- package/dist/dev/ui/popover/popover-element.js +14 -7
- package/dist/dev/ui/popover/popover-element.js.map +1 -1
- package/dist/dev/ui/poster/poster-element.d.ts +4 -4
- package/dist/dev/ui/poster/poster-element.d.ts.map +1 -1
- package/dist/dev/ui/seek-button/seek-button-element.d.ts +4 -4
- package/dist/dev/ui/seek-button/seek-button-element.d.ts.map +1 -1
- package/dist/dev/ui/slider/slider-element.d.ts +2 -2
- package/dist/dev/ui/slider/slider-element.d.ts.map +1 -1
- package/dist/dev/ui/slider/slider-element.js +8 -4
- package/dist/dev/ui/slider/slider-element.js.map +1 -1
- package/dist/dev/ui/slider/slider-preview-element.d.ts.map +1 -1
- package/dist/dev/ui/slider/slider-preview-element.js +9 -6
- package/dist/dev/ui/slider/slider-preview-element.js.map +1 -1
- package/dist/dev/ui/slider/slider-value-element.d.ts.map +1 -1
- package/dist/dev/ui/slider/slider-value-element.js +5 -4
- package/dist/dev/ui/slider/slider-value-element.js.map +1 -1
- package/dist/dev/ui/thumbnail/thumbnail-element.d.ts.map +1 -1
- package/dist/dev/ui/thumbnail/thumbnail-element.js +10 -5
- package/dist/dev/ui/thumbnail/thumbnail-element.js.map +1 -1
- package/dist/dev/ui/time/time-element.d.ts +2 -2
- package/dist/dev/ui/time/time-element.d.ts.map +1 -1
- package/dist/dev/ui/time/time-element.js +8 -4
- package/dist/dev/ui/time/time-element.js.map +1 -1
- package/dist/dev/ui/time-slider/time-slider-element.d.ts +2 -2
- package/dist/dev/ui/time-slider/time-slider-element.d.ts.map +1 -1
- package/dist/dev/ui/time-slider/time-slider-element.js +12 -6
- package/dist/dev/ui/time-slider/time-slider-element.js.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-element.d.ts +3 -3
- package/dist/dev/ui/tooltip/tooltip-element.d.ts.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-element.js +16 -8
- package/dist/dev/ui/tooltip/tooltip-element.js.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-group-element.d.ts.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-group-element.js +7 -5
- package/dist/dev/ui/tooltip/tooltip-group-element.js.map +1 -1
- package/dist/dev/ui/volume-slider/volume-slider-element.d.ts +2 -2
- package/dist/dev/ui/volume-slider/volume-slider-element.d.ts.map +1 -1
- package/dist/dev/ui/volume-slider/volume-slider-element.js +10 -5
- package/dist/dev/ui/volume-slider/volume-slider-element.js.map +1 -1
- package/package.json +31 -10
- package/cdn/compounds-CM_NP-ej.js.map +0 -1
- package/cdn/compounds-Vvz-YfXP.js +0 -8
- package/cdn/compounds-Vvz-YfXP.js.map +0 -1
- package/cdn/context-0rI_P6jf.js.map +0 -1
- package/cdn/context-CEFisYD0.js.map +0 -1
- package/cdn/create-player-Bi6WUwDZ.js.map +0 -1
- package/cdn/create-player-CKuX8YI5.js +0 -7
- package/cdn/create-player-CKuX8YI5.js.map +0 -1
- package/cdn/default-C8KsZ0zK.js +0 -2
- package/cdn/default-C8KsZ0zK.js.map +0 -1
- package/cdn/default-XHZAb7gP.js.map +0 -1
- package/cdn/hls-BotloEPN.js.map +0 -1
- package/cdn/hls-CBpGTZXU.js +0 -41
- package/cdn/hls-CBpGTZXU.js.map +0 -1
- package/cdn/hotkey-element-DRGCbVj9.js +0 -2
- package/cdn/media-attach-mixin-C2wz0Qbd.js +0 -2
- package/cdn/minimal-BnDnlwbj.js.map +0 -1
- package/cdn/minimal-CqBxBoLe.js +0 -2
- package/cdn/minimal-CqBxBoLe.js.map +0 -1
- package/cdn/minimal-ui-C_G24FML.js +0 -2
- package/cdn/minimal-ui-C_G24FML.js.map +0 -1
- package/cdn/minimal-ui-CroDYUGf.js +0 -2
- package/cdn/minimal-ui-cy2oEbFm.js.map +0 -1
- package/cdn/mux-B5K6kOzg.js.map +0 -1
- package/cdn/mux-DJhfbcCw.js +0 -25
- package/cdn/mux-DJhfbcCw.js.map +0 -1
- package/cdn/native-hls-CU2F7L5C.js +0 -123
- package/cdn/native-hls-CU2F7L5C.js.map +0 -1
- package/cdn/native-hls-DKcYYWRt.js +0 -2
- package/cdn/native-hls-DKcYYWRt.js.map +0 -1
- package/cdn/player-BK35-ndY.js +0 -2
- package/cdn/player-C7ajkBi4.js +0 -2
- package/cdn/player-C7ajkBi4.js.map +0 -1
- package/cdn/player-CatrGW7l.js.map +0 -1
- package/cdn/ui-B7vt9mp-.js +0 -2
- package/cdn/ui-B7vt9mp-.js.map +0 -1
- package/cdn/ui-Em9rF9Ah.js.map +0 -1
- package/cdn/ui-QHwo6iyo.js +0 -2
- package/cdn/video-host-CPRJVRi3.js +0 -47
- package/cdn/video-host-CPRJVRi3.js.map +0 -1
- package/cdn/video-host-ycP7ckxU.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-hls-DN_aWn2z.js","names":["#error","#init","#destroy","#disconnect","#targetLiveWindow","#liveEdgeStartOffset","#init","#destroy","#disconnect","#currentSrc","#setTargetLiveWindow","#refresh","#streamType","#isUserStreamType","#setDetected","#detect","#update","#init","#destroy","#disconnect","#src","#preload"],"sources":["../../core/dist/default/core/media/media-error.js","../../core/dist/default/dom/media/native-hls/errors.js","../../core/dist/default/dom/media/native-hls/m3u8-utils.js","../../core/dist/default/dom/media/native-hls/live.js","../../core/dist/default/dom/media/native-hls/stream-type.js","../../core/dist/default/dom/media/native-hls/index.js"],"sourcesContent":["//#region src/core/media/media-error.ts\nvar MediaError = class MediaError extends Error {\n\tstatic MEDIA_ERR_ABORTED = 1;\n\tstatic MEDIA_ERR_NETWORK = 2;\n\tstatic MEDIA_ERR_DECODE = 3;\n\tstatic MEDIA_ERR_SRC_NOT_SUPPORTED = 4;\n\tstatic MEDIA_ERR_ENCRYPTED = 5;\n\tstatic MEDIA_ERR_CUSTOM = 100;\n\tstatic defaultMessages = {\n\t\t1: \"You aborted the media playback\",\n\t\t2: \"A network error caused the media download to fail.\",\n\t\t3: \"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.\",\n\t\t4: \"An unsupported error occurred. The server or network failed, or your browser does not support this format.\",\n\t\t5: \"The media is encrypted and there are no keys to decrypt it.\"\n\t};\n\tname;\n\tcode;\n\tcontext;\n\tfatal;\n\tdata;\n\tconstructor(message, code = MediaError.MEDIA_ERR_CUSTOM, fatal, context) {\n\t\tsuper(message);\n\t\tthis.name = \"MediaError\";\n\t\tthis.code = code;\n\t\tthis.context = context;\n\t\tthis.fatal = fatal ?? (code >= MediaError.MEDIA_ERR_NETWORK && code <= MediaError.MEDIA_ERR_ENCRYPTED);\n\t\tif (!this.message) this.message = MediaError.defaultMessages[this.code] ?? \"\";\n\t}\n};\n//#endregion\nexport { MediaError };\n\n//# sourceMappingURL=media-error.js.map","import { MediaError } from \"../../../core/media/media-error.js\";\n//#region src/dom/media/native-hls/errors.ts\nfunction NativeHlsMediaErrorsMixin(BaseClass) {\n\tclass NativeHlsMediaErrors extends BaseClass {\n\t\t#disconnect = null;\n\t\t#error = null;\n\t\tget error() {\n\t\t\treturn this.#error;\n\t\t}\n\t\tattach(target) {\n\t\t\tsuper.attach?.(target);\n\t\t\tthis.#init(target);\n\t\t}\n\t\tdetach() {\n\t\t\tthis.#destroy();\n\t\t\tsuper.detach?.();\n\t\t}\n\t\tdestroy() {\n\t\t\tthis.#destroy();\n\t\t\tsuper.destroy?.();\n\t\t}\n\t\t#destroy() {\n\t\t\tthis.#disconnect?.abort();\n\t\t\tthis.#disconnect = null;\n\t\t\tthis.#error = null;\n\t\t}\n\t\t#init(target) {\n\t\t\tthis.#destroy();\n\t\t\tthis.#disconnect = new AbortController();\n\t\t\tconst signal = this.#disconnect.signal;\n\t\t\ttarget.addEventListener(\"error\", (event) => {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\tconst native = target.error;\n\t\t\t\tif (!native) return;\n\t\t\t\tconst error = new MediaError(native.message, native.code, true);\n\t\t\t\tthis.#error = error;\n\t\t\t\tthis.dispatchEvent(new ErrorEvent(\"error\", {\n\t\t\t\t\terror,\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}));\n\t\t\t}, {\n\t\t\t\tsignal,\n\t\t\t\tcapture: true\n\t\t\t});\n\t\t\ttarget.addEventListener(\"emptied\", () => {\n\t\t\t\tthis.#error = null;\n\t\t\t}, { signal });\n\t\t}\n\t}\n\treturn NativeHlsMediaErrors;\n}\n//#endregion\nexport { NativeHlsMediaErrorsMixin };\n\n//# sourceMappingURL=errors.js.map","//#region src/dom/media/native-hls/m3u8-utils.ts\n/**\n* Returns `true` when `src` looks like an HLS playlist URL. Permissive: a\n* path or query string containing `.m3u8` is enough.\n*/\nfunction looksLikeM3u8(src) {\n\treturn src.toLowerCase().includes(\".m3u8\");\n}\n/**\n* Returns `true` when the playlist text is a multivariant (master) playlist.\n*\n* The presence of `#EXT-X-STREAM-INF` is conclusive — media playlists only\n* contain `#EXTINF` segment tags.\n*/\nfunction isMultivariantPlaylist(playlist) {\n\treturn playlist.includes(\"#EXT-X-STREAM-INF\");\n}\n/**\n* Resolves the first media playlist URL referenced by a multivariant\n* playlist, relative to `baseUrl`. Returns `null` when none is found or the\n* URL cannot be parsed.\n*/\nfunction resolveFirstMediaPlaylistUrl(multivariant, baseUrl) {\n\tconst lines = multivariant.split(/\\r?\\n/);\n\tconst start = lines.findIndex((l) => l.startsWith(\"#EXT-X-STREAM-INF\"));\n\tif (start === -1) return null;\n\tconst uri = lines.slice(start + 1).map((l) => l.trim()).find((l) => l && !l.startsWith(\"#\"));\n\tif (!uri) return null;\n\ttry {\n\t\treturn new URL(uri, baseUrl).toString();\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* Parses the subset of media-playlist tags needed to derive live edge state:\n* `#EXT-X-PLAYLIST-TYPE`, `#EXT-X-ENDLIST`, `#EXT-X-TARGETDURATION`,\n* `#EXT-X-PART-INF`.\n*\n* See spec:\n* - VOD or `#EXT-X-ENDLIST` present → on-demand, `targetLiveWindow = NaN`.\n* - `EVENT` playlist → DVR, `targetLiveWindow = Infinity`.\n* - Otherwise → standard live sliding window, `targetLiveWindow = 0`.\n*\n* The edge offset is `PART-TARGET * 2` for low-latency live and\n* `TARGETDURATION * 3` otherwise.\n*/\nfunction parseStreamInfo(playlist) {\n\tconst lines = playlist.split(/\\r?\\n/);\n\tlet playlistType;\n\tlet hasEndList = false;\n\tlet targetDuration;\n\tlet partTarget;\n\tfor (const raw of lines) {\n\t\tconst line = raw.trim();\n\t\tif (line.startsWith(\"#EXT-X-PLAYLIST-TYPE:\")) playlistType = line.slice(21).trim().toUpperCase();\n\t\telse if (line === \"#EXT-X-ENDLIST\") hasEndList = true;\n\t\telse if (line.startsWith(\"#EXT-X-TARGETDURATION:\")) {\n\t\t\tconst value = Number(line.slice(22));\n\t\t\tif (Number.isFinite(value)) targetDuration = value;\n\t\t} else if (line.startsWith(\"#EXT-X-PART-INF\")) {\n\t\t\tconst match = /PART-TARGET\\s*=\\s*([0-9.]+)/i.exec(line);\n\t\t\tif (match) {\n\t\t\t\tconst value = Number(match[1]);\n\t\t\t\tif (Number.isFinite(value)) partTarget = value;\n\t\t\t}\n\t\t}\n\t}\n\tif (playlistType === \"VOD\" || hasEndList) return {\n\t\ttargetLiveWindow: NaN,\n\t\tliveEdgeStartOffset: void 0\n\t};\n\treturn {\n\t\ttargetLiveWindow: playlistType === \"EVENT\" ? Number.POSITIVE_INFINITY : 0,\n\t\tliveEdgeStartOffset: partTarget !== void 0 ? partTarget * 2 : targetDuration !== void 0 ? targetDuration * 3 : void 0\n\t};\n}\nasync function fetchPlaylist(url, init) {\n\tconst response = await fetch(url, init);\n\tif (!response.ok) throw new Error(`Failed to fetch playlist (${response.status}): ${url}`);\n\treturn {\n\t\ttext: await response.text(),\n\t\turl: response.url || url\n\t};\n}\n/**\n* Fetches the HLS playlist at `src`, following the first variant if it's a\n* multivariant playlist, and parses it into a {@link StreamInfo}.\n*\n* @throws when the fetch fails or no media playlist URL can be resolved.\n*/\nasync function getStreamInfoFromSrc(src, signal) {\n\tconst init = signal ? { signal } : {};\n\tconst { text, url } = await fetchPlaylist(src, init);\n\tif (!isMultivariantPlaylist(text)) return parseStreamInfo(text);\n\tconst mediaUrl = resolveFirstMediaPlaylistUrl(text, url);\n\tif (!mediaUrl) throw new Error(\"No media playlist URL found in multivariant playlist\");\n\treturn parseStreamInfo((await fetchPlaylist(mediaUrl, init)).text);\n}\n//#endregion\nexport { getStreamInfoFromSrc, looksLikeM3u8 };\n\n//# sourceMappingURL=m3u8-utils.js.map","import { getStreamInfoFromSrc, looksLikeM3u8 } from \"./m3u8-utils.js\";\n//#region src/dom/media/native-hls/live.ts\nfunction NativeHlsMediaLiveMixin(BaseClass) {\n\tclass NativeHlsMediaLive extends BaseClass {\n\t\t#targetLiveWindow = NaN;\n\t\t#liveEdgeStartOffset;\n\t\t#disconnect = null;\n\t\t#currentSrc = \"\";\n\t\tget targetLiveWindow() {\n\t\t\treturn this.#targetLiveWindow;\n\t\t}\n\t\tget liveEdgeStart() {\n\t\t\tif (this.#liveEdgeStartOffset === void 0) return NaN;\n\t\t\tconst target = this.target;\n\t\t\tif (!target) return NaN;\n\t\t\tconst { seekable, buffered } = target;\n\t\t\tconst ranges = seekable.length ? seekable : buffered;\n\t\t\tif (!ranges.length) return NaN;\n\t\t\treturn ranges.end(ranges.length - 1) - this.#liveEdgeStartOffset;\n\t\t}\n\t\tattach(target) {\n\t\t\tsuper.attach?.(target);\n\t\t\tthis.#init(target);\n\t\t}\n\t\tdetach() {\n\t\t\tthis.#destroy();\n\t\t\tsuper.detach?.();\n\t\t}\n\t\tdestroy() {\n\t\t\tthis.#destroy();\n\t\t\tsuper.destroy?.();\n\t\t}\n\t\t#destroy() {\n\t\t\tthis.#disconnect?.abort();\n\t\t\tthis.#disconnect = null;\n\t\t\tthis.#currentSrc = \"\";\n\t\t\tthis.#liveEdgeStartOffset = void 0;\n\t\t\tthis.#setTargetLiveWindow(NaN);\n\t\t}\n\t\t#init(target) {\n\t\t\tthis.#destroy();\n\t\t\tthis.#disconnect = new AbortController();\n\t\t\tconst { signal } = this.#disconnect;\n\t\t\ttarget.addEventListener(\"loadstart\", () => this.#refresh(target), { signal });\n\t\t\ttarget.addEventListener(\"emptied\", () => {\n\t\t\t\tthis.#currentSrc = \"\";\n\t\t\t\tthis.#liveEdgeStartOffset = void 0;\n\t\t\t\tthis.#setTargetLiveWindow(NaN);\n\t\t\t}, { signal });\n\t\t\tif (target.currentSrc || target.src) this.#refresh(target);\n\t\t}\n\t\tasync #refresh(target) {\n\t\t\tconst src = target.currentSrc || target.src;\n\t\t\tif (!src || !looksLikeM3u8(src) || src === this.#currentSrc) return;\n\t\t\tthis.#currentSrc = src;\n\t\t\tthis.#liveEdgeStartOffset = void 0;\n\t\t\tthis.#setTargetLiveWindow(NaN);\n\t\t\tconst signal = this.#disconnect?.signal;\n\t\t\ttry {\n\t\t\t\tconst info = await getStreamInfoFromSrc(src, signal);\n\t\t\t\tif (signal?.aborted) return;\n\t\t\t\tif ((target.currentSrc || target.src) !== src) return;\n\t\t\t\tthis.#liveEdgeStartOffset = info.liveEdgeStartOffset;\n\t\t\t\tthis.#setTargetLiveWindow(info.targetLiveWindow);\n\t\t\t} catch {}\n\t\t}\n\t\t#setTargetLiveWindow(value) {\n\t\t\tif (Object.is(this.#targetLiveWindow, value)) return;\n\t\t\tthis.#targetLiveWindow = value;\n\t\t\tthis.dispatchEvent(new Event(\"targetlivewindowchange\"));\n\t\t}\n\t}\n\treturn NativeHlsMediaLive;\n}\n//#endregion\nexport { NativeHlsMediaLiveMixin };\n\n//# sourceMappingURL=live.js.map","import { MediaStreamTypes } from \"../../../core/media/types.js\";\n//#region src/dom/media/native-hls/stream-type.ts\nfunction NativeHlsMediaStreamTypeMixin(BaseClass) {\n\tclass NativeHlsMediaStreamType extends BaseClass {\n\t\t#streamType = MediaStreamTypes.UNKNOWN;\n\t\t#isUserStreamType = false;\n\t\t#disconnect = null;\n\t\tget streamType() {\n\t\t\treturn this.#streamType;\n\t\t}\n\t\tset streamType(value) {\n\t\t\tif (value === MediaStreamTypes.UNKNOWN) {\n\t\t\t\tthis.#isUserStreamType = false;\n\t\t\t\tthis.#setDetected(this.#detect());\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#isUserStreamType = true;\n\t\t\tthis.#update(value);\n\t\t}\n\t\tattach(target) {\n\t\t\tsuper.attach?.(target);\n\t\t\tthis.#init(target);\n\t\t}\n\t\tdetach() {\n\t\t\tthis.#destroy();\n\t\t\tthis.#setDetected(MediaStreamTypes.UNKNOWN);\n\t\t\tsuper.detach?.();\n\t\t}\n\t\tdestroy() {\n\t\t\tthis.#destroy();\n\t\t\tsuper.destroy?.();\n\t\t}\n\t\t#destroy() {\n\t\t\tthis.#disconnect?.abort();\n\t\t\tthis.#disconnect = null;\n\t\t}\n\t\t#init(target) {\n\t\t\tthis.#destroy();\n\t\t\tthis.#disconnect = new AbortController();\n\t\t\tconst { signal } = this.#disconnect;\n\t\t\tconst detect = () => this.#setDetected(this.#detect(target));\n\t\t\ttarget.addEventListener(\"durationchange\", detect, { signal });\n\t\t\ttarget.addEventListener(\"loadedmetadata\", detect, { signal });\n\t\t\ttarget.addEventListener(\"emptied\", () => this.#setDetected(MediaStreamTypes.UNKNOWN), { signal });\n\t\t\tdetect();\n\t\t}\n\t\t#detect(target = this.target) {\n\t\t\tif (!target) return MediaStreamTypes.UNKNOWN;\n\t\t\tconst { duration } = target;\n\t\t\tif (duration === Infinity) return MediaStreamTypes.LIVE;\n\t\t\tif (Number.isFinite(duration) && duration > 0) return MediaStreamTypes.ON_DEMAND;\n\t\t\treturn MediaStreamTypes.UNKNOWN;\n\t\t}\n\t\t#setDetected(value) {\n\t\t\tif (this.#isUserStreamType) return;\n\t\t\tthis.#update(value);\n\t\t}\n\t\t#update(value) {\n\t\t\tif (this.#streamType === value) return;\n\t\t\tthis.#streamType = value;\n\t\t\tthis.dispatchEvent(new Event(\"streamtypechange\"));\n\t\t}\n\t}\n\treturn NativeHlsMediaStreamType;\n}\n//#endregion\nexport { NativeHlsMediaStreamTypeMixin };\n\n//# sourceMappingURL=stream-type.js.map","import { MediaStreamTypes } from \"../../../core/media/types.js\";\nimport { HTMLVideoElementHost } from \"../video-host.js\";\nimport { NativeHlsMediaErrorsMixin } from \"./errors.js\";\nimport { NativeHlsMediaLiveMixin } from \"./live.js\";\nimport { NativeHlsMediaStreamTypeMixin } from \"./stream-type.js\";\n//#region src/dom/media/native-hls/index.ts\nconst StreamTypes = MediaStreamTypes;\nconst nativeHlsMediaDefaultProps = {\n\tsrc: \"\",\n\tpreload: \"metadata\",\n\tstreamType: MediaStreamTypes.UNKNOWN\n};\nvar NativeHlsMediaBase = class extends HTMLVideoElementHost {\n\t#src = nativeHlsMediaDefaultProps.src;\n\t#preload = nativeHlsMediaDefaultProps.preload;\n\tget engine() {\n\t\treturn null;\n\t}\n\tget src() {\n\t\treturn this.#src;\n\t}\n\tset src(src) {\n\t\tthis.#src = src;\n\t\tif (this.target) this.target.src = src;\n\t}\n\tget preload() {\n\t\treturn this.#preload;\n\t}\n\tset preload(value) {\n\t\tthis.#preload = value;\n\t\tif (this.target) this.target.preload = value;\n\t}\n\tattach(target) {\n\t\tsuper.attach(target);\n\t\tif (this.preload !== target.preload) target.preload = this.preload;\n\t\tif (this.src) target.src = this.src;\n\t}\n\tdetach() {\n\t\tsuper.detach();\n\t}\n\tdestroy() {\n\t\tthis.detach();\n\t}\n};\nvar NativeHlsMedia = class extends NativeHlsMediaLiveMixin(NativeHlsMediaStreamTypeMixin(NativeHlsMediaErrorsMixin(NativeHlsMediaBase))) {};\n//#endregion\nexport { NativeHlsMedia, StreamTypes, nativeHlsMediaDefaultProps };\n\n//# sourceMappingURL=index.js.map"],"mappings":"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"}
|
|
@@ -0,0 +1,371 @@
|
|
|
1
|
+
import { t as MediaStreamTypes } from "./types-B_4Es-UH.js";
|
|
2
|
+
import { t as HTMLVideoElementHost } from "./video-host-BR_2vUZH.js";
|
|
3
|
+
|
|
4
|
+
//#region ../core/dist/dev/core/media/media-error.js
|
|
5
|
+
var MediaError = class MediaError extends Error {
|
|
6
|
+
static MEDIA_ERR_ABORTED = 1;
|
|
7
|
+
static MEDIA_ERR_NETWORK = 2;
|
|
8
|
+
static MEDIA_ERR_DECODE = 3;
|
|
9
|
+
static MEDIA_ERR_SRC_NOT_SUPPORTED = 4;
|
|
10
|
+
static MEDIA_ERR_ENCRYPTED = 5;
|
|
11
|
+
static MEDIA_ERR_CUSTOM = 100;
|
|
12
|
+
static defaultMessages = {
|
|
13
|
+
1: "You aborted the media playback",
|
|
14
|
+
2: "A network error caused the media download to fail.",
|
|
15
|
+
3: "A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.",
|
|
16
|
+
4: "An unsupported error occurred. The server or network failed, or your browser does not support this format.",
|
|
17
|
+
5: "The media is encrypted and there are no keys to decrypt it."
|
|
18
|
+
};
|
|
19
|
+
name;
|
|
20
|
+
code;
|
|
21
|
+
context;
|
|
22
|
+
fatal;
|
|
23
|
+
data;
|
|
24
|
+
constructor(message, code = MediaError.MEDIA_ERR_CUSTOM, fatal, context) {
|
|
25
|
+
super(message);
|
|
26
|
+
this.name = "MediaError";
|
|
27
|
+
this.code = code;
|
|
28
|
+
this.context = context;
|
|
29
|
+
this.fatal = fatal ?? (code >= MediaError.MEDIA_ERR_NETWORK && code <= MediaError.MEDIA_ERR_ENCRYPTED);
|
|
30
|
+
if (!this.message) this.message = MediaError.defaultMessages[this.code] ?? "";
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
//#endregion
|
|
35
|
+
//#region ../core/dist/dev/dom/media/native-hls/errors.js
|
|
36
|
+
function NativeHlsMediaErrorsMixin(BaseClass) {
|
|
37
|
+
class NativeHlsMediaErrors extends BaseClass {
|
|
38
|
+
#disconnect = null;
|
|
39
|
+
#error = null;
|
|
40
|
+
get error() {
|
|
41
|
+
return this.#error;
|
|
42
|
+
}
|
|
43
|
+
attach(target) {
|
|
44
|
+
super.attach?.(target);
|
|
45
|
+
this.#init(target);
|
|
46
|
+
}
|
|
47
|
+
detach() {
|
|
48
|
+
this.#destroy();
|
|
49
|
+
super.detach?.();
|
|
50
|
+
}
|
|
51
|
+
destroy() {
|
|
52
|
+
this.#destroy();
|
|
53
|
+
super.destroy?.();
|
|
54
|
+
}
|
|
55
|
+
#destroy() {
|
|
56
|
+
this.#disconnect?.abort();
|
|
57
|
+
this.#disconnect = null;
|
|
58
|
+
this.#error = null;
|
|
59
|
+
}
|
|
60
|
+
#init(target) {
|
|
61
|
+
this.#destroy();
|
|
62
|
+
this.#disconnect = new AbortController();
|
|
63
|
+
const signal = this.#disconnect.signal;
|
|
64
|
+
target.addEventListener("error", (event) => {
|
|
65
|
+
event.stopImmediatePropagation();
|
|
66
|
+
const native = target.error;
|
|
67
|
+
if (!native) return;
|
|
68
|
+
const error = new MediaError(native.message, native.code, true);
|
|
69
|
+
this.#error = error;
|
|
70
|
+
this.dispatchEvent(new ErrorEvent("error", {
|
|
71
|
+
error,
|
|
72
|
+
message: error.message
|
|
73
|
+
}));
|
|
74
|
+
}, {
|
|
75
|
+
signal,
|
|
76
|
+
capture: true
|
|
77
|
+
});
|
|
78
|
+
target.addEventListener("emptied", () => {
|
|
79
|
+
this.#error = null;
|
|
80
|
+
}, { signal });
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return NativeHlsMediaErrors;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region ../core/dist/dev/dom/media/native-hls/m3u8-utils.js
|
|
88
|
+
/**
|
|
89
|
+
* Returns `true` when `src` looks like an HLS playlist URL. Permissive: a
|
|
90
|
+
* path or query string containing `.m3u8` is enough.
|
|
91
|
+
*/
|
|
92
|
+
function looksLikeM3u8(src) {
|
|
93
|
+
return src.toLowerCase().includes(".m3u8");
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Returns `true` when the playlist text is a multivariant (master) playlist.
|
|
97
|
+
*
|
|
98
|
+
* The presence of `#EXT-X-STREAM-INF` is conclusive — media playlists only
|
|
99
|
+
* contain `#EXTINF` segment tags.
|
|
100
|
+
*/
|
|
101
|
+
function isMultivariantPlaylist(playlist) {
|
|
102
|
+
return playlist.includes("#EXT-X-STREAM-INF");
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Resolves the first media playlist URL referenced by a multivariant
|
|
106
|
+
* playlist, relative to `baseUrl`. Returns `null` when none is found or the
|
|
107
|
+
* URL cannot be parsed.
|
|
108
|
+
*/
|
|
109
|
+
function resolveFirstMediaPlaylistUrl(multivariant, baseUrl) {
|
|
110
|
+
const lines = multivariant.split(/\r?\n/);
|
|
111
|
+
const start = lines.findIndex((l) => l.startsWith("#EXT-X-STREAM-INF"));
|
|
112
|
+
if (start === -1) return null;
|
|
113
|
+
const uri = lines.slice(start + 1).map((l) => l.trim()).find((l) => l && !l.startsWith("#"));
|
|
114
|
+
if (!uri) return null;
|
|
115
|
+
try {
|
|
116
|
+
return new URL(uri, baseUrl).toString();
|
|
117
|
+
} catch {
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Parses the subset of media-playlist tags needed to derive live edge state:
|
|
123
|
+
* `#EXT-X-PLAYLIST-TYPE`, `#EXT-X-ENDLIST`, `#EXT-X-TARGETDURATION`,
|
|
124
|
+
* `#EXT-X-PART-INF`.
|
|
125
|
+
*
|
|
126
|
+
* See spec:
|
|
127
|
+
* - VOD or `#EXT-X-ENDLIST` present → on-demand, `targetLiveWindow = NaN`.
|
|
128
|
+
* - `EVENT` playlist → DVR, `targetLiveWindow = Infinity`.
|
|
129
|
+
* - Otherwise → standard live sliding window, `targetLiveWindow = 0`.
|
|
130
|
+
*
|
|
131
|
+
* The edge offset is `PART-TARGET * 2` for low-latency live and
|
|
132
|
+
* `TARGETDURATION * 3` otherwise.
|
|
133
|
+
*/
|
|
134
|
+
function parseStreamInfo(playlist) {
|
|
135
|
+
const lines = playlist.split(/\r?\n/);
|
|
136
|
+
let playlistType;
|
|
137
|
+
let hasEndList = false;
|
|
138
|
+
let targetDuration;
|
|
139
|
+
let partTarget;
|
|
140
|
+
for (const raw of lines) {
|
|
141
|
+
const line = raw.trim();
|
|
142
|
+
if (line.startsWith("#EXT-X-PLAYLIST-TYPE:")) playlistType = line.slice(21).trim().toUpperCase();
|
|
143
|
+
else if (line === "#EXT-X-ENDLIST") hasEndList = true;
|
|
144
|
+
else if (line.startsWith("#EXT-X-TARGETDURATION:")) {
|
|
145
|
+
const value = Number(line.slice(22));
|
|
146
|
+
if (Number.isFinite(value)) targetDuration = value;
|
|
147
|
+
} else if (line.startsWith("#EXT-X-PART-INF")) {
|
|
148
|
+
const match = /PART-TARGET\s*=\s*([0-9.]+)/i.exec(line);
|
|
149
|
+
if (match) {
|
|
150
|
+
const value = Number(match[1]);
|
|
151
|
+
if (Number.isFinite(value)) partTarget = value;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
if (playlistType === "VOD" || hasEndList) return {
|
|
156
|
+
targetLiveWindow: NaN,
|
|
157
|
+
liveEdgeStartOffset: void 0
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
targetLiveWindow: playlistType === "EVENT" ? Number.POSITIVE_INFINITY : 0,
|
|
161
|
+
liveEdgeStartOffset: partTarget !== void 0 ? partTarget * 2 : targetDuration !== void 0 ? targetDuration * 3 : void 0
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
async function fetchPlaylist(url, init) {
|
|
165
|
+
const response = await fetch(url, init);
|
|
166
|
+
if (!response.ok) throw new Error(`Failed to fetch playlist (${response.status}): ${url}`);
|
|
167
|
+
return {
|
|
168
|
+
text: await response.text(),
|
|
169
|
+
url: response.url || url
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Fetches the HLS playlist at `src`, following the first variant if it's a
|
|
174
|
+
* multivariant playlist, and parses it into a {@link StreamInfo}.
|
|
175
|
+
*
|
|
176
|
+
* @throws when the fetch fails or no media playlist URL can be resolved.
|
|
177
|
+
*/
|
|
178
|
+
async function getStreamInfoFromSrc(src, signal) {
|
|
179
|
+
const init = signal ? { signal } : {};
|
|
180
|
+
const { text, url } = await fetchPlaylist(src, init);
|
|
181
|
+
if (!isMultivariantPlaylist(text)) return parseStreamInfo(text);
|
|
182
|
+
const mediaUrl = resolveFirstMediaPlaylistUrl(text, url);
|
|
183
|
+
if (!mediaUrl) throw new Error("No media playlist URL found in multivariant playlist");
|
|
184
|
+
return parseStreamInfo((await fetchPlaylist(mediaUrl, init)).text);
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
//#endregion
|
|
188
|
+
//#region ../core/dist/dev/dom/media/native-hls/live.js
|
|
189
|
+
function NativeHlsMediaLiveMixin(BaseClass) {
|
|
190
|
+
class NativeHlsMediaLive extends BaseClass {
|
|
191
|
+
#targetLiveWindow = NaN;
|
|
192
|
+
#liveEdgeStartOffset;
|
|
193
|
+
#disconnect = null;
|
|
194
|
+
#currentSrc = "";
|
|
195
|
+
get targetLiveWindow() {
|
|
196
|
+
return this.#targetLiveWindow;
|
|
197
|
+
}
|
|
198
|
+
get liveEdgeStart() {
|
|
199
|
+
if (this.#liveEdgeStartOffset === void 0) return NaN;
|
|
200
|
+
const target = this.target;
|
|
201
|
+
if (!target) return NaN;
|
|
202
|
+
const { seekable, buffered } = target;
|
|
203
|
+
const ranges = seekable.length ? seekable : buffered;
|
|
204
|
+
if (!ranges.length) return NaN;
|
|
205
|
+
return ranges.end(ranges.length - 1) - this.#liveEdgeStartOffset;
|
|
206
|
+
}
|
|
207
|
+
attach(target) {
|
|
208
|
+
super.attach?.(target);
|
|
209
|
+
this.#init(target);
|
|
210
|
+
}
|
|
211
|
+
detach() {
|
|
212
|
+
this.#destroy();
|
|
213
|
+
super.detach?.();
|
|
214
|
+
}
|
|
215
|
+
destroy() {
|
|
216
|
+
this.#destroy();
|
|
217
|
+
super.destroy?.();
|
|
218
|
+
}
|
|
219
|
+
#destroy() {
|
|
220
|
+
this.#disconnect?.abort();
|
|
221
|
+
this.#disconnect = null;
|
|
222
|
+
this.#currentSrc = "";
|
|
223
|
+
this.#liveEdgeStartOffset = void 0;
|
|
224
|
+
this.#setTargetLiveWindow(NaN);
|
|
225
|
+
}
|
|
226
|
+
#init(target) {
|
|
227
|
+
this.#destroy();
|
|
228
|
+
this.#disconnect = new AbortController();
|
|
229
|
+
const { signal } = this.#disconnect;
|
|
230
|
+
target.addEventListener("loadstart", () => this.#refresh(target), { signal });
|
|
231
|
+
target.addEventListener("emptied", () => {
|
|
232
|
+
this.#currentSrc = "";
|
|
233
|
+
this.#liveEdgeStartOffset = void 0;
|
|
234
|
+
this.#setTargetLiveWindow(NaN);
|
|
235
|
+
}, { signal });
|
|
236
|
+
if (target.currentSrc || target.src) this.#refresh(target);
|
|
237
|
+
}
|
|
238
|
+
async #refresh(target) {
|
|
239
|
+
const src = target.currentSrc || target.src;
|
|
240
|
+
if (!src || !looksLikeM3u8(src) || src === this.#currentSrc) return;
|
|
241
|
+
this.#currentSrc = src;
|
|
242
|
+
this.#liveEdgeStartOffset = void 0;
|
|
243
|
+
this.#setTargetLiveWindow(NaN);
|
|
244
|
+
const signal = this.#disconnect?.signal;
|
|
245
|
+
try {
|
|
246
|
+
const info = await getStreamInfoFromSrc(src, signal);
|
|
247
|
+
if (signal?.aborted) return;
|
|
248
|
+
if ((target.currentSrc || target.src) !== src) return;
|
|
249
|
+
this.#liveEdgeStartOffset = info.liveEdgeStartOffset;
|
|
250
|
+
this.#setTargetLiveWindow(info.targetLiveWindow);
|
|
251
|
+
} catch {}
|
|
252
|
+
}
|
|
253
|
+
#setTargetLiveWindow(value) {
|
|
254
|
+
if (Object.is(this.#targetLiveWindow, value)) return;
|
|
255
|
+
this.#targetLiveWindow = value;
|
|
256
|
+
this.dispatchEvent(new Event("targetlivewindowchange"));
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return NativeHlsMediaLive;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
//#endregion
|
|
263
|
+
//#region ../core/dist/dev/dom/media/native-hls/stream-type.js
|
|
264
|
+
function NativeHlsMediaStreamTypeMixin(BaseClass) {
|
|
265
|
+
class NativeHlsMediaStreamType extends BaseClass {
|
|
266
|
+
#streamType = MediaStreamTypes.UNKNOWN;
|
|
267
|
+
#isUserStreamType = false;
|
|
268
|
+
#disconnect = null;
|
|
269
|
+
get streamType() {
|
|
270
|
+
return this.#streamType;
|
|
271
|
+
}
|
|
272
|
+
set streamType(value) {
|
|
273
|
+
if (value === MediaStreamTypes.UNKNOWN) {
|
|
274
|
+
this.#isUserStreamType = false;
|
|
275
|
+
this.#setDetected(this.#detect());
|
|
276
|
+
return;
|
|
277
|
+
}
|
|
278
|
+
this.#isUserStreamType = true;
|
|
279
|
+
this.#update(value);
|
|
280
|
+
}
|
|
281
|
+
attach(target) {
|
|
282
|
+
super.attach?.(target);
|
|
283
|
+
this.#init(target);
|
|
284
|
+
}
|
|
285
|
+
detach() {
|
|
286
|
+
this.#destroy();
|
|
287
|
+
this.#setDetected(MediaStreamTypes.UNKNOWN);
|
|
288
|
+
super.detach?.();
|
|
289
|
+
}
|
|
290
|
+
destroy() {
|
|
291
|
+
this.#destroy();
|
|
292
|
+
super.destroy?.();
|
|
293
|
+
}
|
|
294
|
+
#destroy() {
|
|
295
|
+
this.#disconnect?.abort();
|
|
296
|
+
this.#disconnect = null;
|
|
297
|
+
}
|
|
298
|
+
#init(target) {
|
|
299
|
+
this.#destroy();
|
|
300
|
+
this.#disconnect = new AbortController();
|
|
301
|
+
const { signal } = this.#disconnect;
|
|
302
|
+
const detect = () => this.#setDetected(this.#detect(target));
|
|
303
|
+
target.addEventListener("durationchange", detect, { signal });
|
|
304
|
+
target.addEventListener("loadedmetadata", detect, { signal });
|
|
305
|
+
target.addEventListener("emptied", () => this.#setDetected(MediaStreamTypes.UNKNOWN), { signal });
|
|
306
|
+
detect();
|
|
307
|
+
}
|
|
308
|
+
#detect(target = this.target) {
|
|
309
|
+
if (!target) return MediaStreamTypes.UNKNOWN;
|
|
310
|
+
const { duration } = target;
|
|
311
|
+
if (duration === Infinity) return MediaStreamTypes.LIVE;
|
|
312
|
+
if (Number.isFinite(duration) && duration > 0) return MediaStreamTypes.ON_DEMAND;
|
|
313
|
+
return MediaStreamTypes.UNKNOWN;
|
|
314
|
+
}
|
|
315
|
+
#setDetected(value) {
|
|
316
|
+
if (this.#isUserStreamType) return;
|
|
317
|
+
this.#update(value);
|
|
318
|
+
}
|
|
319
|
+
#update(value) {
|
|
320
|
+
if (this.#streamType === value) return;
|
|
321
|
+
this.#streamType = value;
|
|
322
|
+
this.dispatchEvent(new Event("streamtypechange"));
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
return NativeHlsMediaStreamType;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
//#endregion
|
|
329
|
+
//#region ../core/dist/dev/dom/media/native-hls/index.js
|
|
330
|
+
const nativeHlsMediaDefaultProps = {
|
|
331
|
+
src: "",
|
|
332
|
+
preload: "metadata",
|
|
333
|
+
streamType: MediaStreamTypes.UNKNOWN
|
|
334
|
+
};
|
|
335
|
+
var NativeHlsMediaBase = class extends HTMLVideoElementHost {
|
|
336
|
+
#src = nativeHlsMediaDefaultProps.src;
|
|
337
|
+
#preload = nativeHlsMediaDefaultProps.preload;
|
|
338
|
+
get engine() {
|
|
339
|
+
return null;
|
|
340
|
+
}
|
|
341
|
+
get src() {
|
|
342
|
+
return this.#src;
|
|
343
|
+
}
|
|
344
|
+
set src(src) {
|
|
345
|
+
this.#src = src;
|
|
346
|
+
if (this.target) this.target.src = src;
|
|
347
|
+
}
|
|
348
|
+
get preload() {
|
|
349
|
+
return this.#preload;
|
|
350
|
+
}
|
|
351
|
+
set preload(value) {
|
|
352
|
+
this.#preload = value;
|
|
353
|
+
if (this.target) this.target.preload = value;
|
|
354
|
+
}
|
|
355
|
+
attach(target) {
|
|
356
|
+
super.attach(target);
|
|
357
|
+
if (this.preload !== target.preload) target.preload = this.preload;
|
|
358
|
+
if (this.src) target.src = this.src;
|
|
359
|
+
}
|
|
360
|
+
detach() {
|
|
361
|
+
super.detach();
|
|
362
|
+
}
|
|
363
|
+
destroy() {
|
|
364
|
+
this.detach();
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
var NativeHlsMedia = class extends NativeHlsMediaLiveMixin(NativeHlsMediaStreamTypeMixin(NativeHlsMediaErrorsMixin(NativeHlsMediaBase))) {};
|
|
368
|
+
|
|
369
|
+
//#endregion
|
|
370
|
+
export { MediaError as n, NativeHlsMedia as t };
|
|
371
|
+
//# sourceMappingURL=native-hls-ak4v9DN6.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"native-hls-ak4v9DN6.js","names":["#error","#init","#destroy","#disconnect","#targetLiveWindow","#liveEdgeStartOffset","#init","#destroy","#disconnect","#currentSrc","#setTargetLiveWindow","#refresh","#streamType","#isUserStreamType","#setDetected","#detect","#update","#init","#destroy","#disconnect","#src","#preload"],"sources":["../../core/dist/dev/core/media/media-error.js","../../core/dist/dev/dom/media/native-hls/errors.js","../../core/dist/dev/dom/media/native-hls/m3u8-utils.js","../../core/dist/dev/dom/media/native-hls/live.js","../../core/dist/dev/dom/media/native-hls/stream-type.js","../../core/dist/dev/dom/media/native-hls/index.js"],"sourcesContent":["//#region src/core/media/media-error.ts\nvar MediaError = class MediaError extends Error {\n\tstatic MEDIA_ERR_ABORTED = 1;\n\tstatic MEDIA_ERR_NETWORK = 2;\n\tstatic MEDIA_ERR_DECODE = 3;\n\tstatic MEDIA_ERR_SRC_NOT_SUPPORTED = 4;\n\tstatic MEDIA_ERR_ENCRYPTED = 5;\n\tstatic MEDIA_ERR_CUSTOM = 100;\n\tstatic defaultMessages = {\n\t\t1: \"You aborted the media playback\",\n\t\t2: \"A network error caused the media download to fail.\",\n\t\t3: \"A media error caused playback to be aborted. The media could be corrupt or your browser does not support this format.\",\n\t\t4: \"An unsupported error occurred. The server or network failed, or your browser does not support this format.\",\n\t\t5: \"The media is encrypted and there are no keys to decrypt it.\"\n\t};\n\tname;\n\tcode;\n\tcontext;\n\tfatal;\n\tdata;\n\tconstructor(message, code = MediaError.MEDIA_ERR_CUSTOM, fatal, context) {\n\t\tsuper(message);\n\t\tthis.name = \"MediaError\";\n\t\tthis.code = code;\n\t\tthis.context = context;\n\t\tthis.fatal = fatal ?? (code >= MediaError.MEDIA_ERR_NETWORK && code <= MediaError.MEDIA_ERR_ENCRYPTED);\n\t\tif (!this.message) this.message = MediaError.defaultMessages[this.code] ?? \"\";\n\t}\n};\n//#endregion\nexport { MediaError };\n\n//# sourceMappingURL=media-error.js.map","import { MediaError } from \"../../../core/media/media-error.js\";\n//#region src/dom/media/native-hls/errors.ts\nfunction NativeHlsMediaErrorsMixin(BaseClass) {\n\tclass NativeHlsMediaErrors extends BaseClass {\n\t\t#disconnect = null;\n\t\t#error = null;\n\t\tget error() {\n\t\t\treturn this.#error;\n\t\t}\n\t\tattach(target) {\n\t\t\tsuper.attach?.(target);\n\t\t\tthis.#init(target);\n\t\t}\n\t\tdetach() {\n\t\t\tthis.#destroy();\n\t\t\tsuper.detach?.();\n\t\t}\n\t\tdestroy() {\n\t\t\tthis.#destroy();\n\t\t\tsuper.destroy?.();\n\t\t}\n\t\t#destroy() {\n\t\t\tthis.#disconnect?.abort();\n\t\t\tthis.#disconnect = null;\n\t\t\tthis.#error = null;\n\t\t}\n\t\t#init(target) {\n\t\t\tthis.#destroy();\n\t\t\tthis.#disconnect = new AbortController();\n\t\t\tconst signal = this.#disconnect.signal;\n\t\t\ttarget.addEventListener(\"error\", (event) => {\n\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\tconst native = target.error;\n\t\t\t\tif (!native) return;\n\t\t\t\tconst error = new MediaError(native.message, native.code, true);\n\t\t\t\tthis.#error = error;\n\t\t\t\tthis.dispatchEvent(new ErrorEvent(\"error\", {\n\t\t\t\t\terror,\n\t\t\t\t\tmessage: error.message\n\t\t\t\t}));\n\t\t\t}, {\n\t\t\t\tsignal,\n\t\t\t\tcapture: true\n\t\t\t});\n\t\t\ttarget.addEventListener(\"emptied\", () => {\n\t\t\t\tthis.#error = null;\n\t\t\t}, { signal });\n\t\t}\n\t}\n\treturn NativeHlsMediaErrors;\n}\n//#endregion\nexport { NativeHlsMediaErrorsMixin };\n\n//# sourceMappingURL=errors.js.map","//#region src/dom/media/native-hls/m3u8-utils.ts\n/**\n* Returns `true` when `src` looks like an HLS playlist URL. Permissive: a\n* path or query string containing `.m3u8` is enough.\n*/\nfunction looksLikeM3u8(src) {\n\treturn src.toLowerCase().includes(\".m3u8\");\n}\n/**\n* Returns `true` when the playlist text is a multivariant (master) playlist.\n*\n* The presence of `#EXT-X-STREAM-INF` is conclusive — media playlists only\n* contain `#EXTINF` segment tags.\n*/\nfunction isMultivariantPlaylist(playlist) {\n\treturn playlist.includes(\"#EXT-X-STREAM-INF\");\n}\n/**\n* Resolves the first media playlist URL referenced by a multivariant\n* playlist, relative to `baseUrl`. Returns `null` when none is found or the\n* URL cannot be parsed.\n*/\nfunction resolveFirstMediaPlaylistUrl(multivariant, baseUrl) {\n\tconst lines = multivariant.split(/\\r?\\n/);\n\tconst start = lines.findIndex((l) => l.startsWith(\"#EXT-X-STREAM-INF\"));\n\tif (start === -1) return null;\n\tconst uri = lines.slice(start + 1).map((l) => l.trim()).find((l) => l && !l.startsWith(\"#\"));\n\tif (!uri) return null;\n\ttry {\n\t\treturn new URL(uri, baseUrl).toString();\n\t} catch {\n\t\treturn null;\n\t}\n}\n/**\n* Parses the subset of media-playlist tags needed to derive live edge state:\n* `#EXT-X-PLAYLIST-TYPE`, `#EXT-X-ENDLIST`, `#EXT-X-TARGETDURATION`,\n* `#EXT-X-PART-INF`.\n*\n* See spec:\n* - VOD or `#EXT-X-ENDLIST` present → on-demand, `targetLiveWindow = NaN`.\n* - `EVENT` playlist → DVR, `targetLiveWindow = Infinity`.\n* - Otherwise → standard live sliding window, `targetLiveWindow = 0`.\n*\n* The edge offset is `PART-TARGET * 2` for low-latency live and\n* `TARGETDURATION * 3` otherwise.\n*/\nfunction parseStreamInfo(playlist) {\n\tconst lines = playlist.split(/\\r?\\n/);\n\tlet playlistType;\n\tlet hasEndList = false;\n\tlet targetDuration;\n\tlet partTarget;\n\tfor (const raw of lines) {\n\t\tconst line = raw.trim();\n\t\tif (line.startsWith(\"#EXT-X-PLAYLIST-TYPE:\")) playlistType = line.slice(21).trim().toUpperCase();\n\t\telse if (line === \"#EXT-X-ENDLIST\") hasEndList = true;\n\t\telse if (line.startsWith(\"#EXT-X-TARGETDURATION:\")) {\n\t\t\tconst value = Number(line.slice(22));\n\t\t\tif (Number.isFinite(value)) targetDuration = value;\n\t\t} else if (line.startsWith(\"#EXT-X-PART-INF\")) {\n\t\t\tconst match = /PART-TARGET\\s*=\\s*([0-9.]+)/i.exec(line);\n\t\t\tif (match) {\n\t\t\t\tconst value = Number(match[1]);\n\t\t\t\tif (Number.isFinite(value)) partTarget = value;\n\t\t\t}\n\t\t}\n\t}\n\tif (playlistType === \"VOD\" || hasEndList) return {\n\t\ttargetLiveWindow: NaN,\n\t\tliveEdgeStartOffset: void 0\n\t};\n\treturn {\n\t\ttargetLiveWindow: playlistType === \"EVENT\" ? Number.POSITIVE_INFINITY : 0,\n\t\tliveEdgeStartOffset: partTarget !== void 0 ? partTarget * 2 : targetDuration !== void 0 ? targetDuration * 3 : void 0\n\t};\n}\nasync function fetchPlaylist(url, init) {\n\tconst response = await fetch(url, init);\n\tif (!response.ok) throw new Error(`Failed to fetch playlist (${response.status}): ${url}`);\n\treturn {\n\t\ttext: await response.text(),\n\t\turl: response.url || url\n\t};\n}\n/**\n* Fetches the HLS playlist at `src`, following the first variant if it's a\n* multivariant playlist, and parses it into a {@link StreamInfo}.\n*\n* @throws when the fetch fails or no media playlist URL can be resolved.\n*/\nasync function getStreamInfoFromSrc(src, signal) {\n\tconst init = signal ? { signal } : {};\n\tconst { text, url } = await fetchPlaylist(src, init);\n\tif (!isMultivariantPlaylist(text)) return parseStreamInfo(text);\n\tconst mediaUrl = resolveFirstMediaPlaylistUrl(text, url);\n\tif (!mediaUrl) throw new Error(\"No media playlist URL found in multivariant playlist\");\n\treturn parseStreamInfo((await fetchPlaylist(mediaUrl, init)).text);\n}\n//#endregion\nexport { getStreamInfoFromSrc, looksLikeM3u8 };\n\n//# sourceMappingURL=m3u8-utils.js.map","import { getStreamInfoFromSrc, looksLikeM3u8 } from \"./m3u8-utils.js\";\n//#region src/dom/media/native-hls/live.ts\nfunction NativeHlsMediaLiveMixin(BaseClass) {\n\tclass NativeHlsMediaLive extends BaseClass {\n\t\t#targetLiveWindow = NaN;\n\t\t#liveEdgeStartOffset;\n\t\t#disconnect = null;\n\t\t#currentSrc = \"\";\n\t\tget targetLiveWindow() {\n\t\t\treturn this.#targetLiveWindow;\n\t\t}\n\t\tget liveEdgeStart() {\n\t\t\tif (this.#liveEdgeStartOffset === void 0) return NaN;\n\t\t\tconst target = this.target;\n\t\t\tif (!target) return NaN;\n\t\t\tconst { seekable, buffered } = target;\n\t\t\tconst ranges = seekable.length ? seekable : buffered;\n\t\t\tif (!ranges.length) return NaN;\n\t\t\treturn ranges.end(ranges.length - 1) - this.#liveEdgeStartOffset;\n\t\t}\n\t\tattach(target) {\n\t\t\tsuper.attach?.(target);\n\t\t\tthis.#init(target);\n\t\t}\n\t\tdetach() {\n\t\t\tthis.#destroy();\n\t\t\tsuper.detach?.();\n\t\t}\n\t\tdestroy() {\n\t\t\tthis.#destroy();\n\t\t\tsuper.destroy?.();\n\t\t}\n\t\t#destroy() {\n\t\t\tthis.#disconnect?.abort();\n\t\t\tthis.#disconnect = null;\n\t\t\tthis.#currentSrc = \"\";\n\t\t\tthis.#liveEdgeStartOffset = void 0;\n\t\t\tthis.#setTargetLiveWindow(NaN);\n\t\t}\n\t\t#init(target) {\n\t\t\tthis.#destroy();\n\t\t\tthis.#disconnect = new AbortController();\n\t\t\tconst { signal } = this.#disconnect;\n\t\t\ttarget.addEventListener(\"loadstart\", () => this.#refresh(target), { signal });\n\t\t\ttarget.addEventListener(\"emptied\", () => {\n\t\t\t\tthis.#currentSrc = \"\";\n\t\t\t\tthis.#liveEdgeStartOffset = void 0;\n\t\t\t\tthis.#setTargetLiveWindow(NaN);\n\t\t\t}, { signal });\n\t\t\tif (target.currentSrc || target.src) this.#refresh(target);\n\t\t}\n\t\tasync #refresh(target) {\n\t\t\tconst src = target.currentSrc || target.src;\n\t\t\tif (!src || !looksLikeM3u8(src) || src === this.#currentSrc) return;\n\t\t\tthis.#currentSrc = src;\n\t\t\tthis.#liveEdgeStartOffset = void 0;\n\t\t\tthis.#setTargetLiveWindow(NaN);\n\t\t\tconst signal = this.#disconnect?.signal;\n\t\t\ttry {\n\t\t\t\tconst info = await getStreamInfoFromSrc(src, signal);\n\t\t\t\tif (signal?.aborted) return;\n\t\t\t\tif ((target.currentSrc || target.src) !== src) return;\n\t\t\t\tthis.#liveEdgeStartOffset = info.liveEdgeStartOffset;\n\t\t\t\tthis.#setTargetLiveWindow(info.targetLiveWindow);\n\t\t\t} catch {}\n\t\t}\n\t\t#setTargetLiveWindow(value) {\n\t\t\tif (Object.is(this.#targetLiveWindow, value)) return;\n\t\t\tthis.#targetLiveWindow = value;\n\t\t\tthis.dispatchEvent(new Event(\"targetlivewindowchange\"));\n\t\t}\n\t}\n\treturn NativeHlsMediaLive;\n}\n//#endregion\nexport { NativeHlsMediaLiveMixin };\n\n//# sourceMappingURL=live.js.map","import { MediaStreamTypes } from \"../../../core/media/types.js\";\n//#region src/dom/media/native-hls/stream-type.ts\nfunction NativeHlsMediaStreamTypeMixin(BaseClass) {\n\tclass NativeHlsMediaStreamType extends BaseClass {\n\t\t#streamType = MediaStreamTypes.UNKNOWN;\n\t\t#isUserStreamType = false;\n\t\t#disconnect = null;\n\t\tget streamType() {\n\t\t\treturn this.#streamType;\n\t\t}\n\t\tset streamType(value) {\n\t\t\tif (value === MediaStreamTypes.UNKNOWN) {\n\t\t\t\tthis.#isUserStreamType = false;\n\t\t\t\tthis.#setDetected(this.#detect());\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.#isUserStreamType = true;\n\t\t\tthis.#update(value);\n\t\t}\n\t\tattach(target) {\n\t\t\tsuper.attach?.(target);\n\t\t\tthis.#init(target);\n\t\t}\n\t\tdetach() {\n\t\t\tthis.#destroy();\n\t\t\tthis.#setDetected(MediaStreamTypes.UNKNOWN);\n\t\t\tsuper.detach?.();\n\t\t}\n\t\tdestroy() {\n\t\t\tthis.#destroy();\n\t\t\tsuper.destroy?.();\n\t\t}\n\t\t#destroy() {\n\t\t\tthis.#disconnect?.abort();\n\t\t\tthis.#disconnect = null;\n\t\t}\n\t\t#init(target) {\n\t\t\tthis.#destroy();\n\t\t\tthis.#disconnect = new AbortController();\n\t\t\tconst { signal } = this.#disconnect;\n\t\t\tconst detect = () => this.#setDetected(this.#detect(target));\n\t\t\ttarget.addEventListener(\"durationchange\", detect, { signal });\n\t\t\ttarget.addEventListener(\"loadedmetadata\", detect, { signal });\n\t\t\ttarget.addEventListener(\"emptied\", () => this.#setDetected(MediaStreamTypes.UNKNOWN), { signal });\n\t\t\tdetect();\n\t\t}\n\t\t#detect(target = this.target) {\n\t\t\tif (!target) return MediaStreamTypes.UNKNOWN;\n\t\t\tconst { duration } = target;\n\t\t\tif (duration === Infinity) return MediaStreamTypes.LIVE;\n\t\t\tif (Number.isFinite(duration) && duration > 0) return MediaStreamTypes.ON_DEMAND;\n\t\t\treturn MediaStreamTypes.UNKNOWN;\n\t\t}\n\t\t#setDetected(value) {\n\t\t\tif (this.#isUserStreamType) return;\n\t\t\tthis.#update(value);\n\t\t}\n\t\t#update(value) {\n\t\t\tif (this.#streamType === value) return;\n\t\t\tthis.#streamType = value;\n\t\t\tthis.dispatchEvent(new Event(\"streamtypechange\"));\n\t\t}\n\t}\n\treturn NativeHlsMediaStreamType;\n}\n//#endregion\nexport { NativeHlsMediaStreamTypeMixin };\n\n//# sourceMappingURL=stream-type.js.map","import { MediaStreamTypes } from \"../../../core/media/types.js\";\nimport { HTMLVideoElementHost } from \"../video-host.js\";\nimport { NativeHlsMediaErrorsMixin } from \"./errors.js\";\nimport { NativeHlsMediaLiveMixin } from \"./live.js\";\nimport { NativeHlsMediaStreamTypeMixin } from \"./stream-type.js\";\n//#region src/dom/media/native-hls/index.ts\nconst StreamTypes = MediaStreamTypes;\nconst nativeHlsMediaDefaultProps = {\n\tsrc: \"\",\n\tpreload: \"metadata\",\n\tstreamType: MediaStreamTypes.UNKNOWN\n};\nvar NativeHlsMediaBase = class extends HTMLVideoElementHost {\n\t#src = nativeHlsMediaDefaultProps.src;\n\t#preload = nativeHlsMediaDefaultProps.preload;\n\tget engine() {\n\t\treturn null;\n\t}\n\tget src() {\n\t\treturn this.#src;\n\t}\n\tset src(src) {\n\t\tthis.#src = src;\n\t\tif (this.target) this.target.src = src;\n\t}\n\tget preload() {\n\t\treturn this.#preload;\n\t}\n\tset preload(value) {\n\t\tthis.#preload = value;\n\t\tif (this.target) this.target.preload = value;\n\t}\n\tattach(target) {\n\t\tsuper.attach(target);\n\t\tif (this.preload !== target.preload) target.preload = this.preload;\n\t\tif (this.src) target.src = this.src;\n\t}\n\tdetach() {\n\t\tsuper.detach();\n\t}\n\tdestroy() {\n\t\tthis.detach();\n\t}\n};\nvar NativeHlsMedia = class extends NativeHlsMediaLiveMixin(NativeHlsMediaStreamTypeMixin(NativeHlsMediaErrorsMixin(NativeHlsMediaBase))) {};\n//#endregion\nexport { NativeHlsMedia, StreamTypes, nativeHlsMediaDefaultProps };\n\n//# sourceMappingURL=index.js.map"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{_ as e,b as t,g as n,m as r,p as i,v as a,w as o,x as s}from"./compounds-DJyzXLOB.js";import{A as c,T as l,k as u,n as d,o as f,t as p}from"./create-player-C5ui1T2i.js";import{c as m,d as h,t as g}from"./predicate-Cad5WV4q.js";var _=class e{static defaultProps={delay:500};state=l({visible:!1});#e={...e.defaultProps};#t=null;setProps(t){this.#e=o(t,e.defaultProps)}destroy(){this.#n()}update(e){let t=e.waiting&&!e.paused;t&&!this.state.current.visible&&!this.#t?this.#t=setTimeout(()=>{this.#t=null,this.state.patch({visible:!0})},this.#e.delay):t||(this.#n(),this.state.patch({visible:!1}))}#n(){this.#t!==null&&(clearTimeout(this.#t),this.#t=null)}};const v={visible:`data-visible`};var y=class e{static defaultProps={label:``,disabled:!1};state=l({subtitlesShowing:!1,availability:`unavailable`,label:``});#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=o(t,e.defaultProps)}getLabel(e){let{label:t}=this.#e;if(g(t)){let n=t(e);if(n)return n}else if(t)return t;return e.subtitlesShowing?`Disable captions`:`Enable captions`}getAttrs(e){return{"aria-label":this.getLabel(e),"aria-disabled":this.#e.disabled?`true`:void 0}}setMedia(e){this.#t=e}getState(){let e=this.#t,t=e.textTrackList.some(e=>e.kind===`captions`||e.kind===`subtitles`)?`available`:`unavailable`;return this.state.patch({subtitlesShowing:e.subtitlesShowing,availability:t}),this.state.patch({label:this.getLabel(this.state.current)}),this.state.current}toggle(e){this.#e.disabled||e.toggleSubtitles()}};const b={subtitlesShowing:`data-active`,availability:`data-availability`};var x=class e{static defaultProps={label:``,disabled:!1};state=l({castState:`disconnected`,availability:`unavailable`,label:``});#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=o(t,e.defaultProps)}getLabel(e){let{label:t}=this.#e;if(g(t)){let n=t(e);if(n)return n}else if(t)return t;return e.castState===`connected`?`Stop casting`:e.castState===`connecting`?`Connecting`:`Start casting`}getAttrs(e){return{"aria-label":this.getLabel(e),"aria-disabled":this.#e.disabled?`true`:void 0}}setMedia(e){this.#t=e}getState(){let e=this.#t,t=!!globalThis.chrome;return this.state.patch({castState:e.remotePlaybackState,availability:t?e.remotePlaybackAvailability:`unsupported`}),this.state.patch({label:this.getLabel(this.state.current)}),this.state.current}async toggle(e){if(!this.#e.disabled&&e.remotePlaybackAvailability===`available`)try{await e.toggleRemotePlayback()}catch{}}};const S={castState:`data-cast-state`,availability:`data-availability`};var C=class e{static defaultProps={label:``,disabled:!1};state=l({fullscreen:!1,availability:`available`,label:``});#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=o(t,e.defaultProps)}getLabel(e){let{label:t}=this.#e;if(g(t)){let n=t(e);if(n)return n}else if(t)return t;return e.fullscreen?`Exit fullscreen`:`Enter fullscreen`}getAttrs(e){return{"aria-label":this.getLabel(e),"aria-disabled":this.#e.disabled?`true`:void 0}}setMedia(e){this.#t=e}getState(){let e=this.#t;return this.state.patch({fullscreen:e.fullscreen,availability:e.fullscreenAvailability}),this.state.patch({label:this.getLabel(this.state.current)}),this.state.current}async toggle(e){if(!this.#e.disabled&&e.fullscreenAvailability===`available`)try{e.fullscreen?await e.exitFullscreen():await e.requestFullscreen()}catch{}}};const w={fullscreen:`data-fullscreen`,availability:`data-availability`};var T=class e{static defaultProps={label:``,disabled:!1};state=l({pip:!1,availability:`available`,label:``});#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=o(t,e.defaultProps)}getLabel(e){let{label:t}=this.#e;if(g(t)){let n=t(e);if(n)return n}else if(t)return t;return e.pip?`Exit picture-in-picture`:`Enter picture-in-picture`}getAttrs(e){return{"aria-label":this.getLabel(e),"aria-disabled":this.#e.disabled?`true`:void 0}}setMedia(e){this.#t=e}getState(){let e=this.#t;return this.state.patch({pip:e.pip,availability:e.pipAvailability}),this.state.patch({label:this.getLabel(this.state.current)}),this.state.current}async toggle(e){if(!this.#e.disabled&&e.pipAvailability===`available`)try{e.pip?await e.exitPictureInPicture():await e.requestPictureInPicture()}catch{}}};const E={pip:`data-pip`,availability:`data-availability`};var D=class{#e=null;setMedia(e){this.#e=e}getState(){return{visible:!this.#e.started}}};const O={visible:`data-visible`};var k=class extends c{constructor(...e){super(...e),this.delay=_.defaultProps.delay,this.#e=new _,this.#t=new d(this,m,a),this.#n=null}static{this.tagName=`media-buffering-indicator`}static{this.properties={delay:{type:Number}}}#e;#t;#n;connectedCallback(){super.connectedCallback(),!this.destroyed&&(this.#n=new AbortController,this.#e.state.subscribe(()=>this.requestUpdate(),{signal:this.#n.signal}))}disconnectedCallback(){super.disconnectedCallback(),this.#n?.abort(),this.#n=null}willUpdate(e){super.willUpdate(e),this.#e.setProps(this)}update(e){super.update(e);let t=this.#t.value;t&&(this.#e.update(t),r(this,this.#e.state.current,v))}},A=class extends i{constructor(...e){super(...e),this.core=new y,this.stateAttrMap=b,this.mediaState=new d(this,m,s),this.hotkeyAction=`toggleSubtitles`}static{this.tagName=`media-captions-button`}activate(e){this.core.toggle(e)}},j=class extends i{constructor(...e){super(...e),this.core=new x,this.stateAttrMap=S,this.mediaState=new d(this,m,t)}static{this.tagName=`media-cast-button`}activate(e){this.core.toggle(e)}},M=class extends i{constructor(...e){super(...e),this.core=new C,this.stateAttrMap=w,this.mediaState=new d(this,m,n),this.hotkeyAction=`toggleFullscreen`}static{this.tagName=`media-fullscreen-button`}activate(e){this.core.toggle(e)}},N=class extends i{constructor(...t){super(...t),this.core=new T,this.stateAttrMap=E,this.mediaState=new d(this,m,e),this.hotkeyAction=`togglePictureInPicture`}static{this.tagName=`media-pip-button`}activate(e){this.core.toggle(e)}},P=class extends c{connectedCallback(){super.connectedCallback()}update(e){super.update(e);let t=this.mediaState.value;if(!t)return;this.core.setMedia(t);let n=this.core.getState();r(this,n,this.stateAttrMap)}},F=class extends P{constructor(...e){super(...e),this.core=new D,this.stateAttrMap=O,this.mediaState=new d(this,m,a)}static{this.tagName=`media-poster`}};const{ProviderMixin:I}=p({features:f});var L=class extends I(c){static{this.tagName=`video-player`}};h(L),h(u);export{j as a,M as i,F as n,A as o,N as r,k as s,L as t};
|
|
2
|
+
//# sourceMappingURL=player-BKKCelEs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"player-BKKCelEs.js","names":["#props","#clearTimer","#timer","#props","#media","#props","#media","#props","#media","#props","#media","#media","#core","#state","#disconnect"],"sources":["../../core/dist/default/core/ui/buffering-indicator/buffering-indicator-core.js","../../core/dist/default/core/ui/buffering-indicator/buffering-indicator-data-attrs.js","../../core/dist/default/core/ui/captions-button/captions-button-core.js","../../core/dist/default/core/ui/captions-button/captions-button-data-attrs.js","../../core/dist/default/core/ui/cast-button/cast-button-core.js","../../core/dist/default/core/ui/cast-button/cast-button-data-attrs.js","../../core/dist/default/core/ui/fullscreen-button/fullscreen-button-core.js","../../core/dist/default/core/ui/fullscreen-button/fullscreen-button-data-attrs.js","../../core/dist/default/core/ui/pip-button/pip-button-core.js","../../core/dist/default/core/ui/pip-button/pip-button-data-attrs.js","../../core/dist/default/core/ui/poster/poster-core.js","../../core/dist/default/core/ui/poster/poster-data-attrs.js","../src/ui/buffering-indicator/buffering-indicator-element.ts","../src/ui/captions-button/captions-button-element.ts","../src/ui/cast-button/cast-button-element.ts","../src/ui/fullscreen-button/fullscreen-button-element.ts","../src/ui/pip-button/pip-button-element.ts","../src/ui/media-ui-element.ts","../src/ui/poster/poster-element.ts","../src/define/video/player.ts"],"sourcesContent":["import { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n//#region src/core/ui/buffering-indicator/buffering-indicator-core.ts\nvar BufferingIndicatorCore = class BufferingIndicatorCore {\n\tstatic defaultProps = { delay: 500 };\n\tstate = createState({ visible: false });\n\t#props = { ...BufferingIndicatorCore.defaultProps };\n\t#timer = null;\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, BufferingIndicatorCore.defaultProps);\n\t}\n\tdestroy() {\n\t\tthis.#clearTimer();\n\t}\n\tupdate(media) {\n\t\tconst buffering = media.waiting && !media.paused;\n\t\tif (buffering && !this.state.current.visible && !this.#timer) this.#timer = setTimeout(() => {\n\t\t\tthis.#timer = null;\n\t\t\tthis.state.patch({ visible: true });\n\t\t}, this.#props.delay);\n\t\telse if (!buffering) {\n\t\t\tthis.#clearTimer();\n\t\t\tthis.state.patch({ visible: false });\n\t\t}\n\t}\n\t#clearTimer() {\n\t\tif (this.#timer !== null) {\n\t\t\tclearTimeout(this.#timer);\n\t\t\tthis.#timer = null;\n\t\t}\n\t}\n};\n//#endregion\nexport { BufferingIndicatorCore };\n\n//# sourceMappingURL=buffering-indicator-core.js.map","//#region src/core/ui/buffering-indicator/buffering-indicator-data-attrs.ts\nconst BufferingIndicatorDataAttrs = { visible: \"data-visible\" };\n//#endregion\nexport { BufferingIndicatorDataAttrs };\n\n//# sourceMappingURL=buffering-indicator-data-attrs.js.map","import { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n//#region src/core/ui/captions-button/captions-button-core.ts\nvar CaptionsButtonCore = class CaptionsButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tsubtitlesShowing: false,\n\t\tavailability: \"unavailable\",\n\t\tlabel: \"\"\n\t});\n\t#props = { ...CaptionsButtonCore.defaultProps };\n\t#media = null;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, CaptionsButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst { label } = this.#props;\n\t\tif (isFunction(label)) {\n\t\t\tconst customLabel = label(state);\n\t\t\tif (customLabel) return customLabel;\n\t\t} else if (label) return label;\n\t\treturn state.subtitlesShowing ? \"Disable captions\" : \"Enable captions\";\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": this.#props.disabled ? \"true\" : void 0\n\t\t};\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tconst availability = media.textTrackList.some((t) => t.kind === \"captions\" || t.kind === \"subtitles\") ? \"available\" : \"unavailable\";\n\t\tthis.state.patch({\n\t\t\tsubtitlesShowing: media.subtitlesShowing,\n\t\t\tavailability\n\t\t});\n\t\tthis.state.patch({ label: this.getLabel(this.state.current) });\n\t\treturn this.state.current;\n\t}\n\ttoggle(media) {\n\t\tif (this.#props.disabled) return;\n\t\tmedia.toggleSubtitles();\n\t}\n};\n//#endregion\nexport { CaptionsButtonCore };\n\n//# sourceMappingURL=captions-button-core.js.map","//#region src/core/ui/captions-button/captions-button-data-attrs.ts\nconst CaptionsButtonDataAttrs = {\n\tsubtitlesShowing: \"data-active\",\n\tavailability: \"data-availability\"\n};\n//#endregion\nexport { CaptionsButtonDataAttrs };\n\n//# sourceMappingURL=captions-button-data-attrs.js.map","import { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n//#region src/core/ui/cast-button/cast-button-core.ts\nvar CastButtonCore = class CastButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tcastState: \"disconnected\",\n\t\tavailability: \"unavailable\",\n\t\tlabel: \"\"\n\t});\n\t#props = { ...CastButtonCore.defaultProps };\n\t#media = null;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, CastButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst { label } = this.#props;\n\t\tif (isFunction(label)) {\n\t\t\tconst customLabel = label(state);\n\t\t\tif (customLabel) return customLabel;\n\t\t} else if (label) return label;\n\t\tif (state.castState === \"connected\") return \"Stop casting\";\n\t\tif (state.castState === \"connecting\") return \"Connecting\";\n\t\treturn \"Start casting\";\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": this.#props.disabled ? \"true\" : void 0\n\t\t};\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tconst castSupported = !!globalThis.chrome;\n\t\tthis.state.patch({\n\t\t\tcastState: media.remotePlaybackState,\n\t\t\tavailability: castSupported ? media.remotePlaybackAvailability : \"unsupported\"\n\t\t});\n\t\tthis.state.patch({ label: this.getLabel(this.state.current) });\n\t\treturn this.state.current;\n\t}\n\tasync toggle(media) {\n\t\tif (this.#props.disabled) return;\n\t\tif (media.remotePlaybackAvailability !== \"available\") return;\n\t\ttry {\n\t\t\tawait media.toggleRemotePlayback();\n\t\t} catch {}\n\t}\n};\n//#endregion\nexport { CastButtonCore };\n\n//# sourceMappingURL=cast-button-core.js.map","//#region src/core/ui/cast-button/cast-button-data-attrs.ts\nconst CastButtonDataAttrs = {\n\tcastState: \"data-cast-state\",\n\tavailability: \"data-availability\"\n};\n//#endregion\nexport { CastButtonDataAttrs };\n\n//# sourceMappingURL=cast-button-data-attrs.js.map","import { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n//#region src/core/ui/fullscreen-button/fullscreen-button-core.ts\nvar FullscreenButtonCore = class FullscreenButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tfullscreen: false,\n\t\tavailability: \"available\",\n\t\tlabel: \"\"\n\t});\n\t#props = { ...FullscreenButtonCore.defaultProps };\n\t#media = null;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, FullscreenButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst { label } = this.#props;\n\t\tif (isFunction(label)) {\n\t\t\tconst customLabel = label(state);\n\t\t\tif (customLabel) return customLabel;\n\t\t} else if (label) return label;\n\t\treturn state.fullscreen ? \"Exit fullscreen\" : \"Enter fullscreen\";\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": this.#props.disabled ? \"true\" : void 0\n\t\t};\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tthis.state.patch({\n\t\t\tfullscreen: media.fullscreen,\n\t\t\tavailability: media.fullscreenAvailability\n\t\t});\n\t\tthis.state.patch({ label: this.getLabel(this.state.current) });\n\t\treturn this.state.current;\n\t}\n\tasync toggle(media) {\n\t\tif (this.#props.disabled) return;\n\t\tif (media.fullscreenAvailability !== \"available\") return;\n\t\ttry {\n\t\t\tif (media.fullscreen) await media.exitFullscreen();\n\t\t\telse await media.requestFullscreen();\n\t\t} catch {}\n\t}\n};\n//#endregion\nexport { FullscreenButtonCore };\n\n//# sourceMappingURL=fullscreen-button-core.js.map","//#region src/core/ui/fullscreen-button/fullscreen-button-data-attrs.ts\nconst FullscreenButtonDataAttrs = {\n\tfullscreen: \"data-fullscreen\",\n\tavailability: \"data-availability\"\n};\n//#endregion\nexport { FullscreenButtonDataAttrs };\n\n//# sourceMappingURL=fullscreen-button-data-attrs.js.map","import { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n//#region src/core/ui/pip-button/pip-button-core.ts\nvar PiPButtonCore = class PiPButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\tstate = createState({\n\t\tpip: false,\n\t\tavailability: \"available\",\n\t\tlabel: \"\"\n\t});\n\t#props = { ...PiPButtonCore.defaultProps };\n\t#media = null;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, PiPButtonCore.defaultProps);\n\t}\n\tgetLabel(state) {\n\t\tconst { label } = this.#props;\n\t\tif (isFunction(label)) {\n\t\t\tconst customLabel = label(state);\n\t\t\tif (customLabel) return customLabel;\n\t\t} else if (label) return label;\n\t\treturn state.pip ? \"Exit picture-in-picture\" : \"Enter picture-in-picture\";\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-disabled\": this.#props.disabled ? \"true\" : void 0\n\t\t};\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tthis.state.patch({\n\t\t\tpip: media.pip,\n\t\t\tavailability: media.pipAvailability\n\t\t});\n\t\tthis.state.patch({ label: this.getLabel(this.state.current) });\n\t\treturn this.state.current;\n\t}\n\tasync toggle(media) {\n\t\tif (this.#props.disabled) return;\n\t\tif (media.pipAvailability !== \"available\") return;\n\t\ttry {\n\t\t\tif (media.pip) await media.exitPictureInPicture();\n\t\t\telse await media.requestPictureInPicture();\n\t\t} catch {}\n\t}\n};\n//#endregion\nexport { PiPButtonCore };\n\n//# sourceMappingURL=pip-button-core.js.map","//#region src/core/ui/pip-button/pip-button-data-attrs.ts\nconst PiPButtonDataAttrs = {\n\tpip: \"data-pip\",\n\tavailability: \"data-availability\"\n};\n//#endregion\nexport { PiPButtonDataAttrs };\n\n//# sourceMappingURL=pip-button-data-attrs.js.map","//#region src/core/ui/poster/poster-core.ts\nvar PosterCore = class {\n\t#media = null;\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\treturn { visible: !this.#media.started };\n\t}\n};\n//#endregion\nexport { PosterCore };\n\n//# sourceMappingURL=poster-core.js.map","//#region src/core/ui/poster/poster-data-attrs.ts\nconst PosterDataAttrs = { visible: \"data-visible\" };\n//#endregion\nexport { PosterDataAttrs };\n\n//# sourceMappingURL=poster-data-attrs.js.map","import { BufferingIndicatorCore, BufferingIndicatorDataAttrs } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature, selectPlayback } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\n\nexport class BufferingIndicatorElement extends MediaElement {\n static readonly tagName = 'media-buffering-indicator';\n\n static override properties = {\n delay: { type: Number },\n } satisfies PropertyDeclarationMap<keyof BufferingIndicatorCore.Props>;\n\n delay = BufferingIndicatorCore.defaultProps.delay;\n\n readonly #core = new BufferingIndicatorCore();\n readonly #state = new PlayerController(this, playerContext, selectPlayback);\n\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#disconnect = new AbortController();\n\n this.#core.state.subscribe(() => this.requestUpdate(), {\n signal: this.#disconnect.signal,\n });\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(this.localName, this.#state.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.#state.value;\n\n if (!media) return;\n\n this.#core.update(media);\n applyStateDataAttrs(this, this.#core.state.current, BufferingIndicatorDataAttrs);\n }\n}\n","import { CaptionsButtonCore, CaptionsButtonDataAttrs, type MediaTextTrackState } from '@videojs/core';\nimport { selectTextTrack } from '@videojs/core/dom';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class CaptionsButtonElement extends MediaButtonElement<CaptionsButtonCore> {\n static readonly tagName = 'media-captions-button';\n\n protected readonly core = new CaptionsButtonCore();\n protected readonly stateAttrMap = CaptionsButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectTextTrack);\n protected override readonly hotkeyAction = 'toggleSubtitles';\n\n protected activate(state: MediaTextTrackState): void {\n this.core.toggle(state);\n }\n}\n","import { CastButtonCore, CastButtonDataAttrs, type MediaRemotePlaybackState } from '@videojs/core';\nimport { selectRemotePlayback } from '@videojs/core/dom';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class CastButtonElement extends MediaButtonElement<CastButtonCore> {\n static readonly tagName = 'media-cast-button';\n\n protected readonly core = new CastButtonCore();\n protected readonly stateAttrMap = CastButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectRemotePlayback);\n\n protected activate(state: MediaRemotePlaybackState): void {\n this.core.toggle(state);\n }\n}\n","import { FullscreenButtonCore, FullscreenButtonDataAttrs, type MediaFullscreenState } from '@videojs/core';\nimport { selectFullscreen } from '@videojs/core/dom';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class FullscreenButtonElement extends MediaButtonElement<FullscreenButtonCore> {\n static readonly tagName = 'media-fullscreen-button';\n\n protected readonly core = new FullscreenButtonCore();\n protected readonly stateAttrMap = FullscreenButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectFullscreen);\n protected override readonly hotkeyAction = 'toggleFullscreen';\n\n protected activate(state: MediaFullscreenState): void {\n this.core.toggle(state);\n }\n}\n","import { type MediaPictureInPictureState, PiPButtonCore, PiPButtonDataAttrs } from '@videojs/core';\nimport { selectPiP } from '@videojs/core/dom';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class PiPButtonElement extends MediaButtonElement<PiPButtonCore> {\n static readonly tagName = 'media-pip-button';\n\n protected readonly core = new PiPButtonCore();\n protected readonly stateAttrMap = PiPButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectPiP);\n protected override readonly hotkeyAction = 'togglePictureInPicture';\n\n protected activate(state: MediaPictureInPictureState): void {\n this.core.toggle(state);\n }\n}\n","import type { InferComponentState, InferMediaState, MediaUIComponent, StateAttrMap } from '@videojs/core';\nimport { applyStateDataAttrs, logMissingFeature } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport type { PlayerController } from '../player/player-controller';\nimport { MediaElement } from './media-element';\n\n/** Abstract base for HTML custom elements that display media state with data attributes. */\nexport abstract class MediaUIElement<Core extends MediaUIComponent> extends MediaElement {\n protected abstract readonly core: Core;\n protected abstract readonly stateAttrMap: StateAttrMap<InferComponentState<Core>>;\n protected abstract readonly mediaState: PlayerController<any, InferMediaState<Core> | undefined>;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (__DEV__ && !this.mediaState.value && this.mediaState.displayName) {\n logMissingFeature(this.localName, this.mediaState.displayName);\n }\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n const media = this.mediaState.value;\n\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n applyStateDataAttrs(this, state, this.stateAttrMap);\n }\n}\n","import { PosterCore, PosterDataAttrs } from '@videojs/core';\nimport { selectPlayback } from '@videojs/core/dom';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaUIElement } from '../media-ui-element';\n\nexport class PosterElement extends MediaUIElement<PosterCore> {\n static readonly tagName = 'media-poster';\n\n protected readonly core = new PosterCore();\n protected readonly stateAttrMap = PosterDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectPlayback);\n}\n","import { videoFeatures } from '@videojs/core/dom';\nimport { MediaContainerElement } from '../../media/container-element';\nimport { createPlayer } from '../../player/create-player';\nimport { MediaElement } from '../../ui/media-element';\nimport { safeDefine } from '../safe-define';\n\nconst { ProviderMixin } = createPlayer({\n features: videoFeatures,\n});\n\nexport class VideoPlayerElement extends ProviderMixin(MediaElement) {\n static readonly tagName = 'video-player';\n}\n\n// Provider must be defined before consumer for context handshake during upgrade.\nsafeDefine(VideoPlayerElement);\nsafeDefine(MediaContainerElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [VideoPlayerElement.tagName]: VideoPlayerElement;\n }\n}\n"],"mappings":"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"}
|