@videojs/html 10.0.0-beta.6 → 10.0.0-beta.8
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/audio-minimal.dev.d.ts +1 -0
- package/cdn/audio-minimal.dev.js +9 -5336
- package/cdn/audio-minimal.dev.js.map +1 -1
- package/cdn/audio-minimal.js +1 -24
- package/cdn/audio-minimal.js.map +1 -1
- package/cdn/audio.dev.d.ts +1 -0
- package/cdn/audio.dev.js +9 -5336
- package/cdn/audio.dev.js.map +1 -1
- package/cdn/audio.js +1 -24
- package/cdn/audio.js.map +1 -1
- package/cdn/background.dev.d.ts +1 -0
- package/cdn/background.dev.js +112 -2025
- package/cdn/background.dev.js.map +1 -1
- package/cdn/background.js +1 -18
- package/cdn/background.js.map +1 -1
- package/cdn/context-C_e06fGU.js +13 -0
- package/cdn/context-C_e06fGU.js.map +1 -0
- package/cdn/context-DTY0nOpS.js +98 -0
- package/cdn/context-DTY0nOpS.js.map +1 -0
- package/cdn/create-player-Dv7K1Ezk.js +3214 -0
- package/cdn/create-player-Dv7K1Ezk.js.map +1 -0
- package/cdn/create-player-QjiNZlh7.js +7 -0
- package/cdn/create-player-QjiNZlh7.js.map +1 -0
- package/cdn/default-GgKND7a8.js +2 -0
- package/cdn/default-GgKND7a8.js.map +1 -0
- package/cdn/default-cLso8BHO.js +28 -0
- package/cdn/default-cLso8BHO.js.map +1 -0
- package/cdn/listen-BXAYCbZA.js +9 -0
- package/cdn/listen-BXAYCbZA.js.map +1 -0
- package/cdn/listen-DX5vU4s4.js +2 -0
- package/cdn/listen-DX5vU4s4.js.map +1 -0
- package/cdn/media/dash-video.dev.d.ts +1 -0
- package/cdn/media/dash-video.dev.js +39165 -0
- package/cdn/media/dash-video.dev.js.map +1 -0
- package/cdn/media/dash-video.js +21 -0
- package/cdn/media/dash-video.js.map +1 -0
- package/cdn/media/hls-video.dev.d.ts +1 -0
- package/cdn/media/hls-video.dev.js +6 -378
- package/cdn/media/hls-video.dev.js.map +1 -1
- package/cdn/media/hls-video.js +21 -65
- package/cdn/media/hls-video.js.map +1 -1
- package/cdn/media/simple-hls-video.dev.d.ts +1 -0
- package/cdn/media/simple-hls-video.dev.js +6 -377
- package/cdn/media/simple-hls-video.dev.js.map +1 -1
- package/cdn/media/simple-hls-video.js +1 -45
- package/cdn/media/simple-hls-video.js.map +1 -1
- package/cdn/media-attach-mixin-ChyNp2eK.js +44 -0
- package/cdn/media-attach-mixin-ChyNp2eK.js.map +1 -0
- package/cdn/media-attach-mixin-tFNcHnvo.js +2 -0
- package/cdn/media-attach-mixin-tFNcHnvo.js.map +1 -0
- package/cdn/minimal-BJfleQcQ.js +2 -0
- package/cdn/minimal-BJfleQcQ.js.map +1 -0
- package/cdn/minimal-DBMdC_0I.js +28 -0
- package/cdn/minimal-DBMdC_0I.js.map +1 -0
- package/cdn/player-CztIlNio.js +2 -0
- package/cdn/player-CztIlNio.js.map +1 -0
- package/cdn/player-Dvj38jlr.js +15 -0
- package/cdn/player-Dvj38jlr.js.map +1 -0
- package/cdn/poster-C4WHg3BH.js +2 -0
- package/cdn/poster-C4WHg3BH.js.map +1 -0
- package/cdn/poster-O0SI05LC.js +195 -0
- package/cdn/poster-O0SI05LC.js.map +1 -0
- package/cdn/predicate-BG-dj_kF.js +26 -0
- package/cdn/predicate-BG-dj_kF.js.map +1 -0
- package/cdn/predicate-Y9jDHLpX.js +2 -0
- package/cdn/predicate-Y9jDHLpX.js.map +1 -0
- package/cdn/proxy-2oO2ph3m.js +47 -0
- package/cdn/proxy-2oO2ph3m.js.map +1 -0
- package/cdn/proxy-6KS6wy69.js +2 -0
- package/cdn/proxy-6KS6wy69.js.map +1 -0
- package/cdn/proxy-XzDf9gyk.js +66 -0
- package/cdn/proxy-XzDf9gyk.js.map +1 -0
- package/cdn/proxy-dR7IDk37.js +349 -0
- package/cdn/proxy-dR7IDk37.js.map +1 -0
- package/cdn/safe-define-B8lHgj_K.js +9 -0
- package/cdn/safe-define-B8lHgj_K.js.map +1 -0
- package/cdn/safe-define-GrHW3P9e.js +2 -0
- package/cdn/safe-define-GrHW3P9e.js.map +1 -0
- package/cdn/video-minimal.dev.d.ts +1 -0
- package/cdn/video-minimal.dev.js +16 -5650
- package/cdn/video-minimal.dev.js.map +1 -1
- package/cdn/video-minimal.js +1 -24
- package/cdn/video-minimal.js.map +1 -1
- package/cdn/video.dev.d.ts +1 -0
- package/cdn/video.dev.js +24 -5709
- package/cdn/video.dev.js.map +1 -1
- package/cdn/video.js +1 -24
- package/cdn/video.js.map +1 -1
- package/cdn/volume-slider-BqzTytgB.js +8 -0
- package/cdn/volume-slider-BqzTytgB.js.map +1 -0
- package/cdn/volume-slider-CfhOO9RM.js +2453 -0
- package/cdn/volume-slider-CfhOO9RM.js.map +1 -0
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/background/skin.js +6 -0
- package/dist/default/_virtual/inline-css_src/define/background/skin.js.map +1 -0
- package/dist/default/_virtual/inline-css_src/define/base.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/base.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/shared.js +6 -0
- package/dist/default/_virtual/inline-css_src/define/shared.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 +22 -20
- package/dist/default/define/audio/minimal-skin.js +1 -1
- package/dist/default/define/audio/minimal-skin.js.map +1 -1
- package/dist/default/define/audio/minimal-skin.tailwind.js +1 -1
- package/dist/default/define/audio/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/audio/skin.css +19 -22
- package/dist/default/define/audio/skin.js +1 -1
- package/dist/default/define/audio/skin.js.map +1 -1
- package/dist/default/define/audio/skin.tailwind.js +3 -4
- package/dist/default/define/audio/skin.tailwind.js.map +1 -1
- package/dist/default/define/background/skin.css +1 -1
- package/dist/default/define/background/skin.js +11 -1
- package/dist/default/define/background/skin.js.map +1 -1
- package/dist/default/define/base.css +7 -7
- package/dist/default/define/media/dash-video.js +14 -0
- package/dist/default/define/media/dash-video.js.map +1 -0
- package/dist/default/define/shared.css +6 -0
- package/dist/default/define/skin-mixin.js +8 -3
- package/dist/default/define/skin-mixin.js.map +1 -1
- package/dist/default/define/video/minimal-skin.css +101 -71
- package/dist/default/define/video/minimal-skin.js +2 -1
- package/dist/default/define/video/minimal-skin.js.map +1 -1
- package/dist/default/define/video/minimal-skin.tailwind.js +4 -2
- package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/video/skin.css +98 -72
- package/dist/default/define/video/skin.js +2 -1
- package/dist/default/define/video/skin.js.map +1 -1
- package/dist/default/define/video/skin.tailwind.js +4 -2
- package/dist/default/define/video/skin.tailwind.js.map +1 -1
- package/dist/default/icons/dist/render/default/index.js +2 -1
- package/dist/default/icons/dist/render/default/index.js.map +1 -1
- package/dist/default/icons/dist/render/minimal/index.js +2 -1
- package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
- package/dist/default/index.js +3 -2
- package/dist/default/media/background-video/index.js +5 -1
- package/dist/default/media/background-video/index.js.map +1 -1
- package/dist/default/media/container-element.js +5 -2
- package/dist/default/media/container-element.js.map +1 -1
- package/dist/default/media/dash-video/index.js +26 -0
- package/dist/default/media/dash-video/index.js.map +1 -0
- package/dist/default/media/hls-video/index.js +2 -1
- package/dist/default/media/hls-video/index.js.map +1 -1
- package/dist/default/media/simple-hls-video/index.js +2 -1
- package/dist/default/media/simple-hls-video/index.js.map +1 -1
- package/dist/default/player/context.js +6 -2
- package/dist/default/player/context.js.map +1 -1
- package/dist/default/player/create-player.js +11 -3
- package/dist/default/player/create-player.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +6 -5
- package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/controls.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/error.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/error.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js +16 -0
- package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +6 -5
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js +6 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +16 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/time.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -4
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +5 -0
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
- package/dist/default/store/container-mixin.js +16 -72
- package/dist/default/store/container-mixin.js.map +1 -1
- package/dist/default/store/media-attach-mixin.js +45 -0
- package/dist/default/store/media-attach-mixin.js.map +1 -0
- package/dist/default/store/provider-mixin.js +99 -9
- package/dist/default/store/provider-mixin.js.map +1 -1
- package/dist/default/ui/popover/popover-element.js +54 -3
- package/dist/default/ui/popover/popover-element.js.map +1 -1
- package/dist/default/ui/time-slider/time-slider-element.js +1 -1
- package/dist/default/ui/time-slider/time-slider-element.js.map +1 -1
- package/dist/default/ui/tooltip/tooltip-element.js +53 -3
- package/dist/default/ui/tooltip/tooltip-element.js.map +1 -1
- package/dist/default/ui/volume-slider/volume-slider-element.js +3 -3
- package/dist/default/ui/volume-slider/volume-slider-element.js.map +1 -1
- 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/background/skin.js +6 -0
- package/dist/dev/_virtual/inline-css_src/define/background/skin.js.map +1 -0
- package/dist/dev/_virtual/inline-css_src/define/base.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/base.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/shared.js +6 -0
- package/dist/dev/_virtual/inline-css_src/define/shared.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 +22 -20
- package/dist/dev/define/audio/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/audio/minimal-skin.js +2 -0
- package/dist/dev/define/audio/minimal-skin.js.map +1 -1
- package/dist/dev/define/audio/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/audio/minimal-skin.tailwind.js +3 -1
- package/dist/dev/define/audio/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/audio/skin.css +19 -22
- package/dist/dev/define/audio/skin.d.ts.map +1 -1
- package/dist/dev/define/audio/skin.js +2 -0
- package/dist/dev/define/audio/skin.js.map +1 -1
- package/dist/dev/define/audio/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/audio/skin.tailwind.js +5 -4
- package/dist/dev/define/audio/skin.tailwind.js.map +1 -1
- package/dist/dev/define/background/skin.css +1 -1
- package/dist/dev/define/background/skin.d.ts.map +1 -1
- package/dist/dev/define/background/skin.js +13 -1
- package/dist/dev/define/background/skin.js.map +1 -1
- package/dist/dev/define/base.css +7 -7
- package/dist/dev/define/media/dash-video.d.ts +14 -0
- package/dist/dev/define/media/dash-video.d.ts.map +1 -0
- package/dist/dev/define/media/dash-video.js +14 -0
- package/dist/dev/define/media/dash-video.js.map +1 -0
- package/dist/dev/define/shared.css +6 -0
- package/dist/dev/define/skin-mixin.d.ts.map +1 -1
- package/dist/dev/define/skin-mixin.js +8 -3
- package/dist/dev/define/skin-mixin.js.map +1 -1
- package/dist/dev/define/video/minimal-skin.css +101 -71
- package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/define/video/minimal-skin.js +10 -2
- 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 +13 -4
- package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/video/skin.css +98 -72
- package/dist/dev/define/video/skin.d.ts.map +1 -1
- package/dist/dev/define/video/skin.js +9 -1
- package/dist/dev/define/video/skin.js.map +1 -1
- package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/define/video/skin.tailwind.js +13 -4
- package/dist/dev/define/video/skin.tailwind.js.map +1 -1
- package/dist/dev/icons/dist/render/default/index.js +2 -1
- package/dist/dev/icons/dist/render/default/index.js.map +1 -1
- package/dist/dev/icons/dist/render/minimal/index.js +2 -1
- package/dist/dev/icons/dist/render/minimal/index.js.map +1 -1
- package/dist/dev/index.d.ts +5 -4
- package/dist/dev/index.js +3 -2
- package/dist/dev/media/background-video/index.d.ts +8 -1
- package/dist/dev/media/background-video/index.d.ts.map +1 -1
- package/dist/dev/media/background-video/index.js +5 -1
- package/dist/dev/media/background-video/index.js.map +1 -1
- package/dist/dev/media/container-element.js +5 -2
- package/dist/dev/media/container-element.js.map +1 -1
- package/dist/dev/media/dash-video/index.d.ts +13 -0
- package/dist/dev/media/dash-video/index.d.ts.map +1 -0
- package/dist/dev/media/dash-video/index.js +26 -0
- package/dist/dev/media/dash-video/index.js.map +1 -0
- package/dist/dev/media/hls-video/index.d.ts +2 -1
- package/dist/dev/media/hls-video/index.d.ts.map +1 -1
- package/dist/dev/media/hls-video/index.js +2 -1
- package/dist/dev/media/hls-video/index.js.map +1 -1
- package/dist/dev/media/simple-hls-video/index.d.ts +2 -1
- package/dist/dev/media/simple-hls-video/index.d.ts.map +1 -1
- package/dist/dev/media/simple-hls-video/index.js +2 -1
- package/dist/dev/media/simple-hls-video/index.js.map +1 -1
- package/dist/dev/player/context.d.ts +16 -2
- package/dist/dev/player/context.d.ts.map +1 -1
- package/dist/dev/player/context.js +6 -2
- package/dist/dev/player/context.js.map +1 -1
- package/dist/dev/player/create-player.d.ts +1 -1
- package/dist/dev/player/create-player.js +11 -3
- package/dist/dev/player/create-player.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +6 -5
- package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/controls.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/controls.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/error.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/error.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/poster.js +16 -0
- package/dist/dev/skins/dist/default/default/tailwind/components/poster.js.map +1 -0
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +6 -5
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/controls.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js +6 -0
- package/dist/dev/skins/dist/default/minimal/tailwind/components/playback-rate.js.map +1 -0
- package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js +16 -0
- package/dist/dev/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -0
- package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/time.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -4
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.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 +10 -5
- package/dist/dev/store/container-mixin.d.ts.map +1 -1
- package/dist/dev/store/container-mixin.js +16 -72
- package/dist/dev/store/container-mixin.js.map +1 -1
- package/dist/dev/store/media-attach-mixin.d.ts +19 -0
- package/dist/dev/store/media-attach-mixin.d.ts.map +1 -0
- package/dist/dev/store/media-attach-mixin.js +45 -0
- package/dist/dev/store/media-attach-mixin.js.map +1 -0
- package/dist/dev/store/provider-mixin.d.ts +19 -6
- package/dist/dev/store/provider-mixin.d.ts.map +1 -1
- package/dist/dev/store/provider-mixin.js +99 -9
- package/dist/dev/store/provider-mixin.js.map +1 -1
- package/dist/dev/ui/popover/popover-element.d.ts.map +1 -1
- package/dist/dev/ui/popover/popover-element.js +54 -3
- package/dist/dev/ui/popover/popover-element.js.map +1 -1
- package/dist/dev/ui/time-slider/time-slider-element.js +1 -1
- package/dist/dev/ui/time-slider/time-slider-element.js.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-element.d.ts.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-element.js +53 -3
- package/dist/dev/ui/tooltip/tooltip-element.js.map +1 -1
- package/dist/dev/ui/volume-slider/volume-slider-element.js +3 -3
- package/dist/dev/ui/volume-slider/volume-slider-element.js.map +1 -1
- package/package.json +21 -10
- package/cdn/audio-minimal.css +0 -1
- package/cdn/audio.css +0 -1
- package/cdn/background.css +0 -1
- package/cdn/video-minimal.css +0 -1
- package/cdn/video.css +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{B as e,C as t,D as n,E as r,F as i,H as a,M as o,N as s,P as c,S as l,T as u,U as d,V as f,_ as p,a as m,b as ee,c as h,d as g,f as te,g as ne,h as re,i as ie,j as ae,l as _,m as oe,n as v,p as se,r as y,s as b,u as x,v as S,w as ce,x as le,y as C,z as w}from"./create-player-QjiNZlh7.js";import{i as T,o as ue,t as E}from"./predicate-Y9jDHLpX.js";import{i as de,r as D}from"./context-C_e06fGU.js";import{t as O}from"./safe-define-GrHW3P9e.js";function k(e,t){let n={...t};for(let t in e)ue(e[t])||(n[t]=e[t]);return n}function A(e){let t=e.closest(`[dir]`)?.getAttribute(`dir`);return t?t.toLowerCase()===`rtl`:getComputedStyle(e).direction===`rtl`}var fe=`video-player{display:contents}video-player video,video-player [slot=poster]{width:100%;height:100%;display:block}video-player video::-webkit-media-text-track-container{transition:translate var(--media-caption-track-duration,0) ease-out;transition-delay:var(--media-caption-track-delay,0);translate:0 var(--media-caption-track-y,0);z-index:1;font-family:inherit;scale:.98}`,pe=`media-tooltip-group{display:contents}:host{display:grid}.media-popover--volume:has(media-volume-slider[data-availability=unsupported]){display:none}`;const j=`__media-styles`;function me(){if(document.getElementById(j))return;let e=document.createElement(`style`);e.id=j,e.textContent=fe,document.head.appendChild(e)}const M=new CSSStyleSheet;M.replaceSync(pe);function he(e){class t extends e{static{this.shadowRootOptions={mode:`open`}}constructor(...e){if(super(...e),me(),!this.shadowRoot){let e=this.constructor;this.attachShadow(e.shadowRootOptions);let t=[M];e.styles&&t.push(e.styles),this.shadowRoot.adoptedStyleSheets=t,e.getTemplateHTML&&(this.shadowRoot.innerHTML=e.getTemplateHTML())}}}return t}function ge(e){let t=new CSSStyleSheet;return t.replaceSync(e),t}O(ie);function N(e){return{transitionStarting:e===`starting`,transitionEnding:e===`ending`}}var _e=class e{static defaultProps={delay:500};state=d({visible:!1});#e={...e.defaultProps};#t=null;setProps(t){this.#e=k(t,e.defaultProps)}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.#t!==null&&(clearTimeout(this.#t),this.#t=null),this.state.patch({visible:!1}))}};const ve={visible:`data-visible`};var ye=class e{static defaultProps={label:``,disabled:!1};#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}getLabel(e){let{label:t}=this.#e;if(E(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;return{subtitlesShowing:e.subtitlesShowing,availability:e.textTrackList.some(e=>e.kind===`captions`||e.kind===`subtitles`)?`available`:`unavailable`}}toggle(e){this.#e.disabled||e.toggleSubtitles()}};const be={subtitlesShowing:`data-active`,availability:`data-availability`};var xe=class{#e=null;setMedia(e){this.#e=e}getState(){let e=this.#e;return{visible:e.controlsVisible,userActive:e.userActive}}};const Se={visible:`data-visible`,userActive:`data-user-active`};var Ce=class e{static defaultProps={label:``,disabled:!1};#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}getLabel(e){let{label:t}=this.#e;if(E(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{fullscreen:e.fullscreen,availability:e.fullscreenAvailability}}async toggle(e){if(!this.#e.disabled&&e.fullscreenAvailability===`available`)try{e.fullscreen?await e.exitFullscreen():await e.requestFullscreen()}catch{}}};const we={fullscreen:`data-fullscreen`,availability:`data-availability`};var Te=class e{static defaultProps={label:``,disabled:!1};#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}getLabel(e){let{label:t}=this.#e;if(E(t)){let n=t(e);if(n)return n}else if(t)return t;return e.muted?`Unmute`:`Mute`}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{muted:e.muted||e.volume===0,volumeLevel:Ee(e)}}toggle(e){this.#e.disabled||e.toggleMuted()}};function Ee(e){return e.muted||e.volume===0?`off`:e.volume<.5?`low`:e.volume<.75?`medium`:`high`}const De={muted:`data-muted`,volumeLevel:`data-volume-level`};var Oe=class e{static defaultProps={label:``,disabled:!1};#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}getLabel(e){let{label:t}=this.#e;if(E(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{pip:e.pip,availability:e.pipAvailability}}async toggle(e){if(!this.#e.disabled&&e.pipAvailability===`available`)try{e.pip?await e.exitPictureInPicture():await e.requestPictureInPicture()}catch{}}};const ke={pip:`data-pip`,availability:`data-availability`};var Ae=class e{static defaultProps={label:``,disabled:!1};#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}getLabel(e){let{label:t}=this.#e;if(E(t)){let n=t(e);if(n)return n}else if(t)return t;return e.ended?`Replay`:e.paused?`Play`:`Pause`}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{paused:e.paused,ended:e.ended,started:e.started}}async toggle(e){if(!this.#e.disabled){if(e.paused||e.ended)return e.play();e.pause()}}};const je={paused:`data-paused`,ended:`data-ended`,started:`data-started`};var Me=class e{static defaultProps={label:``,disabled:!1};#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}getLabel(e){let{label:t}=this.#e;if(E(t)){let n=t(e);if(n)return n}else if(t)return t;return`Playback rate ${e.rate}`}getAttrs(e){return{"aria-label":this.getLabel(e),"aria-disabled":this.#e.disabled?`true`:void 0}}setMedia(e){this.#t=e}getState(){return{rate:this.#t.playbackRate}}cycle(e){if(this.#e.disabled)return;let{playbackRates:t,playbackRate:n}=e;if(t.length===0)return;let r=t.indexOf(n),i=r===-1?t.find(e=>e>n)??t[0]:t[(r+1)%t.length];e.setPlaybackRate(i)}};const Ne={rate:`data-rate`};var P=class e{static defaultProps={side:`top`,align:`center`,modal:!1,closeOnEscape:!0,closeOnOutsideClick:!0,open:!1,defaultOpen:!1,openOnHover:!1,delay:300,closeDelay:0};#e={...e.defaultProps};constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}#t=null;setInput(e){this.#t=e}getState(){let e=this.#t;return{open:e.active,status:e.status,side:this.#e.side,align:this.#e.align,modal:this.#e.modal,...N(e.status)}}getTriggerAttrs(e,t){return{"aria-expanded":e.open?`true`:`false`,"aria-haspopup":`dialog`,"aria-controls":t}}getPopupAttrs(e){return{popover:`manual`,role:`dialog`,"aria-modal":e.modal===!0?`true`:void 0}}};const Pe={open:`data-open`,side:`data-side`,align:`data-align`,transitionStarting:`data-starting-style`,transitionEnding:`data-ending-style`};var Fe=class{#e=null;setMedia(e){this.#e=e}getState(){return{visible:!this.#e.started}}};const Ie={visible:`data-visible`};var F=class e{static defaultProps={seconds:30,label:``,disabled:!1};#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}getLabel(e){let{label:t}=this.#e;if(E(t)){let n=t(e);if(n)return n}else if(t)return t;let n=Math.abs(this.#e.seconds);return e.direction===`backward`?`Seek backward ${n} seconds`:`Seek forward ${n} seconds`}getAttrs(e){return{"aria-label":this.getLabel(e),"aria-disabled":this.#e.disabled?`true`:void 0}}setMedia(e){this.#t=e}getState(){return{seeking:this.#t.seeking,direction:this.#e.seconds<0?`backward`:`forward`}}async seek(e){this.#e.disabled||await e.seek(e.currentTime+this.#e.seconds)}};const Le={seeking:`data-seeking`,direction:`data-direction`};var I=class e{static defaultProps={label:``,step:1,largeStep:10,orientation:`horizontal`,disabled:!1,thumbAlignment:`center`,value:0,min:0,max:100};static defaultInput={pointerPercent:0,dragPercent:0,dragging:!1,pointing:!1,focused:!1};#e={...e.defaultProps};#t={...e.defaultInput};get props(){return this.#e}get input(){return this.#t}constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}setInput(e){this.#t=e}getSliderState(e){let{orientation:t,disabled:n,thumbAlignment:r}=this.#e,{pointerPercent:i,dragging:a,pointing:o,focused:s}=this.#t;return{value:e,fillPercent:this.percentFromValue(e),pointerPercent:i,dragging:a,pointing:o,interactive:a||o||s,orientation:t,disabled:n,thumbAlignment:r}}getLabel(e){let{label:t}=this.#e;if(E(t)){let n=t(e);if(n)return n}else if(t)return t;return``}getAttrs(e){return{role:`slider`,tabIndex:e.disabled?-1:0,autoComplete:`off`,"aria-label":this.getLabel(e),"aria-valuemin":this.#e.min,"aria-valuemax":this.#e.max,"aria-valuenow":e.value,"aria-orientation":e.orientation,"aria-disabled":e.disabled?`true`:void 0}}valueFromPercent(e){let{min:t,max:n,step:r}=this.#e;return ee(C(t+e/100*(n-t),t,n),r,t)}rawValueFromPercent(e){let{min:t,max:n}=this.#e;return C(t+e/100*(n-t),t,n)}percentFromValue(e){let{min:t,max:n}=this.#e;return n===t?0:(e-t)/(n-t)*100}getStepPercent(){let{step:e,min:t,max:n}=this.#e,r=n-t;return r>0?e/r*100:0}getLargeStepPercent(){let{largeStep:e,min:t,max:n}=this.#e,r=n-t;return r>0?e/r*100:0}adjustPercentForAlignment(e,t,n){if(this.#e.thumbAlignment===`center`||n===0)return e;let r=t/n*100/2,i=r,a=100-r;return i+e/100*(a-i)}};const L={dragging:`data-dragging`,pointing:`data-pointing`,interactive:`data-interactive`,orientation:`data-orientation`,disabled:`data-disabled`},R={loading:`data-loading`,error:`data-error`,hidden:`data-hidden`};function Re(e,t){let n=e.trim().split(`#`),r=n[0]??``,i=n[1],a=t?new URL(r,t).href:r;if(!i)return{url:a};let o=i.indexOf(`=`);if(o===-1)return{url:a};let s=i.slice(0,o),c=i.slice(o+1).split(`,`).map(Number),l={};for(let e=0;e<s.length;e++){let t=s[e],n=c[e];t&&T(n)&&!Number.isNaN(n)&&(l[t]=n)}let u={url:a};return T(l.w)&&(u.width=l.w),T(l.h)&&(u.height=l.h),T(l.x)&&T(l.y)&&(u.coords={x:l.x,y:l.y}),u}function ze(e,t){let n=[];for(let r of e){let e=Re(r.text,t),i={url:e.url,startTime:r.startTime,endTime:r.endTime};e.width&&(i.width=e.width),e.height&&(i.height=e.height),e.coords&&(i.coords=e.coords),n.push(i)}return n}const z=[{singular:`hour`,plural:`hours`},{singular:`minute`,plural:`minutes`},{singular:`second`,plural:`seconds`}];function B(e){return T(e)&&Number.isFinite(e)}function V(e,t){return`${e} ${e===1?z[t]?.singular:z[t]?.plural}`}function H(e,t){if(!B(e))return`0:00`;let n=e<0,r=Math.abs(e),i=Math.floor(r/3600),a=Math.floor(r/60%60),o=Math.floor(r%60),s=t?Math.abs(t):0,c=Math.floor(s/3600),l=Math.floor(s/60%60),u=i>0||c>0,d=u||l>=10,f=u?`${i}:`:``,p=`${d&&a<10?`0`:``}${a}:`,m=o<10?`0${o}`:`${o}`;return`${n?`-`:``}${f}${p}${m}`}function U(e){if(!B(e))return``;let t=e<0,n=Math.abs(e),r=Math.floor(n/3600),i=Math.floor(n/60%60),a=Math.floor(n%60);return n===0?`${V(0,2)}${t?` remaining`:``}`:`${[r,i,a].map((e,t)=>e>0?V(e,t):null).filter(Boolean).join(`, `)}${t?` remaining`:``}`}function Be(e){if(!B(e))return`PT0S`;let t=Math.abs(e),n=Math.floor(t/3600),r=Math.floor(t/60%60),i=Math.floor(t%60),a=`PT`;return n>0&&(a+=`${n}H`),r>0&&(a+=`${r}M`),(i>0||a===`PT`)&&(a+=`${i}S`),a}const Ve={current:`Current time`,duration:`Duration`,remaining:`Remaining`};var W=class e{static defaultProps={type:`current`,negativeSign:`-`,label:``};#e={...e.defaultProps};#t=null;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}setMedia(e){this.#t=e}#n(){let e=this.#t,{type:t}=this.#e;switch(t){case`current`:return e.currentTime;case`duration`:return e.duration;case`remaining`:return e.currentTime-e.duration;default:return 0}}#r(){let e=this.#t,t=this.#n();return H(Math.abs(t),e.duration)}#i(){let{type:e}=this.#e,t=this.#n();return U(e===`remaining`?t<0?t:-Math.abs(t):t)}#a(){let e=this.#n();return Be(Math.abs(e))}getLabel(e){let{label:t}=this.#e;if(E(t)){let n=t(e);if(n)return n}else if(t)return t;return Ve[this.#e.type]}getAttrs(e){return{"aria-label":this.getLabel(e),"aria-valuetext":e.phrase}}getState(){let e=this.#n();return{type:this.#e.type,seconds:e,negative:this.#e.type===`remaining`&&e<0,text:this.#r(),phrase:this.#i(),datetime:this.#a()}}};const He={type:`data-type`};var G=class e extends I{static defaultProps={...I.defaultProps,label:`Seek`,commitThrottle:100};#e={...e.defaultProps};#t=null;constructor(e){super(),e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps),super.setProps({...t,min:0})}setMedia(e){this.#t=e}getState(){let{duration:e,currentTime:t,seeking:n,buffered:r}=this.#t,{dragging:i,dragPercent:a}=this.input;super.setProps({...this.#e,min:0,max:e});let o=i?C(a/100*e,0,e):t,s=super.getSliderState(o),c=r.length>0?r[r.length-1][1]:0,l=e>0?c/e*100:0;return{...s,currentTime:t,duration:e,seeking:n,bufferPercent:l}}getLabel(e){return super.getLabel(e)||`Seek`}getAttrs(e){let t=super.getAttrs(e),n=U(e.value),r=U(e.duration),i=r?`${n} of ${r}`:n;return{...t,"aria-valuetext":i}}};const Ue={...L,seeking:`data-seeking`};var K=class e{static defaultProps={side:`top`,align:`center`,open:!1,defaultOpen:!1,delay:600,closeDelay:0,disableHoverablePopup:!0,disabled:!1};#e={...e.defaultProps};constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}#t=null;setInput(e){this.#t=e}getState(){let e=this.#t;return{open:e.active,status:e.status,side:this.#e.side,align:this.#e.align,...N(e.status)}}getTriggerAttrs(e,t){return{"aria-describedby":e.open?t:void 0}}getPopupAttrs(e){return{popover:`manual`,role:`tooltip`}}};const q={sideOffset:`--media-tooltip-side-offset`,alignOffset:`--media-tooltip-align-offset`,anchorWidth:`--media-tooltip-anchor-width`,anchorHeight:`--media-tooltip-anchor-height`,availableWidth:`--media-tooltip-available-width`,availableHeight:`--media-tooltip-available-height`},We={open:`data-open`,side:`data-side`,align:`data-align`,transitionStarting:`data-starting-style`,transitionEnding:`data-ending-style`};var J=class e{static defaultProps={delay:600,closeDelay:0,timeout:400};#e={...e.defaultProps};#t=0;#n=!1;constructor(e){e&&this.setProps(e)}setProps(t){this.#e=k(t,e.defaultProps)}get delay(){return this.#e.delay}get closeDelay(){return this.#e.closeDelay}shouldSkipDelay(){return this.#n?!0:Date.now()-this.#t<this.#e.timeout}notifyOpen(){this.#n=!0}notifyClose(){this.#n=!1,this.#t=Date.now()}},Y=class e extends I{static defaultProps={...I.defaultProps,label:`Volume`};#e=null;constructor(e){super(),e&&this.setProps(e)}setProps(t){super.setProps(k(t,e.defaultProps))}setMedia(e){this.#e=e}getState(){let e=this.#e,{volume:t,muted:n}=e,r=n||t===0,{dragging:i,dragPercent:a}=this.input,o=t*100,s=i?this.valueFromPercent(a):o,c=super.getSliderState(s);return{...c,fillPercent:r?0:c.fillPercent,volume:t,muted:r,availability:e.volumeAvailability}}getLabel(e){return super.getLabel(e)||`Volume`}getAttrs(e){let t=super.getAttrs(e),n=`${Math.round(e.value)} percent${e.muted?`, muted`:``}`;return{...t,"aria-valuetext":n}}};const X={...L,availability:`data-availability`};var Z=class extends m{constructor(...e){super(...e),this.disabled=!1,this.label=``}static{this.properties={label:{type:String},disabled:{type:Boolean}}}#e=null;connectedCallback(){super.connectedCallback(),this.#e=new AbortController;let e=r({onActivate:()=>this.activate(this.mediaState.value),isDisabled:()=>this.disabled||!this.mediaState.value});x(this,e,{signal:this.#e.signal})}disconnectedCallback(){super.disconnectedCallback(),this.#e?.abort(),this.#e=null}willUpdate(e){super.willUpdate(e),this.core.setProps?.(this)}update(e){super.update(e);let t=this.mediaState.value;if(!t)return;this.core.setMedia(t);let n=this.core.getState();x(this,this.core.getAttrs?.(n)??{}),_(this,n,this.stateAttrMap)}},Q=class extends m{update(e){super.update(e);let t=this.consumer.value;t&&_(this,t.state,t.stateAttrMap)}};O(class extends Z{constructor(...e){super(...e),this.core=new Te,this.stateAttrMap=De,this.mediaState=new v(this,D,i)}static{this.tagName=`media-mute-button`}activate(e){this.core.toggle(e)}}),O(class extends Z{constructor(...e){super(...e),this.core=new Ae,this.stateAttrMap=je,this.mediaState=new v(this,D,ae)}static{this.tagName=`media-play-button`}activate(e){this.core.toggle(e)}}),O(class extends Z{constructor(...e){super(...e),this.core=new Me,this.stateAttrMap=Ne,this.mediaState=new v(this,D,o)}static{this.tagName=`media-playback-rate-button`}activate(e){this.core.cycle(e)}}),O(class extends m{constructor(...e){super(...e),this.open=P.defaultProps.open,this.defaultOpen=P.defaultProps.defaultOpen,this.side=P.defaultProps.side,this.align=P.defaultProps.align,this.modal=P.defaultProps.modal,this.closeOnEscape=P.defaultProps.closeOnEscape,this.closeOnOutsideClick=P.defaultProps.closeOnOutsideClick,this.openOnHover=P.defaultProps.openOnHover,this.delay=P.defaultProps.delay,this.closeDelay=P.defaultProps.closeDelay}static{this.tagName=`media-popover`}static{this.properties={open:{type:Boolean},defaultOpen:{type:Boolean,attribute:`default-open`},side:{type:String},align:{type:String},modal:{type:Boolean},closeOnEscape:{type:Boolean,attribute:`close-on-escape`},closeOnOutsideClick:{type:Boolean,attribute:`close-on-outside-click`},openOnHover:{type:Boolean,attribute:`open-on-hover`},delay:{type:Number},closeDelay:{type:Number,attribute:`close-delay`}}}#e=new P;#t=null;#n=null;#r=null;#i=null;#a=null;#o=null;#s=0;#c=null;#l=null;connectedCallback(){super.connectedCallback(),!this.destroyed&&(this.#r=new AbortController,this.#t=u({transition:g(),onOpenChange:(e,t)=>{this.open=e,this.dispatchEvent(new CustomEvent(`open-change`,{detail:{open:e,...t}}))},closeOnEscape:()=>this.closeOnEscape,closeOnOutsideClick:()=>this.closeOnOutsideClick,openOnHover:()=>this.openOnHover,delay:()=>this.delay,closeDelay:()=>this.closeDelay}),this.#t.setPopupElement(this),x(this,this.#t.popupProps,{signal:this.#r.signal}),this.#n?this.#n.track(this.#t.input):this.#n=new y(this,this.#t.input))}firstUpdated(e){super.firstUpdated(e),this.defaultOpen&&!this.open&&this.#t?.open()}disconnectedCallback(){super.disconnectedCallback(),this.#m(),this.#r?.abort(),this.#r=null}destroyCallback(){this.#m(),this.#f(),this.#t?.destroy(),super.destroyCallback()}willUpdate(e){if(super.willUpdate(e),this.#e.setProps(this),this.#t&&e.has(`open`)){let{active:e}=this.#t.input.current;this.open!==e&&(this.open?this.#t.open():this.#t.close())}}update(n){if(super.update(n),!this.#t)return;let r=this.#u();this.#d(r);let i=this.#t.input.current;this.#e.setInput(i);let o=this.#e.getState();if(x(this,this.#e.getPopupAttrs(o)),_(this,o,Pe),o.open?f(this):e(this),this.#a&&(x(this.#a,this.#e.getTriggerAttrs(o,this.id)),w(this.#a,le(this.id))),!o.open){this.#m();return}let s={side:o.side,align:o.align};if(a())w(this,l(this.id,s));else{let e=this.#a?.getBoundingClientRect(),n=t(this),r=document.documentElement.getBoundingClientRect(),i=ce(this);w(this,l(this.id,s,e,n,r,i))}this.#p()}#u(){return this.id?this.getRootNode().querySelector(`[commandfor="${this.id}"]`):null}#d(e){e!==this.#a&&(this.#m(),this.#f(),this.#a=e,this.#t?.setTriggerElement(e),e&&this.#t&&(this.#i=new AbortController,x(e,this.#t.triggerProps,{signal:this.#i.signal})))}#f(){this.#a&&(x(this.#a,{"aria-expanded":void 0,"aria-haspopup":void 0,"aria-controls":void 0}),this.#a.style.removeProperty(`anchor-name`)),this.#i?.abort(),this.#i=null,this.#a=null}#p(){if(a())return;let e=this.#a;if(!e||this.#o&&this.#l===e)return;this.#m(),this.#o=new AbortController,this.#l=e;let{signal:t}=this.#o,n=()=>{cancelAnimationFrame(this.#s),this.#s=requestAnimationFrame(()=>{t.aborted||this.requestUpdate()})};window.addEventListener(`scroll`,n,{capture:!0,passive:!0,signal:t}),window.addEventListener(`resize`,n,{signal:t}),typeof ResizeObserver==`function`&&(this.#c=new ResizeObserver(()=>{n()}),this.#c.observe(e),this.#c.observe(this)),n()}#m(){this.#o?.abort(),this.#o=null,this.#l=null,cancelAnimationFrame(this.#s),this.#s=0,this.#c?.disconnect(),this.#c=null}}),O(class extends Z{constructor(...e){super(...e),this.seconds=F.defaultProps.seconds,this.core=new F,this.stateAttrMap=Le,this.mediaState=new v(this,D,c)}static{this.tagName=`media-seek-button`}static{this.properties={...Z.properties,seconds:{type:Number}}}activate(e){this.core.seek(e)}});var Ge=class extends m{static{this.tagName=`media-time`}static{this.properties={type:{type:String},negativeSign:{type:String,attribute:`negative-sign`},label:{type:String}}}#e=new W;#t=new v(this,D,c);#n=document.createElement(`span`);#r=document.createTextNode(``);constructor(){super(),this.type=W.defaultProps.type,this.negativeSign=W.defaultProps.negativeSign,this.label=W.defaultProps.label,this.#n.setAttribute(`aria-hidden`,`true`),this.#n.hidden=!0,this.appendChild(this.#n),this.appendChild(this.#r)}connectedCallback(){super.connectedCallback()}willUpdate(e){super.willUpdate(e),this.#e.setProps(this)}update(e){super.update(e);let t=this.#t.value;if(!t)return;this.#e.setMedia(t);let n=this.#e.getState();this.#n.hidden=!n.negative,this.#n.textContent=n.negative?this.negativeSign:``,this.#r.textContent=n.text,x(this,this.#e.getAttrs(n)),_(this,n,He)}},Ke=class extends m{static{this.tagName=`media-time-group`}},qe=class extends m{static{this.tagName=`media-time-separator`}connectedCallback(){super.connectedCallback(),this.setAttribute(`aria-hidden`,`true`),this.textContent?.trim()||(this.textContent=`/`)}};O(Ge),O(Ke),O(qe);const $=de(Symbol(`@videojs/slider`));var Je=class extends Q{constructor(...e){super(...e),this.consumer=new h(this,{context:$,subscribe:!0})}static{this.tagName=`media-slider-buffer`}},Ye=class extends Q{constructor(...e){super(...e),this.consumer=new h(this,{context:$,subscribe:!0})}static{this.tagName=`media-slider-fill`}},Xe=class extends m{constructor(...e){super(...e),this.overflow=`clamp`}static{this.tagName=`media-slider-preview`}static{this.properties={overflow:{type:String}}}#e=new h(this,{context:$,subscribe:!0});#t=null;#n=0;connectedCallback(){super.connectedCallback(),this.#t=new ResizeObserver(([e])=>{this.#n=e.contentRect.width,this.#r()}),this.#t.observe(this)}disconnectedCallback(){super.disconnectedCallback(),this.#t?.disconnect(),this.#t=null}#r(){w(this,ne(this.#n,this.overflow))}update(e){super.update(e);let t=this.#e.value;t&&_(this,t.state,t.stateAttrMap),this.#r()}},Ze=class extends m{static{this.tagName=`media-slider-thumb`}#e=new h(this,{context:$,subscribe:!0});#t=null;#n=!1;connectedCallback(){super.connectedCallback(),this.#t=new AbortController,this.#n=!1}disconnectedCallback(){super.disconnectedCallback(),this.#t?.abort(),this.#t=null,this.#n=!1}update(e){super.update(e);let t=this.#e.value;t&&(!this.#n&&this.#t&&(x(this,t.thumbProps,{signal:this.#t.signal}),this.#n=!0),x(this,t.thumbAttrs),_(this,t.state,t.stateAttrMap))}},Qe=class extends m{static{this.tagName=`media-thumbnail`}static{this.properties={time:{type:Number},crossOrigin:{type:String,attribute:`crossorigin`},loading:{type:String},fetchPriority:{type:String,attribute:`fetchpriority`}}}#e=new oe;#t=document.createElement(`img`);#n=new v(this,D,s);#r=[];#i;#a;#o=null;constructor(){super(),this.time=0;let e=this.attachShadow({mode:`open`}),t=document.createElement(`style`);t.textContent=`:host {
|
|
2
|
+
display: inline-block;
|
|
3
|
+
overflow: hidden;
|
|
4
|
+
}
|
|
5
|
+
img {
|
|
6
|
+
display: block;
|
|
7
|
+
}`,e.appendChild(t),this.#t.alt=``,this.#t.setAttribute(`part`,`img`),this.#t.setAttribute(`aria-hidden`,`true`),this.#t.setAttribute(`decoding`,`async`),e.appendChild(this.#t)}get thumbnails(){return this.#i}set thumbnails(e){this.#i=e,this.requestUpdate()}connectedCallback(){super.connectedCallback(),!this.destroyed&&(this.#o=se({getContainer:()=>this,getImg:()=>this.#t,onStateChange:()=>this.requestUpdate()}))}disconnectedCallback(){super.disconnectedCallback()}destroyCallback(){this.#o?.destroy(),super.destroyCallback()}update(e){if(super.update(e),this.#i)this.#r=this.#i;else{let e=this.#n.value;e!==this.#a&&(this.#a=e,this.#r=e&&e.thumbnailCues.length>0?ze(e.thumbnailCues,e.thumbnailTrackSrc??void 0):[])}let t=this.#e.findActiveThumbnail(this.#r,this.time);if(x(this.#t,{crossorigin:this.crossOrigin||void 0,loading:this.loading,fetchpriority:this.fetchPriority}),this.#o?.updateSrc(t?.url),!t){this.#t.removeAttribute(`src`),this.#c();let e=this.#e.getState(!1,!1,void 0);x(this,this.#e.getAttrs(e)),_(this,e,R);return}this.#t.getAttribute(`src`)!==t.url&&(this.#t.src=t.url);let n=this.#o,r=this.#e.getState(n?.loading??!1,n?.error??!1,t);if(x(this,this.#e.getAttrs(r)),_(this,r,R),n?.naturalWidth&&n.naturalHeight){let e=n.readConstraints(),r=this.#e.resize(t,n.naturalWidth,n.naturalHeight,e);r&&this.#s(r)}}#s(e){this.style.width=`${e.containerWidth}px`,this.style.height=`${e.containerHeight}px`;let t=this.#t.style;t.width=`${e.imageWidth}px`,t.height=`${e.imageHeight}px`,t.maxWidth=`none`,t.transform=e.offsetX||e.offsetY?`translate(-${e.offsetX}px, -${e.offsetY}px)`:``}#c(){this.style.width=``,this.style.height=``;let e=this.#t.style;e.width=``,e.height=``,e.maxWidth=``,e.transform=``}},$e=class extends Qe{static{this.tagName=`media-slider-thumbnail`}#e=new h(this,{context:$,subscribe:!0});update(e){let t=this.#e.value;t&&(this.time=t.pointerValue),super.update(e)}},et=class extends Q{constructor(...e){super(...e),this.consumer=new h(this,{context:$,subscribe:!0})}static{this.tagName=`media-slider-track`}},tt=class extends m{constructor(...e){super(...e),this.type=`current`}static{this.tagName=`media-slider-value`}static{this.properties={type:{type:String}}}#e=new h(this,{context:$,subscribe:!0});connectedCallback(){super.connectedCallback(),this.setAttribute(`aria-live`,`off`)}update(e){super.update(e);let t=this.#e.value;if(!t)return;let n=this.type===`pointer`?t.pointerValue:t.state.value;this.textContent=t.formatValue?t.formatValue(n,this.type):String(Math.round(n)),_(this,t.state,t.stateAttrMap)}};O(class extends m{constructor(...e){super(...e),this.label=G.defaultProps.label,this.commitThrottle=G.defaultProps.commitThrottle,this.step=G.defaultProps.step,this.largeStep=G.defaultProps.largeStep,this.orientation=G.defaultProps.orientation,this.disabled=G.defaultProps.disabled,this.thumbAlignment=G.defaultProps.thumbAlignment}static{this.tagName=`media-time-slider`}static{this.properties={label:{type:String},commitThrottle:{type:Number,attribute:`commit-throttle`},step:{type:Number},largeStep:{type:Number,attribute:`large-step`},orientation:{type:String},disabled:{type:Boolean},thumbAlignment:{type:String,attribute:`thumb-alignment`}}}#e=new G;#t=new b(this,{context:$});#n=new v(this,D,c);#r=new v(this,D,n);#i=null;#a=null;connectedCallback(){if(super.connectedCallback(),this.destroyed)return;this.#a=new AbortController;let e=this.#a.signal;this.#i=S({getElement:()=>this,getThumbElement:()=>this.querySelector(`media-slider-thumb`),getOrientation:()=>this.orientation,isRTL:()=>A(this),isDisabled:()=>this.disabled||!this.#n.value,getPercent:()=>{let e=this.#n.value;return e?this.#e.percentFromValue(e.currentTime):0},getStepPercent:()=>this.#e.getStepPercent(),getLargeStepPercent:()=>this.#e.getLargeStepPercent(),onValueCommit:e=>{let t=this.#n.value;t&&t.seek(this.#e.rawValueFromPercent(e))},commitThrottle:this.commitThrottle,onDragStart:()=>{this.dispatchEvent(new CustomEvent(`drag-start`,{bubbles:!0}))},onDragEnd:()=>{this.dispatchEvent(new CustomEvent(`drag-end`,{bubbles:!0}))},adjustPercent:(e,t,n)=>this.#e.adjustPercentForAlignment(e,t,n),onResize:()=>this.requestUpdate()}),x(this,this.#i.rootProps,{signal:e}),w(this,this.#i.rootStyle),this.#i.input.subscribe(()=>this.requestUpdate(),{signal:e})}disconnectedCallback(){super.disconnectedCallback(),this.#a?.abort(),this.#a=null}destroyCallback(){this.#i?.destroy(),super.destroyCallback()}willUpdate(e){super.willUpdate(e),this.#e.setProps(this)}update(e){if(super.update(e),!this.#i)return;let t=this.#n.value,n=this.#r.value;if(!t)return;this.#e.setInput(this.#i.input.current);let r={...t,...n??{buffered:[],seekable:[]}};this.#e.setMedia(r);let i=this.#e.getState(),a=p(this.#i.adjustForAlignment(i));w(this,a),_(this,i,Ue),this.#t.setValue({state:i,stateAttrMap:Ue,pointerValue:this.#e.valueFromPercent(i.pointerPercent),thumbAttrs:this.#e.getAttrs(i),thumbProps:this.#i.thumbProps,formatValue:e=>H(e,i.duration)})}}),O(Je),O(Ye),O(Xe),O(Ze),O($e),O(et),O(tt);const nt=de(Symbol(`@videojs/tooltip-group`));O(class extends m{constructor(...e){super(...e),this.open=K.defaultProps.open,this.defaultOpen=K.defaultProps.defaultOpen,this.side=K.defaultProps.side,this.align=K.defaultProps.align,this.delay=K.defaultProps.delay,this.closeDelay=K.defaultProps.closeDelay,this.disableHoverablePopup=K.defaultProps.disableHoverablePopup,this.disabled=K.defaultProps.disabled}static{this.tagName=`media-tooltip`}static{this.properties={open:{type:Boolean},defaultOpen:{type:Boolean,attribute:`default-open`},side:{type:String},align:{type:String},delay:{type:Number},closeDelay:{type:Number,attribute:`close-delay`},disableHoverablePopup:{type:Boolean,attribute:`disable-hoverable-popup`},disabled:{type:Boolean}}}#e=new K;#t=new h(this,{context:nt});#n=null;#r=null;#i=null;#a=null;#o=null;#s=null;#c=0;#l=null;#u=null;connectedCallback(){super.connectedCallback(),this.#i=new AbortController,this.#n=te({transition:g(),onOpenChange:(e,t)=>{this.open=e,this.dispatchEvent(new CustomEvent(`open-change`,{detail:{open:e,...t}}))},delay:()=>this.delay,closeDelay:()=>this.closeDelay,disableHoverablePopup:()=>this.disableHoverablePopup,disabled:()=>this.disabled,group:()=>this.#t.value}),this.#n.setPopupElement(this),x(this,this.#n.popupProps,{signal:this.#i.signal}),this.#r?this.#r.track(this.#n.input):this.#r=new y(this,this.#n.input)}firstUpdated(e){super.firstUpdated(e),this.defaultOpen&&!this.open&&this.#n?.open()}disconnectedCallback(){super.disconnectedCallback(),this.#h(),this.#p(),this.#n?.destroy(),this.#n=null,this.#i?.abort(),this.#i=null}willUpdate(e){if(super.willUpdate(e),this.#e.setProps(this),this.#n&&e.has(`open`)){let{active:e}=this.#n.input.current;this.open!==e&&(this.open?this.#n.open():this.#n.close())}}update(n){if(super.update(n),!this.#n)return;let r=this.#d();this.#f(r);let i=this.#n.input.current;this.#e.setInput(i);let o=this.#e.getState();if(x(this,this.#e.getPopupAttrs(o)),_(this,o,We),o.open?f(this):e(this),this.#o&&(x(this.#o,this.#e.getTriggerAttrs(o,this.id)),w(this.#o,le(this.id))),!o.open){this.#h();return}let s={side:o.side,align:o.align};if(a())w(this,l(this.id,s,void 0,void 0,void 0,void 0,q));else{let e=this.#o?.getBoundingClientRect(),n=t(this),r=document.documentElement.getBoundingClientRect(),i=ce(this,q);w(this,l(this.id,s,e,n,r,i,q))}this.#m()}#d(){return this.id?this.getRootNode().querySelector(`[commandfor="${this.id}"]`):null}#f(e){e!==this.#o&&(this.#h(),this.#p(),this.#o=e,this.#n?.setTriggerElement(e),e&&this.#n&&(this.#a=new AbortController,x(e,this.#n.triggerProps,{signal:this.#a.signal})))}#p(){this.#o&&(x(this.#o,{"aria-describedby":void 0}),this.#o.style.removeProperty(`anchor-name`)),this.#a?.abort(),this.#a=null,this.#o=null}#m(){if(a())return;let e=this.#o;if(!e||this.#s&&this.#u===e)return;this.#h(),this.#s=new AbortController,this.#u=e;let{signal:t}=this.#s,n=()=>{cancelAnimationFrame(this.#c),this.#c=requestAnimationFrame(()=>{t.aborted||this.requestUpdate()})};window.addEventListener(`scroll`,n,{capture:!0,passive:!0,signal:t}),window.addEventListener(`resize`,n,{signal:t}),typeof ResizeObserver==`function`&&(this.#l=new ResizeObserver(()=>{n()}),this.#l.observe(e),this.#l.observe(this)),n()}#h(){this.#s?.abort(),this.#s=null,this.#u=null,cancelAnimationFrame(this.#c),this.#c=0,this.#l?.disconnect(),this.#l=null}}),O(class extends m{constructor(...e){super(...e),this.delay=J.defaultProps.delay,this.closeDelay=J.defaultProps.closeDelay,this.timeout=J.defaultProps.timeout}static{this.tagName=`media-tooltip-group`}static{this.properties={delay:{type:Number},closeDelay:{type:Number,attribute:`close-delay`},timeout:{type:Number}}}#e=new J;#t=new b(this,{context:nt,initialValue:this.#e});update(e){super.update(e),this.#e.setProps(this),this.#t.setValue(this.#e)}}),O(class extends m{constructor(...e){super(...e),this.label=Y.defaultProps.label,this.step=Y.defaultProps.step,this.largeStep=Y.defaultProps.largeStep,this.orientation=Y.defaultProps.orientation,this.disabled=Y.defaultProps.disabled,this.thumbAlignment=Y.defaultProps.thumbAlignment}static{this.tagName=`media-volume-slider`}static{this.properties={label:{type:String},step:{type:Number},largeStep:{type:Number,attribute:`large-step`},orientation:{type:String},disabled:{type:Boolean},thumbAlignment:{type:String,attribute:`thumb-alignment`}}}#e=new Y;#t=new b(this,{context:$});#n=new v(this,D,i);#r=null;#i=null;connectedCallback(){if(super.connectedCallback(),this.destroyed)return;this.#i=new AbortController;let e=this.#i.signal;this.#r=S({getElement:()=>this,getThumbElement:()=>this.querySelector(`media-slider-thumb`),getOrientation:()=>this.orientation,isRTL:()=>A(this),isDisabled:()=>this.disabled||!this.#n.value,getPercent:()=>{let e=this.#n.value;return e?e.volume*100:0},getStepPercent:()=>this.#e.getStepPercent(),getLargeStepPercent:()=>this.#e.getLargeStepPercent(),onValueChange:e=>{this.#a(e)},onValueCommit:e=>{this.#a(e)},onDragStart:()=>{this.dispatchEvent(new CustomEvent(`drag-start`,{bubbles:!0}))},onDragEnd:()=>{this.dispatchEvent(new CustomEvent(`drag-end`,{bubbles:!0}))},adjustPercent:(e,t,n)=>this.#e.adjustPercentForAlignment(e,t,n),onResize:()=>this.requestUpdate()}),x(this,this.#r.rootProps,{signal:e}),w(this,this.#r.rootStyle),this.#r.input.subscribe(()=>this.requestUpdate(),{signal:e})}disconnectedCallback(){super.disconnectedCallback(),this.#i?.abort(),this.#i=null}destroyCallback(){this.#r?.destroy(),super.destroyCallback()}willUpdate(e){super.willUpdate(e),this.#e.setProps(this)}update(e){if(super.update(e),!this.#r)return;let t=this.#n.value;if(!t)return;this.#e.setInput(this.#r.input.current),this.#e.setMedia(t);let n=this.#e.getState(),r=re(this.#r.adjustForAlignment(n));w(this,r),_(this,n,X),this.#t.setValue({state:n,stateAttrMap:X,pointerValue:this.#e.valueFromPercent(n.pointerPercent),thumbAttrs:this.#e.getAttrs(n),thumbProps:this.#r.thumbProps,formatValue:e=>`${Math.round(e)}%`})}#a(e){this.#n.value?.setVolume(this.#e.valueFromPercent(e)/100)}}),O(Ye),O(Xe),O(Ze),O(et),O(tt);export{ke as a,Ce as c,be as d,ye as f,ge as g,he as h,Fe as i,Se as l,_e as m,Z as n,Oe as o,ve as p,Ie as r,we as s,Q as t,xe as u};
|
|
8
|
+
//# sourceMappingURL=volume-slider-BqzTytgB.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"volume-slider-BqzTytgB.js","names":["rootStyles","sharedStyles","#props","#timer","#props","#media","#media","#props","#media","#props","#media","#props","#media","#props","#media","#props","#media","#props","#input","#media","#props","#media","#props","#input","#props","#media","#getSeconds","#getText","#getPhrase","#getDatetime","#props","#media","#props","#input","#props","#isOpen","#lastCloseTime","#media","#disconnect","#core","#disconnect","#popover","#snapshot","#cleanupPositioning","#cleanupTrigger","#findTrigger","#syncTrigger","#currentTrigger","#syncPositioning","#triggerAbort","#positionAbort","#positionTrigger","#positionFrame","#resizeObserver","#core","#state","#signSpan","#textNode","createContext","ContextConsumer","ContextConsumer","#ctx","ContextConsumer","#resizeObserver","#width","#applyPosition","#ctx","ContextConsumer","#disconnect","#thumbPropsApplied","#core","#img","#textTracks","#externalThumbnails","#api","#thumbnails","#lastTextTrack","#resetStyles","#applyResize","#ctx","ContextConsumer","ContextConsumer","#ctx","ContextConsumer","#core","#provider","ContextProvider","#timeState","#bufferState","#disconnect","#slider","createContext","#core","#groupConsumer","ContextConsumer","#disconnect","#tooltip","#snapshot","#cleanupPositioning","#cleanupTrigger","#findTrigger","#syncTrigger","#currentTrigger","#syncPositioning","#triggerAbort","#positionAbort","#positionTrigger","#positionFrame","#resizeObserver","#core","#provider","ContextProvider","#core","#provider","ContextProvider","#volumeState","#disconnect","#slider","#setVolume"],"sources":["../../utils/dist/object/defaults.js","../../utils/dist/dom/direction.js","../inline-css:src/define/base.js","../inline-css:src/define/shared.js","../src/define/skin-mixin.ts","../src/define/media/container.ts","../../core/dist/default/core/ui/transition.js","../../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/controls/controls-core.js","../../core/dist/default/core/ui/controls/controls-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/mute-button/mute-button-core.js","../../core/dist/default/core/ui/mute-button/mute-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/play-button/play-button-core.js","../../core/dist/default/core/ui/play-button/play-button-data-attrs.js","../../core/dist/default/core/ui/playback-rate-button/playback-rate-button-core.js","../../core/dist/default/core/ui/playback-rate-button/playback-rate-button-data-attrs.js","../../core/dist/default/core/ui/popover/popover-core.js","../../core/dist/default/core/ui/popover/popover-data-attrs.js","../../core/dist/default/core/ui/poster/poster-core.js","../../core/dist/default/core/ui/poster/poster-data-attrs.js","../../core/dist/default/core/ui/seek-button/seek-button-core.js","../../core/dist/default/core/ui/seek-button/seek-button-data-attrs.js","../../core/dist/default/core/ui/slider/slider-core.js","../../core/dist/default/core/ui/slider/slider-data-attrs.js","../../core/dist/default/core/ui/thumbnail/thumbnail-data-attrs.js","../../core/dist/default/core/ui/thumbnail/thumbnail-media-fragment.js","../../utils/dist/time/format.js","../../core/dist/default/core/ui/time/time-core.js","../../core/dist/default/core/ui/time/time-data-attrs.js","../../core/dist/default/core/ui/time-slider/time-slider-core.js","../../core/dist/default/core/ui/time-slider/time-slider-data-attrs.js","../../core/dist/default/core/ui/tooltip/tooltip-core.js","../../core/dist/default/core/ui/tooltip/tooltip-css-vars.js","../../core/dist/default/core/ui/tooltip/tooltip-data-attrs.js","../../core/dist/default/core/ui/tooltip/tooltip-group-core.js","../../core/dist/default/core/ui/volume-slider/volume-slider-core.js","../../core/dist/default/core/ui/volume-slider/volume-slider-data-attrs.js","../src/ui/media-button-element.ts","../src/ui/context-part-element.ts","../src/ui/mute-button/mute-button-element.ts","../src/define/ui/mute-button.ts","../src/ui/play-button/play-button-element.ts","../src/define/ui/play-button.ts","../src/ui/playback-rate-button/playback-rate-button-element.ts","../src/define/ui/playback-rate-button.ts","../src/ui/popover/popover-element.ts","../src/define/ui/popover.ts","../src/ui/seek-button/seek-button-element.ts","../src/define/ui/seek-button.ts","../src/ui/time/time-element.ts","../src/ui/time/time-group-element.ts","../src/ui/time/time-separator-element.ts","../src/define/ui/time.ts","../src/ui/slider/context.ts","../src/ui/slider/slider-buffer-element.ts","../src/ui/slider/slider-fill-element.ts","../src/ui/slider/slider-preview-element.ts","../src/ui/slider/slider-thumb-element.ts","../src/ui/thumbnail/thumbnail-element.ts","../src/ui/slider/slider-thumbnail-element.ts","../src/ui/slider/slider-track-element.ts","../src/ui/slider/slider-value-element.ts","../src/ui/time-slider/time-slider-element.ts","../src/define/ui/time-slider.ts","../src/ui/tooltip/context.ts","../src/ui/tooltip/tooltip-element.ts","../src/define/ui/tooltip.ts","../src/ui/tooltip/tooltip-group-element.ts","../src/define/ui/tooltip-group.ts","../src/ui/volume-slider/volume-slider-element.ts","../src/define/ui/volume-slider.ts"],"sourcesContent":["import { isUndefined } from \"../predicate/predicate.js\";\n\n//#region src/object/defaults.ts\n/**\n* Creates a new object with default values filled in for undefined properties.\n*\n* @example\n* ```ts\n* const props = { label: undefined, disabled: true };\n* const defaultProps = { label: '', disabled: false };\n* defaults(props, defaultProps); // { label: '', disabled: true }\n* ```\n*/\nfunction defaults(object, defaultValues) {\n\tconst result = { ...defaultValues };\n\tfor (const key in object) if (!isUndefined(object[key])) result[key] = object[key];\n\treturn result;\n}\n\n//#endregion\nexport { defaults };\n//# sourceMappingURL=defaults.js.map","//#region src/dom/direction.ts\n/** Check whether an element's text direction is right-to-left. */\nfunction isRTL(element) {\n\tconst dir = element.closest(\"[dir]\")?.getAttribute(\"dir\");\n\tif (dir) return dir.toLowerCase() === \"rtl\";\n\treturn getComputedStyle(element).direction === \"rtl\";\n}\n\n//#endregion\nexport { isRTL };\n//# sourceMappingURL=direction.js.map","export default \"video-player{display:contents}video-player video,video-player [slot=poster]{width:100%;height:100%;display:block}video-player video::-webkit-media-text-track-container{transition:translate var(--media-caption-track-duration,0) ease-out;transition-delay:var(--media-caption-track-delay,0);translate:0 var(--media-caption-track-y,0);z-index:1;font-family:inherit;scale:.98}\";","export default \"media-tooltip-group{display:contents}:host{display:grid}.media-popover--volume:has(media-volume-slider[data-availability=unsupported]){display:none}\";","import type { ReactiveElement } from '@videojs/element';\nimport type { Constructor } from '@videojs/utils/types';\nimport rootStyles from './base.css?inline';\nimport sharedStyles from './shared.css?inline';\n\nconst STYLES_ID = '__media-styles';\n\nfunction ensureRootStyles(): void {\n if (document.getElementById(STYLES_ID)) return;\n const style = document.createElement('style');\n style.id = STYLES_ID;\n style.textContent = rootStyles;\n document.head.appendChild(style);\n}\n\nconst sharedSheet = new CSSStyleSheet();\nsharedSheet.replaceSync(sharedStyles);\n\n/**\n * Mixin for skin elements that renders the template from a static\n * `getTemplateHTML` method into a shadow root. Native `<slot>` elements\n * handle light DOM projection automatically.\n *\n * When `static styles` is set, the stylesheet is adopted into the\n * shadow root via `adoptedStyleSheets`.\n */\nexport function SkinMixin<Base extends Constructor<ReactiveElement>>(\n BaseClass: Base\n): Base & { shadowRootOptions: ShadowRootInit; styles?: CSSStyleSheet } {\n class SkinElement extends (BaseClass as Constructor<ReactiveElement>) {\n static shadowRootOptions: ShadowRootInit = { mode: 'open' };\n static styles?: CSSStyleSheet;\n\n constructor(...args: any[]) {\n super(...args);\n\n ensureRootStyles();\n\n if (!this.shadowRoot) {\n const ctor = this.constructor as typeof SkinElement & { getTemplateHTML?: () => string };\n this.attachShadow(ctor.shadowRootOptions);\n\n const sheets: CSSStyleSheet[] = [sharedSheet];\n if (ctor.styles) {\n sheets.push(ctor.styles);\n }\n this.shadowRoot!.adoptedStyleSheets = sheets;\n\n if (ctor.getTemplateHTML) {\n this.shadowRoot!.innerHTML = ctor.getTemplateHTML();\n }\n }\n }\n }\n\n return SkinElement as unknown as Base & { shadowRootOptions: ShadowRootInit; styles?: CSSStyleSheet };\n}\n\n/** Create a shared `CSSStyleSheet` from a CSS string. */\nexport function createStyles(css: string): CSSStyleSheet {\n const sheet = new CSSStyleSheet();\n sheet.replaceSync(css);\n return sheet;\n}\n","import { MediaContainerElement } from '../../media/container-element';\nimport { safeDefine } from '../safe-define';\n\nsafeDefine(MediaContainerElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [MediaContainerElement.tagName]: MediaContainerElement;\n }\n}\n","//#region src/core/ui/transition.ts\nfunction getTransitionFlags(status) {\n\treturn {\n\t\ttransitionStarting: status === \"starting\",\n\t\ttransitionEnding: status === \"ending\"\n\t};\n}\n\n//#endregion\nexport { getTransitionFlags };\n//# sourceMappingURL=transition.js.map","import { createState } from \"@videojs/store\";\nimport { defaults } from \"@videojs/utils/object\";\n\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\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\tif (this.#timer !== null) {\n\t\t\t\tclearTimeout(this.#timer);\n\t\t\t\tthis.#timer = null;\n\t\t\t}\n\t\t\tthis.state.patch({ visible: false });\n\t\t}\n\t}\n};\n\n//#endregion\nexport { BufferingIndicatorCore };\n//# sourceMappingURL=buffering-indicator-core.js.map","//#region src/core/ui/buffering-indicator/buffering-indicator-data-attrs.ts\nconst BufferingIndicatorDataAttrs = { visible: \"data-visible\" };\n\n//#endregion\nexport { BufferingIndicatorDataAttrs };\n//# sourceMappingURL=buffering-indicator-data-attrs.js.map","import { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n\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\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\treturn {\n\t\t\tsubtitlesShowing: media.subtitlesShowing,\n\t\t\tavailability: media.textTrackList.some((t) => t.kind === \"captions\" || t.kind === \"subtitles\") ? \"available\" : \"unavailable\"\n\t\t};\n\t}\n\ttoggle(media) {\n\t\tif (this.#props.disabled) return;\n\t\tmedia.toggleSubtitles();\n\t}\n};\n\n//#endregion\nexport { CaptionsButtonCore };\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\n//#endregion\nexport { CaptionsButtonDataAttrs };\n//# sourceMappingURL=captions-button-data-attrs.js.map","//#region src/core/ui/controls/controls-core.ts\nvar ControlsCore = class {\n\t#media = null;\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\treturn {\n\t\t\tvisible: media.controlsVisible,\n\t\t\tuserActive: media.userActive\n\t\t};\n\t}\n};\n\n//#endregion\nexport { ControlsCore };\n//# sourceMappingURL=controls-core.js.map","//#region src/core/ui/controls/controls-data-attrs.ts\nconst ControlsDataAttrs = {\n\tvisible: \"data-visible\",\n\tuserActive: \"data-user-active\"\n};\n\n//#endregion\nexport { ControlsDataAttrs };\n//# sourceMappingURL=controls-data-attrs.js.map","import { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n\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\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\treturn {\n\t\t\tfullscreen: media.fullscreen,\n\t\t\tavailability: media.fullscreenAvailability\n\t\t};\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\n//#endregion\nexport { FullscreenButtonCore };\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\n//#endregion\nexport { FullscreenButtonDataAttrs };\n//# sourceMappingURL=fullscreen-button-data-attrs.js.map","import { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n\n//#region src/core/ui/mute-button/mute-button-core.ts\nvar MuteButtonCore = class MuteButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\t#props = { ...MuteButtonCore.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, MuteButtonCore.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.muted ? \"Unmute\" : \"Mute\";\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\treturn {\n\t\t\tmuted: media.muted || media.volume === 0,\n\t\t\tvolumeLevel: getVolumeLevel(media)\n\t\t};\n\t}\n\ttoggle(media) {\n\t\tif (this.#props.disabled) return;\n\t\tmedia.toggleMuted();\n\t}\n};\nfunction getVolumeLevel(media) {\n\tif (media.muted || media.volume === 0) return \"off\";\n\tif (media.volume < .5) return \"low\";\n\tif (media.volume < .75) return \"medium\";\n\treturn \"high\";\n}\n\n//#endregion\nexport { MuteButtonCore };\n//# sourceMappingURL=mute-button-core.js.map","//#region src/core/ui/mute-button/mute-button-data-attrs.ts\nconst MuteButtonDataAttrs = {\n\tmuted: \"data-muted\",\n\tvolumeLevel: \"data-volume-level\"\n};\n\n//#endregion\nexport { MuteButtonDataAttrs };\n//# sourceMappingURL=mute-button-data-attrs.js.map","import { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n\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\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\treturn {\n\t\t\tpip: media.pip,\n\t\t\tavailability: media.pipAvailability\n\t\t};\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\n//#endregion\nexport { PiPButtonCore };\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\n//#endregion\nexport { PiPButtonDataAttrs };\n//# sourceMappingURL=pip-button-data-attrs.js.map","import { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n\n//#region src/core/ui/play-button/play-button-core.ts\nvar PlayButtonCore = class PlayButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\t#props = { ...PlayButtonCore.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, PlayButtonCore.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.ended) return \"Replay\";\n\t\treturn state.paused ? \"Play\" : \"Pause\";\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\treturn {\n\t\t\tpaused: media.paused,\n\t\t\tended: media.ended,\n\t\t\tstarted: media.started\n\t\t};\n\t}\n\tasync toggle(media) {\n\t\tif (this.#props.disabled) return;\n\t\tif (media.paused || media.ended) return media.play();\n\t\tmedia.pause();\n\t}\n};\n\n//#endregion\nexport { PlayButtonCore };\n//# sourceMappingURL=play-button-core.js.map","//#region src/core/ui/play-button/play-button-data-attrs.ts\nconst PlayButtonDataAttrs = {\n\tpaused: \"data-paused\",\n\tended: \"data-ended\",\n\tstarted: \"data-started\"\n};\n\n//#endregion\nexport { PlayButtonDataAttrs };\n//# sourceMappingURL=play-button-data-attrs.js.map","import { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n\n//#region src/core/ui/playback-rate-button/playback-rate-button-core.ts\nvar PlaybackRateButtonCore = class PlaybackRateButtonCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\t#props = { ...PlaybackRateButtonCore.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, PlaybackRateButtonCore.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 `Playback rate ${state.rate}`;\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\treturn { rate: this.#media.playbackRate };\n\t}\n\tcycle(media) {\n\t\tif (this.#props.disabled) return;\n\t\tconst { playbackRates, playbackRate } = media;\n\t\tif (playbackRates.length === 0) return;\n\t\tconst idx = playbackRates.indexOf(playbackRate);\n\t\tconst next = idx === -1 ? playbackRates.find((r) => r > playbackRate) ?? playbackRates[0] : playbackRates[(idx + 1) % playbackRates.length];\n\t\tmedia.setPlaybackRate(next);\n\t}\n};\n\n//#endregion\nexport { PlaybackRateButtonCore };\n//# sourceMappingURL=playback-rate-button-core.js.map","//#region src/core/ui/playback-rate-button/playback-rate-button-data-attrs.ts\nconst PlaybackRateButtonDataAttrs = { rate: \"data-rate\" };\n\n//#endregion\nexport { PlaybackRateButtonDataAttrs };\n//# sourceMappingURL=playback-rate-button-data-attrs.js.map","import { getTransitionFlags } from \"../transition.js\";\nimport { defaults } from \"@videojs/utils/object\";\n\n//#region src/core/ui/popover/popover-core.ts\nvar PopoverCore = class PopoverCore {\n\tstatic defaultProps = {\n\t\tside: \"top\",\n\t\talign: \"center\",\n\t\tmodal: false,\n\t\tcloseOnEscape: true,\n\t\tcloseOnOutsideClick: true,\n\t\topen: false,\n\t\tdefaultOpen: false,\n\t\topenOnHover: false,\n\t\tdelay: 300,\n\t\tcloseDelay: 0\n\t};\n\t#props = { ...PopoverCore.defaultProps };\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, PopoverCore.defaultProps);\n\t}\n\t#input = null;\n\tsetInput(input) {\n\t\tthis.#input = input;\n\t}\n\tgetState() {\n\t\tconst input = this.#input;\n\t\treturn {\n\t\t\topen: input.active,\n\t\t\tstatus: input.status,\n\t\t\tside: this.#props.side,\n\t\t\talign: this.#props.align,\n\t\t\tmodal: this.#props.modal,\n\t\t\t...getTransitionFlags(input.status)\n\t\t};\n\t}\n\tgetTriggerAttrs(state, popupId) {\n\t\treturn {\n\t\t\t\"aria-expanded\": state.open ? \"true\" : \"false\",\n\t\t\t\"aria-haspopup\": \"dialog\",\n\t\t\t\"aria-controls\": popupId\n\t\t};\n\t}\n\tgetPopupAttrs(state) {\n\t\treturn {\n\t\t\tpopover: \"manual\",\n\t\t\trole: \"dialog\",\n\t\t\t\"aria-modal\": state.modal === true ? \"true\" : void 0\n\t\t};\n\t}\n};\n\n//#endregion\nexport { PopoverCore };\n//# sourceMappingURL=popover-core.js.map","//#region src/core/ui/popover/popover-data-attrs.ts\nconst PopoverDataAttrs = {\n\topen: \"data-open\",\n\tside: \"data-side\",\n\talign: \"data-align\",\n\ttransitionStarting: \"data-starting-style\",\n\ttransitionEnding: \"data-ending-style\"\n};\n\n//#endregion\nexport { PopoverDataAttrs };\n//# sourceMappingURL=popover-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\n//#endregion\nexport { PosterCore };\n//# sourceMappingURL=poster-core.js.map","//#region src/core/ui/poster/poster-data-attrs.ts\nconst PosterDataAttrs = { visible: \"data-visible\" };\n\n//#endregion\nexport { PosterDataAttrs };\n//# sourceMappingURL=poster-data-attrs.js.map","import { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\n\n//#region src/core/ui/seek-button/seek-button-core.ts\nvar SeekButtonCore = class SeekButtonCore {\n\tstatic defaultProps = {\n\t\tseconds: 30,\n\t\tlabel: \"\",\n\t\tdisabled: false\n\t};\n\t#props = { ...SeekButtonCore.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, SeekButtonCore.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\tconst abs = Math.abs(this.#props.seconds);\n\t\treturn state.direction === \"backward\" ? `Seek backward ${abs} seconds` : `Seek forward ${abs} seconds`;\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\treturn {\n\t\t\tseeking: this.#media.seeking,\n\t\t\tdirection: this.#props.seconds < 0 ? \"backward\" : \"forward\"\n\t\t};\n\t}\n\tasync seek(media) {\n\t\tif (this.#props.disabled) return;\n\t\tawait media.seek(media.currentTime + this.#props.seconds);\n\t}\n};\n\n//#endregion\nexport { SeekButtonCore };\n//# sourceMappingURL=seek-button-core.js.map","//#region src/core/ui/seek-button/seek-button-data-attrs.ts\nconst SeekButtonDataAttrs = {\n\tseeking: \"data-seeking\",\n\tdirection: \"data-direction\"\n};\n\n//#endregion\nexport { SeekButtonDataAttrs };\n//# sourceMappingURL=seek-button-data-attrs.js.map","import { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\nimport { clamp, roundToStep } from \"@videojs/utils/number\";\n\n//#region src/core/ui/slider/slider-core.ts\n/** Base slider logic: value mapping, ARIA attrs, and step calculations. */\nvar SliderCore = class SliderCore {\n\tstatic defaultProps = {\n\t\tlabel: \"\",\n\t\tstep: 1,\n\t\tlargeStep: 10,\n\t\torientation: \"horizontal\",\n\t\tdisabled: false,\n\t\tthumbAlignment: \"center\",\n\t\tvalue: 0,\n\t\tmin: 0,\n\t\tmax: 100\n\t};\n\tstatic defaultInput = {\n\t\tpointerPercent: 0,\n\t\tdragPercent: 0,\n\t\tdragging: false,\n\t\tpointing: false,\n\t\tfocused: false\n\t};\n\t#props = { ...SliderCore.defaultProps };\n\t#input = { ...SliderCore.defaultInput };\n\tget props() {\n\t\treturn this.#props;\n\t}\n\tget input() {\n\t\treturn this.#input;\n\t}\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, SliderCore.defaultProps);\n\t}\n\tsetInput(input) {\n\t\tthis.#input = input;\n\t}\n\tgetSliderState(value) {\n\t\tconst { orientation, disabled, thumbAlignment } = this.#props;\n\t\tconst { pointerPercent, dragging, pointing, focused } = this.#input;\n\t\treturn {\n\t\t\tvalue,\n\t\t\tfillPercent: this.percentFromValue(value),\n\t\t\tpointerPercent,\n\t\t\tdragging,\n\t\t\tpointing,\n\t\t\tinteractive: dragging || pointing || focused,\n\t\t\torientation,\n\t\t\tdisabled,\n\t\t\tthumbAlignment\n\t\t};\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 \"\";\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\trole: \"slider\",\n\t\t\ttabIndex: state.disabled ? -1 : 0,\n\t\t\tautoComplete: \"off\",\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-valuemin\": this.#props.min,\n\t\t\t\"aria-valuemax\": this.#props.max,\n\t\t\t\"aria-valuenow\": state.value,\n\t\t\t\"aria-orientation\": state.orientation,\n\t\t\t\"aria-disabled\": state.disabled ? \"true\" : void 0\n\t\t};\n\t}\n\tvalueFromPercent(percent) {\n\t\tconst { min, max, step } = this.#props;\n\t\treturn roundToStep(clamp(min + percent / 100 * (max - min), min, max), step, min);\n\t}\n\t/** Convert percent to a clamped value without applying step rounding. */\n\trawValueFromPercent(percent) {\n\t\tconst { min, max } = this.#props;\n\t\treturn clamp(min + percent / 100 * (max - min), min, max);\n\t}\n\tpercentFromValue(value) {\n\t\tconst { min, max } = this.#props;\n\t\tif (max === min) return 0;\n\t\treturn (value - min) / (max - min) * 100;\n\t}\n\t/** Step as a percentage of the slider range. */\n\tgetStepPercent() {\n\t\tconst { step, min, max } = this.#props;\n\t\tconst range = max - min;\n\t\treturn range > 0 ? step / range * 100 : 0;\n\t}\n\t/** Large step as a percentage of the slider range. */\n\tgetLargeStepPercent() {\n\t\tconst { largeStep, min, max } = this.#props;\n\t\tconst range = max - min;\n\t\treturn range > 0 ? largeStep / range * 100 : 0;\n\t}\n\tadjustPercentForAlignment(rawPercent, thumbSize, trackSize) {\n\t\tif (this.#props.thumbAlignment === \"center\" || trackSize === 0) return rawPercent;\n\t\tconst thumbHalf = thumbSize / trackSize * 100 / 2;\n\t\tconst minPercent = thumbHalf;\n\t\tconst maxPercent = 100 - thumbHalf;\n\t\treturn minPercent + rawPercent / 100 * (maxPercent - minPercent);\n\t}\n};\n\n//#endregion\nexport { SliderCore };\n//# sourceMappingURL=slider-core.js.map","//#region src/core/ui/slider/slider-data-attrs.ts\nconst SliderDataAttrs = {\n\tdragging: \"data-dragging\",\n\tpointing: \"data-pointing\",\n\tinteractive: \"data-interactive\",\n\torientation: \"data-orientation\",\n\tdisabled: \"data-disabled\"\n};\n\n//#endregion\nexport { SliderDataAttrs };\n//# sourceMappingURL=slider-data-attrs.js.map","//#region src/core/ui/thumbnail/thumbnail-data-attrs.ts\nconst ThumbnailDataAttrs = {\n\tloading: \"data-loading\",\n\terror: \"data-error\",\n\thidden: \"data-hidden\"\n};\n\n//#endregion\nexport { ThumbnailDataAttrs };\n//# sourceMappingURL=thumbnail-data-attrs.js.map","import { isNumber } from \"@videojs/utils/predicate\";\n\n//#region src/core/ui/thumbnail/thumbnail-media-fragment.ts\n/** Parse `url#xywh=x,y,w,h` into a URL and optional sprite coordinates. */\nfunction parseMediaFragment(text, baseURL) {\n\tconst parts = text.trim().split(\"#\");\n\tconst rawURL = parts[0] ?? \"\";\n\tconst hash = parts[1];\n\tconst url = baseURL ? new URL(rawURL, baseURL).href : rawURL;\n\tif (!hash) return { url };\n\tconst eqIndex = hash.indexOf(\"=\");\n\tif (eqIndex === -1) return { url };\n\tconst keys = hash.slice(0, eqIndex);\n\tconst values = hash.slice(eqIndex + 1).split(\",\").map(Number);\n\tconst data = {};\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key = keys[i];\n\t\tconst value = values[i];\n\t\tif (key && isNumber(value) && !Number.isNaN(value)) data[key] = value;\n\t}\n\tconst result = { url };\n\tif (isNumber(data.w)) result.width = data.w;\n\tif (isNumber(data.h)) result.height = data.h;\n\tif (isNumber(data.x) && isNumber(data.y)) result.coords = {\n\t\tx: data.x,\n\t\ty: data.y\n\t};\n\treturn result;\n}\n/**\n* Convert an array of text cues (e.g. `VTTCue` from a `<track>` element)\n* into {@link ThumbnailImage} entries by parsing the media-fragment in\n* each cue's text.\n*/\nfunction mapCuesToThumbnails(cues, baseURL) {\n\tconst images = [];\n\tfor (const cue of cues) {\n\t\tconst fragment = parseMediaFragment(cue.text, baseURL);\n\t\tconst image = {\n\t\t\turl: fragment.url,\n\t\t\tstartTime: cue.startTime,\n\t\t\tendTime: cue.endTime\n\t\t};\n\t\tif (fragment.width) image.width = fragment.width;\n\t\tif (fragment.height) image.height = fragment.height;\n\t\tif (fragment.coords) image.coords = fragment.coords;\n\t\timages.push(image);\n\t}\n\treturn images;\n}\n\n//#endregion\nexport { mapCuesToThumbnails, parseMediaFragment };\n//# sourceMappingURL=thumbnail-media-fragment.js.map","import { isNumber } from \"../predicate/predicate.js\";\n\n//#region src/time/format.ts\nconst UNIT_LABELS = [\n\t{\n\t\tsingular: \"hour\",\n\t\tplural: \"hours\"\n\t},\n\t{\n\t\tsingular: \"minute\",\n\t\tplural: \"minutes\"\n\t},\n\t{\n\t\tsingular: \"second\",\n\t\tplural: \"seconds\"\n\t}\n];\nfunction isValidTime(value) {\n\treturn isNumber(value) && Number.isFinite(value);\n}\nfunction toTimeUnitPhrase(value, unitIndex) {\n\treturn `${value} ${value === 1 ? UNIT_LABELS[unitIndex]?.singular : UNIT_LABELS[unitIndex]?.plural}`;\n}\n/**\n* Format seconds to digital display string.\n*\n* @param seconds - Time in seconds (can be negative)\n* @param guide - Guide time (typically duration) to determine display format\n* @returns Formatted string like \"1:30\" or \"1:05:30\"\n*\n* @example\n* formatTime(90) // \"1:30\"\n* formatTime(3661) // \"1:01:01\"\n* formatTime(35, 3600) // \"0:00:35\" (guided by 1-hour duration)\n* formatTime(35, 600) // \"00:35\" (guided by 10-minute duration)\n*/\nfunction formatTime(seconds, guide) {\n\tif (!isValidTime(seconds)) return \"0:00\";\n\tconst negative = seconds < 0;\n\tconst positiveSeconds = Math.abs(seconds);\n\tconst h = Math.floor(positiveSeconds / 3600);\n\tconst m = Math.floor(positiveSeconds / 60 % 60);\n\tconst s = Math.floor(positiveSeconds % 60);\n\tconst guideAbs = guide ? Math.abs(guide) : 0;\n\tconst gh = Math.floor(guideAbs / 3600);\n\tconst gm = Math.floor(guideAbs / 60 % 60);\n\tconst showHours = h > 0 || gh > 0;\n\tconst padMinutes = showHours || gm >= 10;\n\tconst hoursStr = showHours ? `${h}:` : \"\";\n\tconst minutesStr = `${padMinutes && m < 10 ? \"0\" : \"\"}${m}:`;\n\tconst secondsStr = s < 10 ? `0${s}` : `${s}`;\n\treturn `${negative ? \"-\" : \"\"}${hoursStr}${minutesStr}${secondsStr}`;\n}\n/**\n* Format seconds to human-readable phrase for screen readers.\n*\n* @param seconds - Time in seconds (negative indicates remaining)\n* @returns Human-readable phrase like \"1 minute, 30 seconds\"\n*\n* @example\n* formatTimeAsPhrase(90) // \"1 minute, 30 seconds\"\n* formatTimeAsPhrase(3661) // \"1 hour, 1 minute, 1 second\"\n* formatTimeAsPhrase(-270) // \"4 minutes, 30 seconds remaining\"\n*/\nfunction formatTimeAsPhrase(seconds) {\n\tif (!isValidTime(seconds)) return \"\";\n\tconst negative = seconds < 0;\n\tconst positiveSeconds = Math.abs(seconds);\n\tconst h = Math.floor(positiveSeconds / 3600);\n\tconst m = Math.floor(positiveSeconds / 60 % 60);\n\tconst s = Math.floor(positiveSeconds % 60);\n\tif (positiveSeconds === 0) return `${toTimeUnitPhrase(0, 2)}${negative ? \" remaining\" : \"\"}`;\n\treturn `${[\n\t\th,\n\t\tm,\n\t\ts\n\t].map((value, index) => value > 0 ? toTimeUnitPhrase(value, index) : null).filter(Boolean).join(\", \")}${negative ? \" remaining\" : \"\"}`;\n}\n/**\n* Convert seconds to ISO 8601 duration for datetime attribute.\n*\n* @param seconds - Time in seconds\n* @returns ISO 8601 duration string like \"PT1M30S\"\n*\n* @example\n* secondsToIsoDuration(90) // \"PT1M30S\"\n* secondsToIsoDuration(3661) // \"PT1H1M1S\"\n*/\nfunction secondsToIsoDuration(seconds) {\n\tif (!isValidTime(seconds)) return \"PT0S\";\n\tconst positiveSeconds = Math.abs(seconds);\n\tconst h = Math.floor(positiveSeconds / 3600);\n\tconst m = Math.floor(positiveSeconds / 60 % 60);\n\tconst s = Math.floor(positiveSeconds % 60);\n\tlet duration = \"PT\";\n\tif (h > 0) duration += `${h}H`;\n\tif (m > 0) duration += `${m}M`;\n\tif (s > 0 || duration === \"PT\") duration += `${s}S`;\n\treturn duration;\n}\n\n//#endregion\nexport { formatTime, formatTimeAsPhrase, secondsToIsoDuration };\n//# sourceMappingURL=format.js.map","import { defaults } from \"@videojs/utils/object\";\nimport { isFunction } from \"@videojs/utils/predicate\";\nimport { formatTime, formatTimeAsPhrase, secondsToIsoDuration } from \"@videojs/utils/time\";\n\n//#region src/core/ui/time/time-core.ts\nconst DEFAULT_LABELS = {\n\tcurrent: \"Current time\",\n\tduration: \"Duration\",\n\tremaining: \"Remaining\"\n};\nvar TimeCore = class TimeCore {\n\tstatic defaultProps = {\n\t\ttype: \"current\",\n\t\tnegativeSign: \"-\",\n\t\tlabel: \"\"\n\t};\n\t#props = { ...TimeCore.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, TimeCore.defaultProps);\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\t#getSeconds() {\n\t\tconst media = this.#media;\n\t\tconst { type } = this.#props;\n\t\tswitch (type) {\n\t\t\tcase \"current\": return media.currentTime;\n\t\t\tcase \"duration\": return media.duration;\n\t\t\tcase \"remaining\": return media.currentTime - media.duration;\n\t\t\tdefault: return 0;\n\t\t}\n\t}\n\t#getText() {\n\t\tconst media = this.#media;\n\t\tconst seconds = this.#getSeconds();\n\t\treturn formatTime(Math.abs(seconds), media.duration);\n\t}\n\t#getPhrase() {\n\t\tconst { type } = this.#props;\n\t\tconst seconds = this.#getSeconds();\n\t\tif (type === \"remaining\") return formatTimeAsPhrase(seconds < 0 ? seconds : -Math.abs(seconds));\n\t\treturn formatTimeAsPhrase(seconds);\n\t}\n\t#getDatetime() {\n\t\tconst seconds = this.#getSeconds();\n\t\treturn secondsToIsoDuration(Math.abs(seconds));\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 DEFAULT_LABELS[this.#props.type];\n\t}\n\tgetAttrs(state) {\n\t\treturn {\n\t\t\t\"aria-label\": this.getLabel(state),\n\t\t\t\"aria-valuetext\": state.phrase\n\t\t};\n\t}\n\tgetState() {\n\t\tconst seconds = this.#getSeconds();\n\t\treturn {\n\t\t\ttype: this.#props.type,\n\t\t\tseconds,\n\t\t\tnegative: this.#props.type === \"remaining\" && seconds < 0,\n\t\t\ttext: this.#getText(),\n\t\t\tphrase: this.#getPhrase(),\n\t\t\tdatetime: this.#getDatetime()\n\t\t};\n\t}\n};\n\n//#endregion\nexport { TimeCore };\n//# sourceMappingURL=time-core.js.map","//#region src/core/ui/time/time-data-attrs.ts\nconst TimeDataAttrs = { type: \"data-type\" };\n\n//#endregion\nexport { TimeDataAttrs };\n//# sourceMappingURL=time-data-attrs.js.map","import { SliderCore } from \"../slider/slider-core.js\";\nimport { defaults } from \"@videojs/utils/object\";\nimport { clamp } from \"@videojs/utils/number\";\nimport { formatTimeAsPhrase } from \"@videojs/utils/time\";\n\n//#region src/core/ui/time-slider/time-slider-core.ts\n/** Time-domain slider: maps media time/buffer state to slider state. */\nvar TimeSliderCore = class TimeSliderCore extends SliderCore {\n\tstatic defaultProps = {\n\t\t...SliderCore.defaultProps,\n\t\tlabel: \"Seek\",\n\t\tcommitThrottle: 100\n\t};\n\t#props = { ...TimeSliderCore.defaultProps };\n\t#media = null;\n\tconstructor(props) {\n\t\tsuper();\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, TimeSliderCore.defaultProps);\n\t\tsuper.setProps({\n\t\t\t...props,\n\t\t\tmin: 0\n\t\t});\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst { duration, currentTime, seeking, buffered } = this.#media;\n\t\tconst { dragging, dragPercent } = this.input;\n\t\tsuper.setProps({\n\t\t\t...this.#props,\n\t\t\tmin: 0,\n\t\t\tmax: duration\n\t\t});\n\t\tconst value = dragging ? clamp(dragPercent / 100 * duration, 0, duration) : currentTime;\n\t\tconst base = super.getSliderState(value);\n\t\tconst bufferedEnd = buffered.length > 0 ? buffered[buffered.length - 1][1] : 0;\n\t\tconst bufferPercent = duration > 0 ? bufferedEnd / duration * 100 : 0;\n\t\treturn {\n\t\t\t...base,\n\t\t\tcurrentTime,\n\t\t\tduration,\n\t\t\tseeking,\n\t\t\tbufferPercent\n\t\t};\n\t}\n\tgetLabel(state) {\n\t\treturn super.getLabel(state) || \"Seek\";\n\t}\n\tgetAttrs(state) {\n\t\tconst base = super.getAttrs(state);\n\t\tconst currentPhrase = formatTimeAsPhrase(state.value);\n\t\tconst durationPhrase = formatTimeAsPhrase(state.duration);\n\t\tconst valuetext = durationPhrase ? `${currentPhrase} of ${durationPhrase}` : currentPhrase;\n\t\treturn {\n\t\t\t...base,\n\t\t\t\"aria-valuetext\": valuetext\n\t\t};\n\t}\n};\n\n//#endregion\nexport { TimeSliderCore };\n//# sourceMappingURL=time-slider-core.js.map","import { SliderDataAttrs } from \"../slider/slider-data-attrs.js\";\n\n//#region src/core/ui/time-slider/time-slider-data-attrs.ts\nconst TimeSliderDataAttrs = {\n\t...SliderDataAttrs,\n\tseeking: \"data-seeking\"\n};\n\n//#endregion\nexport { TimeSliderDataAttrs };\n//# sourceMappingURL=time-slider-data-attrs.js.map","import { getTransitionFlags } from \"../transition.js\";\nimport { defaults } from \"@videojs/utils/object\";\n\n//#region src/core/ui/tooltip/tooltip-core.ts\nvar TooltipCore = class TooltipCore {\n\tstatic defaultProps = {\n\t\tside: \"top\",\n\t\talign: \"center\",\n\t\topen: false,\n\t\tdefaultOpen: false,\n\t\tdelay: 600,\n\t\tcloseDelay: 0,\n\t\tdisableHoverablePopup: true,\n\t\tdisabled: false\n\t};\n\t#props = { ...TooltipCore.defaultProps };\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, TooltipCore.defaultProps);\n\t}\n\t#input = null;\n\tsetInput(input) {\n\t\tthis.#input = input;\n\t}\n\tgetState() {\n\t\tconst input = this.#input;\n\t\treturn {\n\t\t\topen: input.active,\n\t\t\tstatus: input.status,\n\t\t\tside: this.#props.side,\n\t\t\talign: this.#props.align,\n\t\t\t...getTransitionFlags(input.status)\n\t\t};\n\t}\n\tgetTriggerAttrs(state, popupId) {\n\t\treturn { \"aria-describedby\": state.open ? popupId : void 0 };\n\t}\n\tgetPopupAttrs(_state) {\n\t\treturn {\n\t\t\tpopover: \"manual\",\n\t\t\trole: \"tooltip\"\n\t\t};\n\t}\n};\n\n//#endregion\nexport { TooltipCore };\n//# sourceMappingURL=tooltip-core.js.map","//#region src/core/ui/tooltip/tooltip-css-vars.ts\nconst TooltipCSSVars = {\n\tsideOffset: \"--media-tooltip-side-offset\",\n\talignOffset: \"--media-tooltip-align-offset\",\n\tanchorWidth: \"--media-tooltip-anchor-width\",\n\tanchorHeight: \"--media-tooltip-anchor-height\",\n\tavailableWidth: \"--media-tooltip-available-width\",\n\tavailableHeight: \"--media-tooltip-available-height\"\n};\n\n//#endregion\nexport { TooltipCSSVars };\n//# sourceMappingURL=tooltip-css-vars.js.map","//#region src/core/ui/tooltip/tooltip-data-attrs.ts\nconst TooltipDataAttrs = {\n\topen: \"data-open\",\n\tside: \"data-side\",\n\talign: \"data-align\",\n\ttransitionStarting: \"data-starting-style\",\n\ttransitionEnding: \"data-ending-style\"\n};\n\n//#endregion\nexport { TooltipDataAttrs };\n//# sourceMappingURL=tooltip-data-attrs.js.map","import { defaults } from \"@videojs/utils/object\";\n\n//#region src/core/ui/tooltip/tooltip-group-core.ts\nvar TooltipGroupCore = class TooltipGroupCore {\n\tstatic defaultProps = {\n\t\tdelay: 600,\n\t\tcloseDelay: 0,\n\t\ttimeout: 400\n\t};\n\t#props = { ...TooltipGroupCore.defaultProps };\n\t#lastCloseTime = 0;\n\t#isOpen = false;\n\tconstructor(props) {\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tthis.#props = defaults(props, TooltipGroupCore.defaultProps);\n\t}\n\tget delay() {\n\t\treturn this.#props.delay;\n\t}\n\tget closeDelay() {\n\t\treturn this.#props.closeDelay;\n\t}\n\tshouldSkipDelay() {\n\t\tif (this.#isOpen) return true;\n\t\treturn Date.now() - this.#lastCloseTime < this.#props.timeout;\n\t}\n\tnotifyOpen() {\n\t\tthis.#isOpen = true;\n\t}\n\tnotifyClose() {\n\t\tthis.#isOpen = false;\n\t\tthis.#lastCloseTime = Date.now();\n\t}\n};\n\n//#endregion\nexport { TooltipGroupCore };\n//# sourceMappingURL=tooltip-group-core.js.map","import { SliderCore } from \"../slider/slider-core.js\";\nimport { defaults } from \"@videojs/utils/object\";\n\n//#region src/core/ui/volume-slider/volume-slider-core.ts\n/** Volume-domain slider: maps media volume/mute state to slider state. */\nvar VolumeSliderCore = class VolumeSliderCore extends SliderCore {\n\tstatic defaultProps = {\n\t\t...SliderCore.defaultProps,\n\t\tlabel: \"Volume\"\n\t};\n\t#media = null;\n\tconstructor(props) {\n\t\tsuper();\n\t\tif (props) this.setProps(props);\n\t}\n\tsetProps(props) {\n\t\tsuper.setProps(defaults(props, VolumeSliderCore.defaultProps));\n\t}\n\tsetMedia(media) {\n\t\tthis.#media = media;\n\t}\n\tgetState() {\n\t\tconst media = this.#media;\n\t\tconst { volume, muted } = media;\n\t\tconst effectivelyMuted = muted || volume === 0;\n\t\tconst { dragging, dragPercent } = this.input;\n\t\tconst volumePercent = volume * 100;\n\t\tconst value = dragging ? this.valueFromPercent(dragPercent) : volumePercent;\n\t\tconst base = super.getSliderState(value);\n\t\treturn {\n\t\t\t...base,\n\t\t\tfillPercent: effectivelyMuted ? 0 : base.fillPercent,\n\t\t\tvolume,\n\t\t\tmuted: effectivelyMuted,\n\t\t\tavailability: media.volumeAvailability\n\t\t};\n\t}\n\tgetLabel(state) {\n\t\treturn super.getLabel(state) || \"Volume\";\n\t}\n\tgetAttrs(state) {\n\t\tconst base = super.getAttrs(state);\n\t\tconst valuetext = `${Math.round(state.value)} percent${state.muted ? \", muted\" : \"\"}`;\n\t\treturn {\n\t\t\t...base,\n\t\t\t\"aria-valuetext\": valuetext\n\t\t};\n\t}\n};\n\n//#endregion\nexport { VolumeSliderCore };\n//# sourceMappingURL=volume-slider-core.js.map","import { SliderDataAttrs } from \"../slider/slider-data-attrs.js\";\n\n//#region src/core/ui/volume-slider/volume-slider-data-attrs.ts\nconst VolumeSliderDataAttrs = {\n\t...SliderDataAttrs,\n\tavailability: \"data-availability\"\n};\n\n//#endregion\nexport { VolumeSliderDataAttrs };\n//# sourceMappingURL=volume-slider-data-attrs.js.map","import type { InferComponentState, InferMediaState, MediaUIComponent, StateAttrMap } from '@videojs/core';\nimport { applyElementProps, applyStateDataAttrs, createButton, logMissingFeature } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, 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 render a media-control button. */\nexport abstract class MediaButtonElement<Core extends MediaUIComponent> extends MediaElement {\n static override properties: PropertyDeclarationMap = {\n label: { type: String },\n disabled: { type: Boolean },\n };\n\n disabled = false;\n label = '';\n\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 protected abstract activate(state: InferMediaState<Core>): void;\n\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.#disconnect = new AbortController();\n\n const buttonProps = createButton({\n onActivate: () => this.activate(this.mediaState.value!),\n isDisabled: () => this.disabled || !this.mediaState.value,\n });\n\n applyElementProps(this, buttonProps, { signal: this.#disconnect.signal });\n\n if (__DEV__ && !this.mediaState.value && this.mediaState.displayName) {\n logMissingFeature(this.localName, this.mediaState.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.mediaState.value;\n\n if (!media) return;\n\n this.core.setMedia(media);\n const state = this.core.getState();\n applyElementProps(this, this.core.getAttrs?.(state) ?? {});\n applyStateDataAttrs(this, state, this.stateAttrMap);\n }\n}\n","import type { StateAttrMap } from '@videojs/core';\nimport { applyStateDataAttrs } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\n\nimport { MediaElement } from './media-element';\n\n/** Shape that compound context values must satisfy for parts to consume. */\nexport interface PartContextValue<State extends object> {\n state: State;\n stateAttrMap: StateAttrMap<State>;\n}\n\n/**\n * Abstract base for compound-component part elements that consume a parent\n * context and apply data attributes from `ctx.state` + `ctx.stateAttrMap`.\n *\n * Subclasses only need to declare the `consumer` property:\n *\n * ```ts\n * export class SliderTrackElement extends ContextPartElement<SliderState> {\n * static readonly tagName = 'media-slider-track';\n * protected readonly consumer = new ContextConsumer(this, { context: sliderContext, subscribe: true });\n * }\n * ```\n */\nexport abstract class ContextPartElement<State extends object> extends MediaElement {\n protected abstract readonly consumer: { value?: PartContextValue<State> | undefined };\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n const ctx = this.consumer.value;\n if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import { type MediaVolumeState, MuteButtonCore, MuteButtonDataAttrs } from '@videojs/core';\nimport { selectVolume } 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 MuteButtonElement extends MediaButtonElement<MuteButtonCore> {\n static readonly tagName = 'media-mute-button';\n\n protected readonly core = new MuteButtonCore();\n protected readonly stateAttrMap = MuteButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectVolume);\n\n protected activate(state: MediaVolumeState): void {\n this.core.toggle(state);\n }\n}\n","import { MuteButtonElement } from '../../ui/mute-button/mute-button-element';\nimport { safeDefine } from '../safe-define';\n\nsafeDefine(MuteButtonElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [MuteButtonElement.tagName]: MuteButtonElement;\n }\n}\n","import { type MediaPlaybackState, PlayButtonCore, PlayButtonDataAttrs } from '@videojs/core';\nimport { selectPlayback } 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 PlayButtonElement extends MediaButtonElement<PlayButtonCore> {\n static readonly tagName = 'media-play-button';\n\n protected readonly core = new PlayButtonCore();\n protected readonly stateAttrMap = PlayButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectPlayback);\n\n protected activate(state: MediaPlaybackState): void {\n this.core.toggle(state);\n }\n}\n","import { PlayButtonElement } from '../../ui/play-button/play-button-element';\nimport { safeDefine } from '../safe-define';\n\nsafeDefine(PlayButtonElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [PlayButtonElement.tagName]: PlayButtonElement;\n }\n}\n","import { type MediaPlaybackRateState, PlaybackRateButtonCore, PlaybackRateButtonDataAttrs } from '@videojs/core';\nimport { selectPlaybackRate } 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 PlaybackRateButtonElement extends MediaButtonElement<PlaybackRateButtonCore> {\n static readonly tagName = 'media-playback-rate-button';\n\n protected readonly core = new PlaybackRateButtonCore();\n protected readonly stateAttrMap = PlaybackRateButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectPlaybackRate);\n\n protected activate(state: MediaPlaybackRateState): void {\n this.core.cycle(state);\n }\n}\n","import { PlaybackRateButtonElement } from '../../ui/playback-rate-button/playback-rate-button-element';\nimport { safeDefine } from '../safe-define';\n\nsafeDefine(PlaybackRateButtonElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [PlaybackRateButtonElement.tagName]: PlaybackRateButtonElement;\n }\n}\n","import { PopoverCore, PopoverDataAttrs, type PopoverInput, type PopoverProps } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createPopover,\n createTransition,\n getAnchorNameStyle,\n getAnchorPositionStyle,\n getPopupPositionRect,\n type PopoverApi,\n type PopoverChangeDetails,\n resolveOffsets,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { SnapshotController } from '@videojs/store/html';\nimport { applyStyles, supportsAnchorPositioning, tryHidePopover, tryShowPopover } from '@videojs/utils/dom';\n\nimport { MediaElement } from '../media-element';\n\nexport class PopoverElement extends MediaElement {\n static readonly tagName = 'media-popover';\n\n static override properties = {\n open: { type: Boolean },\n defaultOpen: { type: Boolean, attribute: 'default-open' },\n side: { type: String },\n align: { type: String },\n modal: { type: Boolean },\n closeOnEscape: { type: Boolean, attribute: 'close-on-escape' },\n closeOnOutsideClick: { type: Boolean, attribute: 'close-on-outside-click' },\n openOnHover: { type: Boolean, attribute: 'open-on-hover' },\n delay: { type: Number },\n closeDelay: { type: Number, attribute: 'close-delay' },\n } satisfies PropertyDeclarationMap<keyof PopoverCore.Props>;\n\n open = PopoverCore.defaultProps.open;\n defaultOpen = PopoverCore.defaultProps.defaultOpen;\n side = PopoverCore.defaultProps.side;\n align = PopoverCore.defaultProps.align;\n modal: PopoverProps['modal'] = PopoverCore.defaultProps.modal;\n closeOnEscape = PopoverCore.defaultProps.closeOnEscape;\n closeOnOutsideClick = PopoverCore.defaultProps.closeOnOutsideClick;\n openOnHover = PopoverCore.defaultProps.openOnHover;\n delay = PopoverCore.defaultProps.delay;\n closeDelay = PopoverCore.defaultProps.closeDelay;\n\n readonly #core = new PopoverCore();\n #popover: PopoverApi | null = null;\n #snapshot: SnapshotController<PopoverInput> | null = null;\n\n // Cleanup controllers\n #disconnect: AbortController | null = null;\n #triggerAbort: AbortController | null = null;\n #currentTrigger: HTMLElement | null = null;\n #positionAbort: AbortController | null = null;\n #positionFrame = 0;\n #resizeObserver: ResizeObserver | null = null;\n #positionTrigger: HTMLElement | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#disconnect = new AbortController();\n\n this.#popover = createPopover({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: PopoverChangeDetails) => {\n this.open = nextOpen;\n this.dispatchEvent(new CustomEvent('open-change', { detail: { open: nextOpen, ...details } }));\n },\n closeOnEscape: () => this.closeOnEscape,\n closeOnOutsideClick: () => this.closeOnOutsideClick,\n openOnHover: () => this.openOnHover,\n delay: () => this.delay,\n closeDelay: () => this.closeDelay,\n });\n\n // Register self as the popup element — the element IS the popup.\n this.#popover.setPopupElement(this);\n\n // Apply popup event handlers (pointerenter/leave, focusout) to self.\n applyElementProps(this, this.#popover.popupProps, { signal: this.#disconnect.signal });\n\n // Subscribe to interaction state for reactive updates.\n // Reuse the controller across connect/disconnect cycles to avoid\n // leaking stale controllers in the host's controller set.\n if (this.#snapshot) {\n this.#snapshot.track(this.#popover.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#popover.input);\n }\n }\n\n protected override firstUpdated(changed: PropertyValues): void {\n super.firstUpdated(changed);\n\n // Uncontrolled mode: open if `defaultOpen` is set. Controlled `open`\n // is already synced by `willUpdate` on the first render cycle.\n if (this.defaultOpen && !this.open) {\n this.#popover?.open();\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupPositioning();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#cleanupPositioning();\n this.#cleanupTrigger();\n this.#popover?.destroy();\n super.destroyCallback();\n }\n\n protected override willUpdate(changed: PropertyValues): void {\n super.willUpdate(changed);\n this.#core.setProps(this);\n\n // Sync controlled open state\n if (this.#popover && changed.has('open')) {\n const { active: interactionOpen } = this.#popover.input.current;\n if (this.open !== interactionOpen) {\n if (this.open) {\n this.#popover.open();\n } else {\n this.#popover.close();\n }\n }\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n if (!this.#popover) return;\n\n // Discover trigger via commandfor linkage.\n const triggerEl = this.#findTrigger();\n this.#syncTrigger(triggerEl);\n\n // Derive state from core + input.\n const input = this.#popover.input.current;\n this.#core.setInput(input);\n const state = this.#core.getState();\n\n // Apply popup ARIA and data attributes to self.\n applyElementProps(this, this.#core.getPopupAttrs(state));\n applyStateDataAttrs(this, state, PopoverDataAttrs);\n\n // Show/hide via Popover API AFTER data attributes are applied so\n // `data-starting-style` is present before the first visible frame.\n if (state.open) {\n tryShowPopover(this);\n } else {\n tryHidePopover(this);\n }\n\n // Apply trigger ARIA and anchor-name to the discovered trigger.\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, this.#core.getTriggerAttrs(state, this.id));\n applyStyles(this.#currentTrigger, getAnchorNameStyle(this.id));\n }\n\n // Skip positioning when closed — no rects to measure.\n if (!state.open) {\n this.#cleanupPositioning();\n return;\n }\n\n // Apply positioning styles to self.\n const posOpts = { side: state.side, align: state.align };\n\n if (supportsAnchorPositioning()) {\n // Native CSS Anchor Positioning — no JS rect measurements needed.\n applyStyles(this, getAnchorPositionStyle(this.id, posOpts));\n } else {\n // JS fallback: measure rects and resolve CSS var offsets.\n const triggerRect = this.#currentTrigger?.getBoundingClientRect();\n const selfRect = getPopupPositionRect(this);\n const boundaryRect = document.documentElement.getBoundingClientRect();\n const offsets = resolveOffsets(this);\n applyStyles(this, getAnchorPositionStyle(this.id, posOpts, triggerRect, selfRect, boundaryRect, offsets));\n }\n\n this.#syncPositioning();\n }\n\n // --- Trigger discovery ---\n\n #findTrigger(): HTMLElement | null {\n if (!this.id) return null;\n const root = this.getRootNode() as Document | ShadowRoot;\n return root.querySelector<HTMLElement>(`[commandfor=\"${this.id}\"]`);\n }\n\n #syncTrigger(triggerEl: HTMLElement | null): void {\n if (triggerEl === this.#currentTrigger) return;\n\n this.#cleanupPositioning();\n this.#cleanupTrigger();\n this.#currentTrigger = triggerEl;\n this.#popover?.setTriggerElement(triggerEl);\n\n if (triggerEl && this.#popover) {\n this.#triggerAbort = new AbortController();\n applyElementProps(triggerEl, this.#popover.triggerProps, { signal: this.#triggerAbort.signal });\n }\n }\n\n #cleanupTrigger(): void {\n if (this.#currentTrigger) {\n // Remove ARIA attributes and anchor-name style from the old trigger.\n applyElementProps(this.#currentTrigger, {\n 'aria-expanded': undefined,\n 'aria-haspopup': undefined,\n 'aria-controls': undefined,\n });\n this.#currentTrigger.style.removeProperty('anchor-name');\n }\n\n this.#triggerAbort?.abort();\n this.#triggerAbort = null;\n this.#currentTrigger = null;\n }\n\n #syncPositioning(): void {\n if (supportsAnchorPositioning()) return;\n\n const triggerEl = this.#currentTrigger;\n\n if (!triggerEl) return;\n if (this.#positionAbort && this.#positionTrigger === triggerEl) return;\n\n this.#cleanupPositioning();\n this.#positionAbort = new AbortController();\n this.#positionTrigger = triggerEl;\n const { signal } = this.#positionAbort;\n\n const reposition = () => {\n cancelAnimationFrame(this.#positionFrame);\n this.#positionFrame = requestAnimationFrame(() => {\n if (signal.aborted) return;\n this.requestUpdate();\n });\n };\n\n window.addEventListener('scroll', reposition, { capture: true, passive: true, signal });\n window.addEventListener('resize', reposition, { signal });\n\n if (typeof ResizeObserver === 'function') {\n this.#resizeObserver = new ResizeObserver(() => {\n reposition();\n });\n this.#resizeObserver.observe(triggerEl);\n this.#resizeObserver.observe(this);\n }\n\n reposition();\n }\n\n #cleanupPositioning(): void {\n this.#positionAbort?.abort();\n this.#positionAbort = null;\n this.#positionTrigger = null;\n cancelAnimationFrame(this.#positionFrame);\n this.#positionFrame = 0;\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = null;\n }\n}\n","import { PopoverElement } from '../../ui/popover/popover-element';\nimport { safeDefine } from '../safe-define';\n\nsafeDefine(PopoverElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [PopoverElement.tagName]: PopoverElement;\n }\n}\n","import { type MediaTimeState, SeekButtonCore, SeekButtonDataAttrs } from '@videojs/core';\nimport { selectTime } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap } from '@videojs/element';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaButtonElement } from '../media-button-element';\n\nexport class SeekButtonElement extends MediaButtonElement<SeekButtonCore> {\n static readonly tagName = 'media-seek-button';\n\n static override properties: PropertyDeclarationMap = {\n ...MediaButtonElement.properties,\n seconds: { type: Number },\n };\n\n seconds = SeekButtonCore.defaultProps.seconds;\n\n protected readonly core = new SeekButtonCore();\n protected readonly stateAttrMap = SeekButtonDataAttrs;\n protected readonly mediaState = new PlayerController(this, playerContext, selectTime);\n\n protected activate(state: MediaTimeState): void {\n this.core.seek(state);\n }\n}\n","import { SeekButtonElement } from '../../ui/seek-button/seek-button-element';\nimport { safeDefine } from '../safe-define';\n\nsafeDefine(SeekButtonElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [SeekButtonElement.tagName]: SeekButtonElement;\n }\n}\n","import { TimeCore, TimeDataAttrs, type TimeType } from '@videojs/core';\nimport { applyElementProps, applyStateDataAttrs, logMissingFeature, selectTime } 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 TimeElement extends MediaElement {\n static readonly tagName = 'media-time';\n\n static override properties = {\n type: { type: String },\n negativeSign: { type: String, attribute: 'negative-sign' },\n label: { type: String },\n } satisfies PropertyDeclarationMap<keyof TimeCore.Props>;\n\n type: TimeType = TimeCore.defaultProps.type;\n negativeSign = TimeCore.defaultProps.negativeSign;\n label = TimeCore.defaultProps.label;\n\n readonly #core = new TimeCore();\n readonly #state = new PlayerController(this, playerContext, selectTime);\n\n readonly #signSpan = document.createElement('span');\n readonly #textNode = document.createTextNode('');\n\n constructor() {\n super();\n\n this.#signSpan.setAttribute('aria-hidden', 'true');\n this.#signSpan.hidden = true;\n\n this.appendChild(this.#signSpan);\n this.appendChild(this.#textNode);\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (__DEV__ && !this.#state.value) {\n logMissingFeature(this.localName, this.#state.displayName!);\n }\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.setMedia(media);\n const state = this.#core.getState();\n\n this.#signSpan.hidden = !state.negative;\n this.#signSpan.textContent = state.negative ? this.negativeSign : '';\n this.#textNode.textContent = state.text;\n\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, TimeDataAttrs);\n }\n}\n","import { MediaElement } from '../media-element';\n\nexport class TimeGroupElement extends MediaElement {\n static readonly tagName = 'media-time-group';\n\n // Future: Could provide context for hoursDisplay to children via Lit context\n}\n","import { MediaElement } from '../media-element';\n\nexport class TimeSeparatorElement extends MediaElement {\n static readonly tagName = 'media-time-separator';\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Set aria-hidden for accessibility\n this.setAttribute('aria-hidden', 'true');\n\n // Set default content if empty\n if (!this.textContent?.trim()) {\n this.textContent = '/';\n }\n }\n}\n","import { TimeElement } from '../../ui/time/time-element';\nimport { TimeGroupElement } from '../../ui/time/time-group-element';\nimport { TimeSeparatorElement } from '../../ui/time/time-separator-element';\nimport { safeDefine } from '../safe-define';\n\nsafeDefine(TimeElement);\nsafeDefine(TimeGroupElement);\nsafeDefine(TimeSeparatorElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TimeElement.tagName]: TimeElement;\n }\n}\n","import type { SliderState, StateAttrMap } from '@videojs/core';\nimport type { SliderThumbProps } from '@videojs/core/dom';\nimport { createContext } from '@videojs/element/context';\n\nexport interface SliderContextValue {\n /** Base slider state — children use this for data attributes and value display. */\n state: SliderState;\n /** Maps state keys to `data-*` attribute names for part elements. */\n stateAttrMap: StateAttrMap<SliderState>;\n /** Domain value at the current pointer position (e.g., seconds for time, percent for volume). */\n pointerValue: number;\n /** ARIA attributes for the thumb element (role, tabindex, aria-value*, etc.). */\n thumbAttrs: Record<string, string | number | boolean | undefined>;\n /** Keyboard and focus event handlers for the thumb element. */\n thumbProps: SliderThumbProps;\n /** Optional formatter for value display. Receives domain value and value type. */\n formatValue?: ((value: number, type: 'current' | 'pointer') => string) | undefined;\n}\n\nconst SLIDER_CONTEXT_KEY = Symbol('@videojs/slider');\n\nexport const sliderContext = createContext<SliderContextValue>(SLIDER_CONTEXT_KEY);\n","import type { SliderState } from '@videojs/core';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { sliderContext } from './context';\n\nexport class SliderBufferElement extends ContextPartElement<SliderState> {\n static readonly tagName = 'media-slider-buffer';\n\n protected readonly consumer = new ContextConsumer(this, { context: sliderContext, subscribe: true });\n}\n","import type { SliderState } from '@videojs/core';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { sliderContext } from './context';\n\nexport class SliderFillElement extends ContextPartElement<SliderState> {\n static readonly tagName = 'media-slider-fill';\n\n protected readonly consumer = new ContextConsumer(this, { context: sliderContext, subscribe: true });\n}\n","import type { SliderPreviewOverflow } from '@videojs/core/dom';\nimport { applyStateDataAttrs, getSliderPreviewStyle } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { applyStyles } from '@videojs/utils/dom';\n\nimport { MediaElement } from '../media-element';\nimport { sliderContext } from './context';\n\nexport class SliderPreviewElement extends MediaElement {\n static readonly tagName = 'media-slider-preview';\n\n static override properties = {\n overflow: { type: String },\n } satisfies PropertyDeclarationMap<'overflow'>;\n\n overflow: SliderPreviewOverflow = 'clamp';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n #resizeObserver: ResizeObserver | null = null;\n #width = 0;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n this.#resizeObserver = new ResizeObserver(([entry]) => {\n this.#width = entry!.contentRect.width;\n this.#applyPosition();\n });\n\n this.#resizeObserver.observe(this);\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = null;\n }\n\n #applyPosition(): void {\n applyStyles(this, getSliderPreviewStyle(this.#width, this.overflow));\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (ctx) applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n\n this.#applyPosition();\n }\n}\n","import { applyElementProps, applyStateDataAttrs } from '@videojs/core/dom';\nimport type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { sliderContext } from './context';\n\nexport class SliderThumbElement extends MediaElement {\n static readonly tagName = 'media-slider-thumb';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n #disconnect: AbortController | null = null;\n #thumbPropsApplied = false;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#disconnect = new AbortController();\n this.#thumbPropsApplied = false;\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n this.#thumbPropsApplied = false;\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (!ctx) return;\n\n // Apply keyboard and focus handlers once — they don't change per slider instance.\n if (!this.#thumbPropsApplied && this.#disconnect) {\n applyElementProps(this, ctx.thumbProps, { signal: this.#disconnect.signal });\n this.#thumbPropsApplied = true;\n }\n\n // Apply ARIA attributes every update (values change as slider moves).\n applyElementProps(this, ctx.thumbAttrs);\n\n // Apply state data attributes.\n applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import {\n type MediaTextTrackState,\n mapCuesToThumbnails,\n ThumbnailCore,\n ThumbnailDataAttrs,\n type ThumbnailImage,\n type ThumbnailResizeResult,\n} from '@videojs/core';\nimport type { ThumbnailApi } from '@videojs/core/dom';\nimport { applyElementProps, applyStateDataAttrs, createThumbnail, selectTextTrack } 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\nconst SHADOW_CSS = `\\\n:host {\n display: inline-block;\n overflow: hidden;\n}\nimg {\n display: block;\n}`;\n\nexport class ThumbnailElement extends MediaElement {\n static readonly tagName = 'media-thumbnail';\n\n static override properties = {\n time: { type: Number },\n crossOrigin: { type: String, attribute: 'crossorigin' },\n loading: { type: String },\n fetchPriority: { type: String, attribute: 'fetchpriority' },\n } satisfies PropertyDeclarationMap<keyof ThumbnailCore.Props>;\n\n time = 0;\n crossOrigin: ThumbnailCore.Props['crossOrigin'];\n loading: ThumbnailCore.Props['loading'];\n fetchPriority: ThumbnailCore.Props['fetchPriority'];\n\n readonly #core = new ThumbnailCore();\n readonly #img = document.createElement('img');\n readonly #textTracks = new PlayerController(this, playerContext, selectTextTrack);\n\n #thumbnails: ThumbnailImage[] = [];\n #externalThumbnails: ThumbnailImage[] | undefined;\n #lastTextTrack: MediaTextTrackState | undefined;\n #api: ThumbnailApi | null = null;\n\n constructor() {\n super();\n\n const shadow = this.attachShadow({ mode: 'open' });\n\n const style = document.createElement('style');\n style.textContent = SHADOW_CSS;\n shadow.appendChild(style);\n\n this.#img.alt = '';\n this.#img.setAttribute('part', 'img');\n this.#img.setAttribute('aria-hidden', 'true');\n this.#img.setAttribute('decoding', 'async');\n shadow.appendChild(this.#img);\n }\n\n /**\n * Set thumbnail images directly, bypassing the automatic `<track>` detection.\n * When set, this takes priority over the text track path.\n */\n get thumbnails(): ThumbnailImage[] | undefined {\n return this.#externalThumbnails;\n }\n\n set thumbnails(value: ThumbnailImage[] | undefined) {\n this.#externalThumbnails = value;\n this.requestUpdate();\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n if (this.destroyed) return;\n\n this.#api = createThumbnail({\n getContainer: () => this,\n getImg: () => this.#img,\n onStateChange: () => this.requestUpdate(),\n });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n }\n\n override destroyCallback(): void {\n this.#api?.destroy();\n super.destroyCallback();\n }\n\n protected override update(changed: PropertyValues): void {\n super.update(changed);\n\n // Resolve thumbnails: external prop takes priority over auto <track> path.\n if (this.#externalThumbnails) {\n this.#thumbnails = this.#externalThumbnails;\n } else {\n const textTrack = this.#textTracks.value;\n\n if (textTrack !== this.#lastTextTrack) {\n this.#lastTextTrack = textTrack;\n this.#thumbnails =\n textTrack && textTrack.thumbnailCues.length > 0\n ? mapCuesToThumbnails(textTrack.thumbnailCues, textTrack.thumbnailTrackSrc ?? undefined)\n : [];\n }\n }\n\n const thumbnail = this.#core.findActiveThumbnail(this.#thumbnails, this.time);\n\n // Sync img attributes from element properties.\n applyElementProps(this.#img, {\n crossorigin: this.crossOrigin || undefined,\n loading: this.loading,\n fetchpriority: this.fetchPriority,\n });\n\n // Track src changes via the thumbnail API.\n this.#api?.updateSrc(thumbnail?.url);\n\n if (!thumbnail) {\n this.#img.removeAttribute('src');\n this.#resetStyles();\n\n const state = this.#core.getState(false, false, undefined);\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, ThumbnailDataAttrs);\n return;\n }\n\n // Set the img src directly (imperative DOM).\n if (this.#img.getAttribute('src') !== thumbnail.url) {\n this.#img.src = thumbnail.url;\n }\n\n const api = this.#api;\n const state = this.#core.getState(api?.loading ?? false, api?.error ?? false, thumbnail);\n applyElementProps(this, this.#core.getAttrs(state));\n applyStateDataAttrs(this, state, ThumbnailDataAttrs);\n\n if (api?.naturalWidth && api.naturalHeight) {\n const constraints = api.readConstraints();\n const result = this.#core.resize(thumbnail, api.naturalWidth, api.naturalHeight, constraints);\n\n if (result) {\n this.#applyResize(result);\n }\n }\n }\n\n #applyResize(result: ThumbnailResizeResult): void {\n this.style.width = `${result.containerWidth}px`;\n this.style.height = `${result.containerHeight}px`;\n\n const imgStyle = this.#img.style;\n imgStyle.width = `${result.imageWidth}px`;\n imgStyle.height = `${result.imageHeight}px`;\n imgStyle.maxWidth = 'none';\n imgStyle.transform =\n result.offsetX || result.offsetY ? `translate(-${result.offsetX}px, -${result.offsetY}px)` : '';\n }\n\n #resetStyles(): void {\n this.style.width = '';\n this.style.height = '';\n\n const imgStyle = this.#img.style;\n imgStyle.width = '';\n imgStyle.height = '';\n imgStyle.maxWidth = '';\n imgStyle.transform = '';\n }\n}\n","import type { PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ThumbnailElement } from '../thumbnail/thumbnail-element';\nimport { sliderContext } from './context';\n\n// @ts-expect-error TS2417 — tagName narrows to a different literal for custom element registration.\nexport class SliderThumbnailElement extends ThumbnailElement {\n static override readonly tagName = 'media-slider-thumbnail';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n protected override update(changed: PropertyValues): void {\n const ctx = this.#ctx.value;\n if (ctx) this.time = ctx.pointerValue;\n super.update(changed);\n }\n}\n","import type { SliderState } from '@videojs/core';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { ContextPartElement } from '../context-part-element';\nimport { sliderContext } from './context';\n\nexport class SliderTrackElement extends ContextPartElement<SliderState> {\n static readonly tagName = 'media-slider-track';\n\n protected readonly consumer = new ContextConsumer(this, { context: sliderContext, subscribe: true });\n}\n","import { applyStateDataAttrs } from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { sliderContext } from './context';\n\nexport class SliderValueElement extends MediaElement {\n static readonly tagName = 'media-slider-value';\n\n static override properties = {\n type: { type: String },\n } satisfies PropertyDeclarationMap<'type'>;\n\n type: 'current' | 'pointer' = 'current';\n\n readonly #ctx = new ContextConsumer(this, {\n context: sliderContext,\n subscribe: true,\n });\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.setAttribute('aria-live', 'off');\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n const ctx = this.#ctx.value;\n if (!ctx) return;\n\n const value = this.type === 'pointer' ? ctx.pointerValue : ctx.state.value;\n\n this.textContent = ctx.formatValue ? ctx.formatValue(value, this.type) : String(Math.round(value));\n\n applyStateDataAttrs(this, ctx.state, ctx.stateAttrMap);\n }\n}\n","import { TimeSliderCore, TimeSliderDataAttrs } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createSlider,\n getTimeSliderCSSVars,\n logMissingFeature,\n type SliderApi,\n selectBuffer,\n selectTime,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { applyStyles, isRTL } from '@videojs/utils/dom';\nimport { formatTime } from '@videojs/utils/time';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\nimport { sliderContext } from '../slider/context';\n\nexport class TimeSliderElement extends MediaElement {\n static readonly tagName = 'media-time-slider';\n\n static override properties = {\n label: { type: String },\n commitThrottle: { type: Number, attribute: 'commit-throttle' },\n step: { type: Number },\n largeStep: { type: Number, attribute: 'large-step' },\n orientation: { type: String },\n disabled: { type: Boolean },\n thumbAlignment: { type: String, attribute: 'thumb-alignment' },\n } satisfies PropertyDeclarationMap<Exclude<keyof TimeSliderCore.Props, 'value' | 'min' | 'max'>>;\n\n label = TimeSliderCore.defaultProps.label;\n commitThrottle = TimeSliderCore.defaultProps.commitThrottle;\n step = TimeSliderCore.defaultProps.step;\n largeStep = TimeSliderCore.defaultProps.largeStep;\n orientation = TimeSliderCore.defaultProps.orientation;\n disabled = TimeSliderCore.defaultProps.disabled;\n thumbAlignment = TimeSliderCore.defaultProps.thumbAlignment;\n\n readonly #core = new TimeSliderCore();\n readonly #provider = new ContextProvider(this, { context: sliderContext });\n readonly #timeState = new PlayerController(this, playerContext, selectTime);\n readonly #bufferState = new PlayerController(this, playerContext, selectBuffer);\n\n #slider: SliderApi | null = null;\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 const signal = this.#disconnect.signal;\n\n this.#slider = createSlider({\n getElement: () => this,\n getThumbElement: () => this.querySelector<HTMLElement>('media-slider-thumb'),\n getOrientation: () => this.orientation,\n isRTL: () => isRTL(this),\n isDisabled: () => this.disabled || !this.#timeState.value,\n getPercent: () => {\n const media = this.#timeState.value;\n if (!media) return 0;\n return this.#core.percentFromValue(media.currentTime);\n },\n getStepPercent: () => this.#core.getStepPercent(),\n getLargeStepPercent: () => this.#core.getLargeStepPercent(),\n onValueCommit: (percent) => {\n const media = this.#timeState.value;\n if (media) media.seek(this.#core.rawValueFromPercent(percent));\n },\n commitThrottle: this.commitThrottle,\n onDragStart: () => {\n this.dispatchEvent(new CustomEvent('drag-start', { bubbles: true }));\n },\n onDragEnd: () => {\n this.dispatchEvent(new CustomEvent('drag-end', { bubbles: true }));\n },\n adjustPercent: (raw, thumbSize, trackSize) => this.#core.adjustPercentForAlignment(raw, thumbSize, trackSize),\n onResize: () => this.requestUpdate(),\n });\n\n applyElementProps(this, this.#slider.rootProps, { signal });\n applyStyles(this, this.#slider.rootStyle);\n this.#slider.input.subscribe(() => this.requestUpdate(), { signal });\n\n if (__DEV__ && !this.#timeState.value) {\n logMissingFeature(this.localName, this.#timeState.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#slider?.destroy();\n super.destroyCallback();\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 if (!this.#slider) return;\n\n const time = this.#timeState.value;\n const buffer = this.#bufferState.value;\n if (!time) return;\n\n this.#core.setInput(this.#slider.input.current);\n const media = { ...time, ...(buffer ?? { buffered: [], seekable: [] }) };\n this.#core.setMedia(media);\n const state = this.#core.getState();\n\n const cssVars = getTimeSliderCSSVars(this.#slider.adjustForAlignment(state));\n\n applyStyles(this, cssVars);\n\n // Domain-specific data attributes on root (includes data-seeking).\n applyStateDataAttrs(this, state, TimeSliderDataAttrs);\n\n // Provide context to child elements with base slider data attrs.\n this.#provider.setValue({\n state,\n stateAttrMap: TimeSliderDataAttrs,\n pointerValue: this.#core.valueFromPercent(state.pointerPercent),\n thumbAttrs: this.#core.getAttrs(state),\n thumbProps: this.#slider.thumbProps,\n formatValue: (value) => formatTime(value, state.duration),\n });\n }\n}\n","import { SliderBufferElement } from '../../ui/slider/slider-buffer-element';\nimport { SliderFillElement } from '../../ui/slider/slider-fill-element';\nimport { SliderPreviewElement } from '../../ui/slider/slider-preview-element';\nimport { SliderThumbElement } from '../../ui/slider/slider-thumb-element';\nimport { SliderThumbnailElement } from '../../ui/slider/slider-thumbnail-element';\nimport { SliderTrackElement } from '../../ui/slider/slider-track-element';\nimport { SliderValueElement } from '../../ui/slider/slider-value-element';\nimport { TimeSliderElement } from '../../ui/time-slider/time-slider-element';\nimport { safeDefine } from '../safe-define';\n\n// Parent slider first — sub-elements consume its context.\nsafeDefine(TimeSliderElement);\nsafeDefine(SliderBufferElement);\nsafeDefine(SliderFillElement);\nsafeDefine(SliderPreviewElement);\nsafeDefine(SliderThumbElement);\nsafeDefine(SliderThumbnailElement);\nsafeDefine(SliderTrackElement);\nsafeDefine(SliderValueElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TimeSliderElement.tagName]: TimeSliderElement;\n }\n}\n","import type { TooltipGroupCore } from '@videojs/core';\nimport { createContext } from '@videojs/element/context';\n\nconst TOOLTIP_GROUP_CONTEXT_KEY = Symbol('@videojs/tooltip-group');\n\nexport const tooltipGroupContext = createContext<TooltipGroupCore>(TOOLTIP_GROUP_CONTEXT_KEY);\n","import { TooltipCore, TooltipCSSVars, TooltipDataAttrs, type TooltipInput } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createTooltip,\n createTransition,\n getAnchorNameStyle,\n getAnchorPositionStyle,\n getPopupPositionRect,\n resolveOffsets,\n type TooltipApi,\n type TooltipChangeDetails,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport { SnapshotController } from '@videojs/store/html';\nimport { applyStyles, supportsAnchorPositioning, tryHidePopover, tryShowPopover } from '@videojs/utils/dom';\n\nimport { MediaElement } from '../media-element';\nimport { tooltipGroupContext } from './context';\n\nexport class TooltipElement extends MediaElement {\n static readonly tagName = 'media-tooltip';\n\n static override properties = {\n open: { type: Boolean },\n defaultOpen: { type: Boolean, attribute: 'default-open' },\n side: { type: String },\n align: { type: String },\n delay: { type: Number },\n closeDelay: { type: Number, attribute: 'close-delay' },\n disableHoverablePopup: { type: Boolean, attribute: 'disable-hoverable-popup' },\n disabled: { type: Boolean },\n } satisfies PropertyDeclarationMap<keyof TooltipCore.Props>;\n\n open = TooltipCore.defaultProps.open;\n defaultOpen = TooltipCore.defaultProps.defaultOpen;\n side = TooltipCore.defaultProps.side;\n align = TooltipCore.defaultProps.align;\n delay = TooltipCore.defaultProps.delay;\n closeDelay = TooltipCore.defaultProps.closeDelay;\n disableHoverablePopup = TooltipCore.defaultProps.disableHoverablePopup;\n disabled = TooltipCore.defaultProps.disabled;\n\n readonly #core = new TooltipCore();\n readonly #groupConsumer = new ContextConsumer(this, { context: tooltipGroupContext });\n #tooltip: TooltipApi | null = null;\n #snapshot: SnapshotController<TooltipInput> | null = null;\n\n // Cleanup controllers\n #disconnect: AbortController | null = null;\n #triggerAbort: AbortController | null = null;\n #currentTrigger: HTMLElement | null = null;\n #positionAbort: AbortController | null = null;\n #positionFrame = 0;\n #resizeObserver: ResizeObserver | null = null;\n #positionTrigger: HTMLElement | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.#disconnect = new AbortController();\n\n this.#tooltip = createTooltip({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: TooltipChangeDetails) => {\n this.open = nextOpen;\n this.dispatchEvent(new CustomEvent('open-change', { detail: { open: nextOpen, ...details } }));\n },\n delay: () => this.delay,\n closeDelay: () => this.closeDelay,\n disableHoverablePopup: () => this.disableHoverablePopup,\n disabled: () => this.disabled,\n // Lazy getter — group may arrive after connect via context.\n group: () => this.#groupConsumer.value,\n });\n\n // Register self as the popup element — the element IS the popup.\n this.#tooltip.setPopupElement(this);\n\n // Apply popup event handlers (pointerenter/leave, focusout) to self.\n applyElementProps(this, this.#tooltip.popupProps, { signal: this.#disconnect.signal });\n\n // Subscribe to interaction state for reactive updates.\n if (this.#snapshot) {\n this.#snapshot.track(this.#tooltip.input);\n } else {\n this.#snapshot = new SnapshotController(this, this.#tooltip.input);\n }\n }\n\n protected override firstUpdated(changed: PropertyValues): void {\n super.firstUpdated(changed);\n\n // Uncontrolled mode: open if `defaultOpen` is set. Controlled `open`\n // is already synced by `willUpdate` on the first render cycle.\n if (this.defaultOpen && !this.open) {\n this.#tooltip?.open();\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#cleanupPositioning();\n this.#cleanupTrigger();\n this.#tooltip?.destroy();\n this.#tooltip = null;\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 // Sync controlled open state\n if (this.#tooltip && changed.has('open')) {\n const { active: interactionOpen } = this.#tooltip.input.current;\n if (this.open !== interactionOpen) {\n if (this.open) {\n this.#tooltip.open();\n } else {\n this.#tooltip.close();\n }\n }\n }\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n if (!this.#tooltip) return;\n\n // Discover trigger via commandfor linkage.\n const triggerEl = this.#findTrigger();\n this.#syncTrigger(triggerEl);\n\n // Derive state from core + input.\n const input = this.#tooltip.input.current;\n this.#core.setInput(input);\n const state = this.#core.getState();\n\n // Apply popup ARIA and data attributes to self.\n applyElementProps(this, this.#core.getPopupAttrs(state));\n applyStateDataAttrs(this, state, TooltipDataAttrs);\n\n // Show/hide via Popover API AFTER data attributes are applied so\n // `data-starting-style` is present before the first visible frame.\n if (state.open) {\n tryShowPopover(this);\n } else {\n tryHidePopover(this);\n }\n\n // Apply trigger ARIA and anchor-name to the discovered trigger.\n if (this.#currentTrigger) {\n applyElementProps(this.#currentTrigger, this.#core.getTriggerAttrs(state, this.id));\n applyStyles(this.#currentTrigger, getAnchorNameStyle(this.id));\n }\n\n // Skip positioning when closed — no rects to measure.\n if (!state.open) {\n this.#cleanupPositioning();\n return;\n }\n\n // Apply positioning styles to self.\n const posOpts = { side: state.side, align: state.align };\n\n if (supportsAnchorPositioning()) {\n // Native CSS Anchor Positioning — no JS rect measurements needed.\n applyStyles(\n this,\n getAnchorPositionStyle(this.id, posOpts, undefined, undefined, undefined, undefined, TooltipCSSVars)\n );\n } else {\n // JS fallback: measure rects and resolve CSS var offsets.\n const triggerRect = this.#currentTrigger?.getBoundingClientRect();\n const selfRect = getPopupPositionRect(this);\n const boundaryRect = document.documentElement.getBoundingClientRect();\n const offsets = resolveOffsets(this, TooltipCSSVars);\n applyStyles(\n this,\n getAnchorPositionStyle(this.id, posOpts, triggerRect, selfRect, boundaryRect, offsets, TooltipCSSVars)\n );\n }\n\n this.#syncPositioning();\n }\n\n // --- Trigger discovery ---\n\n #findTrigger(): HTMLElement | null {\n if (!this.id) return null;\n const root = this.getRootNode() as Document | ShadowRoot;\n return root.querySelector<HTMLElement>(`[commandfor=\"${this.id}\"]`);\n }\n\n #syncTrigger(triggerEl: HTMLElement | null): void {\n if (triggerEl === this.#currentTrigger) return;\n\n this.#cleanupPositioning();\n this.#cleanupTrigger();\n this.#currentTrigger = triggerEl;\n this.#tooltip?.setTriggerElement(triggerEl);\n\n if (triggerEl && this.#tooltip) {\n this.#triggerAbort = new AbortController();\n applyElementProps(triggerEl, this.#tooltip.triggerProps, { signal: this.#triggerAbort.signal });\n }\n }\n\n #cleanupTrigger(): void {\n if (this.#currentTrigger) {\n // Remove ARIA attributes and anchor-name style from the old trigger.\n applyElementProps(this.#currentTrigger, {\n 'aria-describedby': undefined,\n });\n this.#currentTrigger.style.removeProperty('anchor-name');\n }\n\n this.#triggerAbort?.abort();\n this.#triggerAbort = null;\n this.#currentTrigger = null;\n }\n\n #syncPositioning(): void {\n if (supportsAnchorPositioning()) return;\n\n const triggerEl = this.#currentTrigger;\n\n if (!triggerEl) return;\n if (this.#positionAbort && this.#positionTrigger === triggerEl) return;\n\n this.#cleanupPositioning();\n this.#positionAbort = new AbortController();\n this.#positionTrigger = triggerEl;\n const { signal } = this.#positionAbort;\n\n const reposition = () => {\n cancelAnimationFrame(this.#positionFrame);\n this.#positionFrame = requestAnimationFrame(() => {\n if (signal.aborted) return;\n this.requestUpdate();\n });\n };\n\n window.addEventListener('scroll', reposition, { capture: true, passive: true, signal });\n window.addEventListener('resize', reposition, { signal });\n\n if (typeof ResizeObserver === 'function') {\n this.#resizeObserver = new ResizeObserver(() => {\n reposition();\n });\n this.#resizeObserver.observe(triggerEl);\n this.#resizeObserver.observe(this);\n }\n\n reposition();\n }\n\n #cleanupPositioning(): void {\n this.#positionAbort?.abort();\n this.#positionAbort = null;\n this.#positionTrigger = null;\n cancelAnimationFrame(this.#positionFrame);\n this.#positionFrame = 0;\n this.#resizeObserver?.disconnect();\n this.#resizeObserver = null;\n }\n}\n","import { TooltipElement } from '../../ui/tooltip/tooltip-element';\nimport { safeDefine } from '../safe-define';\n\nsafeDefine(TooltipElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TooltipElement.tagName]: TooltipElement;\n }\n}\n","import { TooltipGroupCore } from '@videojs/core';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\n\nimport { MediaElement } from '../media-element';\nimport { tooltipGroupContext } from './context';\n\nexport class TooltipGroupElement extends MediaElement {\n static readonly tagName = 'media-tooltip-group';\n\n static override properties = {\n delay: { type: Number },\n closeDelay: { type: Number, attribute: 'close-delay' },\n timeout: { type: Number },\n } satisfies PropertyDeclarationMap<keyof TooltipGroupCore.Props>;\n\n delay = TooltipGroupCore.defaultProps.delay;\n closeDelay = TooltipGroupCore.defaultProps.closeDelay;\n timeout = TooltipGroupCore.defaultProps.timeout;\n\n readonly #core = new TooltipGroupCore();\n readonly #provider = new ContextProvider(this, { context: tooltipGroupContext, initialValue: this.#core });\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n this.#core.setProps(this);\n this.#provider.setValue(this.#core);\n }\n}\n","import { TooltipGroupElement } from '../../ui/tooltip/tooltip-group-element';\nimport { safeDefine } from '../safe-define';\n\nsafeDefine(TooltipGroupElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [TooltipGroupElement.tagName]: TooltipGroupElement;\n }\n}\n","import { VolumeSliderCore, VolumeSliderDataAttrs } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createSlider,\n getSliderCSSVars,\n logMissingFeature,\n type SliderApi,\n selectVolume,\n} from '@videojs/core/dom';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { applyStyles, isRTL } from '@videojs/utils/dom';\n\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/player-controller';\nimport { MediaElement } from '../media-element';\nimport { sliderContext } from '../slider/context';\n\nexport class VolumeSliderElement extends MediaElement {\n static readonly tagName = 'media-volume-slider';\n\n static override properties = {\n label: { type: String },\n step: { type: Number },\n largeStep: { type: Number, attribute: 'large-step' },\n orientation: { type: String },\n disabled: { type: Boolean },\n thumbAlignment: { type: String, attribute: 'thumb-alignment' },\n } satisfies PropertyDeclarationMap<Exclude<keyof VolumeSliderCore.Props, 'value' | 'min' | 'max'>>;\n\n label = VolumeSliderCore.defaultProps.label;\n step = VolumeSliderCore.defaultProps.step;\n largeStep = VolumeSliderCore.defaultProps.largeStep;\n orientation = VolumeSliderCore.defaultProps.orientation;\n disabled = VolumeSliderCore.defaultProps.disabled;\n thumbAlignment = VolumeSliderCore.defaultProps.thumbAlignment;\n\n readonly #core = new VolumeSliderCore();\n readonly #provider = new ContextProvider(this, { context: sliderContext });\n readonly #volumeState = new PlayerController(this, playerContext, selectVolume);\n\n #slider: SliderApi | null = null;\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 const signal = this.#disconnect.signal;\n\n this.#slider = createSlider({\n getElement: () => this,\n getThumbElement: () => this.querySelector<HTMLElement>('media-slider-thumb'),\n getOrientation: () => this.orientation,\n isRTL: () => isRTL(this),\n isDisabled: () => this.disabled || !this.#volumeState.value,\n getPercent: () => {\n const media = this.#volumeState.value;\n if (!media) return 0;\n return media.volume * 100;\n },\n getStepPercent: () => this.#core.getStepPercent(),\n getLargeStepPercent: () => this.#core.getLargeStepPercent(),\n onValueChange: (percent) => {\n this.#setVolume(percent);\n },\n onValueCommit: (percent) => {\n this.#setVolume(percent);\n },\n onDragStart: () => {\n this.dispatchEvent(new CustomEvent('drag-start', { bubbles: true }));\n },\n onDragEnd: () => {\n this.dispatchEvent(new CustomEvent('drag-end', { bubbles: true }));\n },\n adjustPercent: (raw, thumbSize, trackSize) => this.#core.adjustPercentForAlignment(raw, thumbSize, trackSize),\n onResize: () => this.requestUpdate(),\n });\n\n applyElementProps(this, this.#slider.rootProps, { signal });\n applyStyles(this, this.#slider.rootStyle);\n this.#slider.input.subscribe(() => this.requestUpdate(), { signal });\n\n if (__DEV__ && !this.#volumeState.value) {\n logMissingFeature(this.localName, this.#volumeState.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#slider?.destroy();\n super.destroyCallback();\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 if (!this.#slider) return;\n\n const media = this.#volumeState.value;\n if (!media) return;\n\n this.#core.setInput(this.#slider.input.current);\n this.#core.setMedia(media);\n const state = this.#core.getState();\n\n const cssVars = getSliderCSSVars(this.#slider.adjustForAlignment(state));\n\n applyStyles(this, cssVars);\n\n // Apply data attributes to root.\n applyStateDataAttrs(this, state, VolumeSliderDataAttrs);\n\n // Provide context to child elements.\n this.#provider.setValue({\n state,\n stateAttrMap: VolumeSliderDataAttrs,\n pointerValue: this.#core.valueFromPercent(state.pointerPercent),\n thumbAttrs: this.#core.getAttrs(state),\n thumbProps: this.#slider.thumbProps,\n formatValue: (value) => `${Math.round(value)}%`,\n });\n }\n\n #setVolume(percent: number): void {\n const media = this.#volumeState.value;\n media?.setVolume(this.#core.valueFromPercent(percent) / 100);\n }\n}\n","import { SliderFillElement } from '../../ui/slider/slider-fill-element';\nimport { SliderPreviewElement } from '../../ui/slider/slider-preview-element';\nimport { SliderThumbElement } from '../../ui/slider/slider-thumb-element';\nimport { SliderTrackElement } from '../../ui/slider/slider-track-element';\nimport { SliderValueElement } from '../../ui/slider/slider-value-element';\nimport { VolumeSliderElement } from '../../ui/volume-slider/volume-slider-element';\nimport { safeDefine } from '../safe-define';\n\n// Parent slider first — sub-elements consume its context.\nsafeDefine(VolumeSliderElement);\nsafeDefine(SliderFillElement);\nsafeDefine(SliderPreviewElement);\nsafeDefine(SliderThumbElement);\nsafeDefine(SliderTrackElement);\nsafeDefine(SliderValueElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [VolumeSliderElement.tagName]: VolumeSliderElement;\n }\n}\n"],"mappings":"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"}
|