@videojs/react 10.0.0-beta.1 → 10.0.0-beta.10
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/dist/default/icons/dist/react/default/captions-off.js +0 -1
- package/dist/default/icons/dist/react/default/captions-off.js.map +1 -1
- package/dist/default/icons/dist/react/default/captions-on.js +0 -1
- package/dist/default/icons/dist/react/default/captions-on.js.map +1 -1
- package/dist/default/icons/dist/react/default/fullscreen-enter.js +0 -1
- package/dist/default/icons/dist/react/default/fullscreen-enter.js.map +1 -1
- package/dist/default/icons/dist/react/default/fullscreen-exit.js +0 -1
- package/dist/default/icons/dist/react/default/fullscreen-exit.js.map +1 -1
- package/dist/default/icons/dist/react/default/pause.js +0 -1
- package/dist/default/icons/dist/react/default/pause.js.map +1 -1
- package/dist/default/icons/dist/react/default/pip-enter.js +33 -0
- package/dist/default/icons/dist/react/default/pip-enter.js.map +1 -0
- package/dist/default/icons/dist/react/default/pip-exit.js +33 -0
- package/dist/default/icons/dist/react/default/pip-exit.js.map +1 -0
- package/dist/default/icons/dist/react/default/play.js +0 -1
- package/dist/default/icons/dist/react/default/play.js.map +1 -1
- package/dist/default/icons/dist/react/default/restart.js +0 -1
- package/dist/default/icons/dist/react/default/restart.js.map +1 -1
- package/dist/default/icons/dist/react/default/seek.js +0 -1
- package/dist/default/icons/dist/react/default/seek.js.map +1 -1
- package/dist/default/icons/dist/react/default/spinner.js +0 -1
- package/dist/default/icons/dist/react/default/spinner.js.map +1 -1
- package/dist/default/icons/dist/react/default/volume-high.js +0 -1
- package/dist/default/icons/dist/react/default/volume-high.js.map +1 -1
- package/dist/default/icons/dist/react/default/volume-low.js +0 -1
- package/dist/default/icons/dist/react/default/volume-low.js.map +1 -1
- package/dist/default/icons/dist/react/default/volume-off.js +0 -1
- package/dist/default/icons/dist/react/default/volume-off.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/captions-off.js +0 -1
- package/dist/default/icons/dist/react/minimal/captions-off.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/captions-on.js +0 -1
- package/dist/default/icons/dist/react/minimal/captions-on.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/fullscreen-enter.js +0 -1
- package/dist/default/icons/dist/react/minimal/fullscreen-enter.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/fullscreen-exit.js +0 -1
- package/dist/default/icons/dist/react/minimal/fullscreen-exit.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/pause.js +0 -1
- package/dist/default/icons/dist/react/minimal/pause.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/pip-enter.js +37 -0
- package/dist/default/icons/dist/react/minimal/pip-enter.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/pip-exit.js +37 -0
- package/dist/default/icons/dist/react/minimal/pip-exit.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/play.js +0 -1
- package/dist/default/icons/dist/react/minimal/play.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/restart.js +0 -1
- package/dist/default/icons/dist/react/minimal/restart.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/seek.js +0 -1
- package/dist/default/icons/dist/react/minimal/seek.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/spinner.js +0 -1
- package/dist/default/icons/dist/react/minimal/spinner.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/volume-high.js +0 -1
- package/dist/default/icons/dist/react/minimal/volume-high.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/volume-low.js +0 -1
- package/dist/default/icons/dist/react/minimal/volume-low.js.map +1 -1
- package/dist/default/icons/dist/react/minimal/volume-off.js +0 -1
- package/dist/default/icons/dist/react/minimal/volume-off.js.map +1 -1
- package/dist/default/index.js +2 -2
- package/dist/default/media/audio.js +3 -6
- package/dist/default/media/audio.js.map +1 -1
- package/dist/default/media/background-video/index.js +2 -2
- package/dist/default/media/background-video/index.js.map +1 -1
- package/dist/default/media/dash-video/index.js +21 -0
- package/dist/default/media/dash-video/index.js.map +1 -0
- package/dist/default/media/hls-video/index.js +3 -8
- package/dist/default/media/hls-video/index.js.map +1 -1
- package/dist/default/media/simple-hls-video/index.js +3 -7
- package/dist/default/media/simple-hls-video/index.js.map +1 -1
- package/dist/default/media/video.js +3 -6
- package/dist/default/media/video.js.map +1 -1
- package/dist/default/player/context.js +16 -10
- package/dist/default/player/context.js.map +1 -1
- package/dist/default/player/create-player.js +16 -2
- package/dist/default/player/create-player.js.map +1 -1
- package/dist/default/presets/audio/minimal-skin.css +237 -157
- package/dist/default/presets/audio/minimal-skin.js +136 -119
- package/dist/default/presets/audio/minimal-skin.js.map +1 -1
- package/dist/default/presets/audio/minimal-skin.tailwind.js +148 -131
- package/dist/default/presets/audio/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/presets/audio/skin.css +234 -153
- package/dist/default/presets/audio/skin.js +129 -112
- package/dist/default/presets/audio/skin.js.map +1 -1
- package/dist/default/presets/audio/skin.tailwind.js +141 -125
- package/dist/default/presets/audio/skin.tailwind.js.map +1 -1
- package/dist/default/presets/{video/error-dialog.js → error-dialog.js} +18 -18
- package/dist/default/presets/error-dialog.js.map +1 -0
- package/dist/default/presets/video/minimal-skin.css +486 -301
- package/dist/default/presets/video/minimal-skin.js +127 -97
- package/dist/default/presets/video/minimal-skin.js.map +1 -1
- package/dist/default/presets/video/minimal-skin.tailwind.js +141 -112
- package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/presets/video/skin.css +484 -289
- package/dist/default/presets/video/skin.js +121 -94
- package/dist/default/presets/video/skin.js.map +1 -1
- package/dist/default/presets/video/skin.tailwind.js +135 -109
- package/dist/default/presets/video/skin.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +9 -20
- package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js +4 -3
- package/dist/default/skins/dist/default/default/tailwind/components/button.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 +3 -3
- package/dist/default/skins/dist/default/default/tailwind/components/error.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/overlay.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/popup.js +3 -3
- package/dist/default/skins/dist/default/default/tailwind/components/popup.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/components/preview.js +13 -0
- package/dist/default/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
- package/dist/default/skins/dist/default/default/tailwind/components/root.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/root.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/seek.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/surface.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +26 -15
- 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 +10 -18
- package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +4 -3
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.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/error.js +3 -3
- package/dist/default/skins/dist/default/minimal/tailwind/components/error.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +4 -3
- package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
- 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/preview.js +14 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- 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 +31 -15
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/{dev/skins/dist/default/default/tailwind/components → default/skins/dist/default/shared/tailwind}/icon-state.js +6 -1
- package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
- package/dist/default/ui/alert-dialog/alert-dialog-root.js +1 -1
- package/dist/default/ui/buffering-indicator/buffering-indicator.js +2 -0
- package/dist/default/ui/buffering-indicator/buffering-indicator.js.map +1 -1
- package/dist/default/ui/hooks/use-slider.js +1 -1
- package/dist/default/ui/popover/popover-popup.js +11 -2
- package/dist/default/ui/popover/popover-popup.js.map +1 -1
- package/dist/default/ui/popover/popover-root.js +1 -1
- package/dist/default/ui/thumbnail/index.js +3 -0
- package/dist/default/ui/time-slider/time-slider-root.js +2 -2
- package/dist/default/ui/time-slider/time-slider-root.js.map +1 -1
- package/dist/default/ui/tooltip/tooltip-popup.js +11 -2
- package/dist/default/ui/tooltip/tooltip-popup.js.map +1 -1
- package/dist/default/ui/tooltip/tooltip-root.js +2 -1
- package/dist/default/ui/tooltip/tooltip-root.js.map +1 -1
- package/dist/default/ui/volume-slider/volume-slider-root.js +4 -4
- package/dist/default/ui/volume-slider/volume-slider-root.js.map +1 -1
- package/dist/default/utils/use-destroy.js +12 -4
- package/dist/default/utils/use-destroy.js.map +1 -1
- package/dist/default/utils/use-media-instance.js +24 -0
- package/dist/default/utils/use-media-instance.js.map +1 -0
- package/dist/default/utils/use-render.js +5 -1
- package/dist/default/utils/use-render.js.map +1 -1
- package/dist/dev/icons/dist/react/default/captions-off.js +0 -1
- package/dist/dev/icons/dist/react/default/captions-off.js.map +1 -1
- package/dist/dev/icons/dist/react/default/captions-on.js +0 -1
- package/dist/dev/icons/dist/react/default/captions-on.js.map +1 -1
- package/dist/dev/icons/dist/react/default/fullscreen-enter.js +0 -1
- package/dist/dev/icons/dist/react/default/fullscreen-enter.js.map +1 -1
- package/dist/dev/icons/dist/react/default/fullscreen-exit.js +0 -1
- package/dist/dev/icons/dist/react/default/fullscreen-exit.js.map +1 -1
- package/dist/dev/icons/dist/react/default/pause.js +0 -1
- package/dist/dev/icons/dist/react/default/pause.js.map +1 -1
- package/dist/dev/icons/dist/react/default/pip-enter.js +33 -0
- package/dist/dev/icons/dist/react/default/pip-enter.js.map +1 -0
- package/dist/dev/icons/dist/react/default/pip-exit.js +33 -0
- package/dist/dev/icons/dist/react/default/pip-exit.js.map +1 -0
- package/dist/dev/icons/dist/react/default/play.js +0 -1
- package/dist/dev/icons/dist/react/default/play.js.map +1 -1
- package/dist/dev/icons/dist/react/default/restart.js +0 -1
- package/dist/dev/icons/dist/react/default/restart.js.map +1 -1
- package/dist/dev/icons/dist/react/default/seek.js +0 -1
- package/dist/dev/icons/dist/react/default/seek.js.map +1 -1
- package/dist/dev/icons/dist/react/default/spinner.js +0 -1
- package/dist/dev/icons/dist/react/default/spinner.js.map +1 -1
- package/dist/dev/icons/dist/react/default/volume-high.js +0 -1
- package/dist/dev/icons/dist/react/default/volume-high.js.map +1 -1
- package/dist/dev/icons/dist/react/default/volume-low.js +0 -1
- package/dist/dev/icons/dist/react/default/volume-low.js.map +1 -1
- package/dist/dev/icons/dist/react/default/volume-off.js +0 -1
- package/dist/dev/icons/dist/react/default/volume-off.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/captions-off.js +0 -1
- package/dist/dev/icons/dist/react/minimal/captions-off.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/captions-on.js +0 -1
- package/dist/dev/icons/dist/react/minimal/captions-on.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js +0 -1
- package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js +0 -1
- package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/pause.js +0 -1
- package/dist/dev/icons/dist/react/minimal/pause.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/pip-enter.js +37 -0
- package/dist/dev/icons/dist/react/minimal/pip-enter.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/pip-exit.js +37 -0
- package/dist/dev/icons/dist/react/minimal/pip-exit.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/play.js +0 -1
- package/dist/dev/icons/dist/react/minimal/play.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/restart.js +0 -1
- package/dist/dev/icons/dist/react/minimal/restart.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/seek.js +0 -1
- package/dist/dev/icons/dist/react/minimal/seek.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/spinner.js +0 -1
- package/dist/dev/icons/dist/react/minimal/spinner.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/volume-high.js +0 -1
- package/dist/dev/icons/dist/react/minimal/volume-high.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/volume-low.js +0 -1
- package/dist/dev/icons/dist/react/minimal/volume-low.js.map +1 -1
- package/dist/dev/icons/dist/react/minimal/volume-off.js +0 -1
- package/dist/dev/icons/dist/react/minimal/volume-off.js.map +1 -1
- package/dist/dev/index.d.ts +2 -2
- package/dist/dev/index.js +2 -2
- package/dist/dev/media/audio.d.ts.map +1 -1
- package/dist/dev/media/audio.js +3 -6
- package/dist/dev/media/audio.js.map +1 -1
- package/dist/dev/media/background-video/index.js +2 -2
- package/dist/dev/media/background-video/index.js.map +1 -1
- package/dist/dev/media/dash-video/index.d.ts +11 -0
- package/dist/dev/media/dash-video/index.d.ts.map +1 -0
- package/dist/dev/media/dash-video/index.js +21 -0
- package/dist/dev/media/dash-video/index.js.map +1 -0
- package/dist/dev/media/hls-video/index.d.ts.map +1 -1
- package/dist/dev/media/hls-video/index.js +3 -8
- package/dist/dev/media/hls-video/index.js.map +1 -1
- package/dist/dev/media/simple-hls-video/index.d.ts.map +1 -1
- package/dist/dev/media/simple-hls-video/index.js +3 -7
- package/dist/dev/media/simple-hls-video/index.js.map +1 -1
- package/dist/dev/media/video.d.ts.map +1 -1
- package/dist/dev/media/video.js +3 -6
- package/dist/dev/media/video.js.map +1 -1
- package/dist/dev/player/context.d.ts +10 -4
- package/dist/dev/player/context.d.ts.map +1 -1
- package/dist/dev/player/context.js +16 -10
- package/dist/dev/player/context.js.map +1 -1
- package/dist/dev/player/create-player.js +16 -2
- package/dist/dev/player/create-player.js.map +1 -1
- package/dist/dev/presets/audio/minimal-skin.css +237 -157
- package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -1
- package/dist/dev/presets/audio/minimal-skin.js +136 -119
- package/dist/dev/presets/audio/minimal-skin.js.map +1 -1
- package/dist/dev/presets/audio/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/presets/audio/minimal-skin.tailwind.js +148 -131
- package/dist/dev/presets/audio/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/presets/audio/skin.css +234 -153
- package/dist/dev/presets/audio/skin.d.ts.map +1 -1
- package/dist/dev/presets/audio/skin.js +129 -112
- package/dist/dev/presets/audio/skin.js.map +1 -1
- package/dist/dev/presets/audio/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/presets/audio/skin.tailwind.js +141 -125
- package/dist/dev/presets/audio/skin.tailwind.js.map +1 -1
- package/dist/dev/presets/{video/error-dialog.js → error-dialog.js} +18 -18
- package/dist/dev/presets/error-dialog.js.map +1 -0
- package/dist/dev/presets/types.d.ts +6 -1
- package/dist/dev/presets/types.d.ts.map +1 -1
- package/dist/dev/presets/video/minimal-skin.css +486 -301
- package/dist/dev/presets/video/minimal-skin.d.ts +2 -2
- package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
- package/dist/dev/presets/video/minimal-skin.js +127 -97
- package/dist/dev/presets/video/minimal-skin.js.map +1 -1
- package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
- package/dist/dev/presets/video/minimal-skin.tailwind.js +141 -112
- package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/presets/video/skin.css +484 -289
- package/dist/dev/presets/video/skin.d.ts +2 -2
- package/dist/dev/presets/video/skin.d.ts.map +1 -1
- package/dist/dev/presets/video/skin.js +121 -94
- package/dist/dev/presets/video/skin.js.map +1 -1
- package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
- package/dist/dev/presets/video/skin.tailwind.js +135 -109
- package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +9 -20
- package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js +4 -3
- package/dist/dev/skins/dist/default/default/tailwind/components/button.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 +3 -3
- package/dist/dev/skins/dist/default/default/tailwind/components/error.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +3 -3
- package/dist/dev/skins/dist/default/default/tailwind/components/popup.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/components/preview.js +13 -0
- package/dist/dev/skins/dist/default/default/tailwind/components/preview.js.map +1 -0
- package/dist/dev/skins/dist/default/default/tailwind/components/root.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/root.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/seek.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/slider.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/surface.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/surface.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +26 -15
- 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 +10 -18
- package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +4 -3
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.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/error.js +3 -3
- package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +4 -3
- package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
- 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/preview.js +14 -0
- package/dist/dev/skins/dist/default/minimal/tailwind/components/preview.js.map +1 -0
- package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
- 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 +31 -15
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/{default/skins/dist/default/default/tailwind/components → dev/skins/dist/default/shared/tailwind}/icon-state.js +6 -1
- package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -0
- package/dist/dev/ui/alert-dialog/alert-dialog-root.js +1 -1
- package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts.map +1 -1
- package/dist/dev/ui/buffering-indicator/buffering-indicator.js +2 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator.js.map +1 -1
- package/dist/dev/ui/hooks/use-slider.js +1 -1
- package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -1
- package/dist/dev/ui/popover/popover-popup.js +11 -2
- package/dist/dev/ui/popover/popover-popup.js.map +1 -1
- package/dist/dev/ui/popover/popover-root.js +1 -1
- package/dist/dev/ui/thumbnail/index.d.ts +2 -0
- package/dist/dev/ui/thumbnail/index.js +3 -0
- package/dist/dev/ui/time-slider/time-slider-root.js +2 -2
- package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-popup.d.ts.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-popup.js +11 -2
- package/dist/dev/ui/tooltip/tooltip-popup.js.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-root.d.ts.map +1 -1
- package/dist/dev/ui/tooltip/tooltip-root.js +2 -1
- package/dist/dev/ui/tooltip/tooltip-root.js.map +1 -1
- package/dist/dev/ui/volume-slider/volume-slider-root.js +4 -4
- package/dist/dev/ui/volume-slider/volume-slider-root.js.map +1 -1
- package/dist/dev/utils/use-destroy.js +12 -4
- package/dist/dev/utils/use-destroy.js.map +1 -1
- package/dist/dev/utils/use-media-instance.js +24 -0
- package/dist/dev/utils/use-media-instance.js.map +1 -0
- package/dist/dev/utils/use-render.d.ts.map +1 -1
- package/dist/dev/utils/use-render.js +5 -1
- package/dist/dev/utils/use-render.js.map +1 -1
- package/package.json +7 -7
- package/dist/default/icons/dist/react/default/pip.js +0 -27
- package/dist/default/icons/dist/react/default/pip.js.map +0 -1
- package/dist/default/icons/dist/react/minimal/pip.js +0 -27
- package/dist/default/icons/dist/react/minimal/pip.js.map +0 -1
- package/dist/default/presets/video/error-dialog.js.map +0 -1
- package/dist/default/skins/dist/default/default/tailwind/components/icon-state.js.map +0 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/icon-state.js +0 -29
- package/dist/default/skins/dist/default/minimal/tailwind/components/icon-state.js.map +0 -1
- package/dist/dev/icons/dist/react/default/pip.js +0 -27
- package/dist/dev/icons/dist/react/default/pip.js.map +0 -1
- package/dist/dev/icons/dist/react/minimal/pip.js +0 -27
- package/dist/dev/icons/dist/react/minimal/pip.js.map +0 -1
- package/dist/dev/presets/video/error-dialog.js.map +0 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/icon-state.js.map +0 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/icon-state.js +0 -29
- package/dist/dev/skins/dist/default/minimal/tailwind/components/icon-state.js.map +0 -1
|
@@ -38,21 +38,27 @@ function useMedia() {
|
|
|
38
38
|
const { media } = usePlayerContext();
|
|
39
39
|
return media;
|
|
40
40
|
}
|
|
41
|
-
/** Access the
|
|
42
|
-
function
|
|
41
|
+
/** Access the container element from within a Player Provider. */
|
|
42
|
+
function useContainer() {
|
|
43
|
+
const { container } = usePlayerContext();
|
|
44
|
+
return container;
|
|
45
|
+
}
|
|
46
|
+
/** Access the media attach setter for connecting a media element to the player. */
|
|
47
|
+
function useMediaAttach() {
|
|
43
48
|
return useContext(PlayerContext)?.setMedia;
|
|
44
49
|
}
|
|
50
|
+
/** Access the container attach setter for connecting a container element to the player. */
|
|
51
|
+
function useContainerAttach() {
|
|
52
|
+
return useContext(PlayerContext)?.setContainer;
|
|
53
|
+
}
|
|
45
54
|
const Container = forwardRef(function Container({ children, ...props }, ref) {
|
|
46
|
-
const
|
|
55
|
+
const setContainer = useContainerAttach();
|
|
47
56
|
const internalRef = useRef(null);
|
|
48
57
|
const composedRef = useComposedRefs(ref, internalRef);
|
|
49
58
|
useEffect(() => {
|
|
50
|
-
|
|
51
|
-
return
|
|
52
|
-
|
|
53
|
-
container: internalRef.current
|
|
54
|
-
});
|
|
55
|
-
}, [media, store]);
|
|
59
|
+
setContainer?.(internalRef.current);
|
|
60
|
+
return () => setContainer?.(null);
|
|
61
|
+
}, [setContainer]);
|
|
56
62
|
return /* @__PURE__ */ jsx("div", {
|
|
57
63
|
ref: composedRef,
|
|
58
64
|
...props,
|
|
@@ -61,5 +67,5 @@ const Container = forwardRef(function Container({ children, ...props }, ref) {
|
|
|
61
67
|
});
|
|
62
68
|
|
|
63
69
|
//#endregion
|
|
64
|
-
export { Container, PlayerContextProvider, useMedia,
|
|
70
|
+
export { Container, PlayerContextProvider, useContainer, useContainerAttach, useMedia, useMediaAttach, useOptionalPlayer, usePlayer, usePlayerContext };
|
|
65
71
|
//# sourceMappingURL=context.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","names":[],"sources":["../../../src/player/context.tsx"],"sourcesContent":["'use client';\n\nimport type { Media } from '@videojs/core/dom';\nimport type { UnknownState, UnknownStore } from '@videojs/store';\nimport { useStore } from '@videojs/store/react';\nimport type { Dispatch, HTMLAttributes, ReactNode, SetStateAction } from 'react';\nimport { createContext, forwardRef, useContext, useEffect, useRef } from 'react';\n\nimport { useComposedRefs } from '../utils/use-composed-refs';\n\nexport interface PlayerContextValue {\n store: UnknownStore;\n media: Media | null;\n setMedia: Dispatch<SetStateAction<Media | null>>;\n}\n\nconst PlayerContext = createContext<PlayerContextValue | null>(null);\nconst EMPTY_UNSUBSCRIBE = () => {};\nconst EMPTY_STORE = {\n state: {} as UnknownState,\n subscribe: () => EMPTY_UNSUBSCRIBE,\n} as Pick<UnknownStore, 'state' | 'subscribe'>;\n\nexport function PlayerContextProvider({\n value,\n children,\n}: {\n value: PlayerContextValue;\n children: ReactNode;\n}): ReactNode {\n return <PlayerContext.Provider value={value}>{children}</PlayerContext.Provider>;\n}\n\n/** Access the full player context value. Throws if used outside a Player Provider. */\nexport function usePlayerContext(): PlayerContextValue {\n const ctx = useContext(PlayerContext);\n if (!ctx) throw new Error('usePlayerContext must be used within a Player Provider');\n return ctx;\n}\n\n/**\n * Access the player store from within a Player Provider.\n *\n * @label Without Selector\n */\nexport function usePlayer(): UnknownStore;\n/**\n * Select a value from the player store. Re-renders when the selected value changes.\n *\n * @label With Selector\n * @param selector - Derives a value from the player store state.\n */\nexport function usePlayer<R>(selector: (state: UnknownState) => R): R;\nexport function usePlayer<R>(selector?: (state: UnknownState) => R) {\n const { store } = usePlayerContext();\n return useStore(store, selector as any);\n}\n\n/**\n * Access player state when available, but return `undefined` outside Provider.\n *\n * This is useful for components that can operate without player context\n * (e.g. they accept fully explicit props as a fallback).\n */\n/** @label Without Selector */\nexport function useOptionalPlayer(): UnknownStore | undefined;\n/** @label With Selector */\nexport function useOptionalPlayer<R>(selector: (state: UnknownState) => R): R | undefined;\nexport function useOptionalPlayer<R>(selector?: (state: UnknownState) => R) {\n const ctx = useContext(PlayerContext);\n const store = (ctx?.store ?? (EMPTY_STORE as unknown as UnknownStore)) as UnknownStore;\n const value = useStore(store, (ctx ? selector : undefined) as any);\n return ctx ? value : undefined;\n}\n\n/** Access the media element from within a Player Provider. */\nexport function useMedia(): Media | null {\n const { media } = usePlayerContext();\n return media;\n}\n\n/** Access the media
|
|
1
|
+
{"version":3,"file":"context.js","names":[],"sources":["../../../src/player/context.tsx"],"sourcesContent":["'use client';\n\nimport type { Media, MediaContainer } from '@videojs/core/dom';\nimport type { UnknownState, UnknownStore } from '@videojs/store';\nimport { useStore } from '@videojs/store/react';\nimport type { Dispatch, HTMLAttributes, ReactNode, SetStateAction } from 'react';\nimport { createContext, forwardRef, useContext, useEffect, useRef } from 'react';\n\nimport { useComposedRefs } from '../utils/use-composed-refs';\n\nexport interface PlayerContextValue {\n store: UnknownStore;\n media: Media | null;\n setMedia: Dispatch<SetStateAction<Media | null>>;\n container: MediaContainer | null;\n setContainer: Dispatch<SetStateAction<HTMLElement | null>>;\n}\n\nconst PlayerContext = createContext<PlayerContextValue | null>(null);\nconst EMPTY_UNSUBSCRIBE = () => {};\nconst EMPTY_STORE = {\n state: {} as UnknownState,\n subscribe: () => EMPTY_UNSUBSCRIBE,\n} as Pick<UnknownStore, 'state' | 'subscribe'>;\n\nexport function PlayerContextProvider({\n value,\n children,\n}: {\n value: PlayerContextValue;\n children: ReactNode;\n}): ReactNode {\n return <PlayerContext.Provider value={value}>{children}</PlayerContext.Provider>;\n}\n\n/** Access the full player context value. Throws if used outside a Player Provider. */\nexport function usePlayerContext(): PlayerContextValue {\n const ctx = useContext(PlayerContext);\n if (!ctx) throw new Error('usePlayerContext must be used within a Player Provider');\n return ctx;\n}\n\n/**\n * Access the player store from within a Player Provider.\n *\n * @label Without Selector\n */\nexport function usePlayer(): UnknownStore;\n/**\n * Select a value from the player store. Re-renders when the selected value changes.\n *\n * @label With Selector\n * @param selector - Derives a value from the player store state.\n */\nexport function usePlayer<R>(selector: (state: UnknownState) => R): R;\nexport function usePlayer<R>(selector?: (state: UnknownState) => R) {\n const { store } = usePlayerContext();\n return useStore(store, selector as any);\n}\n\n/**\n * Access player state when available, but return `undefined` outside Provider.\n *\n * This is useful for components that can operate without player context\n * (e.g. they accept fully explicit props as a fallback).\n */\n/** @label Without Selector */\nexport function useOptionalPlayer(): UnknownStore | undefined;\n/** @label With Selector */\nexport function useOptionalPlayer<R>(selector: (state: UnknownState) => R): R | undefined;\nexport function useOptionalPlayer<R>(selector?: (state: UnknownState) => R) {\n const ctx = useContext(PlayerContext);\n const store = (ctx?.store ?? (EMPTY_STORE as unknown as UnknownStore)) as UnknownStore;\n const value = useStore(store, (ctx ? selector : undefined) as any);\n return ctx ? value : undefined;\n}\n\n/** Access the media element from within a Player Provider. */\nexport function useMedia(): Media | null {\n const { media } = usePlayerContext();\n return media;\n}\n\n/** Access the container element from within a Player Provider. */\nexport function useContainer(): MediaContainer | null {\n const { container } = usePlayerContext();\n return container;\n}\n\n/** Access the media attach setter for connecting a media element to the player. */\nexport function useMediaAttach(): Dispatch<SetStateAction<Media | null>> | undefined {\n const ctx = useContext(PlayerContext);\n return ctx?.setMedia;\n}\n\n/** Access the container attach setter for connecting a container element to the player. */\nexport function useContainerAttach(): Dispatch<SetStateAction<HTMLElement | null>> | undefined {\n const ctx = useContext(PlayerContext);\n return ctx?.setContainer;\n}\n\nexport interface ContainerProps extends HTMLAttributes<HTMLDivElement> {\n children?: ReactNode;\n}\n\nexport const Container = forwardRef<HTMLDivElement, ContainerProps>(function Container({ children, ...props }, ref) {\n const setContainer = useContainerAttach();\n const internalRef = useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs(ref, internalRef);\n\n useEffect(() => {\n setContainer?.(internalRef.current);\n return () => setContainer?.(null);\n }, [setContainer]);\n\n return (\n <div ref={composedRef} {...props}>\n {children}\n </div>\n );\n});\n\nexport namespace Container {\n export type Props = ContainerProps;\n}\n"],"mappings":";;;;;;;;AAkBA,MAAM,gBAAgB,cAAyC,KAAK;AACpE,MAAM,0BAA0B;AAChC,MAAM,cAAc;CAClB,OAAO,EAAE;CACT,iBAAiB;CAClB;AAED,SAAgB,sBAAsB,EACpC,OACA,YAIY;AACZ,QAAO,oBAAC,cAAc;EAAgB;EAAQ;GAAkC;;;AAIlF,SAAgB,mBAAuC;CACrD,MAAM,MAAM,WAAW,cAAc;AACrC,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM,yDAAyD;AACnF,QAAO;;AAgBT,SAAgB,UAAa,UAAuC;CAClE,MAAM,EAAE,UAAU,kBAAkB;AACpC,QAAO,SAAS,OAAO,SAAgB;;AAazC,SAAgB,kBAAqB,UAAuC;CAC1E,MAAM,MAAM,WAAW,cAAc;CAErC,MAAM,QAAQ,SADC,KAAK,SAAU,aACC,MAAM,WAAW,OAAkB;AAClE,QAAO,MAAM,QAAQ;;;AAIvB,SAAgB,WAAyB;CACvC,MAAM,EAAE,UAAU,kBAAkB;AACpC,QAAO;;;AAIT,SAAgB,eAAsC;CACpD,MAAM,EAAE,cAAc,kBAAkB;AACxC,QAAO;;;AAIT,SAAgB,iBAAqE;AAEnF,QADY,WAAW,cAAc,EACzB;;;AAId,SAAgB,qBAA+E;AAE7F,QADY,WAAW,cAAc,EACzB;;AAOd,MAAa,YAAY,WAA2C,SAAS,UAAU,EAAE,UAAU,GAAG,SAAS,KAAK;CAClH,MAAM,eAAe,oBAAoB;CACzC,MAAM,cAAc,OAAuB,KAAK;CAChD,MAAM,cAAc,gBAAgB,KAAK,YAAY;AAErD,iBAAgB;AACd,iBAAe,YAAY,QAAQ;AACnC,eAAa,eAAe,KAAK;IAChC,CAAC,aAAa,CAAC;AAElB,QACE,oBAAC;EAAI,KAAK;EAAa,GAAI;EACxB;GACG;EAER"}
|
|
@@ -4,7 +4,7 @@ import { Container, PlayerContextProvider, useMedia, usePlayerContext } from "./
|
|
|
4
4
|
import { useDestroy } from "../utils/use-destroy.js";
|
|
5
5
|
import { combine, createStore } from "@videojs/store";
|
|
6
6
|
import { useStore } from "@videojs/store/react";
|
|
7
|
-
import { useState } from "react";
|
|
7
|
+
import { useEffect, useState } from "react";
|
|
8
8
|
import { jsx } from "react/jsx-runtime";
|
|
9
9
|
|
|
10
10
|
//#region src/player/create-player.tsx
|
|
@@ -12,12 +12,26 @@ function createPlayer(config) {
|
|
|
12
12
|
function Provider({ children }) {
|
|
13
13
|
const [store] = useState(() => createStore()(combine(...config.features)));
|
|
14
14
|
const [media, setMedia] = useState(null);
|
|
15
|
+
const [container, setContainer] = useState(null);
|
|
15
16
|
useDestroy(store);
|
|
17
|
+
useEffect(() => {
|
|
18
|
+
if (!media) return;
|
|
19
|
+
return store.attach({
|
|
20
|
+
media,
|
|
21
|
+
container
|
|
22
|
+
});
|
|
23
|
+
}, [
|
|
24
|
+
media,
|
|
25
|
+
container,
|
|
26
|
+
store
|
|
27
|
+
]);
|
|
16
28
|
return /* @__PURE__ */ jsx(PlayerContextProvider, {
|
|
17
29
|
value: {
|
|
18
30
|
store,
|
|
19
31
|
media,
|
|
20
|
-
setMedia
|
|
32
|
+
setMedia,
|
|
33
|
+
container,
|
|
34
|
+
setContainer
|
|
21
35
|
},
|
|
22
36
|
children
|
|
23
37
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-player.js","names":[],"sources":["../../../src/player/create-player.tsx"],"sourcesContent":["'use client';\n\nimport type {\n AnyPlayerFeature,\n AnyPlayerStore,\n AudioFeatures,\n AudioPlayerStore,\n Media,\n PlayerStore,\n PlayerTarget,\n VideoFeatures,\n VideoPlayerStore,\n} from '@videojs/core/dom';\nimport type { InferStoreState } from '@videojs/store';\nimport { combine, createStore } from '@videojs/store';\nimport { useStore } from '@videojs/store/react';\nimport type { FC, ReactNode } from 'react';\nimport { useState } from 'react';\n\nimport { useDestroy } from '../utils/use-destroy';\nimport { Container, PlayerContextProvider, useMedia, usePlayerContext } from './context';\n\nexport interface CreatePlayerConfig<Features extends AnyPlayerFeature[]> {\n features: Features;\n displayName?: string;\n}\n\nexport interface ProviderProps {\n children: ReactNode;\n}\n\nexport interface CreatePlayerResult<Store extends PlayerStore> {\n Provider: FC<ProviderProps>;\n Container: typeof Container;\n usePlayer: UsePlayerHook<Store>;\n useMedia: () => Media | null;\n}\n\nexport type UsePlayerHook<Store extends PlayerStore> = {\n (): Store;\n <R>(selector: (state: InferStoreState<Store>) => R): R;\n};\n\n/**\n * Create a player instance with typed store, Provider component, Container, and hooks.\n *\n * @label Video\n * @param config - Player configuration with features and optional display name.\n */\nexport function createPlayer(config: CreatePlayerConfig<VideoFeatures>): CreatePlayerResult<VideoPlayerStore>;\n\n/**\n * Create a player for audio media.\n *\n * @label Audio\n * @param config - Player configuration with features and optional display name.\n */\nexport function createPlayer(config: CreatePlayerConfig<AudioFeatures>): CreatePlayerResult<AudioPlayerStore>;\n\n/**\n * Create a player with custom features.\n *\n * @label Generic\n * @param config - Player configuration with features and optional display name.\n */\nexport function createPlayer<const Features extends AnyPlayerFeature[]>(\n config: CreatePlayerConfig<Features>\n): CreatePlayerResult<PlayerStore<Features>>;\n\nexport function createPlayer(config: CreatePlayerConfig<AnyPlayerFeature[]>): CreatePlayerResult<AnyPlayerStore> {\n function Provider({ children }: ProviderProps): ReactNode {\n const [store] = useState(() => createStore<PlayerTarget>()(combine(...config.features)));\n const [media, setMedia] = useState<Media | null>(null);\n\n useDestroy(store);\n\n return <PlayerContextProvider value={{ store, media, setMedia }}
|
|
1
|
+
{"version":3,"file":"create-player.js","names":[],"sources":["../../../src/player/create-player.tsx"],"sourcesContent":["'use client';\n\nimport type {\n AnyPlayerFeature,\n AnyPlayerStore,\n AudioFeatures,\n AudioPlayerStore,\n Media,\n PlayerStore,\n PlayerTarget,\n VideoFeatures,\n VideoPlayerStore,\n} from '@videojs/core/dom';\nimport type { InferStoreState } from '@videojs/store';\nimport { combine, createStore } from '@videojs/store';\nimport { useStore } from '@videojs/store/react';\nimport type { FC, ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\n\nimport { useDestroy } from '../utils/use-destroy';\nimport { Container, PlayerContextProvider, useMedia, usePlayerContext } from './context';\n\nexport interface CreatePlayerConfig<Features extends AnyPlayerFeature[]> {\n features: Features;\n displayName?: string;\n}\n\nexport interface ProviderProps {\n children: ReactNode;\n}\n\nexport interface CreatePlayerResult<Store extends PlayerStore> {\n Provider: FC<ProviderProps>;\n Container: typeof Container;\n usePlayer: UsePlayerHook<Store>;\n useMedia: () => Media | null;\n}\n\nexport type UsePlayerHook<Store extends PlayerStore> = {\n (): Store;\n <R>(selector: (state: InferStoreState<Store>) => R): R;\n};\n\n/**\n * Create a player instance with typed store, Provider component, Container, and hooks.\n *\n * @label Video\n * @param config - Player configuration with features and optional display name.\n */\nexport function createPlayer(config: CreatePlayerConfig<VideoFeatures>): CreatePlayerResult<VideoPlayerStore>;\n\n/**\n * Create a player for audio media.\n *\n * @label Audio\n * @param config - Player configuration with features and optional display name.\n */\nexport function createPlayer(config: CreatePlayerConfig<AudioFeatures>): CreatePlayerResult<AudioPlayerStore>;\n\n/**\n * Create a player with custom features.\n *\n * @label Generic\n * @param config - Player configuration with features and optional display name.\n */\nexport function createPlayer<const Features extends AnyPlayerFeature[]>(\n config: CreatePlayerConfig<Features>\n): CreatePlayerResult<PlayerStore<Features>>;\n\nexport function createPlayer(config: CreatePlayerConfig<AnyPlayerFeature[]>): CreatePlayerResult<AnyPlayerStore> {\n function Provider({ children }: ProviderProps): ReactNode {\n const [store] = useState(() => createStore<PlayerTarget>()(combine(...config.features)));\n const [media, setMedia] = useState<Media | null>(null);\n const [container, setContainer] = useState<HTMLElement | null>(null);\n\n useDestroy(store);\n\n useEffect(() => {\n if (!media) return;\n return store.attach({ media, container });\n }, [media, container, store]);\n\n return (\n <PlayerContextProvider value={{ store, media, setMedia, container, setContainer }}>\n {children}\n </PlayerContextProvider>\n );\n }\n\n if (__DEV__ && config.displayName) {\n Provider.displayName = `${config.displayName}.Provider`;\n }\n\n function usePlayer<R>(selector?: (state: object) => R): AnyPlayerStore | R {\n const { store } = usePlayerContext();\n return useStore(store, selector as any);\n }\n\n return {\n Provider,\n Container,\n usePlayer,\n useMedia,\n };\n}\n"],"mappings":";;;;;;;;;;AAqEA,SAAgB,aAAa,QAAoF;CAC/G,SAAS,SAAS,EAAE,YAAsC;EACxD,MAAM,CAAC,SAAS,eAAe,aAA2B,CAAC,QAAQ,GAAG,OAAO,SAAS,CAAC,CAAC;EACxF,MAAM,CAAC,OAAO,YAAY,SAAuB,KAAK;EACtD,MAAM,CAAC,WAAW,gBAAgB,SAA6B,KAAK;AAEpE,aAAW,MAAM;AAEjB,kBAAgB;AACd,OAAI,CAAC,MAAO;AACZ,UAAO,MAAM,OAAO;IAAE;IAAO;IAAW,CAAC;KACxC;GAAC;GAAO;GAAW;GAAM,CAAC;AAE7B,SACE,oBAAC;GAAsB,OAAO;IAAE;IAAO;IAAO;IAAU;IAAW;IAAc;GAC9E;IACqB;;AAI5B,KAAe,OAAO,YACpB,UAAS,cAAc,GAAG,OAAO,YAAY;CAG/C,SAAS,UAAa,UAAqD;EACzE,MAAM,EAAE,UAAU,kBAAkB;AACpC,SAAO,SAAS,OAAO,SAAgB;;AAGzC,QAAO;EACL;EACA;EACA;EACA;EACD"}
|
|
@@ -1,67 +1,3 @@
|
|
|
1
|
-
/* ==========================================================================
|
|
2
|
-
Icon State Visibility for Audio Skins
|
|
3
|
-
|
|
4
|
-
Data-attribute-driven visibility rules for multi-state icon buttons.
|
|
5
|
-
Uses :is() with both element selectors (for HTML custom element wrappers)
|
|
6
|
-
and class selectors (for React rendered SVG elements).
|
|
7
|
-
========================================================================== */
|
|
8
|
-
|
|
9
|
-
/* --- All icons hidden by default --- */
|
|
10
|
-
|
|
11
|
-
.media-button--play .media-icon--restart,
|
|
12
|
-
.media-button--play .media-icon--play,
|
|
13
|
-
.media-button--play .media-icon--pause,
|
|
14
|
-
.media-button--mute .media-icon--volume-off,
|
|
15
|
-
.media-button--mute .media-icon--volume-low,
|
|
16
|
-
.media-button--mute .media-icon--volume-high {
|
|
17
|
-
display: none;
|
|
18
|
-
opacity: 0;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/* --- Active icon per state --- */
|
|
22
|
-
|
|
23
|
-
/* Play: ended → restart */
|
|
24
|
-
.media-button--play[data-ended] .media-icon--restart,
|
|
25
|
-
/* Play: paused (not ended) → play */
|
|
26
|
-
.media-button--play:not([data-ended])[data-paused] .media-icon--play,
|
|
27
|
-
/* Play: playing (not paused, not ended) → pause */
|
|
28
|
-
.media-button--play:not([data-paused]):not([data-ended]) .media-icon--pause,
|
|
29
|
-
/* Mute: muted → volume off */
|
|
30
|
-
.media-button--mute[data-muted] .media-icon--volume-off,
|
|
31
|
-
/* Mute: volume low (not muted) → volume low */
|
|
32
|
-
.media-button--mute:not([data-muted])[data-volume-level="low"] .media-icon--volume-low,
|
|
33
|
-
/* Mute: volume high (not muted, not low) → volume high */
|
|
34
|
-
.media-button--mute:not([data-muted]):not([data-volume-level="low"]) .media-icon--volume-high {
|
|
35
|
-
display: block;
|
|
36
|
-
opacity: 1;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/* ==========================================================================
|
|
40
|
-
Tooltip Label State Visibility for Audio Skins
|
|
41
|
-
|
|
42
|
-
Data-attribute-driven visibility rules for multi-state tooltip labels.
|
|
43
|
-
Uses adjacent sibling selectors to match button state → tooltip content.
|
|
44
|
-
========================================================================== */
|
|
45
|
-
|
|
46
|
-
/* --- All multi-state labels hidden by default --- */
|
|
47
|
-
|
|
48
|
-
.media-tooltip-label {
|
|
49
|
-
display: none;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/* --- Active label per state --- */
|
|
53
|
-
|
|
54
|
-
/* Play: ended → replay */
|
|
55
|
-
.media-button--play[data-ended] + .media-tooltip .media-tooltip-label--replay,
|
|
56
|
-
/* Play: paused (not ended) → play */
|
|
57
|
-
.media-button--play:not([data-ended])[data-paused] + .media-tooltip
|
|
58
|
-
.media-tooltip-label--play,
|
|
59
|
-
/* Play: playing (not paused, not ended) → pause */
|
|
60
|
-
.media-button--play:not([data-paused]):not([data-ended]) + .media-tooltip
|
|
61
|
-
.media-tooltip-label--pause {
|
|
62
|
-
display: block;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
1
|
/* ==========================================================================
|
|
66
2
|
Reset
|
|
67
3
|
========================================================================== */
|
|
@@ -70,7 +6,6 @@
|
|
|
70
6
|
.media-minimal-skin *::before,
|
|
71
7
|
.media-minimal-skin *::after {
|
|
72
8
|
box-sizing: border-box;
|
|
73
|
-
margin: 0;
|
|
74
9
|
}
|
|
75
10
|
.media-minimal-skin img,
|
|
76
11
|
.media-minimal-skin video,
|
|
@@ -95,6 +30,8 @@
|
|
|
95
30
|
position: relative;
|
|
96
31
|
isolation: isolate;
|
|
97
32
|
display: block;
|
|
33
|
+
height: 100%;
|
|
34
|
+
width: 100%;
|
|
98
35
|
container: media-root / inline-size;
|
|
99
36
|
border-radius: var(--media-border-radius, 0.75rem);
|
|
100
37
|
font-family:
|
|
@@ -108,6 +45,8 @@
|
|
|
108
45
|
letter-spacing: normal;
|
|
109
46
|
-webkit-font-smoothing: auto;
|
|
110
47
|
-moz-osx-font-smoothing: auto;
|
|
48
|
+
|
|
49
|
+
--media-controls-radius: var(--media-border-radius, 1rem);
|
|
111
50
|
}
|
|
112
51
|
|
|
113
52
|
/* ==========================================================================
|
|
@@ -132,61 +71,6 @@
|
|
|
132
71
|
Error Dialog
|
|
133
72
|
========================================================================== */
|
|
134
73
|
|
|
135
|
-
.media-minimal-skin .media-error {
|
|
136
|
-
position: absolute;
|
|
137
|
-
inset: 0;
|
|
138
|
-
z-index: 20;
|
|
139
|
-
display: flex;
|
|
140
|
-
align-items: center;
|
|
141
|
-
justify-content: center;
|
|
142
|
-
pointer-events: none;
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
.media-minimal-skin .media-error__dialog {
|
|
146
|
-
display: flex;
|
|
147
|
-
flex-direction: column;
|
|
148
|
-
gap: 0.75rem;
|
|
149
|
-
max-width: 16rem;
|
|
150
|
-
padding: 1rem;
|
|
151
|
-
color: oklch(1 0 0);
|
|
152
|
-
font-size: 0.875rem;
|
|
153
|
-
text-shadow: 0 1px 0 oklch(0 0 0 / 0.5);
|
|
154
|
-
transition-property: opacity, transform;
|
|
155
|
-
transition-duration: 500ms;
|
|
156
|
-
transition-delay: 100ms;
|
|
157
|
-
transition-timing-function: linear(
|
|
158
|
-
0,
|
|
159
|
-
0.034 1.5%,
|
|
160
|
-
0.763 9.7%,
|
|
161
|
-
1.066 13.9%,
|
|
162
|
-
1.198 19.9%,
|
|
163
|
-
1.184 21.8%,
|
|
164
|
-
0.963 37.5%,
|
|
165
|
-
0.997 50.9%,
|
|
166
|
-
1
|
|
167
|
-
);
|
|
168
|
-
|
|
169
|
-
/* Simple, fast transition for reduced motion users */
|
|
170
|
-
@media (prefers-reduced-motion: reduce) {
|
|
171
|
-
transition-duration: 100ms;
|
|
172
|
-
transition-delay: 0ms;
|
|
173
|
-
transition-timing-function: ease-out;
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
.media-minimal-skin .media-error[data-starting-style] .media-error__dialog,
|
|
178
|
-
.media-minimal-skin .media-error[data-ending-style] .media-error__dialog {
|
|
179
|
-
opacity: 0;
|
|
180
|
-
transform: scale(0.5);
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
.media-minimal-skin .media-error__content {
|
|
184
|
-
display: flex;
|
|
185
|
-
flex-direction: column;
|
|
186
|
-
gap: 0.5rem;
|
|
187
|
-
padding: 0.375rem 0;
|
|
188
|
-
}
|
|
189
|
-
|
|
190
74
|
.media-minimal-skin .media-error__title {
|
|
191
75
|
font-weight: 600;
|
|
192
76
|
line-height: 1.25;
|
|
@@ -194,6 +78,7 @@
|
|
|
194
78
|
|
|
195
79
|
.media-minimal-skin .media-error__description {
|
|
196
80
|
opacity: 0.7;
|
|
81
|
+
overflow-wrap: anywhere;
|
|
197
82
|
}
|
|
198
83
|
|
|
199
84
|
.media-minimal-skin .media-error__actions {
|
|
@@ -205,6 +90,10 @@
|
|
|
205
90
|
}
|
|
206
91
|
}
|
|
207
92
|
|
|
93
|
+
.media-minimal-skin .media-error[data-open] ~ .media-controls * {
|
|
94
|
+
visibility: hidden;
|
|
95
|
+
}
|
|
96
|
+
|
|
208
97
|
/* ==========================================================================
|
|
209
98
|
Controls
|
|
210
99
|
========================================================================== */
|
|
@@ -213,12 +102,12 @@
|
|
|
213
102
|
container: media-controls / inline-size;
|
|
214
103
|
display: flex;
|
|
215
104
|
align-items: center;
|
|
216
|
-
--media-controls-current-shadow-color: oklch(from currentColor 0 0 0 / clamp(0, calc((l - 0.5) * 0.5), 0.
|
|
105
|
+
--media-controls-current-shadow-color: oklch(from currentColor 0 0 0 / clamp(0, calc((l - 0.5) * 0.5), 0.15));
|
|
217
106
|
--media-controls-current-shadow-color-subtle: oklch(
|
|
218
107
|
from var(--media-controls-current-shadow-color) l c h /
|
|
219
108
|
calc(alpha * 0.4)
|
|
220
109
|
);
|
|
221
|
-
text-shadow: 0 0
|
|
110
|
+
text-shadow: 0 1px 0 var(--media-controls-current-shadow-color);
|
|
222
111
|
}
|
|
223
112
|
|
|
224
113
|
/* ==========================================================================
|
|
@@ -283,26 +172,27 @@
|
|
|
283
172
|
justify-content: center;
|
|
284
173
|
flex-shrink: 0;
|
|
285
174
|
padding: 0.5rem 1rem;
|
|
286
|
-
background: oklch(1 0 0);
|
|
287
175
|
border: none;
|
|
288
|
-
border-radius:
|
|
176
|
+
border-radius: calc(var(--media-controls-radius) - var(--media-controls-padding));
|
|
289
177
|
outline: 2px solid transparent;
|
|
290
178
|
outline-offset: -2px;
|
|
291
|
-
|
|
292
|
-
font-weight: 500;
|
|
293
|
-
text-align: center;
|
|
294
|
-
text-shadow: inherit;
|
|
295
|
-
transition-property: background-color, color, outline-offset, transform;
|
|
179
|
+
transition-property: background-color, outline-offset, scale;
|
|
296
180
|
transition-duration: 150ms;
|
|
297
181
|
transition-timing-function: ease-out;
|
|
298
182
|
cursor: pointer;
|
|
299
183
|
user-select: none;
|
|
184
|
+
text-align: center;
|
|
185
|
+
touch-action: manipulation;
|
|
300
186
|
|
|
301
187
|
&:focus-visible {
|
|
302
188
|
outline-color: currentColor;
|
|
303
189
|
outline-offset: 2px;
|
|
304
190
|
}
|
|
305
191
|
|
|
192
|
+
&:active {
|
|
193
|
+
scale: 0.98;
|
|
194
|
+
}
|
|
195
|
+
|
|
306
196
|
&[disabled] {
|
|
307
197
|
opacity: 0.5;
|
|
308
198
|
filter: grayscale(1);
|
|
@@ -314,24 +204,45 @@
|
|
|
314
204
|
}
|
|
315
205
|
}
|
|
316
206
|
|
|
317
|
-
/*
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
207
|
+
/* biome-ignore lint/correctness/noUnknownProperty: corner-shape is an emerging CSS spec */
|
|
208
|
+
@supports (corner-shape: squircle) {
|
|
209
|
+
.media-minimal-skin .media-button {
|
|
210
|
+
border-radius: var(--media-controls-radius);
|
|
211
|
+
/* biome-ignore lint/correctness/noUnknownProperty: corner-shape is an emerging CSS spec */
|
|
212
|
+
corner-shape: squircle;
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/* Primary button variant */
|
|
217
|
+
.media-minimal-skin .media-button--primary {
|
|
218
|
+
background: oklch(1 0 0);
|
|
219
|
+
color: oklch(0 0 0);
|
|
220
|
+
font-weight: 500;
|
|
221
|
+
text-shadow: none;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
/* Subtle button variant */
|
|
225
|
+
.media-minimal-skin .media-button--subtle {
|
|
323
226
|
background: transparent;
|
|
324
227
|
color: inherit;
|
|
228
|
+
text-shadow: inherit;
|
|
325
229
|
|
|
326
230
|
&:hover,
|
|
327
231
|
&:focus-visible,
|
|
328
232
|
&[aria-expanded="true"] {
|
|
329
|
-
|
|
330
|
-
text-decoration: none;
|
|
233
|
+
background: oklch(from currentColor l c h / 0.1);
|
|
331
234
|
}
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
/* Icon button variant */
|
|
238
|
+
.media-minimal-skin .media-button--icon {
|
|
239
|
+
display: grid;
|
|
240
|
+
width: 2.375rem;
|
|
241
|
+
padding: 0;
|
|
242
|
+
aspect-ratio: 1;
|
|
332
243
|
|
|
333
244
|
&:active {
|
|
334
|
-
|
|
245
|
+
scale: 0.9;
|
|
335
246
|
}
|
|
336
247
|
|
|
337
248
|
& .media-icon {
|
|
@@ -345,7 +256,7 @@
|
|
|
345
256
|
position: absolute;
|
|
346
257
|
right: -1px;
|
|
347
258
|
bottom: -3px;
|
|
348
|
-
font-size:
|
|
259
|
+
font-size: 10px;
|
|
349
260
|
font-weight: 480;
|
|
350
261
|
font-variant-numeric: tabular-nums;
|
|
351
262
|
}
|
|
@@ -405,6 +316,7 @@
|
|
|
405
316
|
flex: 1;
|
|
406
317
|
border-radius: calc(infinity * 1px);
|
|
407
318
|
outline: none;
|
|
319
|
+
cursor: pointer;
|
|
408
320
|
|
|
409
321
|
&[data-orientation="horizontal"] {
|
|
410
322
|
min-width: 5rem;
|
|
@@ -441,7 +353,7 @@
|
|
|
441
353
|
/* Thumb */
|
|
442
354
|
.media-minimal-skin .media-slider__thumb {
|
|
443
355
|
position: absolute;
|
|
444
|
-
|
|
356
|
+
translate: -50% -50%;
|
|
445
357
|
z-index: 10;
|
|
446
358
|
width: 0.75rem;
|
|
447
359
|
height: 0.75rem;
|
|
@@ -534,11 +446,6 @@
|
|
|
534
446
|
}
|
|
535
447
|
}
|
|
536
448
|
|
|
537
|
-
/* Time display within slider */
|
|
538
|
-
.media-minimal-skin .media-slider__time-display {
|
|
539
|
-
font-variant-numeric: tabular-nums;
|
|
540
|
-
}
|
|
541
|
-
|
|
542
449
|
/* ==========================================================================
|
|
543
450
|
Popups & Animations
|
|
544
451
|
========================================================================== */
|
|
@@ -549,13 +456,14 @@
|
|
|
549
456
|
border: 0;
|
|
550
457
|
color: inherit;
|
|
551
458
|
overflow: visible;
|
|
552
|
-
transition-property:
|
|
553
|
-
transition-duration:
|
|
459
|
+
transition-property: scale, opacity, filter;
|
|
460
|
+
transition-duration: var(--media-popup-transition-duration);
|
|
461
|
+
transition-timing-function: var(--media-popup-transition-timing-function);
|
|
554
462
|
|
|
555
463
|
&[data-starting-style],
|
|
556
464
|
&[data-ending-style] {
|
|
557
465
|
opacity: 0;
|
|
558
|
-
|
|
466
|
+
scale: 0.5;
|
|
559
467
|
filter: blur(8px);
|
|
560
468
|
}
|
|
561
469
|
|
|
@@ -575,19 +483,70 @@
|
|
|
575
483
|
&[data-side="right"] {
|
|
576
484
|
transform-origin: left;
|
|
577
485
|
}
|
|
486
|
+
|
|
487
|
+
/* Safe area between trigger and popup */
|
|
488
|
+
&::before {
|
|
489
|
+
content: "";
|
|
490
|
+
position: absolute;
|
|
491
|
+
pointer-events: inherit;
|
|
492
|
+
}
|
|
493
|
+
|
|
494
|
+
&[data-side="top"]::before,
|
|
495
|
+
&[data-side="bottom"]::before {
|
|
496
|
+
width: 100%;
|
|
497
|
+
inset-inline: 0;
|
|
498
|
+
}
|
|
499
|
+
&[data-side="top"]::before {
|
|
500
|
+
top: 100%;
|
|
501
|
+
}
|
|
502
|
+
&[data-side="bottom"]::before {
|
|
503
|
+
bottom: 100%;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
&[data-side="left"]::before,
|
|
507
|
+
&[data-side="right"]::before {
|
|
508
|
+
height: 100%;
|
|
509
|
+
inset-block: 0;
|
|
510
|
+
}
|
|
511
|
+
&[data-side="left"]::before {
|
|
512
|
+
left: 100%;
|
|
513
|
+
}
|
|
514
|
+
&[data-side="right"]::before {
|
|
515
|
+
right: 100%;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
.media-minimal-skin .media-popover {
|
|
520
|
+
&[data-side="top"]::before,
|
|
521
|
+
&[data-side="bottom"]::before {
|
|
522
|
+
height: var(--media-popover-side-offset);
|
|
523
|
+
}
|
|
524
|
+
&[data-side="left"]::before,
|
|
525
|
+
&[data-side="right"]::before {
|
|
526
|
+
width: var(--media-popover-side-offset);
|
|
527
|
+
}
|
|
578
528
|
}
|
|
579
529
|
|
|
580
530
|
.media-minimal-skin .media-tooltip {
|
|
581
531
|
padding: 0.25rem 0.5rem;
|
|
582
532
|
border-radius: 0.25rem;
|
|
583
533
|
background-color: oklch(1 0 0 / 0.1);
|
|
584
|
-
backdrop-filter: blur(
|
|
534
|
+
backdrop-filter: blur(16px) saturate(1.5);
|
|
585
535
|
box-shadow:
|
|
586
536
|
0 4px 6px -1px oklch(0 0 0 / 0.1),
|
|
587
537
|
0 2px 4px -2px oklch(0 0 0 / 0.1);
|
|
588
538
|
font-size: 0.75rem;
|
|
589
539
|
white-space: nowrap;
|
|
590
|
-
--media-tooltip-side-offset: 0.
|
|
540
|
+
--media-tooltip-side-offset: 0.75rem;
|
|
541
|
+
|
|
542
|
+
&[data-side="top"]::before,
|
|
543
|
+
&[data-side="bottom"]::before {
|
|
544
|
+
height: var(--media-tooltip-side-offset);
|
|
545
|
+
}
|
|
546
|
+
&[data-side="left"]::before,
|
|
547
|
+
&[data-side="right"]::before {
|
|
548
|
+
width: var(--media-tooltip-side-offset);
|
|
549
|
+
}
|
|
591
550
|
|
|
592
551
|
@media (prefers-reduced-transparency: reduce) {
|
|
593
552
|
background-color: oklch(0 0 0 / 0.7);
|
|
@@ -598,29 +557,150 @@
|
|
|
598
557
|
}
|
|
599
558
|
}
|
|
600
559
|
|
|
560
|
+
.media-minimal-skin .media-popover--volume:has(media-volume-slider[data-availability="unsupported"]) {
|
|
561
|
+
display: none;
|
|
562
|
+
}
|
|
601
563
|
|
|
602
564
|
/* ==========================================================================
|
|
603
|
-
|
|
565
|
+
Icon State Visibility for Audio Skins
|
|
566
|
+
|
|
567
|
+
Data-attribute-driven visibility rules for multi-state icon buttons.
|
|
568
|
+
Uses :is() with both element selectors (for HTML custom element wrappers)
|
|
569
|
+
and class selectors (for React rendered SVG elements).
|
|
570
|
+
========================================================================== */
|
|
571
|
+
|
|
572
|
+
/* --- All icons hidden by default --- */
|
|
573
|
+
|
|
574
|
+
.media-button--play .media-icon--restart,
|
|
575
|
+
.media-button--play .media-icon--play,
|
|
576
|
+
.media-button--play .media-icon--pause,
|
|
577
|
+
.media-button--mute .media-icon--volume-off,
|
|
578
|
+
.media-button--mute .media-icon--volume-low,
|
|
579
|
+
.media-button--mute .media-icon--volume-high {
|
|
580
|
+
display: none;
|
|
581
|
+
opacity: 0;
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
/* --- Active icon per state --- */
|
|
585
|
+
|
|
586
|
+
/* Play: ended → restart */
|
|
587
|
+
.media-button--play[data-ended] .media-icon--restart,
|
|
588
|
+
/* Play: paused (not ended) → play */
|
|
589
|
+
.media-button--play:not([data-ended])[data-paused] .media-icon--play,
|
|
590
|
+
/* Play: playing (not paused, not ended) → pause */
|
|
591
|
+
.media-button--play:not([data-paused]):not([data-ended]) .media-icon--pause,
|
|
592
|
+
/* Mute: muted → volume off */
|
|
593
|
+
.media-button--mute[data-muted] .media-icon--volume-off,
|
|
594
|
+
/* Mute: volume low (not muted) → volume low */
|
|
595
|
+
.media-button--mute:not([data-muted])[data-volume-level="low"] .media-icon--volume-low,
|
|
596
|
+
/* Mute: volume high (not muted, not low) → volume high */
|
|
597
|
+
.media-button--mute:not([data-muted]):not([data-volume-level="low"]) .media-icon--volume-high {
|
|
598
|
+
display: block;
|
|
599
|
+
opacity: 1;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/* ==========================================================================
|
|
603
|
+
Tooltip Label State Visibility for Audio Skins
|
|
604
|
+
|
|
605
|
+
Data-attribute-driven visibility rules for multi-state tooltip labels.
|
|
606
|
+
Uses adjacent sibling selectors to match button state → tooltip content.
|
|
607
|
+
========================================================================== */
|
|
608
|
+
|
|
609
|
+
/* --- All multi-state labels hidden by default --- */
|
|
610
|
+
|
|
611
|
+
.media-tooltip-label {
|
|
612
|
+
display: none;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
/* --- Active label per state --- */
|
|
616
|
+
|
|
617
|
+
/* Play: ended → replay */
|
|
618
|
+
.media-button--play[data-ended] + .media-tooltip .media-tooltip-label--replay,
|
|
619
|
+
/* Play: paused (not ended) → play */
|
|
620
|
+
.media-button--play:not([data-ended])[data-paused] + .media-tooltip
|
|
621
|
+
.media-tooltip-label--play,
|
|
622
|
+
/* Play: playing (not paused, not ended) → pause */
|
|
623
|
+
.media-button--play:not([data-paused]):not([data-ended]) + .media-tooltip
|
|
624
|
+
.media-tooltip-label--pause {
|
|
625
|
+
display: block;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
|
|
629
|
+
/* ==========================================================================
|
|
630
|
+
Root
|
|
604
631
|
========================================================================== */
|
|
605
632
|
|
|
606
633
|
.media-minimal-skin--audio {
|
|
607
634
|
--media-controls-background-color: oklch(1 0 0);
|
|
608
635
|
--media-controls-border-color: oklch(0 0 0 / 0.1);
|
|
609
|
-
--media-controls-
|
|
636
|
+
--media-controls-padding: 0.375rem;
|
|
637
|
+
--media-text-color: var(--media-color-primary, oklch(0 0 0));
|
|
638
|
+
--media-error-dialog-transition-duration: 250ms;
|
|
639
|
+
--media-error-dialog-transition-delay: 100ms;
|
|
640
|
+
--media-popup-transition-duration: 100ms;
|
|
641
|
+
--media-popup-transition-timing-function: ease-out;
|
|
642
|
+
|
|
643
|
+
@media (prefers-reduced-motion: reduce) {
|
|
644
|
+
--media-error-dialog-transition-duration: 50ms;
|
|
645
|
+
--media-error-dialog-transition-delay: 0ms;
|
|
646
|
+
--media-popup-transition-duration: 0ms;
|
|
647
|
+
}
|
|
610
648
|
|
|
611
649
|
@media (prefers-color-scheme: dark) {
|
|
612
650
|
--media-controls-background-color: oklch(0 0 0);
|
|
613
651
|
--media-controls-border-color: oklch(1 0 0 / 0.1);
|
|
614
|
-
--media-
|
|
652
|
+
--media-text-color: var(--media-color-primary, oklch(1 0 0));
|
|
615
653
|
}
|
|
616
654
|
}
|
|
655
|
+
|
|
656
|
+
/* ==========================================================================
|
|
657
|
+
Error Dialog
|
|
658
|
+
========================================================================== */
|
|
659
|
+
|
|
660
|
+
.media-minimal-skin--audio .media-error__dialog {
|
|
661
|
+
position: absolute;
|
|
662
|
+
inset: 0;
|
|
663
|
+
z-index: 20;
|
|
664
|
+
display: flex;
|
|
665
|
+
align-items: center;
|
|
666
|
+
gap: 1rem;
|
|
667
|
+
padding-inline: 1.25rem 0.5rem;
|
|
668
|
+
transition-property: opacity, filter, scale;
|
|
669
|
+
transition-duration: var(--media-error-dialog-transition-duration);
|
|
670
|
+
transition-delay: var(--media-error-dialog-transition-delay);
|
|
671
|
+
transition-timing-function: ease-out;
|
|
672
|
+
border-radius: calc(infinity * 1px);
|
|
673
|
+
background-color: oklch(from var(--media-controls-background-color) l c h / 1);
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
.media-minimal-skin--audio .media-error[data-starting-style] .media-error__dialog,
|
|
677
|
+
.media-minimal-skin--audio .media-error[data-ending-style] .media-error__dialog {
|
|
678
|
+
opacity: 0;
|
|
679
|
+
filter: blur(4px);
|
|
680
|
+
scale: 0.95;
|
|
681
|
+
}
|
|
682
|
+
.media-minimal-skin--audio .media-error[data-ending-style] .media-error__dialog {
|
|
683
|
+
transition-delay: 0ms;
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
.media-minimal-skin--audio .media-error__content {
|
|
687
|
+
flex: 1;
|
|
688
|
+
display: flex;
|
|
689
|
+
gap: 0.5rem;
|
|
690
|
+
align-items: center;
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
/* ==========================================================================
|
|
694
|
+
Controls
|
|
695
|
+
========================================================================== */
|
|
696
|
+
|
|
617
697
|
.media-minimal-skin--audio .media-controls {
|
|
618
698
|
gap: 0.5rem;
|
|
619
|
-
padding:
|
|
699
|
+
padding: var(--media-controls-padding);
|
|
620
700
|
background-color: var(--media-controls-background-color);
|
|
621
|
-
backdrop-filter: blur(
|
|
622
|
-
border-radius: var(--media-
|
|
623
|
-
color: var(--media-
|
|
701
|
+
backdrop-filter: blur(16px) saturate(1.5);
|
|
702
|
+
border-radius: var(--media-controls-radius);
|
|
703
|
+
color: var(--media-text-color);
|
|
624
704
|
box-shadow: 0 0 0 1px var(--media-controls-border-color);
|
|
625
705
|
}
|
|
626
706
|
|