@therealtinhtute/baroiplayer 1.0.0 → 1.0.2
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/context/media.js +1 -1
- package/dist/context/media.mjs +5 -5
- package/dist/context/store.js +1 -1
- package/dist/context/store.mjs +1 -1
- package/dist/{context-BMteAJDN.js → context-Af84FynT.js} +304 -265
- package/dist/context-Af84FynT.js.map +1 -0
- package/dist/context-CwZnPdz0.cjs +23 -0
- package/dist/context-CwZnPdz0.cjs.map +1 -0
- package/dist/core.js +2 -2
- package/dist/core.mjs +27 -27
- package/dist/{enhanced-components-DTIObgB7.cjs → enhanced-components-CXnYiOt6.cjs} +2 -2
- package/dist/{enhanced-components-DTIObgB7.cjs.map → enhanced-components-CXnYiOt6.cjs.map} +1 -1
- package/dist/{enhanced-components-DHv0MFvG.js → enhanced-components-Da0TSvKe.js} +158 -158
- package/dist/{enhanced-components-DHv0MFvG.js.map → enhanced-components-Da0TSvKe.js.map} +1 -1
- package/dist/hooks-BhW_i-9L.js +2013 -0
- package/dist/hooks-BhW_i-9L.js.map +1 -0
- package/dist/hooks-DTXeB5Z-.cjs +4 -0
- package/dist/hooks-DTXeB5Z-.cjs.map +1 -0
- package/dist/index.css +102 -1
- package/dist/index.d.ts +1388 -0
- package/dist/index.js +27 -112
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +17 -6126
- package/dist/index.mjs.map +1 -1
- package/dist/{minimal-components-DSq5sQpy.js → minimal-components-B0bILe18.js} +236 -236
- package/dist/{minimal-components-DSq5sQpy.js.map → minimal-components-B0bILe18.js.map} +1 -1
- package/dist/{minimal-components-DflWiihN.cjs → minimal-components-BsqodtY8.cjs} +2 -2
- package/dist/{minimal-components-DflWiihN.cjs.map → minimal-components-BsqodtY8.cjs.map} +1 -1
- package/dist/minimal-components.css +589 -1
- package/dist/package.json +28 -0
- package/dist/{performance-monitor-rMW1RgV3.js → performance-monitor--rzKTlbj.js} +2 -2
- package/dist/{performance-monitor-rMW1RgV3.js.map → performance-monitor--rzKTlbj.js.map} +1 -1
- package/dist/{performance-monitor-CUW6f5ll.cjs → performance-monitor-cjIvZE2D.cjs} +2 -2
- package/dist/{performance-monitor-CUW6f5ll.cjs.map → performance-monitor-cjIvZE2D.cjs.map} +1 -1
- package/dist/src/adapters/videojs-adapter.d.ts +38 -0
- package/dist/src/adapters/videojs-adapter.d.ts.map +1 -0
- package/dist/src/adapters/videojs-adapter.js +350 -0
- package/dist/src/adapters/videojs-adapter.tsx +470 -0
- package/dist/src/assets/mona-loading.gif +0 -0
- package/dist/src/components/AnimateLoading.d.ts +9 -0
- package/dist/src/components/AnimateLoading.d.ts.map +1 -0
- package/dist/src/components/AnimateLoading.js +41 -0
- package/dist/src/components/AnimateLoading.tsx +115 -0
- package/dist/src/components/LoadingState.d.ts +33 -0
- package/dist/src/components/LoadingState.d.ts.map +1 -0
- package/dist/src/components/LoadingState.js +111 -0
- package/dist/src/components/LoadingState.tsx +248 -0
- package/dist/src/components/accessibility/keyboard-help-overlay.d.ts +17 -0
- package/dist/src/components/accessibility/keyboard-help-overlay.d.ts.map +1 -0
- package/dist/src/components/accessibility/keyboard-help-overlay.js +90 -0
- package/dist/src/components/accessibility/keyboard-help-overlay.tsx +213 -0
- package/dist/src/components/audio-player.d.ts +3 -0
- package/dist/src/components/audio-player.d.ts.map +1 -0
- package/dist/src/components/audio-player.js +31 -0
- package/dist/src/components/audio-player.tsx +85 -0
- package/dist/src/components/basic/index.d.ts +26 -0
- package/dist/src/components/basic/index.d.ts.map +1 -0
- package/dist/src/components/basic/index.js +29 -0
- package/dist/src/components/basic/index.ts +37 -0
- package/dist/src/components/enhanced/advanced-features.d.ts +45 -0
- package/dist/src/components/enhanced/advanced-features.d.ts.map +1 -0
- package/dist/src/components/enhanced/advanced-features.js +64 -0
- package/dist/src/components/enhanced/advanced-features.tsx +316 -0
- package/dist/src/components/enhanced/debug-panel.d.ts +70 -0
- package/dist/src/components/enhanced/debug-panel.d.ts.map +1 -0
- package/dist/src/components/enhanced/debug-panel.js +94 -0
- package/dist/src/components/enhanced/debug-panel.tsx +422 -0
- package/dist/src/components/enhanced/enhanced-controls.d.ts +50 -0
- package/dist/src/components/enhanced/enhanced-controls.d.ts.map +1 -0
- package/dist/src/components/enhanced/enhanced-controls.js +233 -0
- package/dist/src/components/enhanced/enhanced-controls.tsx +600 -0
- package/dist/src/components/enhanced/enhanced-media-player.d.ts +26 -0
- package/dist/src/components/enhanced/enhanced-media-player.d.ts.map +1 -0
- package/dist/src/components/enhanced/enhanced-media-player.js +316 -0
- package/dist/src/components/enhanced/enhanced-media-player.tsx +509 -0
- package/dist/src/components/enhanced/error-handling.d.ts +36 -0
- package/dist/src/components/enhanced/error-handling.d.ts.map +1 -0
- package/dist/src/components/enhanced/error-handling.js +153 -0
- package/dist/src/components/enhanced/error-handling.tsx +345 -0
- package/dist/src/components/enhanced/index.d.ts +7 -0
- package/dist/src/components/enhanced/index.d.ts.map +1 -0
- package/dist/src/components/enhanced/index.js +10 -0
- package/dist/src/components/enhanced/index.ts +39 -0
- package/dist/src/components/enhanced/media-player-enhanced.d.ts +21 -0
- package/dist/src/components/enhanced/media-player-enhanced.d.ts.map +1 -0
- package/dist/src/components/enhanced/media-player-enhanced.js +250 -0
- package/dist/src/components/enhanced/media-player-enhanced.tsx +349 -0
- package/dist/src/components/examples/basic-video-player.d.ts +10 -0
- package/dist/src/components/examples/basic-video-player.d.ts.map +1 -0
- package/dist/src/components/examples/basic-video-player.js +16 -0
- package/dist/src/components/examples/basic-video-player.tsx +55 -0
- package/dist/src/components/examples/custom-controls-example.d.ts +10 -0
- package/dist/src/components/examples/custom-controls-example.d.ts.map +1 -0
- package/dist/src/components/examples/custom-controls-example.js +12 -0
- package/dist/src/components/examples/custom-controls-example.tsx +63 -0
- package/dist/src/components/examples/enhanced-controls-example.d.ts +9 -0
- package/dist/src/components/examples/enhanced-controls-example.d.ts.map +1 -0
- package/dist/src/components/examples/enhanced-controls-example.js +18 -0
- package/dist/src/components/examples/enhanced-controls-example.tsx +114 -0
- package/dist/src/components/examples/enhanced-media-player-example.d.ts +9 -0
- package/dist/src/components/examples/enhanced-media-player-example.d.ts.map +1 -0
- package/dist/src/components/examples/enhanced-media-player-example.js +13 -0
- package/dist/src/components/examples/enhanced-media-player-example.tsx +293 -0
- package/dist/src/components/examples/loading-states-demo.d.ts +2 -0
- package/dist/src/components/examples/loading-states-demo.d.ts.map +1 -0
- package/dist/src/components/examples/loading-states-demo.js +41 -0
- package/dist/src/components/examples/loading-states-demo.tsx +142 -0
- package/dist/src/components/examples/react-19-demo.d.ts +10 -0
- package/dist/src/components/examples/react-19-demo.d.ts.map +1 -0
- package/dist/src/components/examples/react-19-demo.js +104 -0
- package/dist/src/components/examples/react-19-demo.tsx +381 -0
- package/dist/src/components/examples/volume-orientation-demo.d.ts +2 -0
- package/dist/src/components/examples/volume-orientation-demo.d.ts.map +1 -0
- package/dist/src/components/examples/volume-orientation-demo.js +31 -0
- package/dist/src/components/examples/volume-orientation-demo.tsx +114 -0
- package/dist/src/components/icon-demo.d.ts +2 -0
- package/dist/src/components/icon-demo.d.ts.map +1 -0
- package/dist/src/components/icon-demo.js +16 -0
- package/dist/src/components/icon-demo.tsx +209 -0
- package/dist/src/components/icons/index.d.ts +36 -0
- package/dist/src/components/icons/index.d.ts.map +1 -0
- package/dist/src/components/icons/index.js +59 -0
- package/dist/src/components/icons/index.tsx +166 -0
- package/dist/src/components/icons/svg-icons/ArrowLeftIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/ArrowLeftIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/ArrowLeftIcon.tsx +18 -0
- package/dist/src/components/icons/svg-icons/ArrowRightIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/ArrowRightIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/ArrowRightIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/ArrowRightIcon.tsx +18 -0
- package/dist/src/components/icons/svg-icons/AudioIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/AudioIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/AudioIcon.js +4 -0
- package/dist/src/components/icons/svg-icons/AudioIcon.tsx +22 -0
- package/dist/src/components/icons/svg-icons/BackwardIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/BackwardIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/BackwardIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/BackwardIcon.tsx +12 -0
- package/dist/src/components/icons/svg-icons/CameraIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/CameraIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/CameraIcon.js +4 -0
- package/dist/src/components/icons/svg-icons/CameraIcon.tsx +19 -0
- package/dist/src/components/icons/svg-icons/CheckIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/CheckIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/CheckIcon.js +4 -0
- package/dist/src/components/icons/svg-icons/CheckIcon.tsx +19 -0
- package/dist/src/components/icons/svg-icons/EnablePiPIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/EnablePiPIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/EnablePiPIcon.js +5 -0
- package/dist/src/components/icons/svg-icons/EnablePiPIcon.tsx +17 -0
- package/dist/src/components/icons/svg-icons/ForwardIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/ForwardIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/ForwardIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/ForwardIcon.tsx +12 -0
- package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.tsx +23 -0
- package/dist/src/components/icons/svg-icons/FullscreenExitIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/FullscreenExitIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/FullscreenExitIcon.tsx +23 -0
- package/dist/src/components/icons/svg-icons/LoadingIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/LoadingIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/LoadingIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/LoadingIcon.tsx +32 -0
- package/dist/src/components/icons/svg-icons/PauseIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/PauseIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/PauseIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/PauseIcon.tsx +23 -0
- package/dist/src/components/icons/svg-icons/PlayIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/PlayIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/PlayIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/PlayIcon.tsx +21 -0
- package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.tsx +23 -0
- package/dist/src/components/icons/svg-icons/QualityIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/QualityIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/QualityIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/QualityIcon.tsx +21 -0
- package/dist/src/components/icons/svg-icons/SettingsIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/SettingsIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/SettingsIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/SettingsIcon.tsx +12 -0
- package/dist/src/components/icons/svg-icons/SliderIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/SliderIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/SliderIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/SliderIcon.tsx +21 -0
- package/dist/src/components/icons/svg-icons/SubtitleIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/SubtitleIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/SubtitleIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/SubtitleIcon.tsx +21 -0
- package/dist/src/components/icons/svg-icons/SubtitleOffIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/SubtitleOffIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/SubtitleOffIcon.tsx +25 -0
- package/dist/src/components/icons/svg-icons/UnPiPIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/UnPiPIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/UnPiPIcon.js +5 -0
- package/dist/src/components/icons/svg-icons/UnPiPIcon.tsx +17 -0
- package/dist/src/components/icons/svg-icons/VolumeMutedIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/VolumeMutedIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/VolumeMutedIcon.tsx +16 -0
- package/dist/src/components/icons/svg-icons/VolumeOneIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/VolumeOneIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/VolumeOneIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/VolumeOneIcon.tsx +22 -0
- package/dist/src/components/icons/svg-icons/VolumeThreeIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/VolumeThreeIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/VolumeThreeIcon.tsx +16 -0
- package/dist/src/components/icons/svg-icons/VolumeTwoIcon.d.ts +4 -0
- package/dist/src/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +1 -0
- package/dist/src/components/icons/svg-icons/VolumeTwoIcon.js +3 -0
- package/dist/src/components/icons/svg-icons/VolumeTwoIcon.tsx +16 -0
- package/dist/src/components/legacy.d.ts +13 -0
- package/dist/src/components/legacy.d.ts.map +1 -0
- package/dist/src/components/legacy.js +52 -0
- package/dist/src/components/legacy.tsx +93 -0
- package/dist/src/components/media-metadata-display.d.ts +11 -0
- package/dist/src/components/media-metadata-display.d.ts.map +1 -0
- package/dist/src/components/media-metadata-display.js +20 -0
- package/dist/src/components/media-metadata-display.tsx +100 -0
- package/dist/src/components/media-player-audio.d.ts +9 -0
- package/dist/src/components/media-player-audio.d.ts.map +1 -0
- package/dist/src/components/media-player-audio.js +18 -0
- package/dist/src/components/media-player-audio.tsx +39 -0
- package/dist/src/components/media-player-controls.d.ts +23 -0
- package/dist/src/components/media-player-controls.d.ts.map +1 -0
- package/dist/src/components/media-player-controls.js +150 -0
- package/dist/src/components/media-player-controls.tsx +226 -0
- package/dist/src/components/media-player-error.d.ts +16 -0
- package/dist/src/components/media-player-error.d.ts.map +1 -0
- package/dist/src/components/media-player-error.js +85 -0
- package/dist/src/components/media-player-error.tsx +163 -0
- package/dist/src/components/media-player-fullscreen.d.ts +12 -0
- package/dist/src/components/media-player-fullscreen.d.ts.map +1 -0
- package/dist/src/components/media-player-fullscreen.js +68 -0
- package/dist/src/components/media-player-fullscreen.tsx +109 -0
- package/dist/src/components/media-player-hls.d.ts +23 -0
- package/dist/src/components/media-player-hls.d.ts.map +1 -0
- package/dist/src/components/media-player-hls.js +20 -0
- package/dist/src/components/media-player-hls.tsx +111 -0
- package/dist/src/components/media-player-loading.d.ts +12 -0
- package/dist/src/components/media-player-loading.d.ts.map +1 -0
- package/dist/src/components/media-player-loading.js +53 -0
- package/dist/src/components/media-player-loading.tsx +76 -0
- package/dist/src/components/media-player-play.d.ts +11 -0
- package/dist/src/components/media-player-play.d.ts.map +1 -0
- package/dist/src/components/media-player-play.js +44 -0
- package/dist/src/components/media-player-play.tsx +75 -0
- package/dist/src/components/media-player-root.d.ts +28 -0
- package/dist/src/components/media-player-root.d.ts.map +1 -0
- package/dist/src/components/media-player-root.js +243 -0
- package/dist/src/components/media-player-root.tsx +340 -0
- package/dist/src/components/media-player-seek.d.ts +15 -0
- package/dist/src/components/media-player-seek.d.ts.map +1 -0
- package/dist/src/components/media-player-seek.js +92 -0
- package/dist/src/components/media-player-seek.tsx +168 -0
- package/dist/src/components/media-player-time.d.ts +12 -0
- package/dist/src/components/media-player-time.d.ts.map +1 -0
- package/dist/src/components/media-player-time.js +57 -0
- package/dist/src/components/media-player-time.tsx +99 -0
- package/dist/src/components/media-player-tooltip.d.ts +13 -0
- package/dist/src/components/media-player-tooltip.d.ts.map +1 -0
- package/dist/src/components/media-player-tooltip.js +14 -0
- package/dist/src/components/media-player-tooltip.tsx +58 -0
- package/dist/src/components/media-player-video.d.ts +9 -0
- package/dist/src/components/media-player-video.d.ts.map +1 -0
- package/dist/src/components/media-player-video.js +18 -0
- package/dist/src/components/media-player-video.tsx +39 -0
- package/dist/src/components/media-player-volume.d.ts +13 -0
- package/dist/src/components/media-player-volume.d.ts.map +1 -0
- package/dist/src/components/media-player-volume.js +88 -0
- package/dist/src/components/media-player-volume.tsx +155 -0
- package/dist/src/components/media-player.d.ts +3 -0
- package/dist/src/components/media-player.d.ts.map +1 -0
- package/dist/src/components/media-player.js +67 -0
- package/dist/src/components/media-player.tsx +257 -0
- package/dist/src/components/media-suspense.d.ts +78 -0
- package/dist/src/components/media-suspense.d.ts.map +1 -0
- package/dist/src/components/media-suspense.js +173 -0
- package/dist/src/components/media-suspense.tsx +362 -0
- package/dist/src/components/player-settings-form.d.ts +8 -0
- package/dist/src/components/player-settings-form.d.ts.map +1 -0
- package/dist/src/components/player-settings-form.js +46 -0
- package/dist/src/components/player-settings-form.tsx +163 -0
- package/dist/src/components/react-player-wrapper.d.ts +64 -0
- package/dist/src/components/react-player-wrapper.d.ts.map +1 -0
- package/dist/src/components/react-player-wrapper.js +163 -0
- package/dist/src/components/react-player-wrapper.tsx +651 -0
- package/dist/src/components/simple-video-player.d.ts +9 -0
- package/dist/src/components/simple-video-player.d.ts.map +1 -0
- package/dist/src/components/simple-video-player.js +41 -0
- package/dist/src/components/simple-video-player.tsx +60 -0
- package/dist/src/components/ui/enhanced-seek-bar.d.ts +3 -0
- package/dist/src/components/ui/enhanced-seek-bar.d.ts.map +1 -0
- package/dist/src/components/ui/enhanced-seek-bar.js +112 -0
- package/dist/src/components/ui/enhanced-seek-bar.tsx +235 -0
- package/dist/src/components/ui/fullscreen-button.d.ts +3 -0
- package/dist/src/components/ui/fullscreen-button.d.ts.map +1 -0
- package/dist/src/components/ui/fullscreen-button.js +21 -0
- package/dist/src/components/ui/fullscreen-button.tsx +60 -0
- package/dist/src/components/ui/media-resource-preloader.d.ts +21 -0
- package/dist/src/components/ui/media-resource-preloader.d.ts.map +1 -0
- package/dist/src/components/ui/media-resource-preloader.js +295 -0
- package/dist/src/components/ui/media-resource-preloader.tsx +393 -0
- package/dist/src/components/ui/play-button.d.ts +3 -0
- package/dist/src/components/ui/play-button.d.ts.map +1 -0
- package/dist/src/components/ui/play-button.js +26 -0
- package/dist/src/components/ui/play-button.tsx +107 -0
- package/dist/src/components/ui/seek-bar.d.ts +3 -0
- package/dist/src/components/ui/seek-bar.d.ts.map +1 -0
- package/dist/src/components/ui/seek-bar.js +54 -0
- package/dist/src/components/ui/seek-bar.tsx +161 -0
- package/dist/src/components/ui/time-display.d.ts +3 -0
- package/dist/src/components/ui/time-display.d.ts.map +1 -0
- package/dist/src/components/ui/time-display.js +18 -0
- package/dist/src/components/ui/time-display.tsx +40 -0
- package/dist/src/components/ui/volume-control.d.ts +3 -0
- package/dist/src/components/ui/volume-control.d.ts.map +1 -0
- package/dist/src/components/ui/volume-control.js +71 -0
- package/dist/src/components/ui/volume-control.tsx +143 -0
- package/dist/src/components/unified/base-media-player.d.ts +18 -0
- package/dist/src/components/unified/base-media-player.d.ts.map +1 -0
- package/dist/src/components/unified/base-media-player.js +104 -0
- package/dist/src/components/unified/base-media-player.tsx +246 -0
- package/dist/src/components/unified/media-player.d.ts +37 -0
- package/dist/src/components/unified/media-player.d.ts.map +1 -0
- package/dist/src/components/unified/media-player.js +41 -0
- package/dist/src/components/unified/media-player.tsx +75 -0
- package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts +42 -0
- package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.js +322 -0
- package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +561 -0
- package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts +44 -0
- package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.js +280 -0
- package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +552 -0
- package/dist/src/components/variants/minimal/MinimalControls.d.ts +19 -0
- package/dist/src/components/variants/minimal/MinimalControls.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/MinimalControls.js +19 -0
- package/dist/src/components/variants/minimal/MinimalControls.tsx +142 -0
- package/dist/src/components/variants/minimal/MinimalLoading.d.ts +10 -0
- package/dist/src/components/variants/minimal/MinimalLoading.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/MinimalLoading.js +6 -0
- package/dist/src/components/variants/minimal/MinimalLoading.tsx +32 -0
- package/dist/src/components/variants/minimal/MinimalMediaPlayer.d.ts +38 -0
- package/dist/src/components/variants/minimal/MinimalMediaPlayer.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/MinimalMediaPlayer.js +135 -0
- package/dist/src/components/variants/minimal/MinimalMediaPlayer.tsx +315 -0
- package/dist/src/components/variants/minimal/MinimalOverlay.d.ts +11 -0
- package/dist/src/components/variants/minimal/MinimalOverlay.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/MinimalOverlay.js +15 -0
- package/dist/src/components/variants/minimal/MinimalOverlay.tsx +64 -0
- package/dist/src/components/variants/minimal/MinimalPlayButton.d.ts +9 -0
- package/dist/src/components/variants/minimal/MinimalPlayButton.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/MinimalPlayButton.js +29 -0
- package/dist/src/components/variants/minimal/MinimalPlayButton.tsx +65 -0
- package/dist/src/components/variants/minimal/MinimalSeekBar.d.ts +7 -0
- package/dist/src/components/variants/minimal/MinimalSeekBar.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/MinimalSeekBar.js +73 -0
- package/dist/src/components/variants/minimal/MinimalSeekBar.tsx +150 -0
- package/dist/src/components/variants/minimal/MinimalVolumeControl.d.ts +7 -0
- package/dist/src/components/variants/minimal/MinimalVolumeControl.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/MinimalVolumeControl.js +29 -0
- package/dist/src/components/variants/minimal/MinimalVolumeControl.tsx +80 -0
- package/dist/src/components/variants/minimal/SimpleMinimalPlayer.d.ts +22 -0
- package/dist/src/components/variants/minimal/SimpleMinimalPlayer.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/SimpleMinimalPlayer.js +51 -0
- package/dist/src/components/variants/minimal/SimpleMinimalPlayer.tsx +209 -0
- package/dist/src/components/variants/minimal/components/CenterPlayButton.d.ts +7 -0
- package/dist/src/components/variants/minimal/components/CenterPlayButton.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/components/CenterPlayButton.js +8 -0
- package/dist/src/components/variants/minimal/components/CenterPlayButton.tsx +22 -0
- package/dist/src/components/variants/minimal/components/ControlBar.d.ts +43 -0
- package/dist/src/components/variants/minimal/components/ControlBar.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/components/ControlBar.js +10 -0
- package/dist/src/components/variants/minimal/components/ControlBar.tsx +146 -0
- package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts +24 -0
- package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.js +68 -0
- package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +361 -0
- package/dist/src/components/variants/minimal/components/PlaybackControls.d.ts +9 -0
- package/dist/src/components/variants/minimal/components/PlaybackControls.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/components/PlaybackControls.js +9 -0
- package/dist/src/components/variants/minimal/components/PlaybackControls.tsx +51 -0
- package/dist/src/components/variants/minimal/components/RightControls.d.ts +25 -0
- package/dist/src/components/variants/minimal/components/RightControls.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/components/RightControls.js +40 -0
- package/dist/src/components/variants/minimal/components/RightControls.tsx +173 -0
- package/dist/src/components/variants/minimal/components/SeekBar.d.ts +11 -0
- package/dist/src/components/variants/minimal/components/SeekBar.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/components/SeekBar.js +43 -0
- package/dist/src/components/variants/minimal/components/SeekBar.tsx +131 -0
- package/dist/src/components/variants/minimal/components/SettingsDropdown.d.ts +9 -0
- package/dist/src/components/variants/minimal/components/SettingsDropdown.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/components/SettingsDropdown.js +18 -0
- package/dist/src/components/variants/minimal/components/SettingsDropdown.tsx +70 -0
- package/dist/src/components/variants/minimal/components/SubtitleDisplay.d.ts +7 -0
- package/dist/src/components/variants/minimal/components/SubtitleDisplay.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/components/SubtitleDisplay.js +6 -0
- package/dist/src/components/variants/minimal/components/SubtitleDisplay.tsx +21 -0
- package/dist/src/components/variants/minimal/components/TimeDisplay.d.ts +7 -0
- package/dist/src/components/variants/minimal/components/TimeDisplay.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/components/TimeDisplay.js +5 -0
- package/dist/src/components/variants/minimal/components/TimeDisplay.tsx +18 -0
- package/dist/src/components/variants/minimal/components/VideoElement.d.ts +13 -0
- package/dist/src/components/variants/minimal/components/VideoElement.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/components/VideoElement.js +4 -0
- package/dist/src/components/variants/minimal/components/VideoElement.tsx +40 -0
- package/dist/src/components/variants/minimal/components/VolumeControl.d.ts +13 -0
- package/dist/src/components/variants/minimal/components/VolumeControl.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/components/VolumeControl.js +99 -0
- package/dist/src/components/variants/minimal/components/VolumeControl.tsx +217 -0
- package/dist/src/components/variants/minimal/index.d.ts +17 -0
- package/dist/src/components/variants/minimal/index.d.ts.map +1 -0
- package/dist/src/components/variants/minimal/index.js +8 -0
- package/dist/src/components/variants/minimal/index.ts +23 -0
- package/dist/src/components/video-player.d.ts +3 -0
- package/dist/src/components/video-player.d.ts.map +1 -0
- package/dist/src/components/video-player.js +38 -0
- package/dist/src/components/video-player.tsx +100 -0
- package/dist/src/context/error-handling.d.ts +72 -0
- package/dist/src/context/error-handling.d.ts.map +1 -0
- package/dist/src/context/error-handling.js +300 -0
- package/dist/src/context/error-handling.ts +394 -0
- package/dist/src/context/media-context.d.ts +104 -0
- package/dist/src/context/media-context.d.ts.map +1 -0
- package/dist/src/context/media-context.js +121 -0
- package/dist/src/context/media-context.tsx +208 -0
- package/dist/src/context/media-provider.d.ts +26 -0
- package/dist/src/context/media-provider.d.ts.map +1 -0
- package/dist/src/context/media-provider.js +164 -0
- package/dist/src/context/media-provider.tsx +265 -0
- package/dist/src/context/media-store.d.ts +33 -0
- package/dist/src/context/media-store.d.ts.map +1 -0
- package/dist/src/context/media-store.js +273 -0
- package/dist/src/context/media-store.ts +379 -0
- package/dist/src/context/persistence.d.ts +83 -0
- package/dist/src/context/persistence.d.ts.map +1 -0
- package/dist/src/context/persistence.js +356 -0
- package/dist/src/context/persistence.ts +453 -0
- package/dist/src/core/events/event-system.d.ts +170 -0
- package/dist/src/core/events/event-system.d.ts.map +1 -0
- package/dist/src/core/events/event-system.js +288 -0
- package/dist/src/core/events/event-system.ts +442 -0
- package/dist/src/core/events/hooks.d.ts +33 -0
- package/dist/src/core/events/hooks.d.ts.map +1 -0
- package/dist/src/core/events/hooks.js +198 -0
- package/dist/src/core/events/hooks.ts +302 -0
- package/dist/src/core/events/index.d.ts +6 -0
- package/dist/src/core/events/index.d.ts.map +1 -0
- package/dist/src/core/events/index.js +7 -0
- package/dist/src/core/events/index.ts +22 -0
- package/dist/src/core/events/middleware.d.ts +39 -0
- package/dist/src/core/events/middleware.d.ts.map +1 -0
- package/dist/src/core/events/middleware.js +219 -0
- package/dist/src/core/events/middleware.ts +269 -0
- package/dist/src/core/index.d.ts +8 -0
- package/dist/src/core/index.d.ts.map +1 -0
- package/dist/src/core/index.js +15 -0
- package/dist/src/core/index.ts +22 -0
- package/dist/src/core/optimization/bundle-optimizer.d.ts +44 -0
- package/dist/src/core/optimization/bundle-optimizer.d.ts.map +1 -0
- package/dist/src/core/optimization/bundle-optimizer.js +217 -0
- package/dist/src/core/optimization/bundle-optimizer.tsx +308 -0
- package/dist/src/core/performance/cicd.d.ts +8 -0
- package/dist/src/core/performance/cicd.d.ts.map +1 -0
- package/dist/src/core/performance/cicd.js +83 -0
- package/dist/src/core/performance/cicd.ts +96 -0
- package/dist/src/core/performance/index.d.ts +10 -0
- package/dist/src/core/performance/index.d.ts.map +1 -0
- package/dist/src/core/performance/index.js +14 -0
- package/dist/src/core/performance/index.ts +38 -0
- package/dist/src/core/performance/media-loading-optimizer.d.ts +105 -0
- package/dist/src/core/performance/media-loading-optimizer.d.ts.map +1 -0
- package/dist/src/core/performance/media-loading-optimizer.js +404 -0
- package/dist/src/core/performance/media-loading-optimizer.ts +538 -0
- package/dist/src/core/performance/performance-budgets.d.ts +68 -0
- package/dist/src/core/performance/performance-budgets.d.ts.map +1 -0
- package/dist/src/core/performance/performance-budgets.js +326 -0
- package/dist/src/core/performance/performance-budgets.ts +432 -0
- package/dist/src/core/performance/performance-monitor.d.ts +95 -0
- package/dist/src/core/performance/performance-monitor.d.ts.map +1 -0
- package/dist/src/core/performance/performance-monitor.js +297 -0
- package/dist/src/core/performance/performance-monitor.tsx +476 -0
- package/dist/src/core/performance/performance-testing.d.ts +69 -0
- package/dist/src/core/performance/performance-testing.d.ts.map +1 -0
- package/dist/src/core/performance/performance-testing.js +314 -0
- package/dist/src/core/performance/performance-testing.ts +459 -0
- package/dist/src/core/plugins/base-plugin.d.ts +52 -0
- package/dist/src/core/plugins/base-plugin.d.ts.map +1 -0
- package/dist/src/core/plugins/base-plugin.js +151 -0
- package/dist/src/core/plugins/base-plugin.ts +224 -0
- package/dist/src/core/plugins/enhanced-plugin-system.d.ts +160 -0
- package/dist/src/core/plugins/enhanced-plugin-system.d.ts.map +1 -0
- package/dist/src/core/plugins/enhanced-plugin-system.js +305 -0
- package/dist/src/core/plugins/enhanced-plugin-system.ts +417 -0
- package/dist/src/core/plugins/examples/analytics-plugin.d.ts +30 -0
- package/dist/src/core/plugins/examples/analytics-plugin.d.ts.map +1 -0
- package/dist/src/core/plugins/examples/analytics-plugin.js +191 -0
- package/dist/src/core/plugins/examples/analytics-plugin.ts +242 -0
- package/dist/src/core/plugins/index.d.ts +8 -0
- package/dist/src/core/plugins/index.d.ts.map +1 -0
- package/dist/src/core/plugins/index.js +9 -0
- package/dist/src/core/plugins/index.ts +39 -0
- package/dist/src/core/plugins/registry.d.ts +31 -0
- package/dist/src/core/plugins/registry.d.ts.map +1 -0
- package/dist/src/core/plugins/registry.js +261 -0
- package/dist/src/core/plugins/registry.ts +327 -0
- package/dist/src/core/plugins/types.d.ts +101 -0
- package/dist/src/core/plugins/types.d.ts.map +1 -0
- package/dist/src/core/plugins/types.js +31 -0
- package/dist/src/core/plugins/types.ts +159 -0
- package/dist/src/core/plugins/utils.d.ts +38 -0
- package/dist/src/core/plugins/utils.d.ts.map +1 -0
- package/dist/src/core/plugins/utils.js +274 -0
- package/dist/src/core/plugins/utils.ts +316 -0
- package/dist/src/core/progressive-loading.d.ts +88 -0
- package/dist/src/core/progressive-loading.d.ts.map +1 -0
- package/dist/src/core/progressive-loading.js +239 -0
- package/dist/src/core/progressive-loading.tsx +322 -0
- package/dist/src/core/providers/enhanced-hls-provider.d.ts +50 -0
- package/dist/src/core/providers/enhanced-hls-provider.d.ts.map +1 -0
- package/dist/src/core/providers/enhanced-hls-provider.js +273 -0
- package/dist/src/core/providers/enhanced-hls-provider.ts +308 -0
- package/dist/src/core/providers/service-provider.d.ts +49 -0
- package/dist/src/core/providers/service-provider.d.ts.map +1 -0
- package/dist/src/core/providers/service-provider.js +105 -0
- package/dist/src/core/providers/service-provider.tsx +168 -0
- package/dist/src/core/utils.d.ts +25 -0
- package/dist/src/core/utils.d.ts.map +1 -0
- package/dist/src/core/utils.js +21 -0
- package/dist/src/core/utils.tsx +38 -0
- package/dist/src/features/media-session/media-session-manager.d.ts +132 -0
- package/dist/src/features/media-session/media-session-manager.d.ts.map +1 -0
- package/dist/src/features/media-session/media-session-manager.js +331 -0
- package/dist/src/features/media-session/media-session-manager.ts +429 -0
- package/dist/src/features/picture-in-picture/pip-manager.d.ts +94 -0
- package/dist/src/features/picture-in-picture/pip-manager.d.ts.map +1 -0
- package/dist/src/features/picture-in-picture/pip-manager.js +353 -0
- package/dist/src/features/picture-in-picture/pip-manager.ts +429 -0
- package/dist/src/features/playlist/playlist-manager.d.ts +208 -0
- package/dist/src/features/playlist/playlist-manager.d.ts.map +1 -0
- package/dist/src/features/playlist/playlist-manager.js +475 -0
- package/dist/src/features/playlist/playlist-manager.ts +606 -0
- package/dist/src/features/subtitles/subtitle-manager.d.ts +136 -0
- package/dist/src/features/subtitles/subtitle-manager.d.ts.map +1 -0
- package/dist/src/features/subtitles/subtitle-manager.js +335 -0
- package/dist/src/features/subtitles/subtitle-manager.ts +441 -0
- package/dist/src/features/subtitles/subtitle-parser.d.ts +60 -0
- package/dist/src/features/subtitles/subtitle-parser.d.ts.map +1 -0
- package/dist/src/features/subtitles/subtitle-parser.js +217 -0
- package/dist/src/features/subtitles/subtitle-parser.ts +280 -0
- package/dist/src/features/thumbnails/thumbnail-generator.d.ts +136 -0
- package/dist/src/features/thumbnails/thumbnail-generator.d.ts.map +1 -0
- package/dist/src/features/thumbnails/thumbnail-generator.js +388 -0
- package/dist/src/features/thumbnails/thumbnail-generator.ts +519 -0
- package/dist/src/hooks/accessibility/index.d.ts +5 -0
- package/dist/src/hooks/accessibility/index.d.ts.map +1 -0
- package/dist/src/hooks/accessibility/index.js +4 -0
- package/dist/src/hooks/accessibility/index.ts +27 -0
- package/dist/src/hooks/accessibility/use-accessibility-preferences.d.ts +14 -0
- package/dist/src/hooks/accessibility/use-accessibility-preferences.d.ts.map +1 -0
- package/dist/src/hooks/accessibility/use-accessibility-preferences.js +156 -0
- package/dist/src/hooks/accessibility/use-accessibility-preferences.ts +188 -0
- package/dist/src/hooks/accessibility/use-focus-management.d.ts +31 -0
- package/dist/src/hooks/accessibility/use-focus-management.d.ts.map +1 -0
- package/dist/src/hooks/accessibility/use-focus-management.js +142 -0
- package/dist/src/hooks/accessibility/use-focus-management.ts +176 -0
- package/dist/src/hooks/accessibility/use-keyboard-shortcuts.d.ts +38 -0
- package/dist/src/hooks/accessibility/use-keyboard-shortcuts.d.ts.map +1 -0
- package/dist/src/hooks/accessibility/use-keyboard-shortcuts.js +101 -0
- package/dist/src/hooks/accessibility/use-keyboard-shortcuts.ts +144 -0
- package/dist/src/hooks/accessibility/use-screen-reader.d.ts +22 -0
- package/dist/src/hooks/accessibility/use-screen-reader.d.ts.map +1 -0
- package/dist/src/hooks/accessibility/use-screen-reader.js +148 -0
- package/dist/src/hooks/accessibility/use-screen-reader.ts +182 -0
- package/dist/src/hooks/core/index.d.ts +18 -0
- package/dist/src/hooks/core/index.d.ts.map +1 -0
- package/dist/src/hooks/core/index.js +19 -0
- package/dist/src/hooks/core/index.ts +47 -0
- package/dist/src/hooks/legacy.d.ts +18 -0
- package/dist/src/hooks/legacy.d.ts.map +1 -0
- package/dist/src/hooks/legacy.js +17 -0
- package/dist/src/hooks/legacy.ts +27 -0
- package/dist/src/hooks/use-enhanced-media-player.d.ts +88 -0
- package/dist/src/hooks/use-enhanced-media-player.d.ts.map +1 -0
- package/dist/src/hooks/use-enhanced-media-player.js +395 -0
- package/dist/src/hooks/use-enhanced-media-player.ts +485 -0
- package/dist/src/hooks/use-intelligent-preloading.d.ts +66 -0
- package/dist/src/hooks/use-intelligent-preloading.d.ts.map +1 -0
- package/dist/src/hooks/use-intelligent-preloading.js +258 -0
- package/dist/src/hooks/use-intelligent-preloading.ts +358 -0
- package/dist/src/hooks/use-keyboard-controls.d.ts +13 -0
- package/dist/src/hooks/use-keyboard-controls.d.ts.map +1 -0
- package/dist/src/hooks/use-keyboard-controls.js +83 -0
- package/dist/src/hooks/use-keyboard-controls.ts +115 -0
- package/dist/src/hooks/use-media-actions.d.ts +62 -0
- package/dist/src/hooks/use-media-actions.d.ts.map +1 -0
- package/dist/src/hooks/use-media-actions.js +121 -0
- package/dist/src/hooks/use-media-actions.ts +175 -0
- package/dist/src/hooks/use-media-metadata.d.ts +11 -0
- package/dist/src/hooks/use-media-metadata.d.ts.map +1 -0
- package/dist/src/hooks/use-media-metadata.js +74 -0
- package/dist/src/hooks/use-media-metadata.ts +89 -0
- package/dist/src/hooks/use-media-optimistic.d.ts +36 -0
- package/dist/src/hooks/use-media-optimistic.d.ts.map +1 -0
- package/dist/src/hooks/use-media-optimistic.js +205 -0
- package/dist/src/hooks/use-media-optimistic.ts +270 -0
- package/dist/src/hooks/use-media-player.d.ts +31 -0
- package/dist/src/hooks/use-media-player.d.ts.map +1 -0
- package/dist/src/hooks/use-media-player.js +251 -0
- package/dist/src/hooks/use-media-player.ts +312 -0
- package/dist/src/hooks/use-media-state.d.ts +17 -0
- package/dist/src/hooks/use-media-state.d.ts.map +1 -0
- package/dist/src/hooks/use-media-state.js +162 -0
- package/dist/src/hooks/use-media-state.ts +190 -0
- package/dist/src/hooks/use-memory-optimization.d.ts +40 -0
- package/dist/src/hooks/use-memory-optimization.d.ts.map +1 -0
- package/dist/src/hooks/use-memory-optimization.js +288 -0
- package/dist/src/hooks/use-memory-optimization.ts +358 -0
- package/dist/src/hooks/use-optimistic-controls.d.ts +22 -0
- package/dist/src/hooks/use-optimistic-controls.d.ts.map +1 -0
- package/dist/src/hooks/use-optimistic-controls.js +60 -0
- package/dist/src/hooks/use-optimistic-controls.ts +92 -0
- package/dist/src/hooks/use-optimized-media.d.ts +46 -0
- package/dist/src/hooks/use-optimized-media.d.ts.map +1 -0
- package/dist/src/hooks/use-optimized-media.js +211 -0
- package/dist/src/hooks/use-optimized-media.ts +263 -0
- package/dist/src/hooks/use-touch-gestures.d.ts +47 -0
- package/dist/src/hooks/use-touch-gestures.d.ts.map +1 -0
- package/dist/src/hooks/use-touch-gestures.js +289 -0
- package/dist/src/hooks/use-touch-gestures.ts +417 -0
- package/dist/src/hooks/useEnhancedSubtitles.d.ts +39 -0
- package/dist/src/hooks/useEnhancedSubtitles.d.ts.map +1 -0
- package/dist/src/hooks/useEnhancedSubtitles.js +205 -0
- package/dist/src/hooks/useEnhancedSubtitles.ts +258 -0
- package/dist/src/hooks/useKeyboardShortcuts.d.ts +10 -0
- package/dist/src/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/src/hooks/useKeyboardShortcuts.js +59 -0
- package/dist/src/hooks/useKeyboardShortcuts.ts +74 -0
- package/dist/src/hooks/useMediaControls.d.ts +9 -0
- package/dist/src/hooks/useMediaControls.d.ts.map +1 -0
- package/dist/src/hooks/useMediaControls.js +44 -0
- package/dist/src/hooks/useMediaControls.ts +52 -0
- package/dist/src/hooks/useScreenshot.d.ts +4 -0
- package/dist/src/hooks/useScreenshot.d.ts.map +1 -0
- package/dist/src/hooks/useScreenshot.js +56 -0
- package/dist/src/hooks/useScreenshot.ts +57 -0
- package/dist/src/hooks/useSubtitles.d.ts +8 -0
- package/dist/src/hooks/useSubtitles.d.ts.map +1 -0
- package/dist/src/hooks/useSubtitles.js +73 -0
- package/dist/src/hooks/useSubtitles.ts +91 -0
- package/dist/src/hooks/useVideoPlayer.d.ts +32 -0
- package/dist/src/hooks/useVideoPlayer.d.ts.map +1 -0
- package/dist/src/hooks/useVideoPlayer.js +184 -0
- package/dist/src/hooks/useVideoPlayer.ts +232 -0
- package/dist/src/icons/components/FullscreenIcon.d.ts +3 -0
- package/dist/src/icons/components/FullscreenIcon.d.ts.map +1 -0
- package/dist/src/icons/components/FullscreenIcon.js +11 -0
- package/dist/src/icons/components/FullscreenIcon.tsx +37 -0
- package/dist/src/icons/components/SettingsIcon.d.ts +3 -0
- package/dist/src/icons/components/SettingsIcon.d.ts.map +1 -0
- package/dist/src/icons/components/SettingsIcon.js +11 -0
- package/dist/src/icons/components/SettingsIcon.tsx +38 -0
- package/dist/src/icons/components/animated/LoadingIcon.d.ts +3 -0
- package/dist/src/icons/components/animated/LoadingIcon.d.ts.map +1 -0
- package/dist/src/icons/components/animated/LoadingIcon.js +11 -0
- package/dist/src/icons/components/animated/LoadingIcon.tsx +43 -0
- package/dist/src/icons/components/animated/PlayPauseIcon.d.ts +7 -0
- package/dist/src/icons/components/animated/PlayPauseIcon.d.ts.map +1 -0
- package/dist/src/icons/components/animated/PlayPauseIcon.js +9 -0
- package/dist/src/icons/components/animated/PlayPauseIcon.tsx +50 -0
- package/dist/src/icons/components/media/PauseIcon.d.ts +3 -0
- package/dist/src/icons/components/media/PauseIcon.d.ts.map +1 -0
- package/dist/src/icons/components/media/PauseIcon.js +12 -0
- package/dist/src/icons/components/media/PauseIcon.tsx +39 -0
- package/dist/src/icons/components/media/PlayIcon.d.ts +3 -0
- package/dist/src/icons/components/media/PlayIcon.d.ts.map +1 -0
- package/dist/src/icons/components/media/PlayIcon.js +12 -0
- package/dist/src/icons/components/media/PlayIcon.tsx +38 -0
- package/dist/src/icons/components/volume/VolumeIcon.d.ts +3 -0
- package/dist/src/icons/components/volume/VolumeIcon.d.ts.map +1 -0
- package/dist/src/icons/components/volume/VolumeIcon.js +11 -0
- package/dist/src/icons/components/volume/VolumeIcon.tsx +39 -0
- package/dist/src/icons/components/volume/VolumeOffIcon.d.ts +3 -0
- package/dist/src/icons/components/volume/VolumeOffIcon.d.ts.map +1 -0
- package/dist/src/icons/components/volume/VolumeOffIcon.js +11 -0
- package/dist/src/icons/components/volume/VolumeOffIcon.tsx +39 -0
- package/dist/src/icons/index.d.ts +28 -0
- package/dist/src/icons/index.d.ts.map +1 -0
- package/dist/src/icons/index.js +45 -0
- package/dist/src/icons/index.ts +56 -0
- package/dist/src/icons/provider.d.ts +13 -0
- package/dist/src/icons/provider.d.ts.map +1 -0
- package/dist/src/icons/provider.js +37 -0
- package/dist/src/icons/provider.tsx +64 -0
- package/dist/src/icons/types.d.ts +18 -0
- package/dist/src/icons/types.d.ts.map +1 -0
- package/dist/src/icons/types.js +1 -0
- package/dist/src/icons/types.ts +40 -0
- package/dist/src/index-enhanced.d.ts +13 -0
- package/dist/src/index-enhanced.d.ts.map +1 -0
- package/dist/src/index-enhanced.js +16 -0
- package/dist/src/index-enhanced.ts +35 -0
- package/dist/src/index-legacy.d.ts +81 -0
- package/dist/src/index-legacy.d.ts.map +1 -0
- package/dist/src/index-legacy.js +97 -0
- package/dist/src/index-legacy.ts +326 -0
- package/dist/src/index.css +102 -0
- package/dist/src/index.d.ts +38 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +90 -0
- package/dist/src/index.minimal.d.ts +2 -0
- package/dist/src/index.minimal.d.ts.map +1 -0
- package/dist/src/index.minimal.js +3 -0
- package/dist/src/index.minimal.ts +4 -0
- package/dist/src/index.ts +216 -0
- package/dist/src/lib/deprecation.d.ts +7 -0
- package/dist/src/lib/deprecation.d.ts.map +1 -0
- package/dist/src/lib/deprecation.js +31 -0
- package/dist/src/lib/deprecation.ts +51 -0
- package/dist/src/lib/format-time.d.ts +9 -0
- package/dist/src/lib/format-time.d.ts.map +1 -0
- package/dist/src/lib/format-time.js +32 -0
- package/dist/src/lib/format-time.ts +37 -0
- package/dist/src/lib/index.d.ts +3 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +3 -0
- package/dist/src/lib/index.ts +3 -0
- package/dist/src/lib/utils.d.ts +3 -0
- package/dist/src/lib/utils.d.ts.map +1 -0
- package/dist/src/lib/utils.js +5 -0
- package/dist/src/lib/utils.ts +6 -0
- package/dist/src/styles/globals.css +462 -0
- package/dist/src/styles/minimal-player.css +589 -0
- package/dist/src/styles/pixel-art.css +46 -0
- package/dist/src/styles/videojs.css +100 -0
- package/dist/src/test/setup.d.ts +2 -0
- package/dist/src/test/setup.d.ts.map +1 -0
- package/dist/src/test/setup.js +65 -0
- package/dist/src/test/setup.ts +79 -0
- package/dist/src/types/events.d.ts +41 -0
- package/dist/src/types/events.d.ts.map +1 -0
- package/dist/src/types/events.js +2 -0
- package/dist/src/types/events.ts +47 -0
- package/dist/src/types/formats.d.ts +45 -0
- package/dist/src/types/formats.d.ts.map +1 -0
- package/dist/src/types/formats.js +63 -0
- package/dist/src/types/formats.ts +95 -0
- package/dist/src/types/index.d.ts +128 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +4 -0
- package/dist/src/types/index.ts +225 -0
- package/dist/src/types/videojs-plugins.d.ts +14 -0
- package/dist/styles/minimal-player.css +589 -0
- package/dist/utils-Db13763z.cjs +9 -0
- package/dist/utils-Db13763z.cjs.map +1 -0
- package/dist/{utils-BnscpYYd.js → utils-nTO4AnHo.js} +210 -199
- package/dist/utils-nTO4AnHo.js.map +1 -0
- package/dist/utils.js +1 -1
- package/dist/utils.mjs +1 -1
- package/package.json +7 -4
- package/src/adapters/videojs-adapter.d.ts +38 -0
- package/src/adapters/videojs-adapter.d.ts.map +1 -0
- package/src/adapters/videojs-adapter.js +350 -0
- package/src/components/AnimateLoading.d.ts +9 -0
- package/src/components/AnimateLoading.d.ts.map +1 -0
- package/src/components/AnimateLoading.js +41 -0
- package/src/components/AnimateLoading.tsx +1 -1
- package/src/components/LoadingState.d.ts +33 -0
- package/src/components/LoadingState.d.ts.map +1 -0
- package/src/components/LoadingState.js +111 -0
- package/src/components/accessibility/keyboard-help-overlay.d.ts +17 -0
- package/src/components/accessibility/keyboard-help-overlay.d.ts.map +1 -0
- package/src/components/accessibility/keyboard-help-overlay.js +90 -0
- package/src/components/audio-player.d.ts +3 -0
- package/src/components/audio-player.d.ts.map +1 -0
- package/src/components/audio-player.js +31 -0
- package/src/components/basic/index.d.ts +26 -0
- package/src/components/basic/index.d.ts.map +1 -0
- package/src/components/basic/index.js +29 -0
- package/src/components/enhanced/advanced-features.d.ts +45 -0
- package/src/components/enhanced/advanced-features.d.ts.map +1 -0
- package/src/components/enhanced/advanced-features.js +64 -0
- package/src/components/enhanced/debug-panel.d.ts +70 -0
- package/src/components/enhanced/debug-panel.d.ts.map +1 -0
- package/src/components/enhanced/debug-panel.js +94 -0
- package/src/components/enhanced/debug-panel.tsx +1 -1
- package/src/components/enhanced/enhanced-controls.d.ts +50 -0
- package/src/components/enhanced/enhanced-controls.d.ts.map +1 -0
- package/src/components/enhanced/enhanced-controls.js +233 -0
- package/src/components/enhanced/enhanced-media-player.d.ts +26 -0
- package/src/components/enhanced/enhanced-media-player.d.ts.map +1 -0
- package/src/components/enhanced/enhanced-media-player.js +316 -0
- package/src/components/enhanced/error-handling.d.ts +36 -0
- package/src/components/enhanced/error-handling.d.ts.map +1 -0
- package/src/components/enhanced/error-handling.js +153 -0
- package/src/components/enhanced/index.d.ts +7 -0
- package/src/components/enhanced/index.d.ts.map +1 -0
- package/src/components/enhanced/index.js +10 -0
- package/src/components/enhanced/media-player-enhanced.d.ts +21 -0
- package/src/components/enhanced/media-player-enhanced.d.ts.map +1 -0
- package/src/components/enhanced/media-player-enhanced.js +250 -0
- package/src/components/examples/basic-video-player.d.ts +10 -0
- package/src/components/examples/basic-video-player.d.ts.map +1 -0
- package/src/components/examples/basic-video-player.js +16 -0
- package/src/components/examples/custom-controls-example.d.ts +10 -0
- package/src/components/examples/custom-controls-example.d.ts.map +1 -0
- package/src/components/examples/custom-controls-example.js +12 -0
- package/src/components/examples/enhanced-controls-example.d.ts +9 -0
- package/src/components/examples/enhanced-controls-example.d.ts.map +1 -0
- package/src/components/examples/enhanced-controls-example.js +18 -0
- package/src/components/examples/enhanced-media-player-example.d.ts +9 -0
- package/src/components/examples/enhanced-media-player-example.d.ts.map +1 -0
- package/src/components/examples/enhanced-media-player-example.js +13 -0
- package/src/components/examples/loading-states-demo.d.ts +2 -0
- package/src/components/examples/loading-states-demo.d.ts.map +1 -0
- package/src/components/examples/loading-states-demo.js +41 -0
- package/src/components/examples/react-19-demo.d.ts +10 -0
- package/src/components/examples/react-19-demo.d.ts.map +1 -0
- package/src/components/examples/react-19-demo.js +104 -0
- package/src/components/examples/volume-orientation-demo.d.ts +2 -0
- package/src/components/examples/volume-orientation-demo.d.ts.map +1 -0
- package/src/components/examples/volume-orientation-demo.js +31 -0
- package/src/components/icon-demo.d.ts +2 -0
- package/src/components/icon-demo.d.ts.map +1 -0
- package/src/components/icon-demo.js +16 -0
- package/src/components/icons/index.d.ts +36 -0
- package/src/components/icons/index.d.ts.map +1 -0
- package/src/components/icons/index.js +59 -0
- package/src/components/icons/svg-icons/ArrowLeftIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/ArrowLeftIcon.js +3 -0
- package/src/components/icons/svg-icons/ArrowRightIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/ArrowRightIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/ArrowRightIcon.js +3 -0
- package/src/components/icons/svg-icons/AudioIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/AudioIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/AudioIcon.js +4 -0
- package/src/components/icons/svg-icons/BackwardIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/BackwardIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/BackwardIcon.js +3 -0
- package/src/components/icons/svg-icons/CameraIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/CameraIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/CameraIcon.js +4 -0
- package/src/components/icons/svg-icons/CheckIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/CheckIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/CheckIcon.js +4 -0
- package/src/components/icons/svg-icons/EnablePiPIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/EnablePiPIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/EnablePiPIcon.js +5 -0
- package/src/components/icons/svg-icons/ForwardIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/ForwardIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/ForwardIcon.js +3 -0
- package/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/FullscreenEnterIcon.js +3 -0
- package/src/components/icons/svg-icons/FullscreenExitIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/FullscreenExitIcon.js +3 -0
- package/src/components/icons/svg-icons/LoadingIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/LoadingIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/LoadingIcon.js +3 -0
- package/src/components/icons/svg-icons/PauseIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/PauseIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/PauseIcon.js +3 -0
- package/src/components/icons/svg-icons/PlayIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/PlayIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/PlayIcon.js +3 -0
- package/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/PlaybackSpeedIcon.js +3 -0
- package/src/components/icons/svg-icons/QualityIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/QualityIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/QualityIcon.js +3 -0
- package/src/components/icons/svg-icons/SettingsIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/SettingsIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/SettingsIcon.js +3 -0
- package/src/components/icons/svg-icons/SliderIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/SliderIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/SliderIcon.js +3 -0
- package/src/components/icons/svg-icons/SubtitleIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/SubtitleIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/SubtitleIcon.js +3 -0
- package/src/components/icons/svg-icons/SubtitleOffIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/SubtitleOffIcon.js +3 -0
- package/src/components/icons/svg-icons/UnPiPIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/UnPiPIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/UnPiPIcon.js +5 -0
- package/src/components/icons/svg-icons/VolumeMutedIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/VolumeMutedIcon.js +3 -0
- package/src/components/icons/svg-icons/VolumeOneIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/VolumeOneIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/VolumeOneIcon.js +3 -0
- package/src/components/icons/svg-icons/VolumeThreeIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/VolumeThreeIcon.js +3 -0
- package/src/components/icons/svg-icons/VolumeTwoIcon.d.ts +4 -0
- package/src/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +1 -0
- package/src/components/icons/svg-icons/VolumeTwoIcon.js +3 -0
- package/src/components/legacy.d.ts +13 -0
- package/src/components/legacy.d.ts.map +1 -0
- package/src/components/legacy.js +52 -0
- package/src/components/media-metadata-display.d.ts +11 -0
- package/src/components/media-metadata-display.d.ts.map +1 -0
- package/src/components/media-metadata-display.js +20 -0
- package/src/components/media-player-audio.d.ts +9 -0
- package/src/components/media-player-audio.d.ts.map +1 -0
- package/src/components/media-player-audio.js +18 -0
- package/src/components/media-player-controls.d.ts +23 -0
- package/src/components/media-player-controls.d.ts.map +1 -0
- package/src/components/media-player-controls.js +150 -0
- package/src/components/media-player-error.d.ts +16 -0
- package/src/components/media-player-error.d.ts.map +1 -0
- package/src/components/media-player-error.js +85 -0
- package/src/components/media-player-fullscreen.d.ts +12 -0
- package/src/components/media-player-fullscreen.d.ts.map +1 -0
- package/src/components/media-player-fullscreen.js +68 -0
- package/src/components/media-player-hls.d.ts +23 -0
- package/src/components/media-player-hls.d.ts.map +1 -0
- package/src/components/media-player-hls.js +20 -0
- package/src/components/media-player-loading.d.ts +12 -0
- package/src/components/media-player-loading.d.ts.map +1 -0
- package/src/components/media-player-loading.js +53 -0
- package/src/components/media-player-play.d.ts +11 -0
- package/src/components/media-player-play.d.ts.map +1 -0
- package/src/components/media-player-play.js +44 -0
- package/src/components/media-player-root.d.ts +28 -0
- package/src/components/media-player-root.d.ts.map +1 -0
- package/src/components/media-player-root.js +243 -0
- package/src/components/media-player-seek.d.ts +15 -0
- package/src/components/media-player-seek.d.ts.map +1 -0
- package/src/components/media-player-seek.js +92 -0
- package/src/components/media-player-time.d.ts +12 -0
- package/src/components/media-player-time.d.ts.map +1 -0
- package/src/components/media-player-time.js +57 -0
- package/src/components/media-player-tooltip.d.ts +13 -0
- package/src/components/media-player-tooltip.d.ts.map +1 -0
- package/src/components/media-player-tooltip.js +14 -0
- package/src/components/media-player-video.d.ts +9 -0
- package/src/components/media-player-video.d.ts.map +1 -0
- package/src/components/media-player-video.js +18 -0
- package/src/components/media-player-volume.d.ts +13 -0
- package/src/components/media-player-volume.d.ts.map +1 -0
- package/src/components/media-player-volume.js +88 -0
- package/src/components/media-player.d.ts +3 -0
- package/src/components/media-player.d.ts.map +1 -0
- package/src/components/media-player.js +67 -0
- package/src/components/media-player.tsx +2 -2
- package/src/components/media-suspense.d.ts +78 -0
- package/src/components/media-suspense.d.ts.map +1 -0
- package/src/components/media-suspense.js +173 -0
- package/src/components/player-settings-form.d.ts +8 -0
- package/src/components/player-settings-form.d.ts.map +1 -0
- package/src/components/player-settings-form.js +46 -0
- package/src/components/react-player-wrapper.d.ts +64 -0
- package/src/components/react-player-wrapper.d.ts.map +1 -0
- package/src/components/react-player-wrapper.js +163 -0
- package/src/components/simple-video-player.d.ts +9 -0
- package/src/components/simple-video-player.d.ts.map +1 -0
- package/src/components/simple-video-player.js +41 -0
- package/src/components/ui/enhanced-seek-bar.d.ts +3 -0
- package/src/components/ui/enhanced-seek-bar.d.ts.map +1 -0
- package/src/components/ui/enhanced-seek-bar.js +112 -0
- package/src/components/ui/fullscreen-button.d.ts +3 -0
- package/src/components/ui/fullscreen-button.d.ts.map +1 -0
- package/src/components/ui/fullscreen-button.js +21 -0
- package/src/components/ui/media-resource-preloader.d.ts +21 -0
- package/src/components/ui/media-resource-preloader.d.ts.map +1 -0
- package/src/components/ui/media-resource-preloader.js +295 -0
- package/src/components/ui/media-resource-preloader.tsx +9 -11
- package/src/components/ui/play-button.d.ts +3 -0
- package/src/components/ui/play-button.d.ts.map +1 -0
- package/src/components/ui/play-button.js +26 -0
- package/src/components/ui/seek-bar.d.ts +3 -0
- package/src/components/ui/seek-bar.d.ts.map +1 -0
- package/src/components/ui/seek-bar.js +54 -0
- package/src/components/ui/seek-bar.tsx +1 -1
- package/src/components/ui/time-display.d.ts +3 -0
- package/src/components/ui/time-display.d.ts.map +1 -0
- package/src/components/ui/time-display.js +18 -0
- package/src/components/ui/volume-control.d.ts +3 -0
- package/src/components/ui/volume-control.d.ts.map +1 -0
- package/src/components/ui/volume-control.js +71 -0
- package/src/components/unified/base-media-player.d.ts +18 -0
- package/src/components/unified/base-media-player.d.ts.map +1 -0
- package/src/components/unified/base-media-player.js +104 -0
- package/src/components/unified/media-player.d.ts +37 -0
- package/src/components/unified/media-player.d.ts.map +1 -0
- package/src/components/unified/media-player.js +41 -0
- package/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts +42 -0
- package/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts.map +1 -0
- package/src/components/variants/minimal/AccessibleMinimalPlayer.js +322 -0
- package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts +44 -0
- package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts.map +1 -0
- package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.js +280 -0
- package/src/components/variants/minimal/MinimalControls.d.ts +19 -0
- package/src/components/variants/minimal/MinimalControls.d.ts.map +1 -0
- package/src/components/variants/minimal/MinimalControls.js +19 -0
- package/src/components/variants/minimal/MinimalLoading.d.ts +10 -0
- package/src/components/variants/minimal/MinimalLoading.d.ts.map +1 -0
- package/src/components/variants/minimal/MinimalLoading.js +6 -0
- package/src/components/variants/minimal/MinimalMediaPlayer.d.ts +38 -0
- package/src/components/variants/minimal/MinimalMediaPlayer.d.ts.map +1 -0
- package/src/components/variants/minimal/MinimalMediaPlayer.js +135 -0
- package/src/components/variants/minimal/MinimalOverlay.d.ts +11 -0
- package/src/components/variants/minimal/MinimalOverlay.d.ts.map +1 -0
- package/src/components/variants/minimal/MinimalOverlay.js +15 -0
- package/src/components/variants/minimal/MinimalPlayButton.d.ts +9 -0
- package/src/components/variants/minimal/MinimalPlayButton.d.ts.map +1 -0
- package/src/components/variants/minimal/MinimalPlayButton.js +29 -0
- package/src/components/variants/minimal/MinimalSeekBar.d.ts +7 -0
- package/src/components/variants/minimal/MinimalSeekBar.d.ts.map +1 -0
- package/src/components/variants/minimal/MinimalSeekBar.js +73 -0
- package/src/components/variants/minimal/MinimalVolumeControl.d.ts +7 -0
- package/src/components/variants/minimal/MinimalVolumeControl.d.ts.map +1 -0
- package/src/components/variants/minimal/MinimalVolumeControl.js +29 -0
- package/src/components/variants/minimal/SimpleMinimalPlayer.d.ts +22 -0
- package/src/components/variants/minimal/SimpleMinimalPlayer.d.ts.map +1 -0
- package/src/components/variants/minimal/SimpleMinimalPlayer.js +51 -0
- package/src/components/variants/minimal/SimpleMinimalPlayer.tsx +0 -1
- package/src/components/variants/minimal/components/CenterPlayButton.d.ts +7 -0
- package/src/components/variants/minimal/components/CenterPlayButton.d.ts.map +1 -0
- package/src/components/variants/minimal/components/CenterPlayButton.js +8 -0
- package/src/components/variants/minimal/components/ControlBar.d.ts +43 -0
- package/src/components/variants/minimal/components/ControlBar.d.ts.map +1 -0
- package/src/components/variants/minimal/components/ControlBar.js +10 -0
- package/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts +24 -0
- package/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts.map +1 -0
- package/src/components/variants/minimal/components/EnhancedSettingsMenu.js +68 -0
- package/src/components/variants/minimal/components/PlaybackControls.d.ts +9 -0
- package/src/components/variants/minimal/components/PlaybackControls.d.ts.map +1 -0
- package/src/components/variants/minimal/components/PlaybackControls.js +9 -0
- package/src/components/variants/minimal/components/RightControls.d.ts +25 -0
- package/src/components/variants/minimal/components/RightControls.d.ts.map +1 -0
- package/src/components/variants/minimal/components/RightControls.js +40 -0
- package/src/components/variants/minimal/components/SeekBar.d.ts +11 -0
- package/src/components/variants/minimal/components/SeekBar.d.ts.map +1 -0
- package/src/components/variants/minimal/components/SeekBar.js +43 -0
- package/src/components/variants/minimal/components/SettingsDropdown.d.ts +9 -0
- package/src/components/variants/minimal/components/SettingsDropdown.d.ts.map +1 -0
- package/src/components/variants/minimal/components/SettingsDropdown.js +18 -0
- package/src/components/variants/minimal/components/SubtitleDisplay.d.ts +7 -0
- package/src/components/variants/minimal/components/SubtitleDisplay.d.ts.map +1 -0
- package/src/components/variants/minimal/components/SubtitleDisplay.js +6 -0
- package/src/components/variants/minimal/components/TimeDisplay.d.ts +7 -0
- package/src/components/variants/minimal/components/TimeDisplay.d.ts.map +1 -0
- package/src/components/variants/minimal/components/TimeDisplay.js +5 -0
- package/src/components/variants/minimal/components/VideoElement.d.ts +13 -0
- package/src/components/variants/minimal/components/VideoElement.d.ts.map +1 -0
- package/src/components/variants/minimal/components/VideoElement.js +4 -0
- package/src/components/variants/minimal/components/VolumeControl.d.ts +13 -0
- package/src/components/variants/minimal/components/VolumeControl.d.ts.map +1 -0
- package/src/components/variants/minimal/components/VolumeControl.js +99 -0
- package/src/components/variants/minimal/index.d.ts +17 -0
- package/src/components/variants/minimal/index.d.ts.map +1 -0
- package/src/components/variants/minimal/index.js +8 -0
- package/src/components/video-player.d.ts +3 -0
- package/src/components/video-player.d.ts.map +1 -0
- package/src/components/video-player.js +38 -0
- package/src/context/error-handling.d.ts +72 -0
- package/src/context/error-handling.d.ts.map +1 -0
- package/src/context/error-handling.js +300 -0
- package/src/context/media-context.d.ts +104 -0
- package/src/context/media-context.d.ts.map +1 -0
- package/src/context/media-context.js +121 -0
- package/src/context/media-provider.d.ts +26 -0
- package/src/context/media-provider.d.ts.map +1 -0
- package/src/context/media-provider.js +164 -0
- package/src/context/media-store.d.ts +33 -0
- package/src/context/media-store.d.ts.map +1 -0
- package/src/context/media-store.js +273 -0
- package/src/context/persistence.d.ts +83 -0
- package/src/context/persistence.d.ts.map +1 -0
- package/src/context/persistence.js +356 -0
- package/src/core/events/event-system.d.ts +170 -0
- package/src/core/events/event-system.d.ts.map +1 -0
- package/src/core/events/event-system.js +288 -0
- package/src/core/events/hooks.d.ts +33 -0
- package/src/core/events/hooks.d.ts.map +1 -0
- package/src/core/events/hooks.js +198 -0
- package/src/core/events/index.d.ts +6 -0
- package/src/core/events/index.d.ts.map +1 -0
- package/src/core/events/index.js +7 -0
- package/src/core/events/middleware.d.ts +39 -0
- package/src/core/events/middleware.d.ts.map +1 -0
- package/src/core/events/middleware.js +219 -0
- package/src/core/index.d.ts +8 -0
- package/src/core/index.d.ts.map +1 -0
- package/src/core/index.js +15 -0
- package/src/core/optimization/bundle-optimizer.d.ts +44 -0
- package/src/core/optimization/bundle-optimizer.d.ts.map +1 -0
- package/src/core/optimization/bundle-optimizer.js +217 -0
- package/src/core/performance/cicd.d.ts +8 -0
- package/src/core/performance/cicd.d.ts.map +1 -0
- package/src/core/performance/cicd.js +83 -0
- package/src/core/performance/index.d.ts +10 -0
- package/src/core/performance/index.d.ts.map +1 -0
- package/src/core/performance/index.js +14 -0
- package/src/core/performance/media-loading-optimizer.d.ts +105 -0
- package/src/core/performance/media-loading-optimizer.d.ts.map +1 -0
- package/src/core/performance/media-loading-optimizer.js +404 -0
- package/src/core/performance/performance-budgets.d.ts +68 -0
- package/src/core/performance/performance-budgets.d.ts.map +1 -0
- package/src/core/performance/performance-budgets.js +326 -0
- package/src/core/performance/performance-monitor.d.ts +95 -0
- package/src/core/performance/performance-monitor.d.ts.map +1 -0
- package/src/core/performance/performance-monitor.js +297 -0
- package/src/core/performance/performance-testing.d.ts +69 -0
- package/src/core/performance/performance-testing.d.ts.map +1 -0
- package/src/core/performance/performance-testing.js +314 -0
- package/src/core/plugins/base-plugin.d.ts +52 -0
- package/src/core/plugins/base-plugin.d.ts.map +1 -0
- package/src/core/plugins/base-plugin.js +151 -0
- package/src/core/plugins/enhanced-plugin-system.d.ts +160 -0
- package/src/core/plugins/enhanced-plugin-system.d.ts.map +1 -0
- package/src/core/plugins/enhanced-plugin-system.js +305 -0
- package/src/core/plugins/enhanced-plugin-system.ts +14 -8
- package/src/core/plugins/examples/analytics-plugin.d.ts +30 -0
- package/src/core/plugins/examples/analytics-plugin.d.ts.map +1 -0
- package/src/core/plugins/examples/analytics-plugin.js +191 -0
- package/src/core/plugins/index.d.ts +8 -0
- package/src/core/plugins/index.d.ts.map +1 -0
- package/src/core/plugins/index.js +9 -0
- package/src/core/plugins/registry.d.ts +31 -0
- package/src/core/plugins/registry.d.ts.map +1 -0
- package/src/core/plugins/registry.js +261 -0
- package/src/core/plugins/types.d.ts +101 -0
- package/src/core/plugins/types.d.ts.map +1 -0
- package/src/core/plugins/types.js +31 -0
- package/src/core/plugins/utils.d.ts +38 -0
- package/src/core/plugins/utils.d.ts.map +1 -0
- package/src/core/plugins/utils.js +274 -0
- package/src/core/progressive-loading.d.ts +88 -0
- package/src/core/progressive-loading.d.ts.map +1 -0
- package/src/core/progressive-loading.js +239 -0
- package/src/core/providers/enhanced-hls-provider.d.ts +50 -0
- package/src/core/providers/enhanced-hls-provider.d.ts.map +1 -0
- package/src/core/providers/enhanced-hls-provider.js +273 -0
- package/src/core/providers/enhanced-hls-provider.ts +22 -53
- package/src/core/providers/service-provider.d.ts +49 -0
- package/src/core/providers/service-provider.d.ts.map +1 -0
- package/src/core/providers/service-provider.js +105 -0
- package/src/core/utils.d.ts +25 -0
- package/src/core/utils.d.ts.map +1 -0
- package/src/core/utils.js +21 -0
- package/src/features/media-session/media-session-manager.d.ts +132 -0
- package/src/features/media-session/media-session-manager.d.ts.map +1 -0
- package/src/features/media-session/media-session-manager.js +331 -0
- package/src/features/picture-in-picture/pip-manager.d.ts +94 -0
- package/src/features/picture-in-picture/pip-manager.d.ts.map +1 -0
- package/src/features/picture-in-picture/pip-manager.js +353 -0
- package/src/features/playlist/playlist-manager.d.ts +208 -0
- package/src/features/playlist/playlist-manager.d.ts.map +1 -0
- package/src/features/playlist/playlist-manager.js +475 -0
- package/src/features/subtitles/subtitle-manager.d.ts +136 -0
- package/src/features/subtitles/subtitle-manager.d.ts.map +1 -0
- package/src/features/subtitles/subtitle-manager.js +335 -0
- package/src/features/subtitles/subtitle-parser.d.ts +60 -0
- package/src/features/subtitles/subtitle-parser.d.ts.map +1 -0
- package/src/features/subtitles/subtitle-parser.js +217 -0
- package/src/features/thumbnails/thumbnail-generator.d.ts +136 -0
- package/src/features/thumbnails/thumbnail-generator.d.ts.map +1 -0
- package/src/features/thumbnails/thumbnail-generator.js +388 -0
- package/src/hooks/accessibility/index.d.ts +5 -0
- package/src/hooks/accessibility/index.d.ts.map +1 -0
- package/src/hooks/accessibility/index.js +4 -0
- package/src/hooks/accessibility/use-accessibility-preferences.d.ts +14 -0
- package/src/hooks/accessibility/use-accessibility-preferences.d.ts.map +1 -0
- package/src/hooks/accessibility/use-accessibility-preferences.js +156 -0
- package/src/hooks/accessibility/use-focus-management.d.ts +31 -0
- package/src/hooks/accessibility/use-focus-management.d.ts.map +1 -0
- package/src/hooks/accessibility/use-focus-management.js +142 -0
- package/src/hooks/accessibility/use-keyboard-shortcuts.d.ts +38 -0
- package/src/hooks/accessibility/use-keyboard-shortcuts.d.ts.map +1 -0
- package/src/hooks/accessibility/use-keyboard-shortcuts.js +101 -0
- package/src/hooks/accessibility/use-screen-reader.d.ts +22 -0
- package/src/hooks/accessibility/use-screen-reader.d.ts.map +1 -0
- package/src/hooks/accessibility/use-screen-reader.js +148 -0
- package/src/hooks/core/index.d.ts +18 -0
- package/src/hooks/core/index.d.ts.map +1 -0
- package/src/hooks/core/index.js +19 -0
- package/src/hooks/legacy.d.ts +18 -0
- package/src/hooks/legacy.d.ts.map +1 -0
- package/src/hooks/legacy.js +17 -0
- package/src/hooks/use-enhanced-media-player.d.ts +88 -0
- package/src/hooks/use-enhanced-media-player.d.ts.map +1 -0
- package/src/hooks/use-enhanced-media-player.js +395 -0
- package/src/hooks/use-enhanced-media-player.ts +19 -2
- package/src/hooks/use-intelligent-preloading.d.ts +66 -0
- package/src/hooks/use-intelligent-preloading.d.ts.map +1 -0
- package/src/hooks/use-intelligent-preloading.js +258 -0
- package/src/hooks/use-keyboard-controls.d.ts +13 -0
- package/src/hooks/use-keyboard-controls.d.ts.map +1 -0
- package/src/hooks/use-keyboard-controls.js +83 -0
- package/src/hooks/use-media-actions.d.ts +62 -0
- package/src/hooks/use-media-actions.d.ts.map +1 -0
- package/src/hooks/use-media-actions.js +121 -0
- package/src/hooks/use-media-metadata.d.ts +11 -0
- package/src/hooks/use-media-metadata.d.ts.map +1 -0
- package/src/hooks/use-media-metadata.js +74 -0
- package/src/hooks/use-media-optimistic.d.ts +36 -0
- package/src/hooks/use-media-optimistic.d.ts.map +1 -0
- package/src/hooks/use-media-optimistic.js +205 -0
- package/src/hooks/use-media-player.d.ts +31 -0
- package/src/hooks/use-media-player.d.ts.map +1 -0
- package/src/hooks/use-media-player.js +251 -0
- package/src/hooks/use-media-state.d.ts +17 -0
- package/src/hooks/use-media-state.d.ts.map +1 -0
- package/src/hooks/use-media-state.js +162 -0
- package/src/hooks/use-memory-optimization.d.ts +40 -0
- package/src/hooks/use-memory-optimization.d.ts.map +1 -0
- package/src/hooks/use-memory-optimization.js +288 -0
- package/src/hooks/use-optimistic-controls.d.ts +22 -0
- package/src/hooks/use-optimistic-controls.d.ts.map +1 -0
- package/src/hooks/use-optimistic-controls.js +60 -0
- package/src/hooks/use-optimized-media.d.ts +46 -0
- package/src/hooks/use-optimized-media.d.ts.map +1 -0
- package/src/hooks/use-optimized-media.js +211 -0
- package/src/hooks/use-touch-gestures.d.ts +47 -0
- package/src/hooks/use-touch-gestures.d.ts.map +1 -0
- package/src/hooks/use-touch-gestures.js +289 -0
- package/src/hooks/useEnhancedSubtitles.d.ts +39 -0
- package/src/hooks/useEnhancedSubtitles.d.ts.map +1 -0
- package/src/hooks/useEnhancedSubtitles.js +205 -0
- package/src/hooks/useKeyboardShortcuts.d.ts +10 -0
- package/src/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/src/hooks/useKeyboardShortcuts.js +59 -0
- package/src/hooks/useMediaControls.d.ts +9 -0
- package/src/hooks/useMediaControls.d.ts.map +1 -0
- package/src/hooks/useMediaControls.js +44 -0
- package/src/hooks/useScreenshot.d.ts +4 -0
- package/src/hooks/useScreenshot.d.ts.map +1 -0
- package/src/hooks/useScreenshot.js +56 -0
- package/src/hooks/useSubtitles.d.ts +8 -0
- package/src/hooks/useSubtitles.d.ts.map +1 -0
- package/src/hooks/useSubtitles.js +73 -0
- package/src/hooks/useVideoPlayer.d.ts +32 -0
- package/src/hooks/useVideoPlayer.d.ts.map +1 -0
- package/src/hooks/useVideoPlayer.js +184 -0
- package/src/icons/components/FullscreenIcon.d.ts +3 -0
- package/src/icons/components/FullscreenIcon.d.ts.map +1 -0
- package/src/icons/components/FullscreenIcon.js +11 -0
- package/src/icons/components/SettingsIcon.d.ts +3 -0
- package/src/icons/components/SettingsIcon.d.ts.map +1 -0
- package/src/icons/components/SettingsIcon.js +11 -0
- package/src/icons/components/animated/LoadingIcon.d.ts +3 -0
- package/src/icons/components/animated/LoadingIcon.d.ts.map +1 -0
- package/src/icons/components/animated/LoadingIcon.js +11 -0
- package/src/icons/components/animated/PlayPauseIcon.d.ts +7 -0
- package/src/icons/components/animated/PlayPauseIcon.d.ts.map +1 -0
- package/src/icons/components/animated/PlayPauseIcon.js +9 -0
- package/src/icons/components/media/PauseIcon.d.ts +3 -0
- package/src/icons/components/media/PauseIcon.d.ts.map +1 -0
- package/src/icons/components/media/PauseIcon.js +12 -0
- package/src/icons/components/media/PlayIcon.d.ts +3 -0
- package/src/icons/components/media/PlayIcon.d.ts.map +1 -0
- package/src/icons/components/media/PlayIcon.js +12 -0
- package/src/icons/components/volume/VolumeIcon.d.ts +3 -0
- package/src/icons/components/volume/VolumeIcon.d.ts.map +1 -0
- package/src/icons/components/volume/VolumeIcon.js +11 -0
- package/src/icons/components/volume/VolumeOffIcon.d.ts +3 -0
- package/src/icons/components/volume/VolumeOffIcon.d.ts.map +1 -0
- package/src/icons/components/volume/VolumeOffIcon.js +11 -0
- package/src/icons/index.d.ts +28 -0
- package/src/icons/index.d.ts.map +1 -0
- package/src/icons/index.js +45 -0
- package/src/icons/provider.d.ts +13 -0
- package/src/icons/provider.d.ts.map +1 -0
- package/src/icons/provider.js +37 -0
- package/src/icons/types.d.ts +18 -0
- package/src/icons/types.d.ts.map +1 -0
- package/src/icons/types.js +1 -0
- package/src/index-enhanced.d.ts +13 -0
- package/src/index-enhanced.d.ts.map +1 -0
- package/src/index-enhanced.js +16 -0
- package/src/index-legacy.d.ts +81 -0
- package/src/index-legacy.d.ts.map +1 -0
- package/src/index-legacy.js +97 -0
- package/src/index.d.ts +38 -0
- package/src/index.d.ts.map +1 -0
- package/src/index.js +90 -0
- package/src/index.minimal.d.ts +2 -0
- package/src/index.minimal.d.ts.map +1 -0
- package/src/index.minimal.js +3 -0
- package/src/index.minimal.ts +4 -0
- package/src/lib/deprecation.d.ts +7 -0
- package/src/lib/deprecation.d.ts.map +1 -0
- package/src/lib/deprecation.js +31 -0
- package/src/lib/format-time.d.ts +9 -0
- package/src/lib/format-time.d.ts.map +1 -0
- package/src/lib/format-time.js +32 -0
- package/src/lib/index.d.ts +3 -0
- package/src/lib/index.d.ts.map +1 -0
- package/src/lib/index.js +3 -0
- package/src/lib/utils.d.ts +3 -0
- package/src/lib/utils.d.ts.map +1 -0
- package/src/lib/utils.js +5 -0
- package/src/test/setup.d.ts +2 -0
- package/src/test/setup.d.ts.map +1 -0
- package/src/test/setup.js +65 -0
- package/src/types/events.d.ts +41 -0
- package/src/types/events.d.ts.map +1 -0
- package/src/types/events.js +2 -0
- package/src/types/formats.d.ts +45 -0
- package/src/types/formats.d.ts.map +1 -0
- package/src/types/formats.js +63 -0
- package/src/types/index.d.ts +128 -0
- package/src/types/index.d.ts.map +1 -0
- package/src/types/index.js +4 -0
- package/src/types/index.ts +40 -5
- package/dist/context-BMteAJDN.js.map +0 -1
- package/dist/context-DCJ_scmO.cjs +0 -23
- package/dist/context-DCJ_scmO.cjs.map +0 -1
- package/dist/hooks-C_r8wexn.cjs +0 -4
- package/dist/hooks-C_r8wexn.cjs.map +0 -1
- package/dist/hooks-Da2wVXlF.js +0 -1630
- package/dist/hooks-Da2wVXlF.js.map +0 -1
- package/dist/utils-BnscpYYd.js.map +0 -1
- package/dist/utils-D_czS_0K.cjs +0 -9
- package/dist/utils-D_czS_0K.cjs.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enhanced-components-DTIObgB7.cjs","sources":["../src/components/enhanced/media-player-enhanced.tsx","../src/components/enhanced/advanced-features.tsx","../src/components/enhanced/enhanced-controls.tsx","../src/components/enhanced/debug-panel.tsx"],"sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { useMediaContext, useMediaSelector, useMediaDispatch, MediaActionTypes } from \"../../context/media-context\"\nimport { cn } from \"../../lib/utils\"\n\n// Enhanced media player with better performance and mobile support\nexport interface EnhancedMediaPlayerProps {\n\tchildren: React.ReactNode\n\tclassName?: string\n\tautoHide?: boolean\n\tautoHideDelay?: number\n\tshowControlsOnHover?: boolean\n\tshowControlsOnTouch?: boolean\n\tenableKeyboardControls?: boolean\n\tenableTouchGestures?: boolean\n\tonPlay?: () => void\n\tonPause?: () => void\n\tonTimeUpdate?: (time: number) => void\n\tonVolumeChange?: (volume: number) => void\n\tonFullscreenChange?: (isFullscreen: boolean) => void\n}\n\n// Custom hook for auto-hide controls\nfunction useAutoHideControls(\n\tautoHide: boolean,\n\tdelay: number,\n\tshowOnHover: boolean,\n\tshowOnTouch: boolean\n) {\n\tconst [showControls, setShowControls] = React.useState(true)\n\tconst [isHovering, setIsHovering] = React.useState(false)\n\tconst [isTouching, setIsTouching] = React.useState(false)\n const timeoutRef = React.useRef<NodeJS.Timeout | null>(null)\n\n\tconst resetTimeout = React.useCallback(() => {\n\t\tif (timeoutRef.current) {\n\t\t\tclearTimeout(timeoutRef.current)\n\t\t}\n\t\tif (autoHide) {\n\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\tif (!isHovering && !isTouching) {\n\t\t\t\t\tsetShowControls(false)\n\t\t\t\t}\n\t\t\t}, delay)\n\t\t}\n\t}, [autoHide, delay, isHovering, isTouching])\n\n\tconst showControlsTemporarily = React.useCallback(() => {\n\t\tsetShowControls(true)\n\t\tresetTimeout()\n\t}, [resetTimeout])\n\n\tReact.useEffect(() => {\n\t\tif (autoHide) {\n\t\t\tresetTimeout()\n\t\t} else {\n\t\t\tsetShowControls(true)\n\t\t}\n\t\treturn () => {\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current)\n\t\t\t}\n\t\t}\n\t}, [autoHide, resetTimeout])\n\n\tconst handleMouseEnter = React.useCallback(() => {\n\t\tif (showOnHover) {\n\t\t\tsetIsHovering(true)\n\t\t\tsetShowControls(true)\n\t\t}\n\t}, [showOnHover])\n\n\tconst handleMouseLeave = React.useCallback(() => {\n\t\tif (showOnHover) {\n\t\t\tsetIsHovering(false)\n\t\t\tresetTimeout()\n\t\t}\n\t}, [showOnHover, resetTimeout])\n\n\tconst handleTouchStart = React.useCallback(() => {\n\t\tif (showOnTouch) {\n\t\t\tsetIsTouching(true)\n\t\t\tshowControlsTemporarily()\n\t\t}\n\t}, [showOnTouch, showControlsTemporarily])\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\tif (showOnTouch) {\n\t\t\tsetIsTouching(false)\n\t\t\tresetTimeout()\n\t\t}\n\t}, [showOnTouch, resetTimeout])\n\n\treturn {\n\t\tshowControls,\n\t\tshowControlsTemporarily,\n\t\thandleMouseEnter,\n\t\thandleMouseLeave,\n\t\thandleTouchStart,\n\t\thandleTouchEnd\n\t}\n}\n\n// Custom hook for touch gestures\nfunction useTouchGestures(enabled: boolean) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPlaying = useMediaSelector(state => state.isPlaying)\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\tconst duration = useMediaSelector(state => state.duration)\n\tconst volume = useMediaSelector(state => state.volume)\n\n\tconst [touchStart, setTouchStart] = React.useState<{ x: number; y: number; time: number } | null>(null)\n\tconst [isDoubleTap, setIsDoubleTap] = React.useState(false)\n\n\tconst handleTouchStart = React.useCallback((e: React.TouchEvent) => {\n\t\tif (!enabled) return\n\t\t\n\t\tconst touch = e.touches[0]\n\t\tif (!touch) return\n\t\t\n\t\tconst now = Date.now()\n\t\t\n\t\tif (touchStart && now - touchStart.time < 300) {\n\t\t\tsetIsDoubleTap(true)\n\t\t\t// Double tap to play/pause\n\t\t\tdispatch({\n\t\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t\t})\n\t\t} else {\n\t\t\tsetTouchStart({\n\t\t\t\tx: touch.clientX,\n\t\t\t\ty: touch.clientY,\n\t\t\t\ttime: now\n\t\t\t})\n\t\t\tsetIsDoubleTap(false)\n\t\t}\n\t}, [enabled, touchStart, isPlaying, dispatch])\n\n\tconst handleTouchMove = React.useCallback((e: React.TouchEvent) => {\n\t\tif (!enabled || !touchStart || isDoubleTap) return\n\n\t\tconst touch = e.touches[0]\n\t\tif (!touch) return\n\t\t\n\t\tconst deltaX = touch.clientX - touchStart.x\n\t\tconst deltaY = touch.clientY - touchStart.y\n\n\t\t// Horizontal swipe for seeking\n\t\tif (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > 50) {\n\t\t\tconst seekAmount = (deltaX / window.innerWidth) * 30 // 30 seconds max\n\t\t\tconst newTime = Math.max(0, Math.min(duration, currentTime + seekAmount))\n\t\t\tdispatch({\n\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\tdetail: newTime\n\t\t\t})\n\t\t}\n\n\t\t// Vertical swipe for volume (right side of screen)\n\t\tif (Math.abs(deltaY) > Math.abs(deltaX) && Math.abs(deltaY) > 50 && touchStart.x > window.innerWidth / 2) {\n\t\t\tconst volumeChange = -(deltaY / window.innerHeight) * 1 // Full range\n\t\t\tconst newVolume = Math.max(0, Math.min(1, volume + volumeChange))\n\t\t\tdispatch({\n\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\tdetail: newVolume\n\t\t\t})\n\t\t}\n\t}, [enabled, touchStart, isDoubleTap, duration, currentTime, volume, dispatch])\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\tif (!enabled) return\n\t\t// Reset touch state after a delay to allow for double tap detection\n\t\tsetTimeout(() => {\n\t\t\tsetTouchStart(null)\n\t\t\tsetIsDoubleTap(false)\n\t\t}, 300)\n\t}, [enabled])\n\n\treturn {\n\t\thandleTouchStart,\n\t\thandleTouchMove,\n\t\thandleTouchEnd\n\t}\n}\n\nexport const EnhancedMediaPlayer = function EnhancedMediaPlayer({\n\tchildren,\n\tclassName,\n\tautoHide = true,\n\tautoHideDelay = 3000,\n\tshowControlsOnHover = true,\n\tshowControlsOnTouch = true,\n\tenableKeyboardControls = true,\n\tenableTouchGestures = true,\n\tonPlay,\n\tonPause,\n\tonTimeUpdate,\n\tonVolumeChange,\n\tonFullscreenChange\n}: EnhancedMediaPlayerProps) {\n\tconst context = useMediaContext()\n\tconst dispatch = useMediaDispatch()\n\t\n\t// State selectors with memoization\n\tconst isPlaying = useMediaSelector(React.useCallback(state => state.isPlaying, []))\n\tconst isFullscreen = useMediaSelector(React.useCallback(state => state.isFullscreen, []))\n\tconst currentTime = useMediaSelector(React.useCallback(state => state.currentTime, []))\n\tconst volume = useMediaSelector(React.useCallback(state => state.volume, []))\n\tconst error = useMediaSelector(React.useCallback(state => state.error, []))\n\n\t// Custom hooks\n\tconst {\n\t\tshowControls,\n\t\tshowControlsTemporarily,\n\t\thandleMouseEnter,\n\t\thandleMouseLeave,\n\t\thandleTouchStart: handleControlsTouch,\n\t\thandleTouchEnd: handleControlsTouchEnd\n\t} = useAutoHideControls(autoHide, autoHideDelay, showControlsOnHover, showControlsOnTouch)\n\n\tconst {\n\t\thandleTouchStart: handleGestureStart,\n\t\thandleTouchMove: handleGestureMove,\n\t\thandleTouchEnd: handleGestureEnd\n\t} = useTouchGestures(enableTouchGestures)\n\n\t// Combine touch handlers\n\tconst handleTouchStart = React.useCallback((e: React.TouchEvent) => {\n\t\thandleControlsTouch()\n\t\thandleGestureStart(e)\n\t}, [handleControlsTouch, handleGestureStart])\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\thandleControlsTouchEnd()\n\t\thandleGestureEnd()\n\t}, [handleControlsTouchEnd, handleGestureEnd])\n\n\t// Event handlers with memoization\n\tconst handleClick = React.useCallback(() => {\n\t\tshowControlsTemporarily()\n\t}, [showControlsTemporarily])\n\n\t// Keyboard controls\n\tReact.useEffect(() => {\n\t\tif (!enableKeyboardControls) return\n\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tswitch (e.code) {\n\t\t\t\tcase 'Space':\n\t\t\t\tcase 'KeyK':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'KeyF':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: isFullscreen ? MediaActionTypes.EXIT_FULLSCREEN : MediaActionTypes.ENTER_FULLSCREEN\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'KeyM':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({ type: MediaActionTypes.TOGGLE_MUTE })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: Math.max(0, currentTime - 10)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: currentTime + 10\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\t\tdetail: Math.min(1, volume + 0.1)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\t\tdetail: Math.max(0, volume - 0.1)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener('keydown', handleKeyDown)\n\t\treturn () => document.removeEventListener('keydown', handleKeyDown)\n\t}, [enableKeyboardControls, dispatch, isPlaying, isFullscreen, currentTime, volume])\n\n\t// Event callbacks\n\tReact.useEffect(() => {\n\t\tif (isPlaying) onPlay?.()\n\t\telse onPause?.()\n\t}, [isPlaying, onPlay, onPause])\n\n\tReact.useEffect(() => {\n\t\tonTimeUpdate?.(currentTime)\n\t}, [currentTime, onTimeUpdate])\n\n\tReact.useEffect(() => {\n\t\tonVolumeChange?.(volume)\n\t}, [volume, onVolumeChange])\n\n\tReact.useEffect(() => {\n\t\tonFullscreenChange?.(isFullscreen)\n\t}, [isFullscreen, onFullscreenChange])\n\n\treturn (\n\t\t<div\n\t\t\tref={context.rootRef}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative isolate flex flex-col overflow-hidden rounded-lg bg-black outline-none\",\n\t\t\t\t\"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n\t\t\t\t\"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n\t\t\t\tisFullscreen && \"fixed inset-0 z-50 rounded-none\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tdata-state={isFullscreen ? \"fullscreen\" : \"inline\"}\n\t\t\tdata-disabled={error ? \"\" : undefined}\n\t\t\tdata-controls-visible={showControls ? \"\" : undefined}\n\t\t\ttabIndex={0}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\tonTouchStart={handleTouchStart}\n\t\t\tonTouchMove={handleGestureMove}\n\t\t\tonTouchEnd={handleTouchEnd}\n\t\t\tonClick={handleClick}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\nEnhancedMediaPlayer.displayName = \"EnhancedMediaPlayer\"\n","\"use client\"\n\nimport React from \"react\"\nimport { useMediaSelector, useMediaDispatch, MediaActionTypes } from \"../../context/media-context\"\nimport { cn } from \"../../lib/utils\"\nimport { formatTime } from \"../../lib/format-time\"\n\n// Types for advanced features\nexport interface Chapter {\n\tid: string\n\ttitle: string\n\tstartTime: number\n\tendTime: number\n\tthumbnail?: string\n}\n\nexport interface QualityLevel {\n\tid: string\n\tlabel: string\n\twidth: number\n\theight: number\n\tbitrate?: number\n}\n\nexport interface Subtitle {\n\tid: string\n\tlabel: string\n\tlanguage: string\n\tsrc: string\n\tdefault?: boolean\n}\n\n// Quality selector component\nexport const QualitySelector = function QualitySelector({\n\tqualities,\n\tcurrentQuality,\n\tonQualityChange,\n\tclassName\n}: {\n\tqualities: QualityLevel[]\n\tcurrentQuality: string\n\tonQualityChange: (qualityId: string) => void\n\tclassName?: string\n}) {\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst currentQualityLabel = React.useMemo(() => {\n\t\treturn qualities.find(q => q.id === currentQuality)?.label || \"Auto\"\n\t}, [qualities, currentQuality])\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select quality\"\n\t\t\t>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/>\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{currentQualityLabel}</span>\n\t\t\t\t<svg \n\t\t\t\t\tviewBox=\"0 0 24 24\" \n\t\t\t\t\tfill=\"currentColor\" \n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\"/>\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-32 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t{qualities.map((quality) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={quality.id}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonQualityChange(quality.id)\n\t\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tquality.id === currentQuality && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{quality.label}\n\t\t\t\t\t\t\t{quality.bitrate && (\n\t\t\t\t\t\t\t\t<span className=\"ml-2 text-white/60 text-xs\">\n\t\t\t\t\t\t\t\t\t({Math.round(quality.bitrate / 1000)}k)\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Subtitle selector component\nexport const SubtitleSelector = function SubtitleSelector({\n\tsubtitles,\n\tcurrentSubtitle,\n\tonSubtitleChange,\n\tclassName\n}: {\n\tsubtitles: Subtitle[]\n\tcurrentSubtitle: string | null\n\tonSubtitleChange: (subtitleId: string | null) => void\n\tclassName?: string\n}) {\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst currentSubtitleLabel = React.useMemo(() => {\n\t\tif (!currentSubtitle) return \"Off\"\n\t\treturn subtitles.find(s => s.id === currentSubtitle)?.label || \"Off\"\n\t}, [subtitles, currentSubtitle])\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select subtitles\"\n\t\t\t>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM4 12h4v2H4v-2zm10 6H4v-2h10v2zm6 0h-4v-2h4v2zm0-4H10v-2h10v2z\"/>\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{currentSubtitleLabel}</span>\n\t\t\t\t<svg \n\t\t\t\t\tviewBox=\"0 0 24 24\" \n\t\t\t\t\tfill=\"currentColor\" \n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\"/>\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-32 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tonSubtitleChange(null)\n\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t!currentSubtitle && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\tOff\n\t\t\t\t\t</button>\n\t\t\t\t\t{subtitles.map((subtitle) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={subtitle.id}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonSubtitleChange(subtitle.id)\n\t\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tsubtitle.id === currentSubtitle && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{subtitle.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Playback speed selector\nexport const PlaybackSpeedSelector = function PlaybackSpeedSelector({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst playbackRate = useMediaSelector(state => state.playbackRate)\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst speeds = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]\n\n\tconst handleSpeedChange = React.useCallback((speed: number) => {\n\t\tdispatch({ type: MediaActionTypes.SET_PLAYBACK_RATE, detail: speed })\n\t\tsetIsOpen(false)\n\t}, [dispatch])\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select playback speed\"\n\t\t\t>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M13,8A4,4 0 0,0 9,12A4,4 0 0,0 13,16A4,4 0 0,0 17,12A4,4 0 0,0 13,8M13,14A2,2 0 0,1 11,12A2,2 0 0,1 13,10A2,2 0 0,1 15,12A2,2 0 0,1 13,14M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4Z\"/>\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{playbackRate}x</span>\n\t\t\t\t<svg \n\t\t\t\t\tviewBox=\"0 0 24 24\" \n\t\t\t\t\tfill=\"currentColor\" \n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\"/>\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-20 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t{speeds.map((speed) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={speed}\n\t\t\t\t\t\t\tonClick={() => handleSpeedChange(speed)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tspeed === playbackRate && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{speed}x\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Chapters component\nexport const ChaptersPanel = function ChaptersPanel({\n\tchapters,\n\tonChapterSelect,\n\tclassName\n}: {\n\tchapters: Chapter[]\n\tonChapterSelect: (chapter: Chapter) => void\n\tclassName?: string\n}) {\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\n\tconst currentChapter = React.useMemo(() => {\n\t\treturn chapters.find(chapter => \n\t\t\tcurrentTime >= chapter.startTime && currentTime < chapter.endTime\n\t\t)\n\t}, [chapters, currentTime])\n\n\treturn (\n\t\t<div className={cn(\"rounded-lg border border-white/20 bg-black/90 p-4 backdrop-blur-sm\", className)}>\n\t\t\t<h3 className=\"mb-3 font-semibold text-white\">Chapters</h3>\n\t\t\t<div className=\"max-h-64 space-y-2 overflow-y-auto\">\n\t\t\t\t{chapters.map((chapter) => (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={chapter.id}\n\t\t\t\t\t\tonClick={() => onChapterSelect(chapter)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex w-full items-center gap-3 rounded-lg p-3 text-left transition-colors\",\n\t\t\t\t\t\t\t\"hover:bg-white/10\",\n\t\t\t\t\t\t\tchapter.id === currentChapter?.id && \"border border-primary/30 bg-primary/20\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{chapter.thumbnail && (\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tsrc={chapter.thumbnail}\n\t\t\t\t\t\t\t\talt={chapter.title}\n\t\t\t\t\t\t\t\tclassName=\"h-9 w-16 rounded object-cover\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t<div className=\"truncate font-medium text-white\">{chapter.title}</div>\n\t\t\t\t\t\t\t<div className=\"text-sm text-white/60\">\n\t\t\t\t\t\t\t\t{formatTime(chapter.startTime)} - {formatTime(chapter.endTime)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</button>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Picture-in-Picture button\nexport const PictureInPictureButton = function PictureInPictureButton({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPictureInPicture = useMediaSelector(state => state.isPictureInPicture)\n\n\tconst handleTogglePiP = React.useCallback(() => {\n\t\tdispatch({\n\t\t\ttype: isPictureInPicture ? MediaActionTypes.EXIT_PIP : MediaActionTypes.ENTER_PIP\n\t\t})\n\t}, [dispatch, isPictureInPicture])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleTogglePiP}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex h-10 w-10 items-center justify-center rounded-full text-white\",\n\t\t\t\t\"transition-colors hover:bg-white/10\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={isPictureInPicture ? \"Exit Picture-in-Picture\" : \"Enter Picture-in-Picture\"}\n\t\t>\n\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t<path d=\"M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h18v14z\"/>\n\t\t\t</svg>\n\t\t</button>\n\t)\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { useMediaSelector, useMediaDispatch, MediaActionTypes } from \"../../context/media-context\"\nimport { cn } from \"../../lib/utils\"\nimport { formatTime } from \"../../lib/format-time\"\n\n// Enhanced play button with better animations\nexport const EnhancedPlayButton = function EnhancedPlayButton({\n\tclassName,\n\tsize = \"md\"\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPlaying = useMediaSelector(state => state.isPlaying)\n\tconst isLoading = useMediaSelector(state => state.isLoading)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\",\n\t\txl: \"h-16 w-16\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\",\n\t\txl: \"h-8 w-8\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tdispatch({\n\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t})\n\t}, [dispatch, isPlaying])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tdisabled={isLoading}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={isPlaying ? \"Pause\" : \"Play\"}\n\t\t>\n\t\t\t{isLoading ? (\n\t\t\t\t<div className={cn(\"animate-spin rounded-full border-2 border-white/30 border-t-white\", iconSizes[size])} />\n\t\t\t) : (\n\t\t\t\t<div className={cn(\"transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t\t{isPlaying ? (\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t\t\t<path d=\"M6 4h4v16H6V4zm8 0h4v16h-4V4z\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"ml-0.5 h-full w-full\">\n\t\t\t\t\t\t\t<path d=\"M8 5v14l11-7z\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</button>\n\t)\n}\n\n// Enhanced seek bar with preview and better touch support\nexport const EnhancedSeekBar = function EnhancedSeekBar({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\tconst duration = useMediaSelector(state => state.duration)\n\tconst buffered = useMediaSelector(state => state.buffered)\n\tconst previewTime = useMediaSelector(state => state.previewTime)\n\n\tconst [isDragging, setIsDragging] = React.useState(false)\n\tconst [hoverTime, setHoverTime] = React.useState<number | null>(null)\n\tconst progressRef = React.useRef<HTMLDivElement>(null)\n\n\tconst progress = duration > 0 ? (currentTime / duration) * 100 : 0\n\tconst previewProgress = duration > 0 && previewTime !== null ? (previewTime / duration) * 100 : null\n\n\t// Calculate buffered ranges\n\tconst bufferedRanges = React.useMemo(() => {\n\t\tif (!buffered || duration === 0) return []\n\t\tconst ranges = []\n\t\tfor (let i = 0; i < buffered.length; i++) {\n\t\t\tranges.push({\n\t\t\t\tstart: (buffered.start(i) / duration) * 100,\n\t\t\t\tend: (buffered.end(i) / duration) * 100\n\t\t\t})\n\t\t}\n\t\treturn ranges\n\t}, [buffered, duration])\n\n\tconst getTimeFromPosition = React.useCallback((clientX: number) => {\n\t\tif (!progressRef.current) return 0\n\t\tconst rect = progressRef.current.getBoundingClientRect()\n\t\tconst position = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n\t\treturn position * duration\n\t}, [duration])\n\n\tconst handleMouseMove = React.useCallback((e: React.MouseEvent) => {\n\t\tif (!isDragging) {\n\t\t\tconst time = getTimeFromPosition(e.clientX)\n\t\t\tsetHoverTime(time)\n\t\t\tdispatch({ type: MediaActionTypes.PREVIEW_TIME, detail: time })\n\t\t}\n\t}, [isDragging, getTimeFromPosition, dispatch])\n\n\tconst handleMouseLeave = React.useCallback(() => {\n\t\tif (!isDragging) {\n\t\t\tsetHoverTime(null)\n\t\t\tdispatch({ type: MediaActionTypes.CLEAR_PREVIEW })\n\t\t}\n\t}, [isDragging, dispatch])\n\n\tconst handleMouseDown = React.useCallback((e: React.MouseEvent) => {\n\t\tsetIsDragging(true)\n\t\tconst time = getTimeFromPosition(e.clientX)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t}, [getTimeFromPosition, dispatch])\n\n\tconst handleTouchStart = React.useCallback((e: React.TouchEvent) => {\n\t\tsetIsDragging(true)\n\t\tconst time = getTimeFromPosition(e.touches[0]?.clientX || 0)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t}, [getTimeFromPosition, dispatch])\n\n\tReact.useEffect(() => {\n\t\tconst handleMouseMove = (e: MouseEvent) => {\n\t\t\tif (isDragging) {\n\t\t\t\tconst time = getTimeFromPosition(e.clientX)\n\t\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t\t}\n\t\t}\n\n\t\tconst handleMouseUp = () => {\n\t\t\tsetIsDragging(false)\n\t\t\tsetHoverTime(null)\n\t\t\tdispatch({ type: MediaActionTypes.CLEAR_PREVIEW })\n\t\t}\n\n\t\tconst handleTouchMove = (e: TouchEvent) => {\n\t\t\tif (isDragging) {\n\t\t\t\tconst time = getTimeFromPosition(e.touches[0]?.clientX || 0)\n\t\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t\t}\n\t\t}\n\n\t\tif (isDragging) {\n\t\t\tdocument.addEventListener('mousemove', handleMouseMove)\n\t\t\tdocument.addEventListener('mouseup', handleMouseUp)\n\t\t\tdocument.addEventListener('touchmove', handleTouchMove)\n\t\t\tdocument.addEventListener('touchend', handleMouseUp)\n\t\t}\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('mousemove', handleMouseMove)\n\t\t\tdocument.removeEventListener('mouseup', handleMouseUp)\n\t\t\tdocument.removeEventListener('touchmove', handleTouchMove)\n\t\t\tdocument.removeEventListener('touchend', handleMouseUp)\n\t\t}\n\t}, [isDragging, getTimeFromPosition, dispatch])\n\n\treturn (\n\t\t<div className={cn(\"group relative flex items-center\", className)}>\n\t\t\t{/* Time preview tooltip */}\n\t\t\t{(hoverTime !== null || previewTime !== null) && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"pointer-events-none absolute bottom-full mb-2 rounded bg-black/80 px-2 py-1 text-white text-xs\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: `${previewProgress || ((hoverTime || 0) / duration) * 100}%`,\n\t\t\t\t\t\ttransform: 'translateX(-50%)'\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{formatTime(hoverTime || previewTime || 0)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<div\n\t\t\t\tref={progressRef}\n\t\t\t\tclassName=\"relative h-2 w-full cursor-pointer rounded-full bg-white/20 transition-all duration-200 group-hover:h-3\"\n\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\tonTouchStart={handleTouchStart}\n\t\t\t>\n\t\t\t\t{/* Buffered ranges */}\n\t\t\t\t{bufferedRanges.map((range, index) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tclassName=\"absolute top-0 h-full rounded-full bg-white/30\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${range.start}%`,\n\t\t\t\t\t\t\twidth: `${range.end - range.start}%`\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\n\t\t\t\t{/* Progress bar */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute top-0 h-full rounded-full bg-primary transition-all duration-100\"\n\t\t\t\t\tstyle={{ width: `${progress}%` }}\n\t\t\t\t/>\n\n\t\t\t\t{/* Preview indicator */}\n\t\t\t\t{previewProgress !== null && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute top-0 h-full w-1 rounded-full bg-white/80\"\n\t\t\t\t\t\tstyle={{ left: `${previewProgress}%` }}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* Thumb */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"-translate-y-1/2 absolute top-1/2 h-4 w-4 rounded-full border-2 border-white bg-primary opacity-0 shadow-lg transition-all duration-200 group-hover:opacity-100\"\n\t\t\t\t\tstyle={{ left: `${progress}%`, transform: 'translateX(-50%) translateY(-50%)' }}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Enhanced volume control with better UX\nexport const EnhancedVolumeControl = function EnhancedVolumeControl({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst volume = useMediaSelector(state => state.volume)\n\tconst isMuted = useMediaSelector(state => state.isMuted)\n\n\tconst [showSlider, setShowSlider] = React.useState(false)\n\n\tconst handleToggleMute = React.useCallback(() => {\n\t\tdispatch({ type: MediaActionTypes.TOGGLE_MUTE })\n\t}, [dispatch])\n\n\tconst handleVolumeChange = React.useCallback((newVolume: number) => {\n\t\tdispatch({ type: MediaActionTypes.SET_VOLUME, detail: newVolume })\n\t}, [dispatch])\n\n\tconst VolumeIcon = React.useMemo(() => {\n\t\tif (isMuted || volume === 0) {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z\"/>\n\t\t\t\t</svg>\n\t\t\t)\n\t\t} else if (volume < 0.5) {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z\"/>\n\t\t\t\t</svg>\n\t\t\t)\n\t\t} else {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z\"/>\n\t\t\t\t</svg>\n\t\t\t)\n\t\t}\n\t}, [isMuted, volume])\n\n\treturn (\n\t\t<div \n\t\t\tclassName={cn(\"relative flex items-center\", className)}\n\t\t\tonMouseEnter={() => setShowSlider(true)}\n\t\t\tonMouseLeave={() => setShowSlider(false)}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleToggleMute}\n\t\t\t\tclassName=\"flex h-10 w-10 items-center justify-center rounded-full text-white transition-colors hover:bg-white/10\"\n\t\t\t\taria-label={isMuted ? \"Unmute\" : \"Mute\"}\n\t\t\t>\n\t\t\t\t{VolumeIcon}\n\t\t\t</button>\n\n\t\t\t{/* Volume slider */}\n\t\t\t<div className={cn(\n\t\t\t\t\"absolute left-full ml-2 flex items-center transition-all duration-200\",\n\t\t\t\tshowSlider ? \"translate-x-0 opacity-100\" : \"-translate-x-2 pointer-events-none opacity-0\"\n\t\t\t)}>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"range\"\n\t\t\t\t\tmin=\"0\"\n\t\t\t\t\tmax=\"1\"\n\t\t\t\t\tstep=\"0.01\"\n\t\t\t\t\tvalue={isMuted ? 0 : volume}\n\t\t\t\t\tonChange={(e) => handleVolumeChange(parseFloat(e.target.value))}\n\t\t\t\t\tclassName=\"slider h-1 w-20 cursor-pointer appearance-none rounded-lg bg-white/20\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Enhanced backward skip button\nexport const EnhancedBackwardButton = function EnhancedBackwardButton({\n\tclassName,\n\tsize = \"md\",\n\tskipTime = 10\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tconst newTime = Math.max(0, currentTime - skipTime)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: newTime })\n\t}, [dispatch, currentTime, skipTime])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={`Backward ${skipTime} seconds`}\n\t\t\ttitle={`Backward ${skipTime}s`}\n\t\t>\n\t\t\t<div className={cn(\"flex items-center transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t<path d=\"M7 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zM15.5 7.5c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v9c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-9z\"/>\n\t\t\t\t\t<path d=\"M5.5 12l7-4.5v9l-7-4.5z\" opacity=\"0.8\"/>\n\t\t\t\t</svg>\n\t\t\t\t{skipTime && (\n\t\t\t\t\t<span className=\"-bottom-1 absolute font-bold text-[10px]\">\n\t\t\t\t\t\t{skipTime}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</button>\n\t)\n}\n\n// Enhanced forward skip button\nexport const EnhancedForwardButton = function EnhancedForwardButton({\n\tclassName,\n\tsize = \"md\",\n\tskipTime = 10\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\tconst duration = useMediaSelector(state => state.duration)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tconst newTime = Math.min(duration, currentTime + skipTime)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: newTime })\n\t}, [dispatch, currentTime, duration, skipTime])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={`Forward ${skipTime} seconds`}\n\t\t\ttitle={`Forward ${skipTime}s`}\n\t\t>\n\t\t\t<div className={cn(\"flex items-center transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t<path d=\"M17 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zM8.5 7.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v9c0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5v-9z\"/>\n\t\t\t\t\t<path d=\"M18.5 12l-7-4.5v9l7-4.5z\" opacity=\"0.8\"/>\n\t\t\t\t</svg>\n\t\t\t\t{skipTime && (\n\t\t\t\t\t<span className=\"-bottom-1 absolute font-bold text-[10px]\">\n\t\t\t\t\t\t{skipTime}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</button>\n\t)\n}\n\n// Enhanced time display\nexport const EnhancedTimeDisplay = function EnhancedTimeDisplay({\n\tvariant = \"current\",\n\tclassName\n}: {\n\tvariant?: \"current\" | \"duration\" | \"remaining\"\n\tclassName?: string\n}) {\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\tconst duration = useMediaSelector(state => state.duration)\n\n\tconst displayTime = React.useMemo(() => {\n\t\tswitch (variant) {\n\t\t\tcase \"current\":\n\t\t\t\treturn formatTime(currentTime)\n\t\t\tcase \"duration\":\n\t\t\t\treturn formatTime(duration)\n\t\t\tcase \"remaining\":\n\t\t\t\treturn `-${formatTime(duration - currentTime)}`\n\t\t\tdefault:\n\t\t\t\treturn formatTime(currentTime)\n\t\t}\n\t}, [variant, currentTime, duration])\n\n\treturn (\n\t\t<div className={cn(\"font-mono text-sm text-white tabular-nums\", className)}>\n\t\t\t{displayTime}\n\t\t</div>\n\t)\n}\n\n// Performance indicator component\nexport const PerformanceIndicator = function PerformanceIndicator({\n\tmetrics,\n\tclassName\n}: {\n\tmetrics?: {\n\t\tfps?: number\n\t\tbufferHealth?: number\n\t\tquality?: number\n\t\tbandwidth?: number\n\t}\n\tclassName?: string\n}) {\n\tif (!metrics || process.env.NODE_ENV !== 'development') {\n\t\treturn null\n\t}\n\n\tconst getPerformanceColor = (fps: number) => {\n\t\tif (fps >= 50) return 'text-green-400'\n\t\tif (fps >= 30) return 'text-yellow-400'\n\t\treturn 'text-red-400'\n\t}\n\n\tconst getBufferColor = (health: number) => {\n\t\tif (health >= 5) return 'text-green-400'\n\t\tif (health >= 2) return 'text-yellow-400'\n\t\treturn 'text-red-400'\n\t}\n\n\treturn (\n\t\t<div className={cn(\"flex items-center gap-3 font-mono text-xs\", className)}>\n\t\t\t{metrics.fps !== undefined && (\n\t\t\t\t<div className={cn(\"flex items-center gap-1\", getPerformanceColor(metrics.fps))}>\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.fps} FPS</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{metrics.bufferHealth !== undefined && (\n\t\t\t\t<div className={cn(\"flex items-center gap-1\", getBufferColor(metrics.bufferHealth))}>\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.bufferHealth.toFixed(1)}s</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{metrics.quality !== undefined && (\n\t\t\t\t<div className=\"flex items-center gap-1 text-blue-400\">\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.quality}p</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Enhanced control bar that combines all controls\nexport const EnhancedControlBar = function EnhancedControlBar({\n\tclassName,\n\tshowSkipButtons = true,\n\tshowVolumeControl = true,\n\tshowTimeDisplay = true,\n\tplayButtonSize = \"xl\",\n\tskipButtonSize = \"md\",\n\tskipTime = 10,\n\tshowPerformanceIndicators = process.env.NODE_ENV === 'development',\n\tperformanceMetrics\n}: {\n\tclassName?: string\n\tshowSkipButtons?: boolean\n\tshowVolumeControl?: boolean\n\tshowTimeDisplay?: boolean\n\tplayButtonSize?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n\tskipButtonSize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n\tshowPerformanceIndicators?: boolean\n\tperformanceMetrics?: {\n\t\tfps?: number\n\t\tbufferHealth?: number\n\t\tquality?: number\n\t\tbandwidth?: number\n\t}\n}) {\n\treturn (\n\t\t<div className={cn(\"flex flex-col gap-4 bg-gradient-to-t from-black/80 to-transparent p-4\", className)}>\n\t\t\t{/* Seek Bar */}\n\t\t\t<EnhancedSeekBar className=\"w-full\" />\n\n\t\t\t{/* Control Buttons */}\n\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t{/* Left side - Media controls */}\n\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t{showSkipButtons && (\n\t\t\t\t\t\t<EnhancedBackwardButton \n\t\t\t\t\t\t\tsize={skipButtonSize} \n\t\t\t\t\t\t\tskipTime={skipTime}\n\t\t\t\t\t\t\tclassName=\"shrink-0\" \n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<EnhancedPlayButton \n\t\t\t\t\t\tsize={playButtonSize}\n\t\t\t\t\t\tclassName=\"shrink-0\" \n\t\t\t\t\t/>\n\n\t\t\t\t\t{showSkipButtons && (\n\t\t\t\t\t\t<EnhancedForwardButton \n\t\t\t\t\t\t\tsize={skipButtonSize} \n\t\t\t\t\t\t\tskipTime={skipTime}\n\t\t\t\t\t\t\tclassName=\"shrink-0\" \n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{showVolumeControl && (\n\t\t\t\t\t\t<EnhancedVolumeControl className=\"shrink-0\" />\n\t\t\t\t\t)}\n\n\t\t\t\t\t{showTimeDisplay && (\n\t\t\t\t\t\t<div className=\"flex items-center gap-1 font-mono text-sm\">\n\t\t\t\t\t\t\t<EnhancedTimeDisplay variant=\"current\" />\n\t\t\t\t\t\t\t<span className=\"text-white/60\">/</span>\n\t\t\t\t\t\t\t<EnhancedTimeDisplay variant=\"duration\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Right side - Performance indicators and additional controls */}\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t{showPerformanceIndicators && (\n\t\t\t\t\t\t<PerformanceIndicator\n\t\t\t\t\t\t\tmetrics={performanceMetrics}\n\t\t\t\t\t\t\tclassName=\"text-white/80\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Future: Settings, Fullscreen, etc. */}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","/**\n * Debug Panel Component for Performance Monitoring\n * Development-only component for displaying performance metrics\n */\n\nimport React, { useMemo } from 'react';\nimport { cn } from '../../lib/utils';\n\ninterface PerformanceMetrics {\n\tfps: number;\n\tmemoryUsage: number;\n\tbufferHealth: number;\n\tnetworkBandwidth: number;\n\tdroppedFrames: number;\n\tdecodedFrames: number;\n\tpresentationTime: number;\n}\n\ninterface PreloadingStats {\n\tpreloadedItems: number;\n\tengagementScore: number;\n\tqueueLength: number;\n\thitRate: number;\n\ttotalSaved: number;\n}\n\ninterface DebugPanelProps {\n\t/** Performance metrics to display */\n\tperformanceMetrics?: Partial<PerformanceMetrics>;\n\t/** Preloading statistics */\n\tpreloadingStats?: PreloadingStats;\n\t/** Current playback state */\n\tplaybackState?: {\n\t\tcurrentTime: number;\n\t\tduration: number;\n\t\tvolume: number;\n\t\tisPlaying: boolean;\n\t\tquality: number;\n\t\tisBuffering: boolean;\n\t\terror?: string;\n\t};\n\t/** HLS-specific metrics */\n\thlsMetrics?: {\n\t\tcurrentLevel: number;\n\t\tavailableLevels: number;\n\t\tbandwidthEstimate: number;\n\t\tdroppedFrames: number;\n\t};\n\t/** Plugin information */\n\tpluginInfo?: {\n\t\tloadedPlugins: string[];\n\t\tactivePlugins: string[];\n\t\tpluginCount: number;\n\t};\n\t/** Additional debug information */\n\tdebugInfo?: Record<string, any>;\n\t/** Custom className */\n\tclassName?: string;\n\t/** Panel position */\n\tposition?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\t/** Whether the panel is collapsed by default */\n\tdefaultCollapsed?: boolean;\n\t/** Custom title */\n\ttitle?: string;\n}\n\n/**\n * Debug Panel Component\n */\nexport const DebugPanel: React.FC<DebugPanelProps> = ({\n\tperformanceMetrics = {},\n\tpreloadingStats = {} as PreloadingStats,\n\tplaybackState = {} as any,\n\thlsMetrics = {},\n\tpluginInfo = {},\n\tdebugInfo = {},\n\tclassName,\n\tposition = 'top-right',\n\tdefaultCollapsed = false,\n\ttitle = 'BaroiPlayer Debug Panel'\n}) => {\n\tconst [isCollapsed, setIsCollapsed] = React.useState(defaultCollapsed);\n\tconst [activeTab, setActiveTab] = React.useState<'performance' | 'hls' | 'plugins' | 'debug'>('performance');\n\n\t// Position classes\n\tconst positionClasses = useMemo(() => {\n\t\tswitch (position) {\n\t\t\tcase 'top-left':\n\t\t\t\treturn 'top-4 left-4';\n\t\t\tcase 'top-right':\n\t\t\t\treturn 'top-4 right-4';\n\t\t\tcase 'bottom-left':\n\t\t\t\treturn 'bottom-4 left-4';\n\t\t\tcase 'bottom-right':\n\t\t\t\treturn 'bottom-4 right-4';\n\t\t\tdefault:\n\t\t\t\treturn 'top-4 right-4';\n\t\t}\n\t}, [position]);\n\n\t// Format bytes\n\tconst formatBytes = (bytes: number): string => {\n\t\tif (bytes === 0) return '0 B';\n\t\tconst k = 1024;\n\t\tconst sizes = ['B', 'KB', 'MB', 'GB'];\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\t\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n\t};\n\n\t// Format time\n\tconst formatTime = (seconds: number): string => {\n\t\tconst mins = Math.floor(seconds / 60);\n\t\tconst secs = Math.floor(seconds % 60);\n\t\treturn `${mins}:${secs.toString().padStart(2, '0')}`;\n\t};\n\n\t// Render performance metrics\n\tconst renderPerformanceMetrics = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">FPS:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.fps || 0}</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Memory:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{((performanceMetrics.memoryUsage || 0) / 1024 / 1024).toFixed(1)} MB</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Buffer:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{(performanceMetrics.bufferHealth || 0).toFixed(2)}s</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Bandwidth:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{formatBytes(performanceMetrics.networkBandwidth || 0)}/s</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Dropped:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.droppedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-cyan-400\">Decoded:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.decodedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render playback state\n\tconst renderPlaybackState = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Status:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{playbackState.isPlaying ? (\n\t\t\t\t\t\t\t<span className=\"text-green-300\">Playing</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"text-red-300\">Paused</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Time:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{formatTime(playbackState.currentTime || 0)} / {formatTime(playbackState.duration || 0)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Volume:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{Math.round((playbackState.volume || 0) * 100)}%</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Quality:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{playbackState.quality || 0}p</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Buffering:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{playbackState.isBuffering ? (\n\t\t\t\t\t\t\t<span className=\"text-yellow-300\">Yes</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"text-green-300\">No</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t{playbackState.error && (\n\t\t\t\t\t<div className=\"col-span-2\">\n\t\t\t\t\t\t<span className=\"text-red-400\">Error:</span>\n\t\t\t\t\t\t<span className=\"ml-2 break-all font-mono text-red-300 text-xs\">\n\t\t\t\t\t\t\t{playbackState.error}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render preloading stats\n\tconst renderPreloadingStats = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Preloaded:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{preloadingStats.preloadedItems || 0} items</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Engagement:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{(preloadingStats.engagementScore || 0).toFixed(1)}%</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Queue:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{preloadingStats.queueLength || 0} items</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Hit Rate:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{(preloadingStats.hitRate || 0).toFixed(1)}%</span>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"col-span-2\">\n\t\t\t\t\t<span className=\"text-cyan-400\">Saved:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{formatBytes(preloadingStats.totalSaved || 0)}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render HLS metrics\n\tconst renderHLSMetrics = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Level:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{hlsMetrics.currentLevel || 0} / {hlsMetrics.availableLevels || 0}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Bandwidth:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{formatBytes(hlsMetrics.bandwidthEstimate || 0)}/s</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Dropped:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{hlsMetrics.droppedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render plugin info\n\tconst renderPluginInfo = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Total:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{pluginInfo.pluginCount || 0} plugins</span>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"mt-2\">\n\t\t\t\t\t<span className=\"text-blue-400\">Active:</span>\n\t\t\t\t\t<div className=\"ml-2 space-y-1 font-mono text-xs\">\n\t\t\t\t\t\t{pluginInfo.activePlugins?.map((plugin, index) => (\n\t\t\t\t\t\t\t<div key={index} className=\"text-green-300\">• {plugin}</div>\n\t\t\t\t\t\t)) || <div className=\"text-gray-400\">None</div>}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{pluginInfo.loadedPlugins && pluginInfo.loadedPlugins.length > pluginInfo.activePlugins?.length && (\n\t\t\t\t\t<div className=\"mt-2\">\n\t\t\t\t\t\t<span className=\"text-yellow-400\">Loaded (inactive):</span>\n\t\t\t\t\t\t<div className=\"ml-2 space-y-1 font-mono text-xs\">\n\t\t\t\t\t\t\t{pluginInfo.loadedPlugins\n\t\t\t\t\t\t\t\t.filter(plugin => !pluginInfo.activePlugins?.includes(plugin))\n\t\t\t\t\t\t\t\t.map((plugin, index) => (\n\t\t\t\t\t\t\t\t\t<div key={index} className=\"text-yellow-300\">• {plugin}</div>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render debug info\n\tconst renderDebugInfo = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"space-y-1 font-mono text-xs\">\n\t\t\t\t{Object.entries(debugInfo).map(([key, value]) => (\n\t\t\t\t\t<div key={key}>\n\t\t\t\t\t\t<span className=\"text-yellow-400\">{key}:</span>\n\t\t\t\t\t\t<span className=\"ml-2 text-gray-300\">\n\t\t\t\t\t\t\t{typeof value === 'object' ? JSON.stringify(value, null, 2) : String(value)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render tabs\n\tconst renderTabs = () => (\n\t\t<div className=\"flex space-x-1 border-gray-600 border-b\">\n\t\t\t{[\n\t\t\t\t{ id: 'performance', label: 'Performance' },\n\t\t\t\t{ id: 'hls', label: 'HLS' },\n\t\t\t\t{ id: 'plugins', label: 'Plugins' },\n\t\t\t\t{ id: 'debug', label: 'Debug' }\n\t\t\t].map(tab => (\n\t\t\t\t<button\n\t\t\t\t\tkey={tab.id}\n\t\t\t\t\tonClick={() => setActiveTab(tab.id as any)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"px-2 py-1 font-medium text-xs transition-colors\",\n\t\t\t\t\t\tactiveTab === tab.id\n\t\t\t\t\t\t\t? \"border-blue-400 border-b text-blue-400\"\n\t\t\t\t\t\t\t: 'text-gray-400 hover:text-white'\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{tab.label}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</div>\n\t);\n\n\t// Render active tab content\n\tconst renderTabContent = () => {\n\t\tswitch (activeTab) {\n\t\t\tcase 'performance':\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"space-y-3\">\n\t\t\t\t\t\t{renderPerformanceMetrics()}\n\t\t\t\t\t\t<hr className=\"border-gray-600\" />\n\t\t\t\t\t\t{renderPlaybackState()}\n\t\t\t\t\t\t<hr className=\"border-gray-600\" />\n\t\t\t\t\t\t{renderPreloadingStats()}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\tcase 'hls':\n\t\t\t\treturn renderHLSMetrics();\n\t\t\tcase 'plugins':\n\t\t\t\treturn renderPluginInfo();\n\t\t\tcase 'debug':\n\t\t\t\treturn renderDebugInfo();\n\t\t\tdefault:\n\t\t\t\treturn renderPerformanceMetrics();\n\t\t}\n\t};\n\n\t// Only render in development\n\tif (process.env.NODE_ENV !== 'development') {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"fixed z-50 min-w-80 max-w-96 rounded-lg border border-gray-700 bg-black/90 p-3 font-mono text-white text-xs backdrop-blur-sm\",\n\t\t\t\tpositionClasses,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{/* Header */}\n\t\t\t<div className=\"mb-3 flex items-center justify-between\">\n\t\t\t\t<h3 className=\"font-bold text-blue-400 text-sm\">{title}</h3>\n\t\t\t\t<div className=\"flex items-center space-x-2\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsCollapsed(!isCollapsed)}\n\t\t\t\t\t\tclassName=\"text-gray-400 transition-colors hover:text-white\"\n\t\t\t\t\t\taria-label={isCollapsed ? 'Expand' : 'Collapse'}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isCollapsed ? (\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n\t\t\t\t\t\t\t\t<path d=\"M3 4.5L6 7.5L9 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n\t\t\t\t\t\t\t\t<path d=\"M3 7.5L6 4.5L9 7.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Collapsed content */}\n\t\t\t{isCollapsed ? (\n\t\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span className=\"text-green-400\">FPS:</span>\n\t\t\t\t\t\t<span className=\"ml-1 font-mono\">{performanceMetrics.fps || 0}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span className=\"text-blue-400\">Memory:</span>\n\t\t\t\t\t\t<span className=\"ml-1 font-mono\">{((performanceMetrics.memoryUsage || 0) / 1024 / 1024).toFixed(1)}MB</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{/* Tabs */}\n\t\t\t\t\t{renderTabs()}\n\n\t\t\t\t\t{/* Tab Content */}\n\t\t\t\t\t<div className=\"mt-3 max-h-64 overflow-y-auto\">\n\t\t\t\t\t\t{renderTabContent()}\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\n/**\n * Performance Debug Panel - simplified version focused on performance metrics\n */\nexport const PerformanceDebugPanel: React.FC<Omit<DebugPanelProps, 'position' | 'defaultCollapsed' | 'title'>> = (props) => {\n\treturn (\n\t\t<DebugPanel\n\t\t\t{...props}\n\t\t\tposition=\"top-right\"\n\t\t\tdefaultCollapsed={false}\n\t\t\ttitle=\"Performance Monitor\"\n\t\t/>\n\t);\n};\n\nexport default DebugPanel;"],"names":["useAutoHideControls","autoHide","delay","showOnHover","showOnTouch","showControls","setShowControls","React","isHovering","setIsHovering","isTouching","setIsTouching","timeoutRef","resetTimeout","showControlsTemporarily","handleMouseEnter","handleMouseLeave","handleTouchStart","handleTouchEnd","useTouchGestures","enabled","dispatch","useMediaDispatch","isPlaying","useMediaSelector","state","currentTime","duration","volume","touchStart","setTouchStart","isDoubleTap","setIsDoubleTap","e","touch","now","MediaActionTypes","handleTouchMove","deltaX","deltaY","seekAmount","newTime","volumeChange","newVolume","EnhancedMediaPlayer","children","className","autoHideDelay","showControlsOnHover","showControlsOnTouch","enableKeyboardControls","enableTouchGestures","onPlay","onPause","onTimeUpdate","onVolumeChange","onFullscreenChange","context","useMediaContext","isFullscreen","error","handleControlsTouch","handleControlsTouchEnd","handleGestureStart","handleGestureMove","handleGestureEnd","handleClick","handleKeyDown","jsx","cn","QualitySelector","qualities","currentQuality","onQualityChange","isOpen","setIsOpen","currentQualityLabel","q","jsxs","quality","SubtitleSelector","subtitles","currentSubtitle","onSubtitleChange","currentSubtitleLabel","s","subtitle","PlaybackSpeedSelector","playbackRate","speeds","handleSpeedChange","speed","ChaptersPanel","chapters","onChapterSelect","currentChapter","chapter","formatTime","PictureInPictureButton","isPictureInPicture","handleTogglePiP","EnhancedPlayButton","size","isLoading","sizeClasses","iconSizes","EnhancedSeekBar","buffered","previewTime","isDragging","setIsDragging","hoverTime","setHoverTime","progressRef","progress","previewProgress","bufferedRanges","ranges","i","getTimeFromPosition","clientX","rect","handleMouseMove","time","handleMouseDown","handleMouseUp","range","index","EnhancedVolumeControl","isMuted","showSlider","setShowSlider","handleToggleMute","handleVolumeChange","VolumeIcon","EnhancedBackwardButton","skipTime","EnhancedForwardButton","EnhancedTimeDisplay","variant","displayTime","PerformanceIndicator","metrics","getPerformanceColor","fps","getBufferColor","health","EnhancedControlBar","showSkipButtons","showVolumeControl","showTimeDisplay","playButtonSize","skipButtonSize","showPerformanceIndicators","performanceMetrics","DebugPanel","preloadingStats","playbackState","hlsMetrics","pluginInfo","debugInfo","position","defaultCollapsed","title","isCollapsed","setIsCollapsed","activeTab","setActiveTab","positionClasses","useMemo","formatBytes","bytes","k","sizes","seconds","mins","secs","renderPerformanceMetrics","renderPlaybackState","renderPreloadingStats","renderHLSMetrics","renderPluginInfo","plugin","renderDebugInfo","key","value","renderTabs","tab","renderTabContent","Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"enhanced-components-CXnYiOt6.cjs","sources":["../src/components/enhanced/media-player-enhanced.tsx","../src/components/enhanced/advanced-features.tsx","../src/components/enhanced/enhanced-controls.tsx","../src/components/enhanced/debug-panel.tsx"],"sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport { useMediaContext, useMediaSelector, useMediaDispatch, MediaActionTypes } from \"../../context/media-context\"\nimport { cn } from \"../../lib/utils\"\n\n// Enhanced media player with better performance and mobile support\nexport interface EnhancedMediaPlayerProps {\n\tchildren: React.ReactNode\n\tclassName?: string\n\tautoHide?: boolean\n\tautoHideDelay?: number\n\tshowControlsOnHover?: boolean\n\tshowControlsOnTouch?: boolean\n\tenableKeyboardControls?: boolean\n\tenableTouchGestures?: boolean\n\tonPlay?: () => void\n\tonPause?: () => void\n\tonTimeUpdate?: (time: number) => void\n\tonVolumeChange?: (volume: number) => void\n\tonFullscreenChange?: (isFullscreen: boolean) => void\n}\n\n// Custom hook for auto-hide controls\nfunction useAutoHideControls(\n\tautoHide: boolean,\n\tdelay: number,\n\tshowOnHover: boolean,\n\tshowOnTouch: boolean\n) {\n\tconst [showControls, setShowControls] = React.useState(true)\n\tconst [isHovering, setIsHovering] = React.useState(false)\n\tconst [isTouching, setIsTouching] = React.useState(false)\n const timeoutRef = React.useRef<NodeJS.Timeout | null>(null)\n\n\tconst resetTimeout = React.useCallback(() => {\n\t\tif (timeoutRef.current) {\n\t\t\tclearTimeout(timeoutRef.current)\n\t\t}\n\t\tif (autoHide) {\n\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\tif (!isHovering && !isTouching) {\n\t\t\t\t\tsetShowControls(false)\n\t\t\t\t}\n\t\t\t}, delay)\n\t\t}\n\t}, [autoHide, delay, isHovering, isTouching])\n\n\tconst showControlsTemporarily = React.useCallback(() => {\n\t\tsetShowControls(true)\n\t\tresetTimeout()\n\t}, [resetTimeout])\n\n\tReact.useEffect(() => {\n\t\tif (autoHide) {\n\t\t\tresetTimeout()\n\t\t} else {\n\t\t\tsetShowControls(true)\n\t\t}\n\t\treturn () => {\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current)\n\t\t\t}\n\t\t}\n\t}, [autoHide, resetTimeout])\n\n\tconst handleMouseEnter = React.useCallback(() => {\n\t\tif (showOnHover) {\n\t\t\tsetIsHovering(true)\n\t\t\tsetShowControls(true)\n\t\t}\n\t}, [showOnHover])\n\n\tconst handleMouseLeave = React.useCallback(() => {\n\t\tif (showOnHover) {\n\t\t\tsetIsHovering(false)\n\t\t\tresetTimeout()\n\t\t}\n\t}, [showOnHover, resetTimeout])\n\n\tconst handleTouchStart = React.useCallback(() => {\n\t\tif (showOnTouch) {\n\t\t\tsetIsTouching(true)\n\t\t\tshowControlsTemporarily()\n\t\t}\n\t}, [showOnTouch, showControlsTemporarily])\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\tif (showOnTouch) {\n\t\t\tsetIsTouching(false)\n\t\t\tresetTimeout()\n\t\t}\n\t}, [showOnTouch, resetTimeout])\n\n\treturn {\n\t\tshowControls,\n\t\tshowControlsTemporarily,\n\t\thandleMouseEnter,\n\t\thandleMouseLeave,\n\t\thandleTouchStart,\n\t\thandleTouchEnd\n\t}\n}\n\n// Custom hook for touch gestures\nfunction useTouchGestures(enabled: boolean) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPlaying = useMediaSelector(state => state.isPlaying)\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\tconst duration = useMediaSelector(state => state.duration)\n\tconst volume = useMediaSelector(state => state.volume)\n\n\tconst [touchStart, setTouchStart] = React.useState<{ x: number; y: number; time: number } | null>(null)\n\tconst [isDoubleTap, setIsDoubleTap] = React.useState(false)\n\n\tconst handleTouchStart = React.useCallback((e: React.TouchEvent) => {\n\t\tif (!enabled) return\n\t\t\n\t\tconst touch = e.touches[0]\n\t\tif (!touch) return\n\t\t\n\t\tconst now = Date.now()\n\t\t\n\t\tif (touchStart && now - touchStart.time < 300) {\n\t\t\tsetIsDoubleTap(true)\n\t\t\t// Double tap to play/pause\n\t\t\tdispatch({\n\t\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t\t})\n\t\t} else {\n\t\t\tsetTouchStart({\n\t\t\t\tx: touch.clientX,\n\t\t\t\ty: touch.clientY,\n\t\t\t\ttime: now\n\t\t\t})\n\t\t\tsetIsDoubleTap(false)\n\t\t}\n\t}, [enabled, touchStart, isPlaying, dispatch])\n\n\tconst handleTouchMove = React.useCallback((e: React.TouchEvent) => {\n\t\tif (!enabled || !touchStart || isDoubleTap) return\n\n\t\tconst touch = e.touches[0]\n\t\tif (!touch) return\n\t\t\n\t\tconst deltaX = touch.clientX - touchStart.x\n\t\tconst deltaY = touch.clientY - touchStart.y\n\n\t\t// Horizontal swipe for seeking\n\t\tif (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > 50) {\n\t\t\tconst seekAmount = (deltaX / window.innerWidth) * 30 // 30 seconds max\n\t\t\tconst newTime = Math.max(0, Math.min(duration, currentTime + seekAmount))\n\t\t\tdispatch({\n\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\tdetail: newTime\n\t\t\t})\n\t\t}\n\n\t\t// Vertical swipe for volume (right side of screen)\n\t\tif (Math.abs(deltaY) > Math.abs(deltaX) && Math.abs(deltaY) > 50 && touchStart.x > window.innerWidth / 2) {\n\t\t\tconst volumeChange = -(deltaY / window.innerHeight) * 1 // Full range\n\t\t\tconst newVolume = Math.max(0, Math.min(1, volume + volumeChange))\n\t\t\tdispatch({\n\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\tdetail: newVolume\n\t\t\t})\n\t\t}\n\t}, [enabled, touchStart, isDoubleTap, duration, currentTime, volume, dispatch])\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\tif (!enabled) return\n\t\t// Reset touch state after a delay to allow for double tap detection\n\t\tsetTimeout(() => {\n\t\t\tsetTouchStart(null)\n\t\t\tsetIsDoubleTap(false)\n\t\t}, 300)\n\t}, [enabled])\n\n\treturn {\n\t\thandleTouchStart,\n\t\thandleTouchMove,\n\t\thandleTouchEnd\n\t}\n}\n\nexport const EnhancedMediaPlayer = function EnhancedMediaPlayer({\n\tchildren,\n\tclassName,\n\tautoHide = true,\n\tautoHideDelay = 3000,\n\tshowControlsOnHover = true,\n\tshowControlsOnTouch = true,\n\tenableKeyboardControls = true,\n\tenableTouchGestures = true,\n\tonPlay,\n\tonPause,\n\tonTimeUpdate,\n\tonVolumeChange,\n\tonFullscreenChange\n}: EnhancedMediaPlayerProps) {\n\tconst context = useMediaContext()\n\tconst dispatch = useMediaDispatch()\n\t\n\t// State selectors with memoization\n\tconst isPlaying = useMediaSelector(React.useCallback(state => state.isPlaying, []))\n\tconst isFullscreen = useMediaSelector(React.useCallback(state => state.isFullscreen, []))\n\tconst currentTime = useMediaSelector(React.useCallback(state => state.currentTime, []))\n\tconst volume = useMediaSelector(React.useCallback(state => state.volume, []))\n\tconst error = useMediaSelector(React.useCallback(state => state.error, []))\n\n\t// Custom hooks\n\tconst {\n\t\tshowControls,\n\t\tshowControlsTemporarily,\n\t\thandleMouseEnter,\n\t\thandleMouseLeave,\n\t\thandleTouchStart: handleControlsTouch,\n\t\thandleTouchEnd: handleControlsTouchEnd\n\t} = useAutoHideControls(autoHide, autoHideDelay, showControlsOnHover, showControlsOnTouch)\n\n\tconst {\n\t\thandleTouchStart: handleGestureStart,\n\t\thandleTouchMove: handleGestureMove,\n\t\thandleTouchEnd: handleGestureEnd\n\t} = useTouchGestures(enableTouchGestures)\n\n\t// Combine touch handlers\n\tconst handleTouchStart = React.useCallback((e: React.TouchEvent) => {\n\t\thandleControlsTouch()\n\t\thandleGestureStart(e)\n\t}, [handleControlsTouch, handleGestureStart])\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\thandleControlsTouchEnd()\n\t\thandleGestureEnd()\n\t}, [handleControlsTouchEnd, handleGestureEnd])\n\n\t// Event handlers with memoization\n\tconst handleClick = React.useCallback(() => {\n\t\tshowControlsTemporarily()\n\t}, [showControlsTemporarily])\n\n\t// Keyboard controls\n\tReact.useEffect(() => {\n\t\tif (!enableKeyboardControls) return\n\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tswitch (e.code) {\n\t\t\t\tcase 'Space':\n\t\t\t\tcase 'KeyK':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'KeyF':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: isFullscreen ? MediaActionTypes.EXIT_FULLSCREEN : MediaActionTypes.ENTER_FULLSCREEN\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'KeyM':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({ type: MediaActionTypes.TOGGLE_MUTE })\n\t\t\t\t\tbreak\n\t\t\t\tcase 'ArrowLeft':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: Math.max(0, currentTime - 10)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'ArrowRight':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: currentTime + 10\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'ArrowUp':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\t\tdetail: Math.min(1, volume + 0.1)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase 'ArrowDown':\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\t\tdetail: Math.max(0, volume - 0.1)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener('keydown', handleKeyDown)\n\t\treturn () => document.removeEventListener('keydown', handleKeyDown)\n\t}, [enableKeyboardControls, dispatch, isPlaying, isFullscreen, currentTime, volume])\n\n\t// Event callbacks\n\tReact.useEffect(() => {\n\t\tif (isPlaying) onPlay?.()\n\t\telse onPause?.()\n\t}, [isPlaying, onPlay, onPause])\n\n\tReact.useEffect(() => {\n\t\tonTimeUpdate?.(currentTime)\n\t}, [currentTime, onTimeUpdate])\n\n\tReact.useEffect(() => {\n\t\tonVolumeChange?.(volume)\n\t}, [volume, onVolumeChange])\n\n\tReact.useEffect(() => {\n\t\tonFullscreenChange?.(isFullscreen)\n\t}, [isFullscreen, onFullscreenChange])\n\n\treturn (\n\t\t<div\n\t\t\tref={context.rootRef}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative isolate flex flex-col overflow-hidden rounded-lg bg-black outline-none\",\n\t\t\t\t\"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n\t\t\t\t\"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n\t\t\t\tisFullscreen && \"fixed inset-0 z-50 rounded-none\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tdata-state={isFullscreen ? \"fullscreen\" : \"inline\"}\n\t\t\tdata-disabled={error ? \"\" : undefined}\n\t\t\tdata-controls-visible={showControls ? \"\" : undefined}\n\t\t\ttabIndex={0}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\tonTouchStart={handleTouchStart}\n\t\t\tonTouchMove={handleGestureMove}\n\t\t\tonTouchEnd={handleTouchEnd}\n\t\t\tonClick={handleClick}\n\t\t>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\nEnhancedMediaPlayer.displayName = \"EnhancedMediaPlayer\"\n","\"use client\"\n\nimport React from \"react\"\nimport { useMediaSelector, useMediaDispatch, MediaActionTypes } from \"../../context/media-context\"\nimport { cn } from \"../../lib/utils\"\nimport { formatTime } from \"../../lib/format-time\"\n\n// Types for advanced features\nexport interface Chapter {\n\tid: string\n\ttitle: string\n\tstartTime: number\n\tendTime: number\n\tthumbnail?: string\n}\n\nexport interface QualityLevel {\n\tid: string\n\tlabel: string\n\twidth: number\n\theight: number\n\tbitrate?: number\n}\n\nexport interface Subtitle {\n\tid: string\n\tlabel: string\n\tlanguage: string\n\tsrc: string\n\tdefault?: boolean\n}\n\n// Quality selector component\nexport const QualitySelector = function QualitySelector({\n\tqualities,\n\tcurrentQuality,\n\tonQualityChange,\n\tclassName\n}: {\n\tqualities: QualityLevel[]\n\tcurrentQuality: string\n\tonQualityChange: (qualityId: string) => void\n\tclassName?: string\n}) {\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst currentQualityLabel = React.useMemo(() => {\n\t\treturn qualities.find(q => q.id === currentQuality)?.label || \"Auto\"\n\t}, [qualities, currentQuality])\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select quality\"\n\t\t\t>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\"/>\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{currentQualityLabel}</span>\n\t\t\t\t<svg \n\t\t\t\t\tviewBox=\"0 0 24 24\" \n\t\t\t\t\tfill=\"currentColor\" \n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\"/>\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-32 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t{qualities.map((quality) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={quality.id}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonQualityChange(quality.id)\n\t\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tquality.id === currentQuality && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{quality.label}\n\t\t\t\t\t\t\t{quality.bitrate && (\n\t\t\t\t\t\t\t\t<span className=\"ml-2 text-white/60 text-xs\">\n\t\t\t\t\t\t\t\t\t({Math.round(quality.bitrate / 1000)}k)\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Subtitle selector component\nexport const SubtitleSelector = function SubtitleSelector({\n\tsubtitles,\n\tcurrentSubtitle,\n\tonSubtitleChange,\n\tclassName\n}: {\n\tsubtitles: Subtitle[]\n\tcurrentSubtitle: string | null\n\tonSubtitleChange: (subtitleId: string | null) => void\n\tclassName?: string\n}) {\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst currentSubtitleLabel = React.useMemo(() => {\n\t\tif (!currentSubtitle) return \"Off\"\n\t\treturn subtitles.find(s => s.id === currentSubtitle)?.label || \"Off\"\n\t}, [subtitles, currentSubtitle])\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select subtitles\"\n\t\t\t>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM4 12h4v2H4v-2zm10 6H4v-2h10v2zm6 0h-4v-2h4v2zm0-4H10v-2h10v2z\"/>\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{currentSubtitleLabel}</span>\n\t\t\t\t<svg \n\t\t\t\t\tviewBox=\"0 0 24 24\" \n\t\t\t\t\tfill=\"currentColor\" \n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\"/>\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-32 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tonSubtitleChange(null)\n\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t!currentSubtitle && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\tOff\n\t\t\t\t\t</button>\n\t\t\t\t\t{subtitles.map((subtitle) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={subtitle.id}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonSubtitleChange(subtitle.id)\n\t\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tsubtitle.id === currentSubtitle && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{subtitle.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Playback speed selector\nexport const PlaybackSpeedSelector = function PlaybackSpeedSelector({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst playbackRate = useMediaSelector(state => state.playbackRate)\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst speeds = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]\n\n\tconst handleSpeedChange = React.useCallback((speed: number) => {\n\t\tdispatch({ type: MediaActionTypes.SET_PLAYBACK_RATE, detail: speed })\n\t\tsetIsOpen(false)\n\t}, [dispatch])\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select playback speed\"\n\t\t\t>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M13,8A4,4 0 0,0 9,12A4,4 0 0,0 13,16A4,4 0 0,0 17,12A4,4 0 0,0 13,8M13,14A2,2 0 0,1 11,12A2,2 0 0,1 13,10A2,2 0 0,1 15,12A2,2 0 0,1 13,14M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4Z\"/>\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{playbackRate}x</span>\n\t\t\t\t<svg \n\t\t\t\t\tviewBox=\"0 0 24 24\" \n\t\t\t\t\tfill=\"currentColor\" \n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}\n\t\t\t\t>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\"/>\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-20 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t{speeds.map((speed) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={speed}\n\t\t\t\t\t\t\tonClick={() => handleSpeedChange(speed)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tspeed === playbackRate && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{speed}x\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Chapters component\nexport const ChaptersPanel = function ChaptersPanel({\n\tchapters,\n\tonChapterSelect,\n\tclassName\n}: {\n\tchapters: Chapter[]\n\tonChapterSelect: (chapter: Chapter) => void\n\tclassName?: string\n}) {\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\n\tconst currentChapter = React.useMemo(() => {\n\t\treturn chapters.find(chapter => \n\t\t\tcurrentTime >= chapter.startTime && currentTime < chapter.endTime\n\t\t)\n\t}, [chapters, currentTime])\n\n\treturn (\n\t\t<div className={cn(\"rounded-lg border border-white/20 bg-black/90 p-4 backdrop-blur-sm\", className)}>\n\t\t\t<h3 className=\"mb-3 font-semibold text-white\">Chapters</h3>\n\t\t\t<div className=\"max-h-64 space-y-2 overflow-y-auto\">\n\t\t\t\t{chapters.map((chapter) => (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={chapter.id}\n\t\t\t\t\t\tonClick={() => onChapterSelect(chapter)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex w-full items-center gap-3 rounded-lg p-3 text-left transition-colors\",\n\t\t\t\t\t\t\t\"hover:bg-white/10\",\n\t\t\t\t\t\t\tchapter.id === currentChapter?.id && \"border border-primary/30 bg-primary/20\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{chapter.thumbnail && (\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tsrc={chapter.thumbnail}\n\t\t\t\t\t\t\t\talt={chapter.title}\n\t\t\t\t\t\t\t\tclassName=\"h-9 w-16 rounded object-cover\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t<div className=\"truncate font-medium text-white\">{chapter.title}</div>\n\t\t\t\t\t\t\t<div className=\"text-sm text-white/60\">\n\t\t\t\t\t\t\t\t{formatTime(chapter.startTime)} - {formatTime(chapter.endTime)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</button>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Picture-in-Picture button\nexport const PictureInPictureButton = function PictureInPictureButton({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPictureInPicture = useMediaSelector(state => state.isPictureInPicture)\n\n\tconst handleTogglePiP = React.useCallback(() => {\n\t\tdispatch({\n\t\t\ttype: isPictureInPicture ? MediaActionTypes.EXIT_PIP : MediaActionTypes.ENTER_PIP\n\t\t})\n\t}, [dispatch, isPictureInPicture])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleTogglePiP}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex h-10 w-10 items-center justify-center rounded-full text-white\",\n\t\t\t\t\"transition-colors hover:bg-white/10\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={isPictureInPicture ? \"Exit Picture-in-Picture\" : \"Enter Picture-in-Picture\"}\n\t\t>\n\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t<path d=\"M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h18v14z\"/>\n\t\t\t</svg>\n\t\t</button>\n\t)\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { useMediaSelector, useMediaDispatch, MediaActionTypes } from \"../../context/media-context\"\nimport { cn } from \"../../lib/utils\"\nimport { formatTime } from \"../../lib/format-time\"\n\n// Enhanced play button with better animations\nexport const EnhancedPlayButton = function EnhancedPlayButton({\n\tclassName,\n\tsize = \"md\"\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPlaying = useMediaSelector(state => state.isPlaying)\n\tconst isLoading = useMediaSelector(state => state.isLoading)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\",\n\t\txl: \"h-16 w-16\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\",\n\t\txl: \"h-8 w-8\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tdispatch({\n\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t})\n\t}, [dispatch, isPlaying])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tdisabled={isLoading}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={isPlaying ? \"Pause\" : \"Play\"}\n\t\t>\n\t\t\t{isLoading ? (\n\t\t\t\t<div className={cn(\"animate-spin rounded-full border-2 border-white/30 border-t-white\", iconSizes[size])} />\n\t\t\t) : (\n\t\t\t\t<div className={cn(\"transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t\t{isPlaying ? (\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t\t\t<path d=\"M6 4h4v16H6V4zm8 0h4v16h-4V4z\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"ml-0.5 h-full w-full\">\n\t\t\t\t\t\t\t<path d=\"M8 5v14l11-7z\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</button>\n\t)\n}\n\n// Enhanced seek bar with preview and better touch support\nexport const EnhancedSeekBar = function EnhancedSeekBar({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\tconst duration = useMediaSelector(state => state.duration)\n\tconst buffered = useMediaSelector(state => state.buffered)\n\tconst previewTime = useMediaSelector(state => state.previewTime)\n\n\tconst [isDragging, setIsDragging] = React.useState(false)\n\tconst [hoverTime, setHoverTime] = React.useState<number | null>(null)\n\tconst progressRef = React.useRef<HTMLDivElement>(null)\n\n\tconst progress = duration > 0 ? (currentTime / duration) * 100 : 0\n\tconst previewProgress = duration > 0 && previewTime !== null ? (previewTime / duration) * 100 : null\n\n\t// Calculate buffered ranges\n\tconst bufferedRanges = React.useMemo(() => {\n\t\tif (!buffered || duration === 0) return []\n\t\tconst ranges = []\n\t\tfor (let i = 0; i < buffered.length; i++) {\n\t\t\tranges.push({\n\t\t\t\tstart: (buffered.start(i) / duration) * 100,\n\t\t\t\tend: (buffered.end(i) / duration) * 100\n\t\t\t})\n\t\t}\n\t\treturn ranges\n\t}, [buffered, duration])\n\n\tconst getTimeFromPosition = React.useCallback((clientX: number) => {\n\t\tif (!progressRef.current) return 0\n\t\tconst rect = progressRef.current.getBoundingClientRect()\n\t\tconst position = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n\t\treturn position * duration\n\t}, [duration])\n\n\tconst handleMouseMove = React.useCallback((e: React.MouseEvent) => {\n\t\tif (!isDragging) {\n\t\t\tconst time = getTimeFromPosition(e.clientX)\n\t\t\tsetHoverTime(time)\n\t\t\tdispatch({ type: MediaActionTypes.PREVIEW_TIME, detail: time })\n\t\t}\n\t}, [isDragging, getTimeFromPosition, dispatch])\n\n\tconst handleMouseLeave = React.useCallback(() => {\n\t\tif (!isDragging) {\n\t\t\tsetHoverTime(null)\n\t\t\tdispatch({ type: MediaActionTypes.CLEAR_PREVIEW })\n\t\t}\n\t}, [isDragging, dispatch])\n\n\tconst handleMouseDown = React.useCallback((e: React.MouseEvent) => {\n\t\tsetIsDragging(true)\n\t\tconst time = getTimeFromPosition(e.clientX)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t}, [getTimeFromPosition, dispatch])\n\n\tconst handleTouchStart = React.useCallback((e: React.TouchEvent) => {\n\t\tsetIsDragging(true)\n\t\tconst time = getTimeFromPosition(e.touches[0]?.clientX || 0)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t}, [getTimeFromPosition, dispatch])\n\n\tReact.useEffect(() => {\n\t\tconst handleMouseMove = (e: MouseEvent) => {\n\t\t\tif (isDragging) {\n\t\t\t\tconst time = getTimeFromPosition(e.clientX)\n\t\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t\t}\n\t\t}\n\n\t\tconst handleMouseUp = () => {\n\t\t\tsetIsDragging(false)\n\t\t\tsetHoverTime(null)\n\t\t\tdispatch({ type: MediaActionTypes.CLEAR_PREVIEW })\n\t\t}\n\n\t\tconst handleTouchMove = (e: TouchEvent) => {\n\t\t\tif (isDragging) {\n\t\t\t\tconst time = getTimeFromPosition(e.touches[0]?.clientX || 0)\n\t\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t\t}\n\t\t}\n\n\t\tif (isDragging) {\n\t\t\tdocument.addEventListener('mousemove', handleMouseMove)\n\t\t\tdocument.addEventListener('mouseup', handleMouseUp)\n\t\t\tdocument.addEventListener('touchmove', handleTouchMove)\n\t\t\tdocument.addEventListener('touchend', handleMouseUp)\n\t\t}\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener('mousemove', handleMouseMove)\n\t\t\tdocument.removeEventListener('mouseup', handleMouseUp)\n\t\t\tdocument.removeEventListener('touchmove', handleTouchMove)\n\t\t\tdocument.removeEventListener('touchend', handleMouseUp)\n\t\t}\n\t}, [isDragging, getTimeFromPosition, dispatch])\n\n\treturn (\n\t\t<div className={cn(\"group relative flex items-center\", className)}>\n\t\t\t{/* Time preview tooltip */}\n\t\t\t{(hoverTime !== null || previewTime !== null) && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"pointer-events-none absolute bottom-full mb-2 rounded bg-black/80 px-2 py-1 text-white text-xs\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: `${previewProgress || ((hoverTime || 0) / duration) * 100}%`,\n\t\t\t\t\t\ttransform: 'translateX(-50%)'\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{formatTime(hoverTime || previewTime || 0)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<div\n\t\t\t\tref={progressRef}\n\t\t\t\tclassName=\"relative h-2 w-full cursor-pointer rounded-full bg-white/20 transition-all duration-200 group-hover:h-3\"\n\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\tonTouchStart={handleTouchStart}\n\t\t\t>\n\t\t\t\t{/* Buffered ranges */}\n\t\t\t\t{bufferedRanges.map((range, index) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tclassName=\"absolute top-0 h-full rounded-full bg-white/30\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${range.start}%`,\n\t\t\t\t\t\t\twidth: `${range.end - range.start}%`\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\n\t\t\t\t{/* Progress bar */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute top-0 h-full rounded-full bg-primary transition-all duration-100\"\n\t\t\t\t\tstyle={{ width: `${progress}%` }}\n\t\t\t\t/>\n\n\t\t\t\t{/* Preview indicator */}\n\t\t\t\t{previewProgress !== null && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute top-0 h-full w-1 rounded-full bg-white/80\"\n\t\t\t\t\t\tstyle={{ left: `${previewProgress}%` }}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* Thumb */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"-translate-y-1/2 absolute top-1/2 h-4 w-4 rounded-full border-2 border-white bg-primary opacity-0 shadow-lg transition-all duration-200 group-hover:opacity-100\"\n\t\t\t\t\tstyle={{ left: `${progress}%`, transform: 'translateX(-50%) translateY(-50%)' }}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Enhanced volume control with better UX\nexport const EnhancedVolumeControl = function EnhancedVolumeControl({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst volume = useMediaSelector(state => state.volume)\n\tconst isMuted = useMediaSelector(state => state.isMuted)\n\n\tconst [showSlider, setShowSlider] = React.useState(false)\n\n\tconst handleToggleMute = React.useCallback(() => {\n\t\tdispatch({ type: MediaActionTypes.TOGGLE_MUTE })\n\t}, [dispatch])\n\n\tconst handleVolumeChange = React.useCallback((newVolume: number) => {\n\t\tdispatch({ type: MediaActionTypes.SET_VOLUME, detail: newVolume })\n\t}, [dispatch])\n\n\tconst VolumeIcon = React.useMemo(() => {\n\t\tif (isMuted || volume === 0) {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z\"/>\n\t\t\t\t</svg>\n\t\t\t)\n\t\t} else if (volume < 0.5) {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z\"/>\n\t\t\t\t</svg>\n\t\t\t)\n\t\t} else {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z\"/>\n\t\t\t\t</svg>\n\t\t\t)\n\t\t}\n\t}, [isMuted, volume])\n\n\treturn (\n\t\t<div \n\t\t\tclassName={cn(\"relative flex items-center\", className)}\n\t\t\tonMouseEnter={() => setShowSlider(true)}\n\t\t\tonMouseLeave={() => setShowSlider(false)}\n\t\t>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleToggleMute}\n\t\t\t\tclassName=\"flex h-10 w-10 items-center justify-center rounded-full text-white transition-colors hover:bg-white/10\"\n\t\t\t\taria-label={isMuted ? \"Unmute\" : \"Mute\"}\n\t\t\t>\n\t\t\t\t{VolumeIcon}\n\t\t\t</button>\n\n\t\t\t{/* Volume slider */}\n\t\t\t<div className={cn(\n\t\t\t\t\"absolute left-full ml-2 flex items-center transition-all duration-200\",\n\t\t\t\tshowSlider ? \"translate-x-0 opacity-100\" : \"-translate-x-2 pointer-events-none opacity-0\"\n\t\t\t)}>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"range\"\n\t\t\t\t\tmin=\"0\"\n\t\t\t\t\tmax=\"1\"\n\t\t\t\t\tstep=\"0.01\"\n\t\t\t\t\tvalue={isMuted ? 0 : volume}\n\t\t\t\t\tonChange={(e) => handleVolumeChange(parseFloat(e.target.value))}\n\t\t\t\t\tclassName=\"slider h-1 w-20 cursor-pointer appearance-none rounded-lg bg-white/20\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Enhanced backward skip button\nexport const EnhancedBackwardButton = function EnhancedBackwardButton({\n\tclassName,\n\tsize = \"md\",\n\tskipTime = 10\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tconst newTime = Math.max(0, currentTime - skipTime)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: newTime })\n\t}, [dispatch, currentTime, skipTime])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={`Backward ${skipTime} seconds`}\n\t\t\ttitle={`Backward ${skipTime}s`}\n\t\t>\n\t\t\t<div className={cn(\"flex items-center transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t<path d=\"M7 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zM15.5 7.5c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v9c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-9z\"/>\n\t\t\t\t\t<path d=\"M5.5 12l7-4.5v9l-7-4.5z\" opacity=\"0.8\"/>\n\t\t\t\t</svg>\n\t\t\t\t{skipTime && (\n\t\t\t\t\t<span className=\"-bottom-1 absolute font-bold text-[10px]\">\n\t\t\t\t\t\t{skipTime}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</button>\n\t)\n}\n\n// Enhanced forward skip button\nexport const EnhancedForwardButton = function EnhancedForwardButton({\n\tclassName,\n\tsize = \"md\",\n\tskipTime = 10\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\tconst duration = useMediaSelector(state => state.duration)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tconst newTime = Math.min(duration, currentTime + skipTime)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: newTime })\n\t}, [dispatch, currentTime, duration, skipTime])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={`Forward ${skipTime} seconds`}\n\t\t\ttitle={`Forward ${skipTime}s`}\n\t\t>\n\t\t\t<div className={cn(\"flex items-center transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t<path d=\"M17 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zM8.5 7.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v9c0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5v-9z\"/>\n\t\t\t\t\t<path d=\"M18.5 12l-7-4.5v9l7-4.5z\" opacity=\"0.8\"/>\n\t\t\t\t</svg>\n\t\t\t\t{skipTime && (\n\t\t\t\t\t<span className=\"-bottom-1 absolute font-bold text-[10px]\">\n\t\t\t\t\t\t{skipTime}\n\t\t\t\t\t</span>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</button>\n\t)\n}\n\n// Enhanced time display\nexport const EnhancedTimeDisplay = function EnhancedTimeDisplay({\n\tvariant = \"current\",\n\tclassName\n}: {\n\tvariant?: \"current\" | \"duration\" | \"remaining\"\n\tclassName?: string\n}) {\n\tconst currentTime = useMediaSelector(state => state.currentTime)\n\tconst duration = useMediaSelector(state => state.duration)\n\n\tconst displayTime = React.useMemo(() => {\n\t\tswitch (variant) {\n\t\t\tcase \"current\":\n\t\t\t\treturn formatTime(currentTime)\n\t\t\tcase \"duration\":\n\t\t\t\treturn formatTime(duration)\n\t\t\tcase \"remaining\":\n\t\t\t\treturn `-${formatTime(duration - currentTime)}`\n\t\t\tdefault:\n\t\t\t\treturn formatTime(currentTime)\n\t\t}\n\t}, [variant, currentTime, duration])\n\n\treturn (\n\t\t<div className={cn(\"font-mono text-sm text-white tabular-nums\", className)}>\n\t\t\t{displayTime}\n\t\t</div>\n\t)\n}\n\n// Performance indicator component\nexport const PerformanceIndicator = function PerformanceIndicator({\n\tmetrics,\n\tclassName\n}: {\n\tmetrics?: {\n\t\tfps?: number\n\t\tbufferHealth?: number\n\t\tquality?: number\n\t\tbandwidth?: number\n\t}\n\tclassName?: string\n}) {\n\tif (!metrics || process.env.NODE_ENV !== 'development') {\n\t\treturn null\n\t}\n\n\tconst getPerformanceColor = (fps: number) => {\n\t\tif (fps >= 50) return 'text-green-400'\n\t\tif (fps >= 30) return 'text-yellow-400'\n\t\treturn 'text-red-400'\n\t}\n\n\tconst getBufferColor = (health: number) => {\n\t\tif (health >= 5) return 'text-green-400'\n\t\tif (health >= 2) return 'text-yellow-400'\n\t\treturn 'text-red-400'\n\t}\n\n\treturn (\n\t\t<div className={cn(\"flex items-center gap-3 font-mono text-xs\", className)}>\n\t\t\t{metrics.fps !== undefined && (\n\t\t\t\t<div className={cn(\"flex items-center gap-1\", getPerformanceColor(metrics.fps))}>\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.fps} FPS</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{metrics.bufferHealth !== undefined && (\n\t\t\t\t<div className={cn(\"flex items-center gap-1\", getBufferColor(metrics.bufferHealth))}>\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.bufferHealth.toFixed(1)}s</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{metrics.quality !== undefined && (\n\t\t\t\t<div className=\"flex items-center gap-1 text-blue-400\">\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.quality}p</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Enhanced control bar that combines all controls\nexport const EnhancedControlBar = function EnhancedControlBar({\n\tclassName,\n\tshowSkipButtons = true,\n\tshowVolumeControl = true,\n\tshowTimeDisplay = true,\n\tplayButtonSize = \"xl\",\n\tskipButtonSize = \"md\",\n\tskipTime = 10,\n\tshowPerformanceIndicators = process.env.NODE_ENV === 'development',\n\tperformanceMetrics\n}: {\n\tclassName?: string\n\tshowSkipButtons?: boolean\n\tshowVolumeControl?: boolean\n\tshowTimeDisplay?: boolean\n\tplayButtonSize?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n\tskipButtonSize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n\tshowPerformanceIndicators?: boolean\n\tperformanceMetrics?: {\n\t\tfps?: number\n\t\tbufferHealth?: number\n\t\tquality?: number\n\t\tbandwidth?: number\n\t}\n}) {\n\treturn (\n\t\t<div className={cn(\"flex flex-col gap-4 bg-gradient-to-t from-black/80 to-transparent p-4\", className)}>\n\t\t\t{/* Seek Bar */}\n\t\t\t<EnhancedSeekBar className=\"w-full\" />\n\n\t\t\t{/* Control Buttons */}\n\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t{/* Left side - Media controls */}\n\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t{showSkipButtons && (\n\t\t\t\t\t\t<EnhancedBackwardButton \n\t\t\t\t\t\t\tsize={skipButtonSize} \n\t\t\t\t\t\t\tskipTime={skipTime}\n\t\t\t\t\t\t\tclassName=\"shrink-0\" \n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<EnhancedPlayButton \n\t\t\t\t\t\tsize={playButtonSize}\n\t\t\t\t\t\tclassName=\"shrink-0\" \n\t\t\t\t\t/>\n\n\t\t\t\t\t{showSkipButtons && (\n\t\t\t\t\t\t<EnhancedForwardButton \n\t\t\t\t\t\t\tsize={skipButtonSize} \n\t\t\t\t\t\t\tskipTime={skipTime}\n\t\t\t\t\t\t\tclassName=\"shrink-0\" \n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{showVolumeControl && (\n\t\t\t\t\t\t<EnhancedVolumeControl className=\"shrink-0\" />\n\t\t\t\t\t)}\n\n\t\t\t\t\t{showTimeDisplay && (\n\t\t\t\t\t\t<div className=\"flex items-center gap-1 font-mono text-sm\">\n\t\t\t\t\t\t\t<EnhancedTimeDisplay variant=\"current\" />\n\t\t\t\t\t\t\t<span className=\"text-white/60\">/</span>\n\t\t\t\t\t\t\t<EnhancedTimeDisplay variant=\"duration\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Right side - Performance indicators and additional controls */}\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t{showPerformanceIndicators && (\n\t\t\t\t\t\t<PerformanceIndicator\n\t\t\t\t\t\t\tmetrics={performanceMetrics}\n\t\t\t\t\t\t\tclassName=\"text-white/80\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Future: Settings, Fullscreen, etc. */}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","/**\n * Debug Panel Component for Performance Monitoring\n * Development-only component for displaying performance metrics\n */\n\nimport React, { useMemo } from 'react';\nimport { cn } from '../../lib/utils';\n\ninterface PerformanceMetrics {\n\tfps: number;\n\tmemoryUsage: number;\n\tbufferHealth: number;\n\tnetworkBandwidth: number;\n\tdroppedFrames: number;\n\tdecodedFrames: number;\n\tpresentationTime: number;\n}\n\ninterface PreloadingStats {\n\tpreloadedItems: number;\n\tengagementScore: number;\n\tqueueLength: number;\n\thitRate: number;\n\ttotalSaved: number;\n}\n\ninterface DebugPanelProps {\n\t/** Performance metrics to display */\n\tperformanceMetrics?: Partial<PerformanceMetrics>;\n\t/** Preloading statistics */\n\tpreloadingStats?: PreloadingStats;\n\t/** Current playback state */\n\tplaybackState?: {\n\t\tcurrentTime: number;\n\t\tduration: number;\n\t\tvolume: number;\n\t\tisPlaying: boolean;\n\t\tquality: number;\n\t\tisBuffering: boolean;\n\t\terror?: string;\n\t};\n\t/** HLS-specific metrics */\n\thlsMetrics?: {\n\t\tcurrentLevel: number;\n\t\tavailableLevels: number;\n\t\tbandwidthEstimate: number;\n\t\tdroppedFrames: number;\n\t};\n\t/** Plugin information */\n\tpluginInfo?: {\n\t\tloadedPlugins: string[];\n\t\tactivePlugins: string[];\n\t\tpluginCount: number;\n\t};\n\t/** Additional debug information */\n\tdebugInfo?: Record<string, any>;\n\t/** Custom className */\n\tclassName?: string;\n\t/** Panel position */\n\tposition?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left';\n\t/** Whether the panel is collapsed by default */\n\tdefaultCollapsed?: boolean;\n\t/** Custom title */\n\ttitle?: string;\n}\n\n/**\n * Debug Panel Component\n */\nexport const DebugPanel: React.FC<DebugPanelProps> = ({\n\tperformanceMetrics = {},\n\tpreloadingStats = {} as PreloadingStats,\n\tplaybackState = {} as any,\n\thlsMetrics = {},\n\tpluginInfo = {},\n\tdebugInfo = {},\n\tclassName,\n\tposition = 'top-right',\n\tdefaultCollapsed = false,\n\ttitle = 'BaroiPlayer Debug Panel'\n}) => {\n\tconst [isCollapsed, setIsCollapsed] = React.useState(defaultCollapsed);\n\tconst [activeTab, setActiveTab] = React.useState<'performance' | 'hls' | 'plugins' | 'debug'>('performance');\n\n\t// Position classes\n\tconst positionClasses = useMemo(() => {\n\t\tswitch (position) {\n\t\t\tcase 'top-left':\n\t\t\t\treturn 'top-4 left-4';\n\t\t\tcase 'top-right':\n\t\t\t\treturn 'top-4 right-4';\n\t\t\tcase 'bottom-left':\n\t\t\t\treturn 'bottom-4 left-4';\n\t\t\tcase 'bottom-right':\n\t\t\t\treturn 'bottom-4 right-4';\n\t\t\tdefault:\n\t\t\t\treturn 'top-4 right-4';\n\t\t}\n\t}, [position]);\n\n\t// Format bytes\n\tconst formatBytes = (bytes: number): string => {\n\t\tif (bytes === 0) return '0 B';\n\t\tconst k = 1024;\n\t\tconst sizes = ['B', 'KB', 'MB', 'GB'];\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k));\n\t\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];\n\t};\n\n\t// Format time\n\tconst formatTime = (seconds: number): string => {\n\t\tconst mins = Math.floor(seconds / 60);\n\t\tconst secs = Math.floor(seconds % 60);\n\t\treturn `${mins}:${secs.toString().padStart(2, '0')}`;\n\t};\n\n\t// Render performance metrics\n\tconst renderPerformanceMetrics = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">FPS:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.fps || 0}</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Memory:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{((performanceMetrics.memoryUsage || 0) / 1024 / 1024).toFixed(1)} MB</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Buffer:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{(performanceMetrics.bufferHealth || 0).toFixed(2)}s</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Bandwidth:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{formatBytes(performanceMetrics.networkBandwidth || 0)}/s</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Dropped:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.droppedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-cyan-400\">Decoded:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.decodedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render playback state\n\tconst renderPlaybackState = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Status:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{playbackState.isPlaying ? (\n\t\t\t\t\t\t\t<span className=\"text-green-300\">Playing</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"text-red-300\">Paused</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Time:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{formatTime(playbackState.currentTime || 0)} / {formatTime(playbackState.duration || 0)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Volume:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{Math.round((playbackState.volume || 0) * 100)}%</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Quality:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{playbackState.quality || 0}p</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Buffering:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{playbackState.isBuffering ? (\n\t\t\t\t\t\t\t<span className=\"text-yellow-300\">Yes</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"text-green-300\">No</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t{playbackState.error && (\n\t\t\t\t\t<div className=\"col-span-2\">\n\t\t\t\t\t\t<span className=\"text-red-400\">Error:</span>\n\t\t\t\t\t\t<span className=\"ml-2 break-all font-mono text-red-300 text-xs\">\n\t\t\t\t\t\t\t{playbackState.error}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render preloading stats\n\tconst renderPreloadingStats = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Preloaded:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{preloadingStats.preloadedItems || 0} items</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Engagement:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{(preloadingStats.engagementScore || 0).toFixed(1)}%</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Queue:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{preloadingStats.queueLength || 0} items</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Hit Rate:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{(preloadingStats.hitRate || 0).toFixed(1)}%</span>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"col-span-2\">\n\t\t\t\t\t<span className=\"text-cyan-400\">Saved:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{formatBytes(preloadingStats.totalSaved || 0)}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render HLS metrics\n\tconst renderHLSMetrics = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Level:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{hlsMetrics.currentLevel || 0} / {hlsMetrics.availableLevels || 0}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Bandwidth:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{formatBytes(hlsMetrics.bandwidthEstimate || 0)}/s</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Dropped:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{hlsMetrics.droppedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render plugin info\n\tconst renderPluginInfo = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Total:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{pluginInfo.pluginCount || 0} plugins</span>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"mt-2\">\n\t\t\t\t\t<span className=\"text-blue-400\">Active:</span>\n\t\t\t\t\t<div className=\"ml-2 space-y-1 font-mono text-xs\">\n\t\t\t\t\t\t{pluginInfo.activePlugins?.map((plugin, index) => (\n\t\t\t\t\t\t\t<div key={index} className=\"text-green-300\">• {plugin}</div>\n\t\t\t\t\t\t)) || <div className=\"text-gray-400\">None</div>}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{pluginInfo.loadedPlugins && pluginInfo.loadedPlugins.length > (pluginInfo.activePlugins?.length ?? 0) && (\n\t\t\t\t\t<div className=\"mt-2\">\n\t\t\t\t\t\t<span className=\"text-yellow-400\">Loaded (inactive):</span>\n\t\t\t\t\t\t<div className=\"ml-2 space-y-1 font-mono text-xs\">\n\t\t\t\t\t\t\t{pluginInfo.loadedPlugins\n\t\t\t\t\t\t\t\t.filter(plugin => !pluginInfo.activePlugins?.includes(plugin))\n\t\t\t\t\t\t\t\t.map((plugin, index) => (\n\t\t\t\t\t\t\t\t\t<div key={index} className=\"text-yellow-300\">• {plugin}</div>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render debug info\n\tconst renderDebugInfo = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"space-y-1 font-mono text-xs\">\n\t\t\t\t{Object.entries(debugInfo).map(([key, value]) => (\n\t\t\t\t\t<div key={key}>\n\t\t\t\t\t\t<span className=\"text-yellow-400\">{key}:</span>\n\t\t\t\t\t\t<span className=\"ml-2 text-gray-300\">\n\t\t\t\t\t\t\t{typeof value === 'object' ? JSON.stringify(value, null, 2) : String(value)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t);\n\n\t// Render tabs\n\tconst renderTabs = () => (\n\t\t<div className=\"flex space-x-1 border-gray-600 border-b\">\n\t\t\t{[\n\t\t\t\t{ id: 'performance', label: 'Performance' },\n\t\t\t\t{ id: 'hls', label: 'HLS' },\n\t\t\t\t{ id: 'plugins', label: 'Plugins' },\n\t\t\t\t{ id: 'debug', label: 'Debug' }\n\t\t\t].map(tab => (\n\t\t\t\t<button\n\t\t\t\t\tkey={tab.id}\n\t\t\t\t\tonClick={() => setActiveTab(tab.id as any)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"px-2 py-1 font-medium text-xs transition-colors\",\n\t\t\t\t\t\tactiveTab === tab.id\n\t\t\t\t\t\t\t? \"border-blue-400 border-b text-blue-400\"\n\t\t\t\t\t\t\t: 'text-gray-400 hover:text-white'\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{tab.label}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</div>\n\t);\n\n\t// Render active tab content\n\tconst renderTabContent = () => {\n\t\tswitch (activeTab) {\n\t\t\tcase 'performance':\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"space-y-3\">\n\t\t\t\t\t\t{renderPerformanceMetrics()}\n\t\t\t\t\t\t<hr className=\"border-gray-600\" />\n\t\t\t\t\t\t{renderPlaybackState()}\n\t\t\t\t\t\t<hr className=\"border-gray-600\" />\n\t\t\t\t\t\t{renderPreloadingStats()}\n\t\t\t\t\t</div>\n\t\t\t\t);\n\t\t\tcase 'hls':\n\t\t\t\treturn renderHLSMetrics();\n\t\t\tcase 'plugins':\n\t\t\t\treturn renderPluginInfo();\n\t\t\tcase 'debug':\n\t\t\t\treturn renderDebugInfo();\n\t\t\tdefault:\n\t\t\t\treturn renderPerformanceMetrics();\n\t\t}\n\t};\n\n\t// Only render in development\n\tif (process.env.NODE_ENV !== 'development') {\n\t\treturn null;\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"fixed z-50 min-w-80 max-w-96 rounded-lg border border-gray-700 bg-black/90 p-3 font-mono text-white text-xs backdrop-blur-sm\",\n\t\t\t\tpositionClasses,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t{/* Header */}\n\t\t\t<div className=\"mb-3 flex items-center justify-between\">\n\t\t\t\t<h3 className=\"font-bold text-blue-400 text-sm\">{title}</h3>\n\t\t\t\t<div className=\"flex items-center space-x-2\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsCollapsed(!isCollapsed)}\n\t\t\t\t\t\tclassName=\"text-gray-400 transition-colors hover:text-white\"\n\t\t\t\t\t\taria-label={isCollapsed ? 'Expand' : 'Collapse'}\n\t\t\t\t\t>\n\t\t\t\t\t\t{isCollapsed ? (\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n\t\t\t\t\t\t\t\t<path d=\"M3 4.5L6 7.5L9 4.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n\t\t\t\t\t\t\t\t<path d=\"M3 7.5L6 4.5L9 7.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Collapsed content */}\n\t\t\t{isCollapsed ? (\n\t\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span className=\"text-green-400\">FPS:</span>\n\t\t\t\t\t\t<span className=\"ml-1 font-mono\">{performanceMetrics.fps || 0}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span className=\"text-blue-400\">Memory:</span>\n\t\t\t\t\t\t<span className=\"ml-1 font-mono\">{((performanceMetrics.memoryUsage || 0) / 1024 / 1024).toFixed(1)}MB</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{/* Tabs */}\n\t\t\t\t\t{renderTabs()}\n\n\t\t\t\t\t{/* Tab Content */}\n\t\t\t\t\t<div className=\"mt-3 max-h-64 overflow-y-auto\">\n\t\t\t\t\t\t{renderTabContent()}\n\t\t\t\t\t</div>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t);\n};\n\n/**\n * Performance Debug Panel - simplified version focused on performance metrics\n */\nexport const PerformanceDebugPanel: React.FC<Omit<DebugPanelProps, 'position' | 'defaultCollapsed' | 'title'>> = (props) => {\n\treturn (\n\t\t<DebugPanel\n\t\t\t{...props}\n\t\t\tposition=\"top-right\"\n\t\t\tdefaultCollapsed={false}\n\t\t\ttitle=\"Performance Monitor\"\n\t\t/>\n\t);\n};\n\nexport default DebugPanel;"],"names":["useAutoHideControls","autoHide","delay","showOnHover","showOnTouch","showControls","setShowControls","React","isHovering","setIsHovering","isTouching","setIsTouching","timeoutRef","resetTimeout","showControlsTemporarily","handleMouseEnter","handleMouseLeave","handleTouchStart","handleTouchEnd","useTouchGestures","enabled","dispatch","useMediaDispatch","isPlaying","useMediaSelector","state","currentTime","duration","volume","touchStart","setTouchStart","isDoubleTap","setIsDoubleTap","e","touch","now","MediaActionTypes","handleTouchMove","deltaX","deltaY","seekAmount","newTime","volumeChange","newVolume","EnhancedMediaPlayer","children","className","autoHideDelay","showControlsOnHover","showControlsOnTouch","enableKeyboardControls","enableTouchGestures","onPlay","onPause","onTimeUpdate","onVolumeChange","onFullscreenChange","context","useMediaContext","isFullscreen","error","handleControlsTouch","handleControlsTouchEnd","handleGestureStart","handleGestureMove","handleGestureEnd","handleClick","handleKeyDown","jsx","cn","QualitySelector","qualities","currentQuality","onQualityChange","isOpen","setIsOpen","currentQualityLabel","q","jsxs","quality","SubtitleSelector","subtitles","currentSubtitle","onSubtitleChange","currentSubtitleLabel","s","subtitle","PlaybackSpeedSelector","playbackRate","speeds","handleSpeedChange","speed","ChaptersPanel","chapters","onChapterSelect","currentChapter","chapter","formatTime","PictureInPictureButton","isPictureInPicture","handleTogglePiP","EnhancedPlayButton","size","isLoading","sizeClasses","iconSizes","EnhancedSeekBar","buffered","previewTime","isDragging","setIsDragging","hoverTime","setHoverTime","progressRef","progress","previewProgress","bufferedRanges","ranges","i","getTimeFromPosition","clientX","rect","handleMouseMove","time","handleMouseDown","handleMouseUp","range","index","EnhancedVolumeControl","isMuted","showSlider","setShowSlider","handleToggleMute","handleVolumeChange","VolumeIcon","EnhancedBackwardButton","skipTime","EnhancedForwardButton","EnhancedTimeDisplay","variant","displayTime","PerformanceIndicator","metrics","getPerformanceColor","fps","getBufferColor","health","EnhancedControlBar","showSkipButtons","showVolumeControl","showTimeDisplay","playButtonSize","skipButtonSize","showPerformanceIndicators","performanceMetrics","DebugPanel","preloadingStats","playbackState","hlsMetrics","pluginInfo","debugInfo","position","defaultCollapsed","title","isCollapsed","setIsCollapsed","activeTab","setActiveTab","positionClasses","useMemo","formatBytes","bytes","k","sizes","seconds","mins","secs","renderPerformanceMetrics","renderPlaybackState","renderPreloadingStats","renderHLSMetrics","renderPluginInfo","plugin","renderDebugInfo","key","value","renderTabs","tab","renderTabContent","Fragment"],"mappings":"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"}
|