@videojs/react 0.1.0-preview.9 → 10.0.0-alpha.4
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/README.md +1 -1
- package/dist/default/_virtual/_rolldown/runtime.js +36 -0
- package/dist/default/icons/dist/react/default/captions-off.js +66 -0
- package/dist/default/icons/dist/react/default/captions-off.js.map +1 -0
- package/dist/default/icons/dist/react/default/captions-on.js +19 -0
- package/dist/default/icons/dist/react/default/captions-on.js.map +1 -0
- package/dist/default/icons/dist/react/default/fullscreen-enter.js +19 -0
- package/dist/default/icons/dist/react/default/fullscreen-enter.js.map +1 -0
- package/dist/default/icons/dist/react/default/fullscreen-exit.js +19 -0
- package/dist/default/icons/dist/react/default/fullscreen-exit.js.map +1 -0
- package/dist/default/icons/dist/react/default/pause.js +30 -0
- package/dist/default/icons/dist/react/default/pause.js.map +1 -0
- package/dist/default/icons/dist/react/default/pip.js +26 -0
- package/dist/default/icons/dist/react/default/pip.js.map +1 -0
- package/dist/default/icons/dist/react/default/play.js +19 -0
- package/dist/default/icons/dist/react/default/play.js.map +1 -0
- package/dist/default/icons/dist/react/default/restart.js +22 -0
- package/dist/default/icons/dist/react/default/restart.js.map +1 -0
- package/dist/default/icons/dist/react/default/seek.js +19 -0
- package/dist/default/icons/dist/react/default/seek.js.map +1 -0
- package/dist/default/icons/dist/react/default/spinner.js +149 -0
- package/dist/default/icons/dist/react/default/spinner.js.map +1 -0
- package/dist/default/icons/dist/react/default/volume-high.js +22 -0
- package/dist/default/icons/dist/react/default/volume-high.js.map +1 -0
- package/dist/default/icons/dist/react/default/volume-low.js +19 -0
- package/dist/default/icons/dist/react/default/volume-low.js.map +1 -0
- package/dist/default/icons/dist/react/default/volume-off.js +19 -0
- package/dist/default/icons/dist/react/default/volume-off.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/captions-off.js +66 -0
- package/dist/default/icons/dist/react/minimal/captions-off.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/captions-on.js +19 -0
- package/dist/default/icons/dist/react/minimal/captions-on.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/fullscreen-enter.js +29 -0
- package/dist/default/icons/dist/react/minimal/fullscreen-enter.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/fullscreen-exit.js +29 -0
- package/dist/default/icons/dist/react/minimal/fullscreen-exit.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/pause.js +30 -0
- package/dist/default/icons/dist/react/minimal/pause.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/pip.js +26 -0
- package/dist/default/icons/dist/react/minimal/pip.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/play.js +19 -0
- package/dist/default/icons/dist/react/minimal/play.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/restart.js +22 -0
- package/dist/default/icons/dist/react/minimal/restart.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/seek.js +19 -0
- package/dist/default/icons/dist/react/minimal/seek.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/spinner.js +149 -0
- package/dist/default/icons/dist/react/minimal/spinner.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/volume-high.js +22 -0
- package/dist/default/icons/dist/react/minimal/volume-high.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/volume-low.js +19 -0
- package/dist/default/icons/dist/react/minimal/volume-low.js.map +1 -0
- package/dist/default/icons/dist/react/minimal/volume-off.js +19 -0
- package/dist/default/icons/dist/react/minimal/volume-off.js.map +1 -0
- package/dist/default/index.js +53 -0
- package/dist/default/index.js.map +1 -0
- package/dist/default/media/audio.js +22 -0
- package/dist/default/media/audio.js.map +1 -0
- package/dist/default/media/background-video/index.js +28 -0
- package/dist/default/media/background-video/index.js.map +1 -0
- package/dist/default/media/hls-video/index.js +25 -0
- package/dist/default/media/hls-video/index.js.map +1 -0
- package/dist/default/media/video.js +22 -0
- package/dist/default/media/video.js.map +1 -0
- package/dist/default/player/context.js +55 -0
- package/dist/default/player/context.js.map +1 -0
- package/dist/default/player/create-player.js +38 -0
- package/dist/default/player/create-player.js.map +1 -0
- package/dist/default/presets/audio/index.js +12 -0
- package/dist/default/presets/audio/index.js.map +1 -0
- package/dist/default/presets/audio/minimal-skin.css +3 -0
- package/dist/default/presets/audio/minimal-skin.js +11 -0
- package/dist/default/presets/audio/minimal-skin.js.map +1 -0
- package/dist/default/presets/audio/skin.css +3 -0
- package/dist/default/presets/audio/skin.js +11 -0
- package/dist/default/presets/audio/skin.js.map +1 -0
- package/dist/default/presets/background/index.js +11 -0
- package/dist/default/presets/background/index.js.map +1 -0
- package/dist/default/presets/background/skin.css +21 -0
- package/dist/default/presets/background/skin.js +16 -0
- package/dist/default/presets/background/skin.js.map +1 -0
- package/dist/default/presets/video/index.js +14 -0
- package/dist/default/presets/video/index.js.map +1 -0
- package/dist/default/presets/video/minimal-skin.css +637 -0
- package/dist/default/presets/video/minimal-skin.js +246 -0
- package/dist/default/presets/video/minimal-skin.js.map +1 -0
- package/dist/default/presets/video/minimal-skin.tailwind.js +243 -0
- package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -0
- package/dist/default/presets/video/skin.css +638 -0
- package/dist/default/presets/video/skin.js +235 -0
- package/dist/default/presets/video/skin.js.map +1 -0
- package/dist/default/presets/video/skin.tailwind.js +234 -0
- package/dist/default/presets/video/skin.tailwind.js.map +1 -0
- package/dist/default/ui/buffering-indicator/buffering-indicator.js +50 -0
- package/dist/default/ui/buffering-indicator/buffering-indicator.js.map +1 -0
- package/dist/default/ui/buffering-indicator/index.js +3 -0
- package/dist/default/ui/captions-button/captions-button.js +51 -0
- package/dist/default/ui/captions-button/captions-button.js.map +1 -0
- package/dist/default/ui/captions-button/index.js +3 -0
- package/dist/default/ui/controls/controls-group.js +27 -0
- package/dist/default/ui/controls/controls-group.js.map +1 -0
- package/dist/default/ui/controls/controls-root.js +31 -0
- package/dist/default/ui/controls/controls-root.js.map +1 -0
- package/dist/default/ui/controls/index.js +3 -0
- package/dist/default/ui/controls/index.parts.js +13 -0
- package/dist/default/ui/controls/index.parts.js.map +1 -0
- package/dist/default/ui/error-dialog/error-dialog.js +54 -0
- package/dist/default/ui/error-dialog/error-dialog.js.map +1 -0
- package/dist/default/ui/error-dialog/index.js +3 -0
- package/dist/default/ui/fullscreen-button/fullscreen-button.js +44 -0
- package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -0
- package/dist/default/ui/fullscreen-button/index.js +3 -0
- package/dist/default/ui/hooks/use-button.js +44 -0
- package/dist/default/ui/hooks/use-button.js.map +1 -0
- package/dist/default/ui/mute-button/index.js +3 -0
- package/dist/default/ui/mute-button/mute-button.js +47 -0
- package/dist/default/ui/mute-button/mute-button.js.map +1 -0
- package/dist/default/ui/pip-button/index.js +3 -0
- package/dist/default/ui/pip-button/pip-button.js +44 -0
- package/dist/default/ui/pip-button/pip-button.js.map +1 -0
- package/dist/default/ui/play-button/index.js +3 -0
- package/dist/default/ui/play-button/play-button.js +60 -0
- package/dist/default/ui/play-button/play-button.js.map +1 -0
- package/dist/default/ui/poster/index.js +3 -0
- package/dist/default/ui/poster/poster.js +43 -0
- package/dist/default/ui/poster/poster.js.map +1 -0
- package/dist/default/ui/seek-button/index.js +3 -0
- package/dist/default/ui/seek-button/seek-button.js +62 -0
- package/dist/default/ui/seek-button/seek-button.js.map +1 -0
- package/dist/default/ui/time/index.js +3 -0
- package/dist/default/ui/time/index.parts.js +15 -0
- package/dist/default/ui/time/index.parts.js.map +1 -0
- package/dist/default/ui/time/time-group.js +34 -0
- package/dist/default/ui/time/time-group.js.map +1 -0
- package/dist/default/ui/time/time-separator.js +34 -0
- package/dist/default/ui/time/time-separator.js.map +1 -0
- package/dist/default/ui/time/time-value.js +54 -0
- package/dist/default/ui/time/time-value.js.map +1 -0
- package/dist/default/utils/attach-media-element.js +12 -0
- package/dist/default/utils/attach-media-element.js.map +1 -0
- package/dist/default/utils/media-props.js +11 -0
- package/dist/default/utils/media-props.js.map +1 -0
- package/dist/default/utils/merge-props.js +85 -0
- package/dist/default/utils/merge-props.js.map +1 -0
- package/dist/default/utils/use-composed-refs.js +57 -0
- package/dist/default/utils/use-composed-refs.js.map +1 -0
- package/dist/default/utils/use-render.js +71 -0
- package/dist/default/utils/use-render.js.map +1 -0
- package/dist/dev/_virtual/_rolldown/runtime.js +36 -0
- package/dist/dev/icons/dist/react/default/captions-off.js +66 -0
- package/dist/dev/icons/dist/react/default/captions-off.js.map +1 -0
- package/dist/dev/icons/dist/react/default/captions-on.js +19 -0
- package/dist/dev/icons/dist/react/default/captions-on.js.map +1 -0
- package/dist/dev/icons/dist/react/default/fullscreen-enter.js +19 -0
- package/dist/dev/icons/dist/react/default/fullscreen-enter.js.map +1 -0
- package/dist/dev/icons/dist/react/default/fullscreen-exit.js +19 -0
- package/dist/dev/icons/dist/react/default/fullscreen-exit.js.map +1 -0
- package/dist/dev/icons/dist/react/default/pause.js +30 -0
- package/dist/dev/icons/dist/react/default/pause.js.map +1 -0
- package/dist/dev/icons/dist/react/default/pip.js +26 -0
- package/dist/dev/icons/dist/react/default/pip.js.map +1 -0
- package/dist/dev/icons/dist/react/default/play.js +19 -0
- package/dist/dev/icons/dist/react/default/play.js.map +1 -0
- package/dist/dev/icons/dist/react/default/restart.js +22 -0
- package/dist/dev/icons/dist/react/default/restart.js.map +1 -0
- package/dist/dev/icons/dist/react/default/seek.js +19 -0
- package/dist/dev/icons/dist/react/default/seek.js.map +1 -0
- package/dist/dev/icons/dist/react/default/spinner.js +149 -0
- package/dist/dev/icons/dist/react/default/spinner.js.map +1 -0
- package/dist/dev/icons/dist/react/default/volume-high.js +22 -0
- package/dist/dev/icons/dist/react/default/volume-high.js.map +1 -0
- package/dist/dev/icons/dist/react/default/volume-low.js +19 -0
- package/dist/dev/icons/dist/react/default/volume-low.js.map +1 -0
- package/dist/dev/icons/dist/react/default/volume-off.js +19 -0
- package/dist/dev/icons/dist/react/default/volume-off.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/captions-off.js +66 -0
- package/dist/dev/icons/dist/react/minimal/captions-off.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/captions-on.js +19 -0
- package/dist/dev/icons/dist/react/minimal/captions-on.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js +29 -0
- package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js +29 -0
- package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/pause.js +30 -0
- package/dist/dev/icons/dist/react/minimal/pause.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/pip.js +26 -0
- package/dist/dev/icons/dist/react/minimal/pip.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/play.js +19 -0
- package/dist/dev/icons/dist/react/minimal/play.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/restart.js +22 -0
- package/dist/dev/icons/dist/react/minimal/restart.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/seek.js +19 -0
- package/dist/dev/icons/dist/react/minimal/seek.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/spinner.js +149 -0
- package/dist/dev/icons/dist/react/minimal/spinner.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/volume-high.js +22 -0
- package/dist/dev/icons/dist/react/minimal/volume-high.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/volume-low.js +19 -0
- package/dist/dev/icons/dist/react/minimal/volume-low.js.map +1 -0
- package/dist/dev/icons/dist/react/minimal/volume-off.js +19 -0
- package/dist/dev/icons/dist/react/minimal/volume-off.js.map +1 -0
- package/dist/dev/index.d.ts +23 -0
- package/dist/dev/index.js +53 -0
- package/dist/dev/index.js.map +1 -0
- package/dist/dev/media/audio.d.ts +12 -0
- package/dist/dev/media/audio.d.ts.map +1 -0
- package/dist/dev/media/audio.js +22 -0
- package/dist/dev/media/audio.js.map +1 -0
- package/dist/dev/media/background-video/index.d.ts +12 -0
- package/dist/dev/media/background-video/index.d.ts.map +1 -0
- package/dist/dev/media/background-video/index.js +28 -0
- package/dist/dev/media/background-video/index.js.map +1 -0
- package/dist/dev/media/hls-video/index.d.ts +11 -0
- package/dist/dev/media/hls-video/index.d.ts.map +1 -0
- package/dist/dev/media/hls-video/index.js +25 -0
- package/dist/dev/media/hls-video/index.js.map +1 -0
- package/dist/dev/media/video.d.ts +12 -0
- package/dist/dev/media/video.d.ts.map +1 -0
- package/dist/dev/media/video.js +22 -0
- package/dist/dev/media/video.js.map +1 -0
- package/dist/dev/player/context.d.ts +40 -0
- package/dist/dev/player/context.d.ts.map +1 -0
- package/dist/dev/player/context.js +55 -0
- package/dist/dev/player/context.js.map +1 -0
- package/dist/dev/player/create-player.d.ts +47 -0
- package/dist/dev/player/create-player.d.ts.map +1 -0
- package/dist/dev/player/create-player.js +39 -0
- package/dist/dev/player/create-player.js.map +1 -0
- package/dist/dev/presets/audio/index.d.ts +12 -0
- package/dist/dev/presets/audio/index.d.ts.map +1 -0
- package/dist/dev/presets/audio/index.js +12 -0
- package/dist/dev/presets/audio/index.js.map +1 -0
- package/dist/dev/presets/audio/minimal-skin.css +3 -0
- package/dist/dev/presets/audio/minimal-skin.d.ts +9 -0
- package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -0
- package/dist/dev/presets/audio/minimal-skin.js +11 -0
- package/dist/dev/presets/audio/minimal-skin.js.map +1 -0
- package/dist/dev/presets/audio/skin.css +3 -0
- package/dist/dev/presets/audio/skin.d.ts +9 -0
- package/dist/dev/presets/audio/skin.d.ts.map +1 -0
- package/dist/dev/presets/audio/skin.js +11 -0
- package/dist/dev/presets/audio/skin.js.map +1 -0
- package/dist/dev/presets/background/index.d.ts +11 -0
- package/dist/dev/presets/background/index.d.ts.map +1 -0
- package/dist/dev/presets/background/index.js +11 -0
- package/dist/dev/presets/background/index.js.map +1 -0
- package/dist/dev/presets/background/skin.css +21 -0
- package/dist/dev/presets/background/skin.d.ts +9 -0
- package/dist/dev/presets/background/skin.d.ts.map +1 -0
- package/dist/dev/presets/background/skin.js +16 -0
- package/dist/dev/presets/background/skin.js.map +1 -0
- package/dist/dev/presets/types.d.ts +10 -0
- package/dist/dev/presets/types.d.ts.map +1 -0
- package/dist/dev/presets/video/index.d.ts +14 -0
- package/dist/dev/presets/video/index.d.ts.map +1 -0
- package/dist/dev/presets/video/index.js +14 -0
- package/dist/dev/presets/video/index.js.map +1 -0
- package/dist/dev/presets/video/minimal-skin.css +637 -0
- package/dist/dev/presets/video/minimal-skin.d.ts +9 -0
- package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -0
- package/dist/dev/presets/video/minimal-skin.js +246 -0
- package/dist/dev/presets/video/minimal-skin.js.map +1 -0
- package/dist/dev/presets/video/minimal-skin.tailwind.d.ts +8 -0
- package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -0
- package/dist/dev/presets/video/minimal-skin.tailwind.js +243 -0
- package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -0
- package/dist/dev/presets/video/skin.css +638 -0
- package/dist/dev/presets/video/skin.d.ts +9 -0
- package/dist/dev/presets/video/skin.d.ts.map +1 -0
- package/dist/dev/presets/video/skin.js +235 -0
- package/dist/dev/presets/video/skin.js.map +1 -0
- package/dist/dev/presets/video/skin.tailwind.d.ts +8 -0
- package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -0
- package/dist/dev/presets/video/skin.tailwind.js +234 -0
- package/dist/dev/presets/video/skin.tailwind.js.map +1 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts +32 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts.map +1 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator.js +53 -0
- package/dist/dev/ui/buffering-indicator/buffering-indicator.js.map +1 -0
- package/dist/dev/ui/buffering-indicator/index.d.ts +2 -0
- package/dist/dev/ui/buffering-indicator/index.js +3 -0
- package/dist/dev/ui/captions-button/captions-button.d.ts +36 -0
- package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -0
- package/dist/dev/ui/captions-button/captions-button.js +51 -0
- package/dist/dev/ui/captions-button/captions-button.js.map +1 -0
- package/dist/dev/ui/captions-button/index.d.ts +2 -0
- package/dist/dev/ui/captions-button/index.js +3 -0
- package/dist/dev/ui/controls/controls-group.d.ts +17 -0
- package/dist/dev/ui/controls/controls-group.d.ts.map +1 -0
- package/dist/dev/ui/controls/controls-group.js +27 -0
- package/dist/dev/ui/controls/controls-group.js.map +1 -0
- package/dist/dev/ui/controls/controls-root.d.ts +18 -0
- package/dist/dev/ui/controls/controls-root.d.ts.map +1 -0
- package/dist/dev/ui/controls/controls-root.js +34 -0
- package/dist/dev/ui/controls/controls-root.js.map +1 -0
- package/dist/dev/ui/controls/index.d.ts +2 -0
- package/dist/dev/ui/controls/index.js +3 -0
- package/dist/dev/ui/controls/index.parts.d.ts +10 -0
- package/dist/dev/ui/controls/index.parts.d.ts.map +1 -0
- package/dist/dev/ui/controls/index.parts.js +13 -0
- package/dist/dev/ui/controls/index.parts.js.map +1 -0
- package/dist/dev/ui/error-dialog/error-dialog.d.ts +35 -0
- package/dist/dev/ui/error-dialog/error-dialog.d.ts.map +1 -0
- package/dist/dev/ui/error-dialog/error-dialog.js +54 -0
- package/dist/dev/ui/error-dialog/error-dialog.js.map +1 -0
- package/dist/dev/ui/error-dialog/index.d.ts +2 -0
- package/dist/dev/ui/error-dialog/index.js +3 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts +14 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button.js +47 -0
- package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -0
- package/dist/dev/ui/fullscreen-button/index.d.ts +2 -0
- package/dist/dev/ui/fullscreen-button/index.js +3 -0
- package/dist/dev/ui/hooks/use-button.d.ts +40 -0
- package/dist/dev/ui/hooks/use-button.d.ts.map +1 -0
- package/dist/dev/ui/hooks/use-button.js +46 -0
- package/dist/dev/ui/hooks/use-button.js.map +1 -0
- package/dist/dev/ui/mute-button/index.d.ts +2 -0
- package/dist/dev/ui/mute-button/index.js +3 -0
- package/dist/dev/ui/mute-button/mute-button.d.ts +17 -0
- package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -0
- package/dist/dev/ui/mute-button/mute-button.js +50 -0
- package/dist/dev/ui/mute-button/mute-button.js.map +1 -0
- package/dist/dev/ui/pip-button/index.d.ts +2 -0
- package/dist/dev/ui/pip-button/index.js +3 -0
- package/dist/dev/ui/pip-button/pip-button.d.ts +14 -0
- package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -0
- package/dist/dev/ui/pip-button/pip-button.js +47 -0
- package/dist/dev/ui/pip-button/pip-button.js.map +1 -0
- package/dist/dev/ui/play-button/index.d.ts +2 -0
- package/dist/dev/ui/play-button/index.js +3 -0
- package/dist/dev/ui/play-button/play-button.d.ts +30 -0
- package/dist/dev/ui/play-button/play-button.d.ts.map +1 -0
- package/dist/dev/ui/play-button/play-button.js +63 -0
- package/dist/dev/ui/play-button/play-button.js.map +1 -0
- package/dist/dev/ui/poster/index.d.ts +2 -0
- package/dist/dev/ui/poster/index.js +3 -0
- package/dist/dev/ui/poster/poster.d.ts +28 -0
- package/dist/dev/ui/poster/poster.d.ts.map +1 -0
- package/dist/dev/ui/poster/poster.js +46 -0
- package/dist/dev/ui/poster/poster.js.map +1 -0
- package/dist/dev/ui/seek-button/index.d.ts +2 -0
- package/dist/dev/ui/seek-button/index.js +3 -0
- package/dist/dev/ui/seek-button/seek-button.d.ts +31 -0
- package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -0
- package/dist/dev/ui/seek-button/seek-button.js +65 -0
- package/dist/dev/ui/seek-button/seek-button.js.map +1 -0
- package/dist/dev/ui/time/index.d.ts +2 -0
- package/dist/dev/ui/time/index.js +3 -0
- package/dist/dev/ui/time/index.parts.d.ts +11 -0
- package/dist/dev/ui/time/index.parts.d.ts.map +1 -0
- package/dist/dev/ui/time/index.parts.js +15 -0
- package/dist/dev/ui/time/index.parts.js.map +1 -0
- package/dist/dev/ui/time/time-group.d.ts +29 -0
- package/dist/dev/ui/time/time-group.d.ts.map +1 -0
- package/dist/dev/ui/time/time-group.js +34 -0
- package/dist/dev/ui/time/time-group.js.map +1 -0
- package/dist/dev/ui/time/time-separator.d.ts +26 -0
- package/dist/dev/ui/time/time-separator.d.ts.map +1 -0
- package/dist/dev/ui/time/time-separator.js +34 -0
- package/dist/dev/ui/time/time-separator.js.map +1 -0
- package/dist/dev/ui/time/time-value.d.ts +24 -0
- package/dist/dev/ui/time/time-value.d.ts.map +1 -0
- package/dist/dev/ui/time/time-value.js +57 -0
- package/dist/dev/ui/time/time-value.js.map +1 -0
- package/dist/dev/utils/attach-media-element.js +12 -0
- package/dist/dev/utils/attach-media-element.js.map +1 -0
- package/dist/dev/utils/media-props.js +11 -0
- package/dist/dev/utils/media-props.js.map +1 -0
- package/dist/dev/utils/merge-props.d.ts +26 -0
- package/dist/dev/utils/merge-props.d.ts.map +1 -0
- package/dist/dev/utils/merge-props.js +85 -0
- package/dist/dev/utils/merge-props.js.map +1 -0
- package/dist/dev/utils/types.d.ts +27 -0
- package/dist/dev/utils/types.d.ts.map +1 -0
- package/dist/dev/utils/use-composed-refs.js +57 -0
- package/dist/dev/utils/use-composed-refs.js.map +1 -0
- package/dist/dev/utils/use-render.d.ts +45 -0
- package/dist/dev/utils/use-render.d.ts.map +1 -0
- package/dist/dev/utils/use-render.js +71 -0
- package/dist/dev/utils/use-render.js.map +1 -0
- package/package.json +50 -55
- package/dist/FrostedSkin-t8edr5LV.d.ts +0 -13
- package/dist/FrostedSkin-t8edr5LV.d.ts.map +0 -1
- package/dist/MinimalSkin-DzHkJgW-.d.ts +0 -13
- package/dist/MinimalSkin-DzHkJgW-.d.ts.map +0 -1
- package/dist/VolumeSlider-DBvAU2X3.js +0 -1025
- package/dist/VolumeSlider-DBvAU2X3.js.map +0 -1
- package/dist/frosted-D2OXDJRV.js +0 -156
- package/dist/frosted-D2OXDJRV.js.map +0 -1
- package/dist/icons-BqfV81R8.js +0 -316
- package/dist/icons-BqfV81R8.js.map +0 -1
- package/dist/icons.d.ts +0 -71
- package/dist/icons.d.ts.map +0 -1
- package/dist/icons.js +0 -3
- package/dist/index-CM70WSkA.d.ts +0 -36
- package/dist/index-CM70WSkA.d.ts.map +0 -1
- package/dist/index.d.ts +0 -331
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -89
- package/dist/index.js.map +0 -1
- package/dist/minimal-CDaU4avz.js +0 -162
- package/dist/minimal-CDaU4avz.js.map +0 -1
- package/dist/skins/frosted.css +0 -4
- package/dist/skins/frosted.d.ts +0 -2
- package/dist/skins/frosted.js +0 -9
- package/dist/skins/minimal.css +0 -4
- package/dist/skins/minimal.d.ts +0 -2
- package/dist/skins/minimal.js +0 -9
- package/dist/store-hGO5HE2A.js +0 -124
- package/dist/store-hGO5HE2A.js.map +0 -1
- package/dist/store.d.ts +0 -2
- package/dist/store.js +0 -6
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
4
|
+
import { useButton } from "../hooks/use-button.js";
|
|
5
|
+
import { forwardRef, useState } from "react";
|
|
6
|
+
|
|
7
|
+
//#region src/ui/captions-button/captions-button.tsx
|
|
8
|
+
const CaptionButtonDataAttrs = { active: "data-active" };
|
|
9
|
+
/**
|
|
10
|
+
* A button that toggles captions.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <CaptionsButton />
|
|
15
|
+
*
|
|
16
|
+
* <CaptionsButton
|
|
17
|
+
* render={(props, state) => (
|
|
18
|
+
* <button {...props}>
|
|
19
|
+
* {state.active ? <CaptionsOnIcon /> : <CaptionsOffIcon />}
|
|
20
|
+
* </button>
|
|
21
|
+
* )}
|
|
22
|
+
* />
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
const CaptionsButton = forwardRef(function CaptionsButton(componentProps, forwardedRef) {
|
|
26
|
+
const { render, className, style, label, disabled, ...elementProps } = componentProps;
|
|
27
|
+
const [isActive, setIsActive] = useState(false);
|
|
28
|
+
const { getButtonProps, buttonRef } = useButton({
|
|
29
|
+
displayName: "CaptionsButton",
|
|
30
|
+
onActivate: () => setIsActive((active) => !active),
|
|
31
|
+
isDisabled: () => disabled ?? false
|
|
32
|
+
});
|
|
33
|
+
return renderElement("button", {
|
|
34
|
+
render,
|
|
35
|
+
className,
|
|
36
|
+
style
|
|
37
|
+
}, {
|
|
38
|
+
state: { active: isActive },
|
|
39
|
+
stateAttrMap: CaptionButtonDataAttrs,
|
|
40
|
+
ref: [forwardedRef, buttonRef],
|
|
41
|
+
props: [
|
|
42
|
+
elementProps,
|
|
43
|
+
getButtonProps(),
|
|
44
|
+
{ "aria-pressed": isActive }
|
|
45
|
+
]
|
|
46
|
+
});
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
//#endregion
|
|
50
|
+
export { CaptionsButton };
|
|
51
|
+
//# sourceMappingURL=captions-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captions-button.js","names":[],"sources":["../../../../src/ui/captions-button/captions-button.tsx"],"sourcesContent":["'use client';\n\nimport type { StateAttrMap } from '@videojs/core';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useButton } from '../hooks/use-button';\n\n// FIXME: Replace with state/props from core.\nexport type CaptionsButtonState = {\n active: boolean;\n};\ntype CaptionButtonCoreProps = {\n /** Custom label for the button. */\n label?: string | ((state: CaptionsButtonState) => string) | undefined;\n /** Whether the button is disabled. */\n disabled?: boolean | undefined;\n};\nconst CaptionButtonDataAttrs = {\n /** Present when the captions are active. */\n active: 'data-active',\n} as const satisfies StateAttrMap<CaptionsButtonState>;\n\nexport interface CaptionsButtonProps extends UIComponentProps<'button', CaptionsButtonState>, CaptionButtonCoreProps {}\n\n/**\n * A button that toggles captions.\n *\n * @example\n * ```tsx\n * <CaptionsButton />\n *\n * <CaptionsButton\n * render={(props, state) => (\n * <button {...props}>\n * {state.active ? <CaptionsOnIcon /> : <CaptionsOffIcon />}\n * </button>\n * )}\n * />\n * ```\n */\nexport const CaptionsButton = forwardRef(function CaptionsButton(\n componentProps: CaptionsButtonProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const { render, className, style, label, disabled, ...elementProps } = componentProps;\n\n // FIXME: Replace with actual captions state\n const [isActive, setIsActive] = useState(false);\n\n const { getButtonProps, buttonRef } = useButton({\n displayName: 'CaptionsButton',\n onActivate: () => setIsActive((active) => !active), // FIXME: Replace with actual toggle logic\n isDisabled: () => disabled ?? false,\n });\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state: { active: isActive }, // FIXME: Replace with actual toggle logic\n stateAttrMap: CaptionButtonDataAttrs,\n ref: [forwardedRef, buttonRef],\n props: [elementProps, getButtonProps(), { 'aria-pressed': isActive }],\n }\n );\n});\n\nexport namespace CaptionsButton {\n export type Props = CaptionsButtonProps;\n export type State = CaptionsButtonState;\n}\n"],"mappings":";;;;;;;AAoBA,MAAM,yBAAyB,EAE7B,QAAQ,eACT;;;;;;;;;;;;;;;;;AAoBD,MAAa,iBAAiB,WAAW,SAAS,eAChD,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,OAAO,UAAU,GAAG,iBAAiB;CAGvE,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;CAE/C,MAAM,EAAE,gBAAgB,cAAc,UAAU;EAC9C,aAAa;EACb,kBAAkB,aAAa,WAAW,CAAC,OAAO;EAClD,kBAAkB,YAAY;EAC/B,CAAC;AAEF,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OAAO,EAAE,QAAQ,UAAU;EAC3B,cAAc;EACd,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO;GAAC;GAAc,gBAAgB;GAAE,EAAE,gBAAgB,UAAU;GAAC;EACtE,CACF;EACD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
4
|
+
import { forwardRef } from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/ui/controls/controls-group.tsx
|
|
7
|
+
/** Layout group for related controls; sets `role="group"` when labeled. */
|
|
8
|
+
const ControlsGroup = forwardRef(function ControlsGroup(componentProps, forwardedRef) {
|
|
9
|
+
const { render, className, style, children, ...elementProps } = componentProps;
|
|
10
|
+
const role = elementProps["aria-label"] || elementProps["aria-labelledby"] ? "group" : void 0;
|
|
11
|
+
return renderElement("div", {
|
|
12
|
+
render,
|
|
13
|
+
className,
|
|
14
|
+
style
|
|
15
|
+
}, {
|
|
16
|
+
state: {},
|
|
17
|
+
ref: [forwardedRef],
|
|
18
|
+
props: [{
|
|
19
|
+
role,
|
|
20
|
+
children
|
|
21
|
+
}, elementProps]
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
//#endregion
|
|
26
|
+
export { ControlsGroup };
|
|
27
|
+
//# sourceMappingURL=controls-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls-group.js","names":[],"sources":["../../../../src/ui/controls/controls-group.tsx"],"sourcesContent":["'use client';\n\nimport type { ForwardedRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\n\ntype GroupState = Record<string, never>;\n\nexport interface ControlsGroupProps extends UIComponentProps<'div', GroupState> {\n children?: ReactNode | undefined;\n}\n\n/** Layout group for related controls; sets `role=\"group\"` when labeled. */\nexport const ControlsGroup = forwardRef(function ControlsGroup(\n componentProps: ControlsGroupProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { render, className, style, children, ...elementProps } = componentProps;\n\n const role = elementProps['aria-label'] || elementProps['aria-labelledby'] ? 'group' : undefined;\n\n const state: GroupState = {};\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ role, children }, elementProps],\n }\n );\n});\n\nexport namespace ControlsGroup {\n export type Props = ControlsGroupProps;\n}\n"],"mappings":";;;;;;;AAeA,MAAa,gBAAgB,WAAW,SAAS,cAC/C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,iBAAiB;CAEhE,MAAM,OAAO,aAAa,iBAAiB,aAAa,qBAAqB,UAAU;AAIvF,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OANsB,EAAE;EAOxB,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC;GAAE;GAAM;GAAU,EAAE,aAAa;EAC1C,CACF;EACD"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { usePlayer } from "../../player/context.js";
|
|
4
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
5
|
+
import { selectControls } from "@videojs/core/dom";
|
|
6
|
+
import { forwardRef, useState } from "react";
|
|
7
|
+
import { ControlsCore, ControlsDataAttrs } from "@videojs/core";
|
|
8
|
+
|
|
9
|
+
//#region src/ui/controls/controls-root.tsx
|
|
10
|
+
/** Root container for player controls state and rendered control content. */
|
|
11
|
+
const ControlsRoot = forwardRef(function ControlsRoot(componentProps, forwardedRef) {
|
|
12
|
+
const { render, className, style, children, ...elementProps } = componentProps;
|
|
13
|
+
const controls = usePlayer(selectControls);
|
|
14
|
+
const [core] = useState(() => new ControlsCore());
|
|
15
|
+
if (!controls) return null;
|
|
16
|
+
const state = core.getState(controls);
|
|
17
|
+
return renderElement("div", {
|
|
18
|
+
render,
|
|
19
|
+
className,
|
|
20
|
+
style
|
|
21
|
+
}, {
|
|
22
|
+
state,
|
|
23
|
+
stateAttrMap: ControlsDataAttrs,
|
|
24
|
+
ref: [forwardedRef],
|
|
25
|
+
props: [{ children }, elementProps]
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
//#endregion
|
|
30
|
+
export { ControlsRoot };
|
|
31
|
+
//# sourceMappingURL=controls-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"controls-root.js","names":[],"sources":["../../../../src/ui/controls/controls-root.tsx"],"sourcesContent":["'use client';\n\nimport { ControlsCore, ControlsDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectControls } from '@videojs/core/dom';\nimport type { ForwardedRef, ReactNode } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\n\nexport interface ControlsRootProps extends UIComponentProps<'div', ControlsCore.State> {\n children?: ReactNode | undefined;\n}\n\n/** Root container for player controls state and rendered control content. */\nexport const ControlsRoot = forwardRef(function ControlsRoot(\n componentProps: ControlsRootProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { render, className, style, children, ...elementProps } = componentProps;\n\n const controls = usePlayer(selectControls);\n\n const [core] = useState(() => new ControlsCore());\n\n if (!controls) {\n if (__DEV__) logMissingFeature('Controls.Root', 'controls');\n return null;\n }\n\n const state = core.getState(controls);\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap: ControlsDataAttrs,\n ref: [forwardedRef],\n props: [{ children }, elementProps],\n }\n );\n});\n\nexport namespace ControlsRoot {\n export type Props = ControlsRootProps;\n export type State = ControlsCore.State;\n}\n"],"mappings":";;;;;;;;;;AAgBA,MAAa,eAAe,WAAW,SAAS,aAC9C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,iBAAiB;CAEhE,MAAM,WAAW,UAAU,eAAe;CAE1C,MAAM,CAAC,QAAQ,eAAe,IAAI,cAAc,CAAC;AAEjD,KAAI,CAAC,SAEH,QAAO;CAGT,MAAM,QAAQ,KAAK,SAAS,SAAS;AAErC,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,cAAc;EACd,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,EAAE,UAAU,EAAE,aAAa;EACpC,CACF;EACD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
|
|
2
|
+
import { ControlsGroup } from "./controls-group.js";
|
|
3
|
+
import { ControlsRoot } from "./controls-root.js";
|
|
4
|
+
|
|
5
|
+
//#region src/ui/controls/index.parts.ts
|
|
6
|
+
var index_parts_exports = /* @__PURE__ */ __exportAll({
|
|
7
|
+
Group: () => ControlsGroup,
|
|
8
|
+
Root: () => ControlsRoot
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
export { index_parts_exports };
|
|
13
|
+
//# sourceMappingURL=index.parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.parts.js","names":[],"sources":["../../../../src/ui/controls/index.parts.ts"],"sourcesContent":["export { ControlsGroup as Group, type ControlsGroupProps as GroupProps } from './controls-group';\nexport { ControlsRoot as Root, type ControlsRootProps as RootProps } from './controls-root';\n"],"mappings":""}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
4
|
+
import { forwardRef, useEffect, useRef, useState } from "react";
|
|
5
|
+
|
|
6
|
+
//#region src/ui/error-dialog/error-dialog.tsx
|
|
7
|
+
/**
|
|
8
|
+
* Displays an error dialog when media playback encounters an error.
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <ErrorDialog />
|
|
13
|
+
*
|
|
14
|
+
* <ErrorDialog
|
|
15
|
+
* render={(props, state) => (
|
|
16
|
+
* <div {...props}>Something went wrong</div>
|
|
17
|
+
* )}
|
|
18
|
+
* />
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
const ErrorDialog = forwardRef(function ErrorDialog(componentProps, forwardedRef) {
|
|
22
|
+
const { render, className, style, ...elementProps } = componentProps;
|
|
23
|
+
const dialogRef = useRef(null);
|
|
24
|
+
const [hasError, setHasError] = useState(false);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
const handle = setTimeout(() => {}, 2e3);
|
|
27
|
+
return () => clearTimeout(handle);
|
|
28
|
+
}, []);
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (!hasError) return;
|
|
31
|
+
requestAnimationFrame(() => {
|
|
32
|
+
dialogRef.current?.focus();
|
|
33
|
+
});
|
|
34
|
+
}, [hasError]);
|
|
35
|
+
return renderElement("div", {
|
|
36
|
+
render,
|
|
37
|
+
className,
|
|
38
|
+
style
|
|
39
|
+
}, {
|
|
40
|
+
state: {
|
|
41
|
+
visible: hasError,
|
|
42
|
+
onDismiss: () => setHasError(false)
|
|
43
|
+
},
|
|
44
|
+
ref: [forwardedRef, dialogRef],
|
|
45
|
+
props: [{
|
|
46
|
+
role: "alertdialog",
|
|
47
|
+
tabIndex: -1
|
|
48
|
+
}, elementProps]
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
//#endregion
|
|
53
|
+
export { ErrorDialog };
|
|
54
|
+
//# sourceMappingURL=error-dialog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-dialog.js","names":[],"sources":["../../../../src/ui/error-dialog/error-dialog.tsx"],"sourcesContent":["'use client';\n\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useEffect, useRef, useState } from 'react';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\n\ntype ErrorDialogState = { visible: boolean; onDismiss: () => void };\n\nexport interface ErrorDialogProps extends UIComponentProps<'div', ErrorDialogState> {\n 'aria-labelledby': string;\n 'aria-describedby'?: string;\n dismiss?: () => void;\n}\n\nconst DEBUG = false;\n\n/**\n * Displays an error dialog when media playback encounters an error.\n *\n * @example\n * ```tsx\n * <ErrorDialog />\n *\n * <ErrorDialog\n * render={(props, state) => (\n * <div {...props}>Something went wrong</div>\n * )}\n * />\n * ```\n */\nexport const ErrorDialog = forwardRef(function ErrorDialog(\n componentProps: ErrorDialogProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { render, className, style, ...elementProps } = componentProps;\n const dialogRef = useRef<HTMLDivElement>(null);\n\n const [hasError, setHasError] = useState(false);\n\n // FIXME: This is just debugging code\n useEffect(() => {\n const handle = setTimeout(() => {\n if (!DEBUG) return;\n setHasError(true);\n }, 2000);\n\n return () => clearTimeout(handle);\n }, []);\n\n // Focus the dialog when it becomes visible to ensure it's announced by screen readers.\n // Wait a frame for the accessibility tree to update with the dialog before focusing.\n useEffect(() => {\n if (!hasError) return;\n requestAnimationFrame(() => {\n dialogRef.current?.focus();\n });\n }, [hasError]);\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state: {\n visible: hasError,\n onDismiss: () => setHasError(false),\n },\n ref: [forwardedRef, dialogRef],\n props: [\n {\n role: 'alertdialog',\n tabIndex: -1,\n },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace ErrorDialog {\n export type Props = ErrorDialogProps;\n export type State = ErrorDialogState;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA+BA,MAAa,cAAc,WAAW,SAAS,YAC7C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,GAAG,iBAAiB;CACtD,MAAM,YAAY,OAAuB,KAAK;CAE9C,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;AAG/C,iBAAgB;EACd,MAAM,SAAS,iBAAiB,IAG7B,IAAK;AAER,eAAa,aAAa,OAAO;IAChC,EAAE,CAAC;AAIN,iBAAgB;AACd,MAAI,CAAC,SAAU;AACf,8BAA4B;AAC1B,aAAU,SAAS,OAAO;IAC1B;IACD,CAAC,SAAS,CAAC;AAEd,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OAAO;GACL,SAAS;GACT,iBAAiB,YAAY,MAAM;GACpC;EACD,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO,CACL;GACE,MAAM;GACN,UAAU;GACX,EACD,aACD;EACF,CACF;EACD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { usePlayer } from "../../player/context.js";
|
|
4
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
5
|
+
import { useButton } from "../hooks/use-button.js";
|
|
6
|
+
import { selectFullscreen } from "@videojs/core/dom";
|
|
7
|
+
import { forwardRef, useState } from "react";
|
|
8
|
+
import { FullscreenButtonCore, FullscreenButtonDataAttrs } from "@videojs/core";
|
|
9
|
+
|
|
10
|
+
//#region src/ui/fullscreen-button/fullscreen-button.tsx
|
|
11
|
+
const FullscreenButton = forwardRef(function FullscreenButton(componentProps, forwardedRef) {
|
|
12
|
+
const { render, className, style, label, disabled, ...elementProps } = componentProps;
|
|
13
|
+
const fullscreen = usePlayer(selectFullscreen);
|
|
14
|
+
const [core] = useState(() => new FullscreenButtonCore());
|
|
15
|
+
core.setProps({
|
|
16
|
+
label,
|
|
17
|
+
disabled
|
|
18
|
+
});
|
|
19
|
+
const { getButtonProps, buttonRef } = useButton({
|
|
20
|
+
displayName: "FullscreenButton",
|
|
21
|
+
onActivate: () => core.toggle(fullscreen),
|
|
22
|
+
isDisabled: () => disabled || !fullscreen
|
|
23
|
+
});
|
|
24
|
+
if (!fullscreen) return null;
|
|
25
|
+
const state = core.getState(fullscreen);
|
|
26
|
+
return renderElement("button", {
|
|
27
|
+
render,
|
|
28
|
+
className,
|
|
29
|
+
style
|
|
30
|
+
}, {
|
|
31
|
+
state,
|
|
32
|
+
stateAttrMap: FullscreenButtonDataAttrs,
|
|
33
|
+
ref: [forwardedRef, buttonRef],
|
|
34
|
+
props: [
|
|
35
|
+
core.getAttrs(state),
|
|
36
|
+
elementProps,
|
|
37
|
+
getButtonProps()
|
|
38
|
+
]
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
//#endregion
|
|
43
|
+
export { FullscreenButton };
|
|
44
|
+
//# sourceMappingURL=fullscreen-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fullscreen-button.js","names":[],"sources":["../../../../src/ui/fullscreen-button/fullscreen-button.tsx"],"sourcesContent":["'use client';\n\nimport { FullscreenButtonCore, FullscreenButtonDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectFullscreen } from '@videojs/core/dom';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useButton } from '../hooks/use-button';\n\nexport interface FullscreenButtonProps\n extends UIComponentProps<'button', FullscreenButtonCore.State>,\n FullscreenButtonCore.Props {}\n\nexport const FullscreenButton = forwardRef(function FullscreenButton(\n componentProps: FullscreenButtonProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const { render, className, style, label, disabled, ...elementProps } = componentProps;\n\n const fullscreen = usePlayer(selectFullscreen);\n\n const [core] = useState(() => new FullscreenButtonCore());\n core.setProps({ label, disabled });\n\n const { getButtonProps, buttonRef } = useButton({\n displayName: 'FullscreenButton',\n onActivate: () => core.toggle(fullscreen!),\n isDisabled: () => disabled || !fullscreen,\n });\n\n if (!fullscreen) {\n if (__DEV__) logMissingFeature('FullscreenButton', 'fullscreen');\n return null;\n }\n\n const state = core.getState(fullscreen);\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap: FullscreenButtonDataAttrs,\n ref: [forwardedRef, buttonRef],\n props: [core.getAttrs(state), elementProps, getButtonProps()],\n }\n );\n});\n\nexport namespace FullscreenButton {\n export type Props = FullscreenButtonProps;\n export type State = FullscreenButtonCore.State;\n}\n"],"mappings":";;;;;;;;;;AAgBA,MAAa,mBAAmB,WAAW,SAAS,iBAClD,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,OAAO,UAAU,GAAG,iBAAiB;CAEvE,MAAM,aAAa,UAAU,iBAAiB;CAE9C,MAAM,CAAC,QAAQ,eAAe,IAAI,sBAAsB,CAAC;AACzD,MAAK,SAAS;EAAE;EAAO;EAAU,CAAC;CAElC,MAAM,EAAE,gBAAgB,cAAc,UAAU;EAC9C,aAAa;EACb,kBAAkB,KAAK,OAAO,WAAY;EAC1C,kBAAkB,YAAY,CAAC;EAChC,CAAC;AAEF,KAAI,CAAC,WAEH,QAAO;CAGT,MAAM,QAAQ,KAAK,SAAS,WAAW;AAEvC,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,cAAc;EACd,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO;GAAC,KAAK,SAAS,MAAM;GAAE;GAAc,gBAAgB;GAAC;EAC9D,CACF;EACD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { mergeProps } from "../../utils/merge-props.js";
|
|
4
|
+
import { createButton } from "@videojs/core/dom";
|
|
5
|
+
import { useCallback } from "react";
|
|
6
|
+
|
|
7
|
+
//#region src/ui/hooks/use-button.ts
|
|
8
|
+
/**
|
|
9
|
+
* Hook for button behavior with keyboard and pointer interaction.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```tsx
|
|
13
|
+
* const { getButtonProps, buttonRef } = useButton({
|
|
14
|
+
* displayName: 'PlayButton',
|
|
15
|
+
* onActivate: () => togglePlayback(),
|
|
16
|
+
* isDisabled: () => disabled,
|
|
17
|
+
* });
|
|
18
|
+
*
|
|
19
|
+
* return useRender('button', componentProps, {
|
|
20
|
+
* state,
|
|
21
|
+
* ref: [forwardedRef, buttonRef],
|
|
22
|
+
* props: [elementProps, getButtonProps],
|
|
23
|
+
* });
|
|
24
|
+
* ```
|
|
25
|
+
*
|
|
26
|
+
* @param params - Button configuration with activation handler and disabled check.
|
|
27
|
+
*/
|
|
28
|
+
function useButton(params) {
|
|
29
|
+
const { displayName, onActivate, isDisabled } = params;
|
|
30
|
+
const buttonRef = useCallback((element) => {}, [displayName]);
|
|
31
|
+
return {
|
|
32
|
+
getButtonProps: useCallback((externalProps) => {
|
|
33
|
+
return mergeProps(createButton({
|
|
34
|
+
onActivate,
|
|
35
|
+
isDisabled
|
|
36
|
+
}), externalProps);
|
|
37
|
+
}, [onActivate, isDisabled]),
|
|
38
|
+
buttonRef
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
//#endregion
|
|
43
|
+
export { useButton };
|
|
44
|
+
//# sourceMappingURL=use-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-button.js","names":[],"sources":["../../../../src/ui/hooks/use-button.ts"],"sourcesContent":["'use client';\n\nimport { createButton } from '@videojs/core/dom';\nimport type { ComponentPropsWithRef, Ref } from 'react';\nimport { useCallback } from 'react';\nimport { mergeProps } from '../../utils/merge-props';\n\nexport interface UseButtonParameters {\n displayName: string;\n onActivate: () => void;\n isDisabled: () => boolean;\n}\n\nexport interface UseButtonReturnValue {\n getButtonProps: (externalProps?: ComponentPropsWithRef<'button'>) => ComponentPropsWithRef<'button'>;\n buttonRef: Ref<HTMLElement>;\n}\n\n/**\n * Hook for button behavior with keyboard and pointer interaction.\n *\n * @example\n * ```tsx\n * const { getButtonProps, buttonRef } = useButton({\n * displayName: 'PlayButton',\n * onActivate: () => togglePlayback(),\n * isDisabled: () => disabled,\n * });\n *\n * return useRender('button', componentProps, {\n * state,\n * ref: [forwardedRef, buttonRef],\n * props: [elementProps, getButtonProps],\n * });\n * ```\n *\n * @param params - Button configuration with activation handler and disabled check.\n */\nexport function useButton(params: UseButtonParameters): UseButtonReturnValue {\n const { displayName, onActivate, isDisabled } = params;\n\n const buttonRef = useCallback(\n (element: HTMLElement | null) => {\n if (__DEV__ && element && element.tagName !== 'BUTTON') {\n console.warn(`${displayName} should render a <button> element for accessibility`);\n }\n },\n [displayName]\n );\n\n const getButtonProps = useCallback(\n (externalProps?: ComponentPropsWithRef<'button'>): ComponentPropsWithRef<'button'> => {\n const buttonProps = createButton({ onActivate, isDisabled });\n return mergeProps(buttonProps, externalProps);\n },\n [onActivate, isDisabled]\n );\n\n return { getButtonProps, buttonRef };\n}\n\nexport namespace useButton {\n export type Parameters = UseButtonParameters;\n export type ReturnValue = UseButtonReturnValue;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,SAAgB,UAAU,QAAmD;CAC3E,MAAM,EAAE,aAAa,YAAY,eAAe;CAEhD,MAAM,YAAY,aACf,YAAgC,IAKjC,CAAC,YAAY,CACd;AAUD,QAAO;EAAE,gBARc,aACpB,kBAAqF;AAEpF,UAAO,WADa,aAAa;IAAE;IAAY;IAAY,CAAC,EAC7B,cAAc;KAE/C,CAAC,YAAY,WAAW,CACzB;EAEwB;EAAW"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { usePlayer } from "../../player/context.js";
|
|
4
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
5
|
+
import { useButton } from "../hooks/use-button.js";
|
|
6
|
+
import { selectVolume } from "@videojs/core/dom";
|
|
7
|
+
import { forwardRef, useState } from "react";
|
|
8
|
+
import { MuteButtonCore, MuteButtonDataAttrs } from "@videojs/core";
|
|
9
|
+
|
|
10
|
+
//#region src/ui/mute-button/mute-button.tsx
|
|
11
|
+
/**
|
|
12
|
+
* A button that toggles mute state.
|
|
13
|
+
*/
|
|
14
|
+
const MuteButton = forwardRef(function MuteButton(componentProps, forwardedRef) {
|
|
15
|
+
const { render, className, style, label, disabled, ...elementProps } = componentProps;
|
|
16
|
+
const volume = usePlayer(selectVolume);
|
|
17
|
+
const [core] = useState(() => new MuteButtonCore());
|
|
18
|
+
core.setProps({
|
|
19
|
+
label,
|
|
20
|
+
disabled
|
|
21
|
+
});
|
|
22
|
+
const { getButtonProps, buttonRef } = useButton({
|
|
23
|
+
displayName: "MuteButton",
|
|
24
|
+
onActivate: () => core.toggle(volume),
|
|
25
|
+
isDisabled: () => disabled || !volume
|
|
26
|
+
});
|
|
27
|
+
if (!volume) return null;
|
|
28
|
+
const state = core.getState(volume);
|
|
29
|
+
return renderElement("button", {
|
|
30
|
+
render,
|
|
31
|
+
className,
|
|
32
|
+
style
|
|
33
|
+
}, {
|
|
34
|
+
state,
|
|
35
|
+
stateAttrMap: MuteButtonDataAttrs,
|
|
36
|
+
ref: [forwardedRef, buttonRef],
|
|
37
|
+
props: [
|
|
38
|
+
core.getAttrs(state),
|
|
39
|
+
elementProps,
|
|
40
|
+
getButtonProps()
|
|
41
|
+
]
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
//#endregion
|
|
46
|
+
export { MuteButton };
|
|
47
|
+
//# sourceMappingURL=mute-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mute-button.js","names":[],"sources":["../../../../src/ui/mute-button/mute-button.tsx"],"sourcesContent":["'use client';\n\nimport { MuteButtonCore, MuteButtonDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectVolume } from '@videojs/core/dom';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useButton } from '../hooks/use-button';\n\nexport interface MuteButtonProps extends UIComponentProps<'button', MuteButtonCore.State>, MuteButtonCore.Props {}\n\n/**\n * A button that toggles mute state.\n */\nexport const MuteButton = forwardRef(function MuteButton(\n componentProps: MuteButtonProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const { render, className, style, label, disabled, ...elementProps } = componentProps;\n\n const volume = usePlayer(selectVolume);\n\n const [core] = useState(() => new MuteButtonCore());\n core.setProps({ label, disabled });\n\n const { getButtonProps, buttonRef } = useButton({\n displayName: 'MuteButton',\n onActivate: () => core.toggle(volume!),\n isDisabled: () => disabled || !volume,\n });\n\n if (!volume) {\n if (__DEV__) logMissingFeature('MuteButton', 'volume');\n return null;\n }\n\n const state = core.getState(volume);\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap: MuteButtonDataAttrs,\n ref: [forwardedRef, buttonRef],\n props: [core.getAttrs(state), elementProps, getButtonProps()],\n }\n );\n});\n\nexport namespace MuteButton {\n export type Props = MuteButtonProps;\n export type State = MuteButtonCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;AAiBA,MAAa,aAAa,WAAW,SAAS,WAC5C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,OAAO,UAAU,GAAG,iBAAiB;CAEvE,MAAM,SAAS,UAAU,aAAa;CAEtC,MAAM,CAAC,QAAQ,eAAe,IAAI,gBAAgB,CAAC;AACnD,MAAK,SAAS;EAAE;EAAO;EAAU,CAAC;CAElC,MAAM,EAAE,gBAAgB,cAAc,UAAU;EAC9C,aAAa;EACb,kBAAkB,KAAK,OAAO,OAAQ;EACtC,kBAAkB,YAAY,CAAC;EAChC,CAAC;AAEF,KAAI,CAAC,OAEH,QAAO;CAGT,MAAM,QAAQ,KAAK,SAAS,OAAO;AAEnC,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,cAAc;EACd,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO;GAAC,KAAK,SAAS,MAAM;GAAE;GAAc,gBAAgB;GAAC;EAC9D,CACF;EACD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { usePlayer } from "../../player/context.js";
|
|
4
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
5
|
+
import { useButton } from "../hooks/use-button.js";
|
|
6
|
+
import { selectPiP } from "@videojs/core/dom";
|
|
7
|
+
import { forwardRef, useState } from "react";
|
|
8
|
+
import { PiPButtonCore, PiPButtonDataAttrs } from "@videojs/core";
|
|
9
|
+
|
|
10
|
+
//#region src/ui/pip-button/pip-button.tsx
|
|
11
|
+
const PiPButton = forwardRef(function PiPButton(componentProps, forwardedRef) {
|
|
12
|
+
const { render, className, style, label, disabled, ...elementProps } = componentProps;
|
|
13
|
+
const pip = usePlayer(selectPiP);
|
|
14
|
+
const [core] = useState(() => new PiPButtonCore());
|
|
15
|
+
core.setProps({
|
|
16
|
+
label,
|
|
17
|
+
disabled
|
|
18
|
+
});
|
|
19
|
+
const { getButtonProps, buttonRef } = useButton({
|
|
20
|
+
displayName: "PiPButton",
|
|
21
|
+
onActivate: () => core.toggle(pip),
|
|
22
|
+
isDisabled: () => disabled || !pip
|
|
23
|
+
});
|
|
24
|
+
if (!pip) return null;
|
|
25
|
+
const state = core.getState(pip);
|
|
26
|
+
return renderElement("button", {
|
|
27
|
+
render,
|
|
28
|
+
className,
|
|
29
|
+
style
|
|
30
|
+
}, {
|
|
31
|
+
state,
|
|
32
|
+
stateAttrMap: PiPButtonDataAttrs,
|
|
33
|
+
ref: [forwardedRef, buttonRef],
|
|
34
|
+
props: [
|
|
35
|
+
core.getAttrs(state),
|
|
36
|
+
elementProps,
|
|
37
|
+
getButtonProps()
|
|
38
|
+
]
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
//#endregion
|
|
43
|
+
export { PiPButton };
|
|
44
|
+
//# sourceMappingURL=pip-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pip-button.js","names":[],"sources":["../../../../src/ui/pip-button/pip-button.tsx"],"sourcesContent":["'use client';\n\nimport { PiPButtonCore, PiPButtonDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectPiP } from '@videojs/core/dom';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useButton } from '../hooks/use-button';\n\nexport interface PiPButtonProps extends UIComponentProps<'button', PiPButtonCore.State>, PiPButtonCore.Props {}\n\nexport const PiPButton = forwardRef(function PiPButton(\n componentProps: PiPButtonProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const { render, className, style, label, disabled, ...elementProps } = componentProps;\n\n const pip = usePlayer(selectPiP);\n\n const [core] = useState(() => new PiPButtonCore());\n core.setProps({ label, disabled });\n\n const { getButtonProps, buttonRef } = useButton({\n displayName: 'PiPButton',\n onActivate: () => core.toggle(pip!),\n isDisabled: () => disabled || !pip,\n });\n\n if (!pip) {\n if (__DEV__) logMissingFeature('PiPButton', 'pip');\n return null;\n }\n\n const state = core.getState(pip);\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap: PiPButtonDataAttrs,\n ref: [forwardedRef, buttonRef],\n props: [core.getAttrs(state), elementProps, getButtonProps()],\n }\n );\n});\n\nexport namespace PiPButton {\n export type Props = PiPButtonProps;\n export type State = PiPButtonCore.State;\n}\n"],"mappings":";;;;;;;;;;AAcA,MAAa,YAAY,WAAW,SAAS,UAC3C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,OAAO,UAAU,GAAG,iBAAiB;CAEvE,MAAM,MAAM,UAAU,UAAU;CAEhC,MAAM,CAAC,QAAQ,eAAe,IAAI,eAAe,CAAC;AAClD,MAAK,SAAS;EAAE;EAAO;EAAU,CAAC;CAElC,MAAM,EAAE,gBAAgB,cAAc,UAAU;EAC9C,aAAa;EACb,kBAAkB,KAAK,OAAO,IAAK;EACnC,kBAAkB,YAAY,CAAC;EAChC,CAAC;AAEF,KAAI,CAAC,IAEH,QAAO;CAGT,MAAM,QAAQ,KAAK,SAAS,IAAI;AAEhC,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,cAAc;EACd,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO;GAAC,KAAK,SAAS,MAAM;GAAE;GAAc,gBAAgB;GAAC;EAC9D,CACF;EACD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { usePlayer } from "../../player/context.js";
|
|
4
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
5
|
+
import { useButton } from "../hooks/use-button.js";
|
|
6
|
+
import { selectPlayback } from "@videojs/core/dom";
|
|
7
|
+
import { forwardRef, useState } from "react";
|
|
8
|
+
import { PlayButtonCore, PlayButtonDataAttrs } from "@videojs/core";
|
|
9
|
+
|
|
10
|
+
//#region src/ui/play-button/play-button.tsx
|
|
11
|
+
/**
|
|
12
|
+
* A button that toggles playback.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* <PlayButton />
|
|
17
|
+
*
|
|
18
|
+
* <PlayButton
|
|
19
|
+
* render={(props, state) => (
|
|
20
|
+
* <button {...props}>
|
|
21
|
+
* {state.paused ? <PlayIcon /> : <PauseIcon />}
|
|
22
|
+
* </button>
|
|
23
|
+
* )}
|
|
24
|
+
* />
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
const PlayButton = forwardRef(function PlayButton(componentProps, forwardedRef) {
|
|
28
|
+
const { render, className, style, label, disabled, ...elementProps } = componentProps;
|
|
29
|
+
const playback = usePlayer(selectPlayback);
|
|
30
|
+
const [core] = useState(() => new PlayButtonCore());
|
|
31
|
+
core.setProps({
|
|
32
|
+
label,
|
|
33
|
+
disabled
|
|
34
|
+
});
|
|
35
|
+
const { getButtonProps, buttonRef } = useButton({
|
|
36
|
+
displayName: "PlayButton",
|
|
37
|
+
onActivate: () => core.toggle(playback),
|
|
38
|
+
isDisabled: () => disabled || !playback
|
|
39
|
+
});
|
|
40
|
+
if (!playback) return null;
|
|
41
|
+
const state = core.getState(playback);
|
|
42
|
+
return renderElement("button", {
|
|
43
|
+
render,
|
|
44
|
+
className,
|
|
45
|
+
style
|
|
46
|
+
}, {
|
|
47
|
+
state,
|
|
48
|
+
stateAttrMap: PlayButtonDataAttrs,
|
|
49
|
+
ref: [forwardedRef, buttonRef],
|
|
50
|
+
props: [
|
|
51
|
+
core.getAttrs(state),
|
|
52
|
+
elementProps,
|
|
53
|
+
getButtonProps()
|
|
54
|
+
]
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
//#endregion
|
|
59
|
+
export { PlayButton };
|
|
60
|
+
//# sourceMappingURL=play-button.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"play-button.js","names":[],"sources":["../../../../src/ui/play-button/play-button.tsx"],"sourcesContent":["'use client';\n\nimport { PlayButtonCore, PlayButtonDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectPlayback } from '@videojs/core/dom';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useButton } from '../hooks/use-button';\n\nexport interface PlayButtonProps extends UIComponentProps<'button', PlayButtonCore.State>, PlayButtonCore.Props {}\n\n/**\n * A button that toggles playback.\n *\n * @example\n * ```tsx\n * <PlayButton />\n *\n * <PlayButton\n * render={(props, state) => (\n * <button {...props}>\n * {state.paused ? <PlayIcon /> : <PauseIcon />}\n * </button>\n * )}\n * />\n * ```\n */\nexport const PlayButton = forwardRef(function PlayButton(\n componentProps: PlayButtonProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const { render, className, style, label, disabled, ...elementProps } = componentProps;\n\n const playback = usePlayer(selectPlayback);\n\n const [core] = useState(() => new PlayButtonCore());\n core.setProps({ label, disabled });\n\n const { getButtonProps, buttonRef } = useButton({\n displayName: 'PlayButton',\n onActivate: () => core.toggle(playback!),\n isDisabled: () => disabled || !playback,\n });\n\n if (!playback) {\n if (__DEV__) logMissingFeature('PlayButton', 'playback');\n return null;\n }\n\n const state = core.getState(playback);\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap: PlayButtonDataAttrs,\n ref: [forwardedRef, buttonRef],\n props: [core.getAttrs(state), elementProps, getButtonProps()],\n }\n );\n});\n\nexport namespace PlayButton {\n export type Props = PlayButtonProps;\n export type State = PlayButtonCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA8BA,MAAa,aAAa,WAAW,SAAS,WAC5C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,OAAO,UAAU,GAAG,iBAAiB;CAEvE,MAAM,WAAW,UAAU,eAAe;CAE1C,MAAM,CAAC,QAAQ,eAAe,IAAI,gBAAgB,CAAC;AACnD,MAAK,SAAS;EAAE;EAAO;EAAU,CAAC;CAElC,MAAM,EAAE,gBAAgB,cAAc,UAAU;EAC9C,aAAa;EACb,kBAAkB,KAAK,OAAO,SAAU;EACxC,kBAAkB,YAAY,CAAC;EAChC,CAAC;AAEF,KAAI,CAAC,SAEH,QAAO;CAGT,MAAM,QAAQ,KAAK,SAAS,SAAS;AAErC,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,cAAc;EACd,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO;GAAC,KAAK,SAAS,MAAM;GAAE;GAAc,gBAAgB;GAAC;EAC9D,CACF;EACD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import { usePlayer } from "../../player/context.js";
|
|
4
|
+
import { renderElement } from "../../utils/use-render.js";
|
|
5
|
+
import { selectPlayback } from "@videojs/core/dom";
|
|
6
|
+
import { forwardRef, useState } from "react";
|
|
7
|
+
import { PosterCore, PosterDataAttrs } from "@videojs/core";
|
|
8
|
+
|
|
9
|
+
//#region src/ui/poster/poster.tsx
|
|
10
|
+
/**
|
|
11
|
+
* Displays the video poster image. Shows before playback starts, hides after.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```tsx
|
|
15
|
+
* <Poster src="poster.jpg" alt="Video description" />
|
|
16
|
+
*
|
|
17
|
+
* <Poster
|
|
18
|
+
* src="poster.jpg"
|
|
19
|
+
* alt="Video description"
|
|
20
|
+
* className={(state) => state.visible ? 'visible' : 'hidden'}
|
|
21
|
+
* />
|
|
22
|
+
* ```
|
|
23
|
+
*/
|
|
24
|
+
const Poster = forwardRef(function Poster(componentProps, forwardedRef) {
|
|
25
|
+
const { render, className, style, ...elementProps } = componentProps;
|
|
26
|
+
const playback = usePlayer(selectPlayback);
|
|
27
|
+
const [core] = useState(() => new PosterCore());
|
|
28
|
+
if (!playback) return null;
|
|
29
|
+
return renderElement("img", {
|
|
30
|
+
render,
|
|
31
|
+
className,
|
|
32
|
+
style
|
|
33
|
+
}, {
|
|
34
|
+
state: core.getState(playback),
|
|
35
|
+
stateAttrMap: PosterDataAttrs,
|
|
36
|
+
ref: [forwardedRef],
|
|
37
|
+
props: [elementProps]
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
//#endregion
|
|
42
|
+
export { Poster };
|
|
43
|
+
//# sourceMappingURL=poster.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poster.js","names":[],"sources":["../../../../src/ui/poster/poster.tsx"],"sourcesContent":["'use client';\n\nimport { PosterCore, PosterDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectPlayback } from '@videojs/core/dom';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\n\nexport interface PosterProps extends UIComponentProps<'img', PosterCore.State> {}\n\n/**\n * Displays the video poster image. Shows before playback starts, hides after.\n *\n * @example\n * ```tsx\n * <Poster src=\"poster.jpg\" alt=\"Video description\" />\n *\n * <Poster\n * src=\"poster.jpg\"\n * alt=\"Video description\"\n * className={(state) => state.visible ? 'visible' : 'hidden'}\n * />\n * ```\n */\nexport const Poster = forwardRef(function Poster(\n componentProps: PosterProps,\n forwardedRef: ForwardedRef<HTMLImageElement>\n) {\n const { render, className, style, ...elementProps } = componentProps;\n\n const playback = usePlayer(selectPlayback);\n\n const [core] = useState(() => new PosterCore());\n\n if (!playback) {\n if (__DEV__) logMissingFeature('Poster', 'playback');\n return null;\n }\n\n return renderElement(\n 'img',\n { render, className, style },\n {\n state: core.getState(playback),\n stateAttrMap: PosterDataAttrs,\n ref: [forwardedRef],\n props: [elementProps],\n }\n );\n});\n\nexport namespace Poster {\n export type Props = PosterProps;\n export type State = PosterCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAa,SAAS,WAAW,SAAS,OACxC,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,GAAG,iBAAiB;CAEtD,MAAM,WAAW,UAAU,eAAe;CAE1C,MAAM,CAAC,QAAQ,eAAe,IAAI,YAAY,CAAC;AAE/C,KAAI,CAAC,SAEH,QAAO;AAGT,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OAAO,KAAK,SAAS,SAAS;EAC9B,cAAc;EACd,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,aAAa;EACtB,CACF;EACD"}
|