@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,23 +0,0 @@
|
|
|
1
|
-
"use strict";var Ee=Object.defineProperty;var de=(i,e,t)=>e in i?Ee(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var k=(i,e,t)=>de(i,typeof e!="symbol"?e+"":e,t);const T=require("react");var V={exports:{}},K={};/**
|
|
2
|
-
* @license React
|
|
3
|
-
* react-jsx-runtime.production.js
|
|
4
|
-
*
|
|
5
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
6
|
-
*
|
|
7
|
-
* This source code is licensed under the MIT license found in the
|
|
8
|
-
* LICENSE file in the root directory of this source tree.
|
|
9
|
-
*/var ae;function fe(){if(ae)return K;ae=1;var i=Symbol.for("react.transitional.element"),e=Symbol.for("react.fragment");function t(s,n,a){var d=null;if(a!==void 0&&(d=""+a),n.key!==void 0&&(d=""+n.key),"key"in n){a={};for(var c in n)c!=="key"&&(a[c]=n[c])}else a=n;return n=a.ref,{$$typeof:i,type:s,key:d,ref:n!==void 0?n:null,props:a}}return K.Fragment=e,K.jsx=t,K.jsxs=t,K}var W={};/**
|
|
10
|
-
* @license React
|
|
11
|
-
* react-jsx-runtime.development.js
|
|
12
|
-
*
|
|
13
|
-
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
14
|
-
*
|
|
15
|
-
* This source code is licensed under the MIT license found in the
|
|
16
|
-
* LICENSE file in the root directory of this source tree.
|
|
17
|
-
*/var oe;function Se(){return oe||(oe=1,process.env.NODE_ENV!=="production"&&(function(){function i(r){if(r==null)return null;if(typeof r=="function")return r.$$typeof===l?null:r.displayName||r.name||null;if(typeof r=="string")return r;switch(r){case L:return"Fragment";case v:return"Profiler";case U:return"StrictMode";case C:return"Suspense";case h:return"SuspenseList";case J:return"Activity"}if(typeof r=="object")switch(typeof r.tag=="number"&&console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."),r.$$typeof){case D:return"Portal";case Y:return(r.displayName||"Context")+".Provider";case G:return(r._context.displayName||"Context")+".Consumer";case I:var E=r.render;return r=r.displayName,r||(r=E.displayName||E.name||"",r=r!==""?"ForwardRef("+r+")":"ForwardRef"),r;case B:return E=r.displayName||null,E!==null?E:i(r.type)||"Memo";case w:E=r._payload,r=r._init;try{return i(r(E))}catch{}}return null}function e(r){return""+r}function t(r){try{var E=!1}catch{E=!0}if(E){E=console;var f=E.error,R=typeof Symbol=="function"&&Symbol.toStringTag&&r[Symbol.toStringTag]||r.constructor.name||"Object";return f.call(E,"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.",R),e(r)}}function s(r){if(r===L)return"<>";if(typeof r=="object"&&r!==null&&r.$$typeof===w)return"<...>";try{var E=i(r);return E?"<"+E+">":"<...>"}catch{return"<...>"}}function n(){var r=u.A;return r===null?null:r.getOwner()}function a(){return Error("react-stack-top-frame")}function d(r){if(y.call(r,"key")){var E=Object.getOwnPropertyDescriptor(r,"key").get;if(E&&E.isReactWarning)return!1}return r.key!==void 0}function c(r,E){function f(){N||(N=!0,console.error("%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)",E))}f.isReactWarning=!0,Object.defineProperty(r,"key",{get:f,configurable:!0})}function S(){var r=i(this.type);return te[r]||(te[r]=!0,console.error("Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.")),r=this.props.ref,r!==void 0?r:null}function g(r,E,f,R,M,P,X,q){return f=P.ref,r={$$typeof:A,type:r,key:E,props:P,_owner:M},(f!==void 0?f:null)!==null?Object.defineProperty(r,"ref",{enumerable:!1,get:S}):Object.defineProperty(r,"ref",{enumerable:!1,value:null}),r._store={},Object.defineProperty(r._store,"validated",{configurable:!1,enumerable:!1,writable:!0,value:0}),Object.defineProperty(r,"_debugInfo",{configurable:!1,enumerable:!1,writable:!0,value:null}),Object.defineProperty(r,"_debugStack",{configurable:!1,enumerable:!1,writable:!0,value:X}),Object.defineProperty(r,"_debugTask",{configurable:!1,enumerable:!1,writable:!0,value:q}),Object.freeze&&(Object.freeze(r.props),Object.freeze(r)),r}function p(r,E,f,R,M,P,X,q){var m=E.children;if(m!==void 0)if(R)if(x(m)){for(R=0;R<m.length;R++)F(m[R]);Object.freeze&&Object.freeze(m)}else console.error("React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.");else F(m);if(y.call(E,"key")){m=i(r);var j=Object.keys(E).filter(function(ue){return ue!=="key"});R=0<j.length?"{key: someKey, "+j.join(": ..., ")+": ...}":"{key: someKey}",ne[m+R]||(j=0<j.length?"{"+j.join(": ..., ")+": ...}":"{}",console.error(`A props object containing a "key" prop is being spread into JSX:
|
|
18
|
-
let props = %s;
|
|
19
|
-
<%s {...props} />
|
|
20
|
-
React keys must be passed directly to JSX without using spread:
|
|
21
|
-
let props = %s;
|
|
22
|
-
<%s key={someKey} {...props} />`,R,m,j,m),ne[m+R]=!0)}if(m=null,f!==void 0&&(t(f),m=""+f),d(E)&&(t(E.key),m=""+E.key),"key"in E){f={};for(var Q in E)Q!=="key"&&(f[Q]=E[Q])}else f=E;return m&&c(f,typeof r=="function"?r.displayName||r.name||"Unknown":r),g(r,m,P,M,n(),f,X,q)}function F(r){typeof r=="object"&&r!==null&&r.$$typeof===A&&r._store&&(r._store.validated=1)}var _=T,A=Symbol.for("react.transitional.element"),D=Symbol.for("react.portal"),L=Symbol.for("react.fragment"),U=Symbol.for("react.strict_mode"),v=Symbol.for("react.profiler"),G=Symbol.for("react.consumer"),Y=Symbol.for("react.context"),I=Symbol.for("react.forward_ref"),C=Symbol.for("react.suspense"),h=Symbol.for("react.suspense_list"),B=Symbol.for("react.memo"),w=Symbol.for("react.lazy"),J=Symbol.for("react.activity"),l=Symbol.for("react.client.reference"),u=_.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,y=Object.prototype.hasOwnProperty,x=Array.isArray,O=console.createTask?console.createTask:function(){return null};_={"react-stack-bottom-frame":function(r){return r()}};var N,te={},re=_["react-stack-bottom-frame"].bind(_,a)(),se=O(s(a)),ne={};W.Fragment=L,W.jsx=function(r,E,f,R,M){var P=1e4>u.recentlyCreatedOwnerStacks++;return p(r,E,f,!1,R,M,P?Error("react-stack-top-frame"):re,P?O(s(r)):se)},W.jsxs=function(r,E,f,R,M){var P=1e4>u.recentlyCreatedOwnerStacks++;return p(r,E,f,!0,R,M,P?Error("react-stack-top-frame"):re,P?O(s(r)):se)}})()),W}var ie;function Te(){return ie||(ie=1,process.env.NODE_ENV==="production"?V.exports=fe():V.exports=Se()),V.exports}var z=Te();const o={PLAY:"PLAY",PAUSE:"PAUSE",SEEK:"SEEK",SET_VOLUME:"SET_VOLUME",MUTE:"MUTE",UNMUTE:"UNMUTE",TOGGLE_MUTE:"TOGGLE_MUTE",SET_DURATION:"SET_DURATION",SET_CURRENT_TIME:"SET_CURRENT_TIME",SET_BUFFERED:"SET_BUFFERED",SET_LOADING:"SET_LOADING",SET_ERROR:"SET_ERROR",ENTER_FULLSCREEN:"ENTER_FULLSCREEN",EXIT_FULLSCREEN:"EXIT_FULLSCREEN",ENTER_PIP:"ENTER_PIP",EXIT_PIP:"EXIT_PIP",SET_PLAYBACK_RATE:"SET_PLAYBACK_RATE",SET_SUBTITLE_TRACK:"SET_SUBTITLE_TRACK",SET_RENDITION:"SET_RENDITION",TOGGLE_SUBTITLES:"TOGGLE_SUBTITLES",PREVIEW_TIME:"PREVIEW_TIME",CLEAR_PREVIEW:"CLEAR_PREVIEW",SET_BUFFERING:"SET_BUFFERING",SET_QUALITY_LEVEL:"SET_QUALITY_LEVEL",SET_BANDWIDTH_ESTIMATE:"SET_BANDWIDTH_ESTIMATE",SET_ACTIVE_TEXT_TRACKS:"SET_ACTIVE_TEXT_TRACKS"},Z=T.createContext(null);function ce(){const i=T.useContext(Z);if(!i)throw new Error("useMediaContext must be used within a MediaPlayer");return i}const ee=T.createContext(null);function H(){const i=T.useContext(ee);if(!i)throw new Error("useMediaStore must be used within a MediaPlayer");return i}function ye(i){const e=H(),t=()=>i(e.getState());return T.useSyncExternalStore(e.subscribe,t,t)}function Re(){return H().dispatch}function me(i){const e=H(),t="getOptimisticState"in e,s=()=>i(t?e.getOptimisticState():e.getState());return T.useSyncExternalStore(e.subscribe,s,s)}function pe(){const i=H(),e=ce(),t="getOptimisticState"in i,s="errorHandler"in e?e.errorHandler:null,n="isRehydrated"in e?e.isRehydrated:!0;return{isEnhanced:t,errorHandler:s,isRehydrated:n,actionsState:t?i.getActionState():null}}const $={isPlaying:!1,currentTime:0,duration:0,buffered:null,isLoading:!1,isBuffering:!1,error:null,volume:1,isMuted:!1,isFullscreen:!1,isPictureInPicture:!1,playbackRate:1,subtitlesShowing:!1,selectedSubtitleTrack:null,selectedRendition:null,qualityLevel:-1,bandwidthEstimate:0,activeTextTracks:[],previewTime:null,previewImage:null,previewCoords:null,subtitlesList:[],renditionList:[]},_e={enabled:!0,key:"baroi-player-state",persist:["volume","isMuted","playbackRate","subtitlesShowing"],debounceMs:500};function le(i=$,e={}){let t={...i},s={...i},n={pending:!1,error:null,lastAction:null,retryCount:0};const a={..._e,...e},d=new Set,c=new Map;let S=null;const g=l=>(d.add(l),()=>d.delete(l)),p=()=>{d.forEach(l=>l())},F=()=>t,_=()=>s,A=()=>n,D=async()=>{if(!a.enabled||typeof window>"u")return;const l=a.persist.reduce((u,y)=>(u[y]=t[y],u),{});try{localStorage.setItem(a.key,JSON.stringify({...l,timestamp:Date.now()}))}catch(u){console.warn("Failed to persist media state:",u)}},L=()=>{S&&clearTimeout(S),S=setTimeout(D,a.debounceMs)},U=async()=>{if(!(!a.enabled||typeof window>"u"))try{const l=localStorage.getItem(a.key);if(!l)return;const u=JSON.parse(l),{timestamp:y,...x}=u,O=10080*60*1e3;if(y&&Date.now()-y>O){v();return}const N={...t,...x};JSON.stringify(N)!==JSON.stringify(t)&&(t=N,s={...N},p())}catch(l){console.warn("Failed to rehydrate media state:",l)}},v=()=>{if(!(typeof window>"u"))try{localStorage.removeItem(a.key)}catch(l){console.warn("Failed to clear persisted state:",l)}},G=l=>{Object.assign(a,l)},Y=l=>{const u={...t,...l};JSON.stringify(u)!==JSON.stringify(t)&&(t=u,s={...u},L(),p())},I=l=>{const u=`${l.type}-${Date.now()}-${Math.random()}`;c.set(u,{...l,timestamp:Date.now()});const y=h(s,l);return s={...s,...y},p(),u},C=l=>{if(c.has(l)){c.delete(l),s={...t};for(const[,u]of c){const y=h(s,u);s={...s,...y}}p()}},h=(l,u)=>{switch(u.type){case o.PLAY:return{isPlaying:!0,error:null};case o.PAUSE:return{isPlaying:!1};case o.SEEK:return{currentTime:u.detail};case o.SET_VOLUME:return{volume:Math.max(0,Math.min(1,u.detail))};case o.MUTE:return{isMuted:!0};case o.UNMUTE:return{isMuted:!1};case o.TOGGLE_MUTE:return{isMuted:!l.isMuted};case o.SET_DURATION:return{duration:u.detail};case o.SET_CURRENT_TIME:return{currentTime:u.detail};case o.SET_BUFFERED:return{buffered:u.detail};case o.SET_LOADING:return{isLoading:u.detail};case o.SET_ERROR:return{error:u.detail,isLoading:!1};case o.ENTER_FULLSCREEN:return{isFullscreen:!0};case o.EXIT_FULLSCREEN:return{isFullscreen:!1};case o.ENTER_PIP:return{isPictureInPicture:!0};case o.EXIT_PIP:return{isPictureInPicture:!1};case o.SET_PLAYBACK_RATE:return{playbackRate:u.detail};case o.SET_SUBTITLE_TRACK:return{selectedSubtitleTrack:u.detail};case o.SET_RENDITION:return{selectedRendition:u.detail};case o.TOGGLE_SUBTITLES:return{subtitlesShowing:!l.subtitlesShowing};case o.PREVIEW_TIME:return{previewTime:u.detail};case o.CLEAR_PREVIEW:return{previewTime:null,previewImage:null,previewCoords:null};default:return console.warn(`Unknown media action type: ${u.type}`),{}}},B=l=>{const u=h(t,l);Y(u)},w=async l=>{n={pending:!0,error:null,lastAction:l,retryCount:l.retryCount||0};const u=I(l);try{await new Promise(O=>setTimeout(O,0));const y=h(t,l),x={...t,...y};JSON.stringify(x)!==JSON.stringify(t)&&(t=x,L()),c.delete(u),n={pending:!1,error:null,lastAction:l,retryCount:0},s={...t};for(const[,O]of c){const N=h(s,O);s={...s,...N}}}catch(y){C(u),n={pending:!1,error:y instanceof Error?y.message:"Unknown error occurred",lastAction:l,retryCount:(l.retryCount||0)+1},n.retryCount<3&&J(l.type)&&setTimeout(()=>{w({...l,retryCount:n.retryCount})},Math.pow(2,n.retryCount)*1e3)}p()},J=l=>[o.PLAY,o.PAUSE,o.SEEK,o.SET_VOLUME,o.MUTE,o.UNMUTE,o.TOGGLE_MUTE].includes(l);return U(),{subscribe:g,getState:F,setState:Y,dispatch:B,getOptimisticState:_,dispatchOptimistic:w,rollbackOptimistic:C,getActionState:A,setPersistenceConfig:G,rehydrateFromStorage:U,clearPersistedState:v}}const b={USER_PREFERENCES:"baroi-player-preferences",SESSION_STATE:"baroi-player-session",PLAYBACK_HISTORY:"baroi-player-history",CACHE_TIMESTAMP:"baroi-player-cache-ts"};class ge{async getItem(e){if(typeof window>"u")return null;try{return localStorage.getItem(e)}catch(t){return console.warn("Failed to read from localStorage:",t),null}}async setItem(e,t){if(!(typeof window>"u"))try{localStorage.setItem(e,t)}catch(s){console.warn("Failed to write to localStorage:",s)}}async removeItem(e){if(!(typeof window>"u"))try{localStorage.removeItem(e)}catch(t){console.warn("Failed to remove from localStorage:",t)}}async clear(){if(!(typeof window>"u"))try{Object.values(b).forEach(e=>{localStorage.removeItem(e)})}catch(e){console.warn("Failed to clear localStorage:",e)}}}const he={userPreferences:!0,sessionState:!0,playbackHistory:!0,maxHistoryItems:50,maxCacheAge:10080*60*1e3,debounceMs:1e3,storage:new ge};class be{constructor(e={}){k(this,"config");k(this,"storage");k(this,"debounceTimeouts",new Map);this.config={...he,...e},this.storage=this.config.storage}async getUserPreferences(){if(!this.config.userPreferences)return null;try{const e=await this.storage.getItem(b.USER_PREFERENCES);if(!e)return null;const t=JSON.parse(e);return this.isCacheExpired(t.timestamp)?(await this.clearUserPreferences(),null):t.preferences}catch(e){return console.warn("Failed to get user preferences:",e),null}}async saveUserPreferences(e){this.config.userPreferences&&this.debounce(b.USER_PREFERENCES,async()=>{try{const s={...await this.getUserPreferences()||{},...e};await this.storage.setItem(b.USER_PREFERENCES,JSON.stringify({preferences:s,timestamp:Date.now()}))}catch(t){console.warn("Failed to save user preferences:",t)}})}async clearUserPreferences(){try{await this.storage.removeItem(b.USER_PREFERENCES)}catch(e){console.warn("Failed to clear user preferences:",e)}}async getSessionState(){if(!this.config.sessionState)return null;try{const e=await this.storage.getItem(b.SESSION_STATE);return e?JSON.parse(e).state:null}catch(e){return console.warn("Failed to get session state:",e),null}}async saveSessionState(e){this.config.sessionState&&this.debounce(b.SESSION_STATE,async()=>{try{const s={...await this.getSessionState()||{currentTime:0,playbackPosition:{}},...e};await this.storage.setItem(b.SESSION_STATE,JSON.stringify({state:s,timestamp:Date.now()}))}catch(t){console.warn("Failed to save session state:",t)}})}async clearSessionState(){try{await this.storage.removeItem(b.SESSION_STATE)}catch(e){console.warn("Failed to clear session state:",e)}}async getPlaybackHistory(){if(!this.config.playbackHistory)return[];try{const e=await this.storage.getItem(b.PLAYBACK_HISTORY);if(!e)return[];const t=JSON.parse(e);return this.isCacheExpired(t.timestamp)?(await this.clearPlaybackHistory(),[]):t.history||[]}catch(e){return console.warn("Failed to get playback history:",e),[]}}async addToPlaybackHistory(e){if(this.config.playbackHistory)try{const t=await this.getPlaybackHistory(),s={...e,timestamp:Date.now()},n=t.filter(d=>d.mediaId!==e.mediaId),a=[s,...n].slice(0,this.config.maxHistoryItems);await this.storage.setItem(b.PLAYBACK_HISTORY,JSON.stringify({history:a,timestamp:Date.now()}))}catch(t){console.warn("Failed to add to playback history:",t)}}async clearPlaybackHistory(){try{await this.storage.removeItem(b.PLAYBACK_HISTORY)}catch(e){console.warn("Failed to clear playback history:",e)}}async savePlaybackPosition(e,t){const n=(await this.getSessionState())?.playbackPosition||{};await this.saveSessionState({playbackPosition:{...n,[e]:t}})}async getPlaybackPosition(e){return(await this.getSessionState())?.playbackPosition?.[e]||0}extractUserPreferences(e){return{volume:e.volume,isMuted:e.isMuted,playbackRate:e.playbackRate,subtitlesShowing:e.subtitlesShowing,selectedSubtitleTrack:e.selectedSubtitleTrack?.id||null,preferredRendition:e.selectedRendition,autoplay:!1,keyboardShortcuts:!0}}extractSessionState(e,t){return{currentTime:e.currentTime,mediaId:t,playbackPosition:{}}}async clearAll(){await this.storage.clear(),this.debounceTimeouts.clear()}isCacheExpired(e){return e?Date.now()-e>this.config.maxCacheAge:!0}debounce(e,t){const s=this.debounceTimeouts.get(e);s&&clearTimeout(s);const n=setTimeout(async()=>{await t(),this.debounceTimeouts.delete(e)},this.config.debounceMs);this.debounceTimeouts.set(e,n)}}function we(i){const[e]=T.useState(()=>new be(i));return T.useEffect(()=>()=>{e.clearAll()},[e]),e}function Pe(i,e,t){const s=we(t),[n,a]=T.useState(!1);return T.useEffect(()=>{let d=!0;return(async()=>{try{const[S,g]=await Promise.all([s.getUserPreferences(),s.getSessionState()]);if(!d)return;const p={...S&&{volume:S.volume,isMuted:S.isMuted,playbackRate:S.playbackRate,subtitlesShowing:S.subtitlesShowing},...g&&e===g.mediaId&&{currentTime:g.currentTime}};Object.keys(p).length>0&&console.log("Rehydrated state:",p),a(!0)}catch(S){console.warn("Failed to rehydrate state:",S),a(!0)}})(),()=>{d=!1}},[s,e]),T.useEffect(()=>{if(!n)return;const d=s.extractUserPreferences(i);if(s.saveUserPreferences(d),e){const c=s.extractSessionState(i,e);s.saveSessionState(c),i.currentTime>0&&i.duration>0&&s.savePlaybackPosition(e,i.currentTime)}},[s,i,e,n]),{manager:s,isRehydrated:n}}const Oe={maxRetries:3,baseDelay:1e3,maxDelay:1e4,exponentialBackoff:!0,retryableErrors:["NETWORK_ERROR","TIMEOUT_ERROR"],retryableActions:["PLAY","PAUSE","SEEK","SET_VOLUME","ENTER_FULLSCREEN","EXIT_FULLSCREEN"]};class Ae{canRecover(e){return e.type==="NETWORK_ERROR"&&e.retryCount<3}async recover(e){navigator.onLine===!1&&await new Promise(t=>{const s=()=>{window.removeEventListener("online",s),t(void 0)};window.addEventListener("online",s)}),await new Promise(t=>setTimeout(t,2e3))}}class ve{canRecover(e){return e.type==="PLAYBACK_ERROR"&&e.retryCount<2}async recover(e){const t=document.querySelector("video, audio");t&&(t.load(),await new Promise(s=>{const n=()=>{t.removeEventListener("canplay",n),s(void 0)};t.addEventListener("canplay",n)}))}}class Ie{canRecover(e){return e.type==="PERMISSION_ERROR"&&e.action?.type==="ENTER_FULLSCREEN"}async recover(e){console.warn("Fullscreen requires user interaction")}}class Ne{constructor(e={},t=[]){k(this,"config");k(this,"recoveryStrategies");k(this,"errorQueue",new Map);k(this,"listeners",new Set);this.config={...Oe,...e},this.recoveryStrategies=[new Ae,new ve,new Ie,...t]}createMediaError(e,t,s=0){const n=Date.now();if(e instanceof Error){const a=this.categorizeError(e,t);return{type:a,message:e.message,action:t,timestamp:n,retryable:this.isRetryable(a,t),retryCount:s,originalError:e}}return{type:"UNKNOWN_ERROR",message:typeof e=="string"?e:"Unknown error occurred",action:t,timestamp:n,retryable:this.isRetryable("UNKNOWN_ERROR",t),retryCount:s}}categorizeError(e,t){const s=e.message.toLowerCase();return s.includes("network")||s.includes("fetch")||s.includes("connection")||e.name==="NetworkError"?"NETWORK_ERROR":s.includes("permission")||s.includes("denied")||s.includes("fullscreen")||e.name==="NotAllowedError"?"PERMISSION_ERROR":s.includes("decode")||s.includes("format")||s.includes("codec")||t?.type==="PLAY"?"PLAYBACK_ERROR":s.includes("timeout")||e.name==="TimeoutError"?"TIMEOUT_ERROR":s.includes("not supported")||s.includes("unsupported")||e.name==="NotSupportedError"?"NOT_SUPPORTED_ERROR":"UNKNOWN_ERROR"}isRetryable(e,t){const s=this.config.retryableErrors.includes(e),n=!t||this.config.retryableActions.includes(t.type);return s&&n}calculateRetryDelay(e){if(!this.config.exponentialBackoff)return this.config.baseDelay;const t=this.config.baseDelay*Math.pow(2,e);return Math.min(t,this.config.maxDelay)}async handleError(e,t,s){const n=this.createMediaError(e,t,t?.retryCount||0),a=`${t?.type}-${n.timestamp}`;this.errorQueue.set(a,n),this.listeners.forEach(d=>d(n));for(const d of this.recoveryStrategies)if(d.canRecover(n))try{await d.recover(n);break}catch(c){console.warn("Recovery strategy failed:",c)}if(n.retryable&&n.retryCount<this.config.maxRetries&&s&&t){const d=this.calculateRetryDelay(n.retryCount);console.log(`Retrying action ${t.type} in ${d}ms (attempt ${n.retryCount+1}/${this.config.maxRetries})`),setTimeout(async()=>{try{await s({...t,retryCount:n.retryCount+1}),this.errorQueue.delete(a)}catch(c){await this.handleError(c,{...t,retryCount:n.retryCount+1},s)}},d)}return n}subscribe(e){return this.listeners.add(e),()=>this.listeners.delete(e)}getErrors(){return Array.from(this.errorQueue.values())}clearError(e){this.errorQueue.delete(e)}clearAllErrors(){this.errorQueue.clear()}getErrorStats(){const e=this.getErrors(),t=Date.now(),s=300*1e3,n=e.reduce((c,S)=>(c[S.type]=(c[S.type]||0)+1,c),{}),a=e.filter(c=>c.retryable).length,d=e.filter(c=>t-c.timestamp<s);return{totalErrors:e.length,errorsByType:n,retryableErrors:a,recentErrors:d}}}function Me(i=$){let e={...i};const t=new Set,s=c=>(t.add(c),()=>t.delete(c)),n=()=>e,a=c=>{const S={...e,...c};JSON.stringify(S)!==JSON.stringify(e)&&(e=S,t.forEach(g=>g()))};return{subscribe:s,getState:n,setState:a,dispatch:c=>{switch(c.type){case o.PLAY:a({isPlaying:!0,error:null});break;case o.PAUSE:a({isPlaying:!1});break;case o.SEEK:a({currentTime:c.detail});break;case o.SET_VOLUME:a({volume:Math.max(0,Math.min(1,c.detail))});break;case o.MUTE:a({isMuted:!0});break;case o.UNMUTE:a({isMuted:!1});break;case o.TOGGLE_MUTE:a({isMuted:!e.isMuted});break;case o.SET_DURATION:a({duration:c.detail});break;case o.SET_CURRENT_TIME:a({currentTime:c.detail});break;case o.SET_BUFFERED:a({buffered:c.detail});break;case o.SET_LOADING:a({isLoading:c.detail});break;case o.SET_ERROR:a({error:c.detail,isLoading:!1});break;case o.ENTER_FULLSCREEN:a({isFullscreen:!0});break;case o.EXIT_FULLSCREEN:a({isFullscreen:!1});break;case o.ENTER_PIP:a({isPictureInPicture:!0});break;case o.EXIT_PIP:a({isPictureInPicture:!1});break;case o.SET_PLAYBACK_RATE:a({playbackRate:c.detail});break;case o.SET_SUBTITLE_TRACK:a({selectedSubtitleTrack:c.detail});break;case o.SET_RENDITION:a({selectedRendition:c.detail});break;case o.TOGGLE_SUBTITLES:a({subtitlesShowing:!e.subtitlesShowing});break;case o.PREVIEW_TIME:a({previewTime:c.detail});break;case o.CLEAR_PREVIEW:a({previewTime:null,previewImage:null,previewCoords:null});break;default:console.warn(`Unknown media action type: ${c.type}`)}}}}function ke({children:i,mediaId:e="media-player",labelId:t="media-player-label",descriptionId:s="media-player-description",dir:n="ltr",portalContainer:a,tooltipDelayDuration:d=700,tooltipSideOffset:c=4,disabled:S=!1,isVideo:g=!0,withoutTooltip:p=!1,initialState:F={},useEnhancedStore:_=!0,persistenceConfig:A,retryConfig:D,enableOptimisticUpdates:L=!0,enableErrorRecovery:U=!0,onStateRehydrated:v}){const G=T.useRef(null),Y=T.useRef(null),I=T.useMemo(()=>{const w={...$,...F};return _?le(w,A):Me(w)},[_,A]),C=T.useMemo(()=>U&&_?new Ne(D):null,[U,_,D]),h=_?Pe(I.getState(),e,A):null;T.useEffect(()=>{if(h?.isRehydrated&&v){const w=I.getState();v(w)}},[h?.isRehydrated,v,I]);const B=T.useMemo(()=>({mediaId:e,labelId:t,descriptionId:s,dir:n,rootRef:G,mediaRef:Y,portalContainer:a,tooltipDelayDuration:d,tooltipSideOffset:c,disabled:S,isVideo:g,withoutTooltip:p,errorHandler:C,isEnhanced:_,isRehydrated:h?.isRehydrated}),[e,t,s,n,a,d,c,S,g,p,C,_,h?.isRehydrated]);return z.jsx(Z.Provider,{value:B,children:z.jsx(ee.Provider,{value:I,children:i})})}exports.MediaActionTypes=o;exports.MediaContext=Z;exports.MediaProvider=ke;exports.MediaStoreContext=ee;exports.createEnhancedMediaStore=le;exports.initialMediaState=$;exports.jsxRuntimeExports=z;exports.useMediaContext=ce;exports.useMediaDispatch=Re;exports.useMediaEnhancements=pe;exports.useMediaSelector=ye;exports.useMediaStore=H;exports.useOptimisticMediaSelector=me;
|
|
23
|
-
//# sourceMappingURL=context-DCJ_scmO.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"context-DCJ_scmO.cjs","sources":["../../../node_modules/react/cjs/react-jsx-runtime.production.js","../../../node_modules/react/cjs/react-jsx-runtime.development.js","../../../node_modules/react/jsx-runtime.js","../src/context/media-context.tsx","../src/context/media-store.ts","../src/context/persistence.ts","../src/context/error-handling.ts","../src/context/media-provider.tsx"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\nvar REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\");\nfunction jsxProd(type, config, maybeKey) {\n var key = null;\n void 0 !== maybeKey && (key = \"\" + maybeKey);\n void 0 !== config.key && (key = \"\" + config.key);\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n config = maybeKey.ref;\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n ref: void 0 !== config ? config : null,\n props: maybeKey\n };\n}\nexports.Fragment = REACT_FRAGMENT_TYPE;\nexports.jsx = jsxProd;\nexports.jsxs = jsxProd;\n","/**\n * @license React\n * react-jsx-runtime.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function getComponentNameFromType(type) {\n if (null == type) return null;\n if (\"function\" === typeof type)\n return type.$$typeof === REACT_CLIENT_REFERENCE\n ? null\n : type.displayName || type.name || null;\n if (\"string\" === typeof type) return type;\n switch (type) {\n case REACT_FRAGMENT_TYPE:\n return \"Fragment\";\n case REACT_PROFILER_TYPE:\n return \"Profiler\";\n case REACT_STRICT_MODE_TYPE:\n return \"StrictMode\";\n case REACT_SUSPENSE_TYPE:\n return \"Suspense\";\n case REACT_SUSPENSE_LIST_TYPE:\n return \"SuspenseList\";\n case REACT_ACTIVITY_TYPE:\n return \"Activity\";\n }\n if (\"object\" === typeof type)\n switch (\n (\"number\" === typeof type.tag &&\n console.error(\n \"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"\n ),\n type.$$typeof)\n ) {\n case REACT_PORTAL_TYPE:\n return \"Portal\";\n case REACT_CONTEXT_TYPE:\n return (type.displayName || \"Context\") + \".Provider\";\n case REACT_CONSUMER_TYPE:\n return (type._context.displayName || \"Context\") + \".Consumer\";\n case REACT_FORWARD_REF_TYPE:\n var innerType = type.render;\n type = type.displayName;\n type ||\n ((type = innerType.displayName || innerType.name || \"\"),\n (type = \"\" !== type ? \"ForwardRef(\" + type + \")\" : \"ForwardRef\"));\n return type;\n case REACT_MEMO_TYPE:\n return (\n (innerType = type.displayName || null),\n null !== innerType\n ? innerType\n : getComponentNameFromType(type.type) || \"Memo\"\n );\n case REACT_LAZY_TYPE:\n innerType = type._payload;\n type = type._init;\n try {\n return getComponentNameFromType(type(innerType));\n } catch (x) {}\n }\n return null;\n }\n function testStringCoercion(value) {\n return \"\" + value;\n }\n function checkKeyStringCoercion(value) {\n try {\n testStringCoercion(value);\n var JSCompiler_inline_result = !1;\n } catch (e) {\n JSCompiler_inline_result = !0;\n }\n if (JSCompiler_inline_result) {\n JSCompiler_inline_result = console;\n var JSCompiler_temp_const = JSCompiler_inline_result.error;\n var JSCompiler_inline_result$jscomp$0 =\n (\"function\" === typeof Symbol &&\n Symbol.toStringTag &&\n value[Symbol.toStringTag]) ||\n value.constructor.name ||\n \"Object\";\n JSCompiler_temp_const.call(\n JSCompiler_inline_result,\n \"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\",\n JSCompiler_inline_result$jscomp$0\n );\n return testStringCoercion(value);\n }\n }\n function getTaskName(type) {\n if (type === REACT_FRAGMENT_TYPE) return \"<>\";\n if (\n \"object\" === typeof type &&\n null !== type &&\n type.$$typeof === REACT_LAZY_TYPE\n )\n return \"<...>\";\n try {\n var name = getComponentNameFromType(type);\n return name ? \"<\" + name + \">\" : \"<...>\";\n } catch (x) {\n return \"<...>\";\n }\n }\n function getOwner() {\n var dispatcher = ReactSharedInternals.A;\n return null === dispatcher ? null : dispatcher.getOwner();\n }\n function UnknownOwner() {\n return Error(\"react-stack-top-frame\");\n }\n function hasValidKey(config) {\n if (hasOwnProperty.call(config, \"key\")) {\n var getter = Object.getOwnPropertyDescriptor(config, \"key\").get;\n if (getter && getter.isReactWarning) return !1;\n }\n return void 0 !== config.key;\n }\n function defineKeyPropWarningGetter(props, displayName) {\n function warnAboutAccessingKey() {\n specialPropKeyWarningShown ||\n ((specialPropKeyWarningShown = !0),\n console.error(\n \"%s: `key` is not a prop. Trying to access it will result in `undefined` being returned. If you need to access the same value within the child component, you should pass it as a different prop. (https://react.dev/link/special-props)\",\n displayName\n ));\n }\n warnAboutAccessingKey.isReactWarning = !0;\n Object.defineProperty(props, \"key\", {\n get: warnAboutAccessingKey,\n configurable: !0\n });\n }\n function elementRefGetterWithDeprecationWarning() {\n var componentName = getComponentNameFromType(this.type);\n didWarnAboutElementRef[componentName] ||\n ((didWarnAboutElementRef[componentName] = !0),\n console.error(\n \"Accessing element.ref was removed in React 19. ref is now a regular prop. It will be removed from the JSX Element type in a future release.\"\n ));\n componentName = this.props.ref;\n return void 0 !== componentName ? componentName : null;\n }\n function ReactElement(\n type,\n key,\n self,\n source,\n owner,\n props,\n debugStack,\n debugTask\n ) {\n self = props.ref;\n type = {\n $$typeof: REACT_ELEMENT_TYPE,\n type: type,\n key: key,\n props: props,\n _owner: owner\n };\n null !== (void 0 !== self ? self : null)\n ? Object.defineProperty(type, \"ref\", {\n enumerable: !1,\n get: elementRefGetterWithDeprecationWarning\n })\n : Object.defineProperty(type, \"ref\", { enumerable: !1, value: null });\n type._store = {};\n Object.defineProperty(type._store, \"validated\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: 0\n });\n Object.defineProperty(type, \"_debugInfo\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: null\n });\n Object.defineProperty(type, \"_debugStack\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugStack\n });\n Object.defineProperty(type, \"_debugTask\", {\n configurable: !1,\n enumerable: !1,\n writable: !0,\n value: debugTask\n });\n Object.freeze && (Object.freeze(type.props), Object.freeze(type));\n return type;\n }\n function jsxDEVImpl(\n type,\n config,\n maybeKey,\n isStaticChildren,\n source,\n self,\n debugStack,\n debugTask\n ) {\n var children = config.children;\n if (void 0 !== children)\n if (isStaticChildren)\n if (isArrayImpl(children)) {\n for (\n isStaticChildren = 0;\n isStaticChildren < children.length;\n isStaticChildren++\n )\n validateChildKeys(children[isStaticChildren]);\n Object.freeze && Object.freeze(children);\n } else\n console.error(\n \"React.jsx: Static children should always be an array. You are likely explicitly calling React.jsxs or React.jsxDEV. Use the Babel transform instead.\"\n );\n else validateChildKeys(children);\n if (hasOwnProperty.call(config, \"key\")) {\n children = getComponentNameFromType(type);\n var keys = Object.keys(config).filter(function (k) {\n return \"key\" !== k;\n });\n isStaticChildren =\n 0 < keys.length\n ? \"{key: someKey, \" + keys.join(\": ..., \") + \": ...}\"\n : \"{key: someKey}\";\n didWarnAboutKeySpread[children + isStaticChildren] ||\n ((keys =\n 0 < keys.length ? \"{\" + keys.join(\": ..., \") + \": ...}\" : \"{}\"),\n console.error(\n 'A props object containing a \"key\" prop is being spread into JSX:\\n let props = %s;\\n <%s {...props} />\\nReact keys must be passed directly to JSX without using spread:\\n let props = %s;\\n <%s key={someKey} {...props} />',\n isStaticChildren,\n children,\n keys,\n children\n ),\n (didWarnAboutKeySpread[children + isStaticChildren] = !0));\n }\n children = null;\n void 0 !== maybeKey &&\n (checkKeyStringCoercion(maybeKey), (children = \"\" + maybeKey));\n hasValidKey(config) &&\n (checkKeyStringCoercion(config.key), (children = \"\" + config.key));\n if (\"key\" in config) {\n maybeKey = {};\n for (var propName in config)\n \"key\" !== propName && (maybeKey[propName] = config[propName]);\n } else maybeKey = config;\n children &&\n defineKeyPropWarningGetter(\n maybeKey,\n \"function\" === typeof type\n ? type.displayName || type.name || \"Unknown\"\n : type\n );\n return ReactElement(\n type,\n children,\n self,\n source,\n getOwner(),\n maybeKey,\n debugStack,\n debugTask\n );\n }\n function validateChildKeys(node) {\n \"object\" === typeof node &&\n null !== node &&\n node.$$typeof === REACT_ELEMENT_TYPE &&\n node._store &&\n (node._store.validated = 1);\n }\n var React = require(\"react\"),\n REACT_ELEMENT_TYPE = Symbol.for(\"react.transitional.element\"),\n REACT_PORTAL_TYPE = Symbol.for(\"react.portal\"),\n REACT_FRAGMENT_TYPE = Symbol.for(\"react.fragment\"),\n REACT_STRICT_MODE_TYPE = Symbol.for(\"react.strict_mode\"),\n REACT_PROFILER_TYPE = Symbol.for(\"react.profiler\");\n Symbol.for(\"react.provider\");\n var REACT_CONSUMER_TYPE = Symbol.for(\"react.consumer\"),\n REACT_CONTEXT_TYPE = Symbol.for(\"react.context\"),\n REACT_FORWARD_REF_TYPE = Symbol.for(\"react.forward_ref\"),\n REACT_SUSPENSE_TYPE = Symbol.for(\"react.suspense\"),\n REACT_SUSPENSE_LIST_TYPE = Symbol.for(\"react.suspense_list\"),\n REACT_MEMO_TYPE = Symbol.for(\"react.memo\"),\n REACT_LAZY_TYPE = Symbol.for(\"react.lazy\"),\n REACT_ACTIVITY_TYPE = Symbol.for(\"react.activity\"),\n REACT_CLIENT_REFERENCE = Symbol.for(\"react.client.reference\"),\n ReactSharedInternals =\n React.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n hasOwnProperty = Object.prototype.hasOwnProperty,\n isArrayImpl = Array.isArray,\n createTask = console.createTask\n ? console.createTask\n : function () {\n return null;\n };\n React = {\n \"react-stack-bottom-frame\": function (callStackForError) {\n return callStackForError();\n }\n };\n var specialPropKeyWarningShown;\n var didWarnAboutElementRef = {};\n var unknownOwnerDebugStack = React[\"react-stack-bottom-frame\"].bind(\n React,\n UnknownOwner\n )();\n var unknownOwnerDebugTask = createTask(getTaskName(UnknownOwner));\n var didWarnAboutKeySpread = {};\n exports.Fragment = REACT_FRAGMENT_TYPE;\n exports.jsx = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !1,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n exports.jsxs = function (type, config, maybeKey, source, self) {\n var trackActualOwner =\n 1e4 > ReactSharedInternals.recentlyCreatedOwnerStacks++;\n return jsxDEVImpl(\n type,\n config,\n maybeKey,\n !0,\n source,\n self,\n trackActualOwner\n ? Error(\"react-stack-top-frame\")\n : unknownOwnerDebugStack,\n trackActualOwner ? createTask(getTaskName(type)) : unknownOwnerDebugTask\n );\n };\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","\"use client\"\n\nimport React from \"react\"\n\n// Media action types\nexport const MediaActionTypes = {\n\tPLAY: \"PLAY\",\n\tPAUSE: \"PAUSE\",\n\tSEEK: \"SEEK\",\n\tSET_VOLUME: \"SET_VOLUME\",\n\tMUTE: \"MUTE\",\n\tUNMUTE: \"UNMUTE\",\n\tTOGGLE_MUTE: \"TOGGLE_MUTE\",\n\tSET_DURATION: \"SET_DURATION\",\n\tSET_CURRENT_TIME: \"SET_CURRENT_TIME\",\n\tSET_BUFFERED: \"SET_BUFFERED\",\n\tSET_LOADING: \"SET_LOADING\",\n\tSET_ERROR: \"SET_ERROR\",\n\tENTER_FULLSCREEN: \"ENTER_FULLSCREEN\",\n\tEXIT_FULLSCREEN: \"EXIT_FULLSCREEN\",\n\tENTER_PIP: \"ENTER_PIP\",\n\tEXIT_PIP: \"EXIT_PIP\",\n\tSET_PLAYBACK_RATE: \"SET_PLAYBACK_RATE\",\n\tSET_SUBTITLE_TRACK: \"SET_SUBTITLE_TRACK\",\n\tSET_RENDITION: \"SET_RENDITION\",\n\tTOGGLE_SUBTITLES: \"TOGGLE_SUBTITLES\",\n\tPREVIEW_TIME: \"PREVIEW_TIME\",\n\tCLEAR_PREVIEW: \"CLEAR_PREVIEW\",\n\t// New actions for Video.js adapter\n\tSET_BUFFERING: \"SET_BUFFERING\",\n\tSET_QUALITY_LEVEL: \"SET_QUALITY_LEVEL\",\n\tSET_BANDWIDTH_ESTIMATE: \"SET_BANDWIDTH_ESTIMATE\",\n\tSET_ACTIVE_TEXT_TRACKS: \"SET_ACTIVE_TEXT_TRACKS\"\n} as const\n\nexport type MediaActionType = (typeof MediaActionTypes)[keyof typeof MediaActionTypes]\n\n// Media state interface\nexport interface MediaState {\n\t// Playback state\n\tisPlaying: boolean\n\tcurrentTime: number\n\tduration: number\n\tbuffered: TimeRanges | null\n\tisLoading: boolean\n\tisBuffering: boolean\n\terror: string | null\n\n\t// Audio state\n\tvolume: number\n\tisMuted: boolean\n\n\t// Video state\n\tisFullscreen: boolean\n\tisPictureInPicture: boolean\n\n\t// Advanced features\n\tplaybackRate: number\n\tsubtitlesShowing: boolean\n\tselectedSubtitleTrack: TextTrack | null\n\tselectedRendition: string | null\n\tqualityLevel: number\n\tbandwidthEstimate: number\n\tactiveTextTracks: any[]\n\n\t// Preview state (for seek preview)\n\tpreviewTime: number | null\n\tpreviewImage: string | null\n\tpreviewCoords: { x: number; y: number; width: number; height: number } | null\n\n\t// Media lists\n\tsubtitlesList: TextTrack[]\n\trenditionList: Array<{ id: string; label: string; width?: number; height?: number }>\n}\n\n// Media action interface\nexport interface MediaAction {\n\ttype: MediaActionType\n\tdetail?: any\n}\n\n// Media context interface\nexport interface MediaContextValue {\n\tmediaId: string\n\tlabelId: string\n\tdescriptionId: string\n\tdir?: \"ltr\" | \"rtl\"\n\trootRef: React.RefObject<HTMLDivElement | null>\n\tmediaRef: React.RefObject<HTMLVideoElement | HTMLAudioElement | null>\n\tportalContainer?: HTMLElement\n\ttooltipDelayDuration: number\n\ttooltipSideOffset: number\n\tdisabled: boolean\n\tisVideo: boolean\n\twithoutTooltip: boolean\n}\n\n// Store interface for internal state management\nexport interface MediaStore {\n\tsubscribe: (callback: () => void) => () => void\n\tgetState: () => MediaState\n\tsetState: (updates: Partial<MediaState>) => void\n\tdispatch: (action: MediaAction) => void\n}\n\n// Create the media context\nexport const MediaContext = React.createContext<MediaContextValue | null>(null)\n\n// Hook to use media context\nexport function useMediaContext() {\n\tconst context = React.useContext(MediaContext)\n\tif (!context) {\n\t\tthrow new Error(\"useMediaContext must be used within a MediaPlayer\")\n\t}\n\treturn context\n}\n\n// Store context for state management\nexport const MediaStoreContext = React.createContext<MediaStore | null>(null)\n\n// Hook to use media store\nexport function useMediaStore() {\n\tconst store = React.useContext(MediaStoreContext)\n\tif (!store) {\n\t\tthrow new Error(\"useMediaStore must be used within a MediaPlayer\")\n\t}\n\treturn store\n}\n\n// Hook to select specific state values - React 19 optimized\nexport function useMediaSelector<T>(selector: (state: MediaState) => T): T {\n\tconst store = useMediaStore()\n\n\t// React 19 compiler will optimize this callback\n\tconst getSnapshot = () => selector(store.getState())\n\n\treturn React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot)\n}\n\n// Hook to get dispatch function\nexport function useMediaDispatch() {\n\tconst store = useMediaStore()\n\treturn store.dispatch\n}\n\n// React 19 enhanced context selector with optimistic updates\nexport function useOptimisticMediaSelector<T>(selector: (state: MediaState) => T): T {\n\tconst store = useMediaStore()\n\t\n\t// Check if enhanced store is available\n\tconst isEnhanced = 'getOptimisticState' in store\n\t\n\tconst getSnapshot = () => {\n\t\tif (isEnhanced) {\n\t\t\t// Use optimistic state for immediate UI feedback\n\t\t\treturn selector((store as any).getOptimisticState())\n\t\t} else {\n\t\t\t// Fall back to regular state\n\t\t\treturn selector(store.getState())\n\t\t}\n\t}\n\n\treturn React.useSyncExternalStore(store.subscribe, getSnapshot, getSnapshot)\n}\n\n// Hook for accessing React 19 enhanced features\nexport function useMediaEnhancements() {\n\tconst store = useMediaStore()\n\tconst context = useMediaContext()\n\t\n\tconst isEnhanced = 'getOptimisticState' in store\n\tconst errorHandler = 'errorHandler' in context ? (context as any).errorHandler : null\n\tconst isRehydrated = 'isRehydrated' in context ? (context as any).isRehydrated : true\n\t\n\treturn {\n\t\tisEnhanced,\n\t\terrorHandler,\n\t\tisRehydrated,\n\t\tactionsState: isEnhanced ? (store as any).getActionState() : null\n\t}\n}\n\n// Initial media state\nexport const initialMediaState: MediaState = {\n\tisPlaying: false,\n\tcurrentTime: 0,\n\tduration: 0,\n\tbuffered: null,\n\tisLoading: false,\n\tisBuffering: false,\n\terror: null,\n\tvolume: 1,\n\tisMuted: false,\n\tisFullscreen: false,\n\tisPictureInPicture: false,\n\tplaybackRate: 1,\n\tsubtitlesShowing: false,\n\tselectedSubtitleTrack: null,\n\tselectedRendition: null,\n\tqualityLevel: -1,\n\tbandwidthEstimate: 0,\n\tactiveTextTracks: [],\n\tpreviewTime: null,\n\tpreviewImage: null,\n\tpreviewCoords: null,\n\tsubtitlesList: [],\n\trenditionList: []\n}\n","\"use client\"\n\nimport React from \"react\"\nimport type { MediaState, MediaAction, MediaActionType } from \"./media-context\"\nimport { MediaActionTypes, initialMediaState } from \"./media-context\"\n\n// Enhanced action types for React 19 features\nexport interface OptimisticMediaAction extends MediaAction {\n\toptimistic?: boolean\n\tretryCount?: number\n\ttimestamp?: number\n}\n\n// Action state for useActionState\nexport interface MediaActionState {\n\tpending: boolean\n\terror: string | null\n\tlastAction: OptimisticMediaAction | null\n\tretryCount: number\n}\n\n// State persistence configuration\nexport interface PersistenceConfig {\n\tenabled: boolean\n\tkey: string\n\tpersist: Array<keyof MediaState>\n\tdebounceMs: number\n}\n\n// Enhanced media store interface\nexport interface EnhancedMediaStore {\n\t// Original store interface\n\tsubscribe: (callback: () => void) => () => void\n\tgetState: () => MediaState\n\tsetState: (updates: Partial<MediaState>) => void\n\tdispatch: (action: MediaAction) => void\n\t\n\t// React 19 enhancements\n\tgetOptimisticState: () => MediaState\n\tdispatchOptimistic: (action: OptimisticMediaAction) => Promise<void>\n\trollbackOptimistic: (actionId: string) => void\n\tgetActionState: () => MediaActionState\n\tsetPersistenceConfig: (config: Partial<PersistenceConfig>) => void\n\trehydrateFromStorage: () => Promise<void>\n\tclearPersistedState: () => void\n}\n\n// Default persistence configuration\nconst DEFAULT_PERSISTENCE_CONFIG: PersistenceConfig = {\n\tenabled: true,\n\tkey: \"baroi-player-state\",\n\tpersist: [\"volume\", \"isMuted\", \"playbackRate\", \"subtitlesShowing\"],\n\tdebounceMs: 500\n}\n\n// Create enhanced media store with React 19 features\nexport function createEnhancedMediaStore(\n\tinitialState: MediaState = initialMediaState,\n\tpersistenceConfig: Partial<PersistenceConfig> = {}\n): EnhancedMediaStore {\n\tlet state = { ...initialState }\n\tlet optimisticState = { ...initialState }\n\tlet actionState: MediaActionState = {\n\t\tpending: false,\n\t\terror: null,\n\t\tlastAction: null,\n\t\tretryCount: 0\n\t}\n\n\tconst config = { ...DEFAULT_PERSISTENCE_CONFIG, ...persistenceConfig }\n\tconst listeners = new Set<() => void>()\n\tconst optimisticQueue = new Map<string, OptimisticMediaAction>()\n\tlet persistenceTimeout: NodeJS.Timeout | null = null\n\t\n\tconst subscribe = (callback: () => void) => {\n\t\tlisteners.add(callback)\n\t\treturn () => listeners.delete(callback)\n\t}\n\n\tconst notifyListeners = () => {\n\t\tlisteners.forEach((callback) => callback())\n\t}\n\n\tconst getState = () => state\n\n\tconst getOptimisticState = () => optimisticState\n\n\tconst getActionState = () => actionState\n\n\t// Persistence helpers\n\tconst persistState = async () => {\n\t\tif (!config.enabled || typeof window === 'undefined') return\n\t\t\n\t\tconst persistedData = config.persist.reduce((acc, key) => {\n\t\t\t(acc as any)[key] = state[key]\n\t\t\treturn acc\n\t\t}, {} as Partial<MediaState>)\n\n\t\ttry {\n\t\t\tlocalStorage.setItem(config.key, JSON.stringify({\n\t\t\t\t...persistedData,\n\t\t\t\ttimestamp: Date.now()\n\t\t\t}))\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to persist media state:', error)\n\t\t}\n\t}\n\n\tconst debouncedPersist = () => {\n\t\tif (persistenceTimeout) {\n\t\t\tclearTimeout(persistenceTimeout)\n\t\t}\n\t\tpersistenceTimeout = setTimeout(persistState, config.debounceMs)\n\t}\n\n\tconst rehydrateFromStorage = async () => {\n\t\tif (!config.enabled || typeof window === 'undefined') return\n\n\t\ttry {\n\t\t\tconst stored = localStorage.getItem(config.key)\n\t\t\tif (!stored) return\n\n\t\t\tconst parsedData = JSON.parse(stored) as any\n\t\t\tconst { timestamp, ...persistedState } = parsedData\n\n\t\t\t// Only rehydrate if data is less than 7 days old\n\t\t\tconst maxAge = 7 * 24 * 60 * 60 * 1000 // 7 days\n\t\t\tif (timestamp && Date.now() - timestamp > maxAge) {\n\t\t\t\tclearPersistedState()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Merge persisted state with current state\n\t\t\tconst newState = { ...state, ...persistedState }\n\t\t\tif (JSON.stringify(newState) !== JSON.stringify(state)) {\n\t\t\t\tstate = newState\n\t\t\t\toptimisticState = { ...newState }\n\t\t\t\tnotifyListeners()\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to rehydrate media state:', error)\n\t\t}\n\t}\n\n\tconst clearPersistedState = () => {\n\t\tif (typeof window === 'undefined') return\n\t\ttry {\n\t\t\tlocalStorage.removeItem(config.key)\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to clear persisted state:', error)\n\t\t}\n\t}\n\n\tconst setPersistenceConfig = (newConfig: Partial<PersistenceConfig>) => {\n\t\tObject.assign(config, newConfig)\n\t}\n\n\tconst setState = (updates: Partial<MediaState>) => {\n\t\tconst newState = { ...state, ...updates }\n\t\tif (JSON.stringify(newState) !== JSON.stringify(state)) {\n\t\t\tstate = newState\n\t\t\toptimisticState = { ...newState }\n\t\t\t\n\t\t\t// Persist relevant changes\n\t\t\tdebouncedPersist()\n\t\t\tnotifyListeners()\n\t\t}\n\t}\n\n\tconst applyOptimisticUpdate = (action: OptimisticMediaAction) => {\n\t\tconst actionId = `${action.type}-${Date.now()}-${Math.random()}`\n\t\t\n\t\t// Store original action for rollback\n\t\toptimisticQueue.set(actionId, { ...action, timestamp: Date.now() })\n\n\t\t// Apply optimistic update to optimistic state\n\t\tconst optimisticUpdate = processMediaAction(optimisticState, action)\n\t\toptimisticState = { ...optimisticState, ...optimisticUpdate }\n\t\t\n\t\tnotifyListeners()\n\t\treturn actionId\n\t}\n\n\tconst rollbackOptimistic = (actionId: string) => {\n\t\tif (!optimisticQueue.has(actionId)) return\n\n\t\t// Remove from queue and recalculate optimistic state\n\t\toptimisticQueue.delete(actionId)\n\t\t\n\t\t// Rebuild optimistic state from actual state + remaining optimistic actions\n\t\toptimisticState = { ...state }\n\t\tfor (const [, action] of optimisticQueue) {\n\t\t\tconst update = processMediaAction(optimisticState, action)\n\t\t\toptimisticState = { ...optimisticState, ...update }\n\t\t}\n\t\t\n\t\tnotifyListeners()\n\t}\n\n\t// Process media action and return state updates\n\tconst processMediaAction = (currentState: MediaState, action: MediaAction): Partial<MediaState> => {\n\t\tswitch (action.type) {\n\t\t\tcase MediaActionTypes.PLAY:\n\t\t\t\treturn { isPlaying: true, error: null }\n\t\t\t\n\t\t\tcase MediaActionTypes.PAUSE:\n\t\t\t\treturn { isPlaying: false }\n\t\t\t\n\t\t\tcase MediaActionTypes.SEEK:\n\t\t\t\treturn { currentTime: action.detail }\n\t\t\t\n\t\t\tcase MediaActionTypes.SET_VOLUME:\n\t\t\t\treturn { volume: Math.max(0, Math.min(1, action.detail)) }\n\t\t\t\n\t\t\tcase MediaActionTypes.MUTE:\n\t\t\t\treturn { isMuted: true }\n\t\t\t\n\t\t\tcase MediaActionTypes.UNMUTE:\n\t\t\t\treturn { isMuted: false }\n\t\t\t\n\t\t\tcase MediaActionTypes.TOGGLE_MUTE:\n\t\t\t\treturn { isMuted: !currentState.isMuted }\n\t\t\t\n\t\t\tcase MediaActionTypes.SET_DURATION:\n\t\t\t\treturn { duration: action.detail }\n\t\t\t\n\t\t\tcase MediaActionTypes.SET_CURRENT_TIME:\n\t\t\t\treturn { currentTime: action.detail }\n\t\t\t\n\t\t\tcase MediaActionTypes.SET_BUFFERED:\n\t\t\t\treturn { buffered: action.detail }\n\t\t\t\n\t\t\tcase MediaActionTypes.SET_LOADING:\n\t\t\t\treturn { isLoading: action.detail }\n\t\t\t\n\t\t\tcase MediaActionTypes.SET_ERROR:\n\t\t\t\treturn { error: action.detail, isLoading: false }\n\t\t\t\n\t\t\tcase MediaActionTypes.ENTER_FULLSCREEN:\n\t\t\t\treturn { isFullscreen: true }\n\t\t\t\n\t\t\tcase MediaActionTypes.EXIT_FULLSCREEN:\n\t\t\t\treturn { isFullscreen: false }\n\t\t\t\n\t\t\tcase MediaActionTypes.ENTER_PIP:\n\t\t\t\treturn { isPictureInPicture: true }\n\t\t\t\n\t\t\tcase MediaActionTypes.EXIT_PIP:\n\t\t\t\treturn { isPictureInPicture: false }\n\t\t\t\n\t\t\tcase MediaActionTypes.SET_PLAYBACK_RATE:\n\t\t\t\treturn { playbackRate: action.detail }\n\t\t\t\n\t\t\tcase MediaActionTypes.SET_SUBTITLE_TRACK:\n\t\t\t\treturn { selectedSubtitleTrack: action.detail }\n\t\t\t\n\t\t\tcase MediaActionTypes.SET_RENDITION:\n\t\t\t\treturn { selectedRendition: action.detail }\n\t\t\t\n\t\t\tcase MediaActionTypes.TOGGLE_SUBTITLES:\n\t\t\t\treturn { subtitlesShowing: !currentState.subtitlesShowing }\n\t\t\t\n\t\t\tcase MediaActionTypes.PREVIEW_TIME:\n\t\t\t\treturn { previewTime: action.detail }\n\t\t\t\n\t\t\tcase MediaActionTypes.CLEAR_PREVIEW:\n\t\t\t\treturn { previewTime: null, previewImage: null, previewCoords: null }\n\t\t\t\n\t\t\tdefault:\n\t\t\t\tconsole.warn(`Unknown media action type: ${action.type}`)\n\t\t\t\treturn {}\n\t\t}\n\t}\n\n\tconst dispatch = (action: MediaAction) => {\n\t\tconst updates = processMediaAction(state, action)\n\t\tsetState(updates)\n\t}\n\n\tconst dispatchOptimistic = async (action: OptimisticMediaAction): Promise<void> => {\n\t\t// Set action state to pending\n\t\tactionState = {\n\t\t\tpending: true,\n\t\t\terror: null,\n\t\t\tlastAction: action,\n\t\t\tretryCount: action.retryCount || 0\n\t\t}\n\t\t\n\t\t// Apply optimistic update immediately\n\t\tconst actionId = applyOptimisticUpdate(action)\n\t\t\n\t\ttry {\n\t\t\t// Simulate async operation (e.g., network request, DOM manipulation)\n\t\t\tawait new Promise(resolve => setTimeout(resolve, 0))\n\t\t\t\n\t\t\t// Apply the actual update to the real state\n\t\t\tconst updates = processMediaAction(state, action)\n\t\t\tconst newState = { ...state, ...updates }\n\t\t\t\n\t\t\tif (JSON.stringify(newState) !== JSON.stringify(state)) {\n\t\t\t\tstate = newState\n\t\t\t\tdebouncedPersist()\n\t\t\t}\n\t\t\t\n\t\t\t// Clean up optimistic action\n\t\t\toptimisticQueue.delete(actionId)\n\t\t\t\n\t\t\t// Update action state\n\t\t\tactionState = {\n\t\t\t\tpending: false,\n\t\t\t\terror: null,\n\t\t\t\tlastAction: action,\n\t\t\t\tretryCount: 0\n\t\t\t}\n\t\t\t\n\t\t\t// Sync optimistic state with actual state\n\t\t\toptimisticState = { ...state }\n\t\t\tfor (const [, queuedAction] of optimisticQueue) {\n\t\t\t\tconst update = processMediaAction(optimisticState, queuedAction)\n\t\t\t\toptimisticState = { ...optimisticState, ...update }\n\t\t\t}\n\t\t\t\n\t\t} catch (error) {\n\t\t\t// Rollback optimistic update on error\n\t\t\trollbackOptimistic(actionId)\n\t\t\t\n\t\t\tconst errorMessage = error instanceof Error ? error.message : 'Unknown error occurred'\n\t\t\tactionState = {\n\t\t\t\tpending: false,\n\t\t\t\terror: errorMessage,\n\t\t\t\tlastAction: action,\n\t\t\t\tretryCount: (action.retryCount || 0) + 1\n\t\t\t}\n\t\t\t\n\t\t\t// Auto-retry logic for certain actions\n\t\t\tif (actionState.retryCount < 3 && shouldRetry(action.type)) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tdispatchOptimistic({\n\t\t\t\t\t\t...action,\n\t\t\t\t\t\tretryCount: actionState.retryCount\n\t\t\t\t\t})\n\t\t\t\t}, Math.pow(2, actionState.retryCount) * 1000) // Exponential backoff\n\t\t\t}\n\t\t}\n\t\t\n\t\tnotifyListeners()\n\t}\n\n\t// Determine if an action should be retried\n\tconst shouldRetry = (actionType: MediaActionType): boolean => {\n\t\tconst retryableActions: MediaActionType[] = [\n\t\t\tMediaActionTypes.PLAY,\n\t\t\tMediaActionTypes.PAUSE,\n\t\t\tMediaActionTypes.SEEK,\n\t\t\tMediaActionTypes.SET_VOLUME,\n\t\t\tMediaActionTypes.MUTE,\n\t\t\tMediaActionTypes.UNMUTE,\n\t\t\tMediaActionTypes.TOGGLE_MUTE\n\t\t]\n\t\treturn retryableActions.includes(actionType)\n\t}\n\n\t// Initialize with rehydrated state\n\trehydrateFromStorage()\n\n\treturn {\n\t\tsubscribe,\n\t\tgetState,\n\t\tsetState,\n\t\tdispatch,\n\t\tgetOptimisticState,\n\t\tdispatchOptimistic,\n\t\trollbackOptimistic,\n\t\tgetActionState,\n\t\tsetPersistenceConfig,\n\t\trehydrateFromStorage,\n\t\tclearPersistedState\n\t}\n}","\"use client\"\n\nimport type { MediaState } from \"./media-context\"\n\n// Storage keys\nexport const STORAGE_KEYS = {\n\tUSER_PREFERENCES: \"baroi-player-preferences\",\n\tSESSION_STATE: \"baroi-player-session\",\n\tPLAYBACK_HISTORY: \"baroi-player-history\",\n\tCACHE_TIMESTAMP: \"baroi-player-cache-ts\"\n} as const\n\n// User preferences that should be persisted long-term\nexport interface UserPreferences {\n\tvolume: number\n\tisMuted: boolean\n\tplaybackRate: number\n\tsubtitlesShowing: boolean\n\tselectedSubtitleTrack: string | null\n\tpreferredRendition: string | null\n\tautoplay: boolean\n\tkeyboardShortcuts: boolean\n}\n\n// Session state that should be persisted for the session\nexport interface SessionState {\n\tcurrentTime: number\n\tmediaId?: string\n\tsrc?: string\n\tplaybackPosition: Record<string, number> // mediaId -> position\n}\n\n// Playback history item\nexport interface PlaybackHistoryItem {\n\tmediaId: string\n\tsrc: string\n\ttitle?: string\n\tcurrentTime: number\n\tduration: number\n\ttimestamp: number\n\tcompleted: boolean\n}\n\n// Persistence configuration\nexport interface PersistenceConfig {\n\t// Storage options\n\tuserPreferences: boolean\n\tsessionState: boolean\n\tplaybackHistory: boolean\n\t\n\t// Limits\n\tmaxHistoryItems: number\n\tmaxCacheAge: number // milliseconds\n\t\n\t// Debouncing\n\tdebounceMs: number\n\t\n\t// Custom storage adapter\n\tstorage?: StorageAdapter\n}\n\n// Storage adapter interface for custom storage implementations\nexport interface StorageAdapter {\n\tgetItem(key: string): Promise<string | null>\n\tsetItem(key: string, value: string): Promise<void>\n\tremoveItem(key: string): Promise<void>\n\tclear(): Promise<void>\n}\n\n// Default localStorage adapter\nclass LocalStorageAdapter implements StorageAdapter {\n\tasync getItem(key: string): Promise<string | null> {\n\t\tif (typeof window === 'undefined') return null\n\t\ttry {\n\t\t\treturn localStorage.getItem(key)\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to read from localStorage:', error)\n\t\t\treturn null\n\t\t}\n\t}\n\n\tasync setItem(key: string, value: string): Promise<void> {\n\t\tif (typeof window === 'undefined') return\n\t\ttry {\n\t\t\tlocalStorage.setItem(key, value)\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to write to localStorage:', error)\n\t\t}\n\t}\n\n\tasync removeItem(key: string): Promise<void> {\n\t\tif (typeof window === 'undefined') return\n\t\ttry {\n\t\t\tlocalStorage.removeItem(key)\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to remove from localStorage:', error)\n\t\t}\n\t}\n\n\tasync clear(): Promise<void> {\n\t\tif (typeof window === 'undefined') return\n\t\ttry {\n\t\t\t// Only clear baroi-player keys\n\t\t\tObject.values(STORAGE_KEYS).forEach(key => {\n\t\t\t\tlocalStorage.removeItem(key)\n\t\t\t})\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to clear localStorage:', error)\n\t\t}\n\t}\n}\n\n// Default persistence configuration\nconst DEFAULT_CONFIG: PersistenceConfig = {\n\tuserPreferences: true,\n\tsessionState: true,\n\tplaybackHistory: true,\n\tmaxHistoryItems: 50,\n\tmaxCacheAge: 7 * 24 * 60 * 60 * 1000, // 7 days\n\tdebounceMs: 1000,\n\tstorage: new LocalStorageAdapter()\n}\n\n// Persistence manager class\nexport class MediaPersistenceManager {\n\tprivate config: PersistenceConfig\n\tprivate storage: StorageAdapter\n\tprivate debounceTimeouts: Map<string, NodeJS.Timeout> = new Map()\n\n\tconstructor(config: Partial<PersistenceConfig> = {}) {\n\t\tthis.config = { ...DEFAULT_CONFIG, ...config }\n\t\tthis.storage = this.config.storage!\n\t}\n\n\t// User preferences methods\n\tasync getUserPreferences(): Promise<UserPreferences | null> {\n\t\tif (!this.config.userPreferences) return null\n\n\t\ttry {\n\t\t\tconst data = await this.storage.getItem(STORAGE_KEYS.USER_PREFERENCES)\n\t\t\tif (!data) return null\n\n\t\t\tconst parsed = JSON.parse(data) as { preferences: UserPreferences; timestamp: number }\n\t\t\t\n\t\t\t// Validate cache age\n\t\t\tif (this.isCacheExpired(parsed.timestamp)) {\n\t\t\t\tawait this.clearUserPreferences()\n\t\t\t\treturn null\n\t\t\t}\n\n\t\t\treturn parsed.preferences\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to get user preferences:', error)\n\t\t\treturn null\n\t\t}\n\t}\n\n\tasync saveUserPreferences(preferences: Partial<UserPreferences>): Promise<void> {\n\t\tif (!this.config.userPreferences) return\n\n\t\tthis.debounce(STORAGE_KEYS.USER_PREFERENCES, async () => {\n\t\t\ttry {\n\t\t\t\tconst existing = await this.getUserPreferences() || {}\n\t\t\t\tconst updated = { ...existing, ...preferences }\n\t\t\t\t\n\t\t\t\tawait this.storage.setItem(STORAGE_KEYS.USER_PREFERENCES, JSON.stringify({\n\t\t\t\t\tpreferences: updated,\n\t\t\t\t\ttimestamp: Date.now()\n\t\t\t\t}))\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn('Failed to save user preferences:', error)\n\t\t\t}\n\t\t})\n\t}\n\n\tasync clearUserPreferences(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.storage.removeItem(STORAGE_KEYS.USER_PREFERENCES)\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to clear user preferences:', error)\n\t\t}\n\t}\n\n\t// Session state methods\n\tasync getSessionState(): Promise<SessionState | null> {\n\t\tif (!this.config.sessionState) return null\n\n\t\ttry {\n\t\t\tconst data = await this.storage.getItem(STORAGE_KEYS.SESSION_STATE)\n\t\t\tif (!data) return null\n\n\t\t\tconst parsed = JSON.parse(data) as { state: SessionState; timestamp: number }\n\t\t\treturn parsed.state\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to get session state:', error)\n\t\t\treturn null\n\t\t}\n\t}\n\n\tasync saveSessionState(state: Partial<SessionState>): Promise<void> {\n\t\tif (!this.config.sessionState) return\n\n\t\tthis.debounce(STORAGE_KEYS.SESSION_STATE, async () => {\n\t\t\ttry {\n\t\t\t\tconst existing = await this.getSessionState() || {\n\t\t\t\t\tcurrentTime: 0,\n\t\t\t\t\tplaybackPosition: {}\n\t\t\t\t}\n\t\t\t\tconst updated = { ...existing, ...state }\n\n\t\t\t\tawait this.storage.setItem(STORAGE_KEYS.SESSION_STATE, JSON.stringify({\n\t\t\t\t\tstate: updated,\n\t\t\t\t\ttimestamp: Date.now()\n\t\t\t\t}))\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn('Failed to save session state:', error)\n\t\t\t}\n\t\t})\n\t}\n\n\tasync clearSessionState(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.storage.removeItem(STORAGE_KEYS.SESSION_STATE)\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to clear session state:', error)\n\t\t}\n\t}\n\n\t// Playback history methods\n\tasync getPlaybackHistory(): Promise<PlaybackHistoryItem[]> {\n\t\tif (!this.config.playbackHistory) return []\n\n\t\ttry {\n\t\t\tconst data = await this.storage.getItem(STORAGE_KEYS.PLAYBACK_HISTORY)\n\t\t\tif (!data) return []\n\n\t\t\tconst parsed = JSON.parse(data) as { history: PlaybackHistoryItem[]; timestamp: number }\n\t\t\t\n\t\t\t// Validate cache age\n\t\t\tif (this.isCacheExpired(parsed.timestamp)) {\n\t\t\t\tawait this.clearPlaybackHistory()\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\treturn parsed.history || []\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to get playback history:', error)\n\t\t\treturn []\n\t\t}\n\t}\n\n\tasync addToPlaybackHistory(item: Omit<PlaybackHistoryItem, 'timestamp'>): Promise<void> {\n\t\tif (!this.config.playbackHistory) return\n\n\t\ttry {\n\t\t\tconst history = await this.getPlaybackHistory()\n\t\t\tconst newItem: PlaybackHistoryItem = {\n\t\t\t\t...item,\n\t\t\t\ttimestamp: Date.now()\n\t\t\t}\n\n\t\t\t// Remove existing entry for the same media\n\t\t\tconst filteredHistory = history.filter(h => h.mediaId !== item.mediaId)\n\t\t\t\n\t\t\t// Add new item at the beginning\n\t\t\tconst updatedHistory = [newItem, ...filteredHistory]\n\t\t\t\t.slice(0, this.config.maxHistoryItems)\n\n\t\t\tawait this.storage.setItem(STORAGE_KEYS.PLAYBACK_HISTORY, JSON.stringify({\n\t\t\t\thistory: updatedHistory,\n\t\t\t\ttimestamp: Date.now()\n\t\t\t}))\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to add to playback history:', error)\n\t\t}\n\t}\n\n\tasync clearPlaybackHistory(): Promise<void> {\n\t\ttry {\n\t\t\tawait this.storage.removeItem(STORAGE_KEYS.PLAYBACK_HISTORY)\n\t\t} catch (error) {\n\t\t\tconsole.warn('Failed to clear playback history:', error)\n\t\t}\n\t}\n\n\t// Utility methods\n\tasync savePlaybackPosition(mediaId: string, position: number): Promise<void> {\n\t\tconst session = await this.getSessionState()\n\t\tconst playbackPosition = session?.playbackPosition || {}\n\t\t\n\t\tawait this.saveSessionState({\n\t\t\tplaybackPosition: {\n\t\t\t\t...playbackPosition,\n\t\t\t\t[mediaId]: position\n\t\t\t}\n\t\t})\n\t}\n\n\tasync getPlaybackPosition(mediaId: string): Promise<number> {\n\t\tconst session = await this.getSessionState()\n\t\treturn session?.playbackPosition?.[mediaId] || 0\n\t}\n\n\t// Extract preferences from MediaState\n\textractUserPreferences(state: MediaState): UserPreferences {\n\t\treturn {\n\t\t\tvolume: state.volume,\n\t\t\tisMuted: state.isMuted,\n\t\t\tplaybackRate: state.playbackRate,\n\t\t\tsubtitlesShowing: state.subtitlesShowing,\n\t\t\tselectedSubtitleTrack: state.selectedSubtitleTrack?.id || null,\n\t\t\tpreferredRendition: state.selectedRendition,\n\t\t\tautoplay: false, // This would come from config\n\t\t\tkeyboardShortcuts: true // This would come from config\n\t\t}\n\t}\n\n\t// Extract session state from MediaState\n\textractSessionState(state: MediaState, mediaId?: string): SessionState {\n\t\treturn {\n\t\t\tcurrentTime: state.currentTime,\n\t\t\tmediaId,\n\t\t\tplaybackPosition: {}\n\t\t}\n\t}\n\n\t// Clear all persisted data\n\tasync clearAll(): Promise<void> {\n\t\tawait this.storage.clear()\n\t\tthis.debounceTimeouts.clear()\n\t}\n\n\t// Private helper methods\n\tprivate isCacheExpired(timestamp?: number): boolean {\n\t\tif (!timestamp) return true\n\t\treturn Date.now() - timestamp > this.config.maxCacheAge\n\t}\n\n\tprivate debounce(key: string, fn: () => Promise<void>): void {\n\t\tconst existingTimeout = this.debounceTimeouts.get(key)\n\t\tif (existingTimeout) {\n\t\t\tclearTimeout(existingTimeout)\n\t\t}\n\n\t\tconst timeout = setTimeout(async () => {\n\t\t\tawait fn()\n\t\t\tthis.debounceTimeouts.delete(key)\n\t\t}, this.config.debounceMs)\n\n\t\tthis.debounceTimeouts.set(key, timeout)\n\t}\n}\n\n// Hook for using persistence in components\nexport function useMediaPersistence(config?: Partial<PersistenceConfig>) {\n\tconst [manager] = React.useState(() => new MediaPersistenceManager(config))\n\t\n\tReact.useEffect(() => {\n\t\treturn () => {\n\t\t\t// Clear any pending debounced operations\n\t\t\tmanager.clearAll()\n\t\t}\n\t}, [manager])\n\t\n\treturn manager\n}\n\n// React 19 integration for automatic persistence\nexport function useAutoMediaPersistence(\n\tstate: MediaState,\n\tmediaId?: string,\n\tconfig?: Partial<PersistenceConfig>\n) {\n\tconst manager = useMediaPersistence(config)\n\tconst [isRehydrated, setIsRehydrated] = React.useState(false)\n\t\n\t// Rehydrate on mount\n\tReact.useEffect(() => {\n\t\tlet isMounted = true\n\t\t\n\t\tconst rehydrate = async () => {\n\t\t\ttry {\n\t\t\t\tconst [preferences, session] = await Promise.all([\n\t\t\t\t\tmanager.getUserPreferences(),\n\t\t\t\t\tmanager.getSessionState()\n\t\t\t\t])\n\t\t\t\t\n\t\t\t\tif (!isMounted) return\n\t\t\t\t\n\t\t\t\t// Return the rehydrated state for the store to apply\n\t\t\t\tconst rehydratedState: Partial<MediaState> = {\n\t\t\t\t\t...(preferences && {\n\t\t\t\t\t\tvolume: preferences.volume,\n\t\t\t\t\t\tisMuted: preferences.isMuted,\n\t\t\t\t\t\tplaybackRate: preferences.playbackRate,\n\t\t\t\t\t\tsubtitlesShowing: preferences.subtitlesShowing\n\t\t\t\t\t}),\n\t\t\t\t\t...(session && mediaId === session.mediaId && {\n\t\t\t\t\t\tcurrentTime: session.currentTime\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\t// Apply rehydrated state via callback if provided\n\t\t\t\tif (Object.keys(rehydratedState).length > 0) {\n\t\t\t\t\t// This would be handled by the store\n\t\t\t\t\tconsole.log('Rehydrated state:', rehydratedState)\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tsetIsRehydrated(true)\n\t\t\t} catch (error) {\n\t\t\t\tconsole.warn('Failed to rehydrate state:', error)\n\t\t\t\tsetIsRehydrated(true)\n\t\t\t}\n\t\t}\n\t\t\n\t\trehydrate()\n\t\t\n\t\treturn () => {\n\t\t\tisMounted = false\n\t\t}\n\t}, [manager, mediaId])\n\t\n\t// Auto-persist changes\n\tReact.useEffect(() => {\n\t\tif (!isRehydrated) return\n\t\t\n\t\t// Save user preferences\n\t\tconst preferences = manager.extractUserPreferences(state)\n\t\tmanager.saveUserPreferences(preferences)\n\t\t\n\t\t// Save session state\n\t\tif (mediaId) {\n\t\t\tconst session = manager.extractSessionState(state, mediaId)\n\t\t\tmanager.saveSessionState(session)\n\t\t\t\n\t\t\t// Save playback position\n\t\t\tif (state.currentTime > 0 && state.duration > 0) {\n\t\t\t\tmanager.savePlaybackPosition(mediaId, state.currentTime)\n\t\t\t}\n\t\t}\n\t}, [manager, state, mediaId, isRehydrated])\n\t\n\treturn {\n\t\tmanager,\n\t\tisRehydrated\n\t}\n}\n\n// Export default storage adapter\nexport const defaultStorageAdapter = new LocalStorageAdapter()\n\n// Import React for hooks\nimport React from \"react\"","\"use client\"\n\nimport React from \"react\"\nimport type { MediaActionType } from \"./media-context\"\nimport type { OptimisticMediaAction } from \"./media-store\"\n\n// Error types specific to media operations\nexport enum MediaErrorType {\n\tNETWORK_ERROR = \"NETWORK_ERROR\",\n\tPLAYBACK_ERROR = \"PLAYBACK_ERROR\",\n\tPERMISSION_ERROR = \"PERMISSION_ERROR\",\n\tNOT_SUPPORTED_ERROR = \"NOT_SUPPORTED_ERROR\",\n\tTIMEOUT_ERROR = \"TIMEOUT_ERROR\",\n\tUNKNOWN_ERROR = \"UNKNOWN_ERROR\"\n}\n\n// Enhanced error interface\nexport interface MediaError {\n\ttype: MediaErrorType\n\tmessage: string\n\taction?: OptimisticMediaAction\n\ttimestamp: number\n\tretryable: boolean\n\tretryCount: number\n\toriginalError?: Error\n}\n\n// Retry configuration\nexport interface RetryConfig {\n\tmaxRetries: number\n\tbaseDelay: number // milliseconds\n\tmaxDelay: number // milliseconds\n\texponentialBackoff: boolean\n\tretryableErrors: MediaErrorType[]\n\tretryableActions: MediaActionType[]\n}\n\n// Default retry configuration\nconst DEFAULT_RETRY_CONFIG: RetryConfig = {\n\tmaxRetries: 3,\n\tbaseDelay: 1000,\n\tmaxDelay: 10000,\n\texponentialBackoff: true,\n\tretryableErrors: [\n\t\tMediaErrorType.NETWORK_ERROR,\n\t\tMediaErrorType.TIMEOUT_ERROR\n\t],\n\tretryableActions: [\n\t\t\"PLAY\",\n\t\t\"PAUSE\",\n\t\t\"SEEK\",\n\t\t\"SET_VOLUME\",\n\t\t\"ENTER_FULLSCREEN\",\n\t\t\"EXIT_FULLSCREEN\"\n\t]\n}\n\n// Error recovery strategies\nexport interface ErrorRecoveryStrategy {\n\tcanRecover(error: MediaError): boolean\n\trecover(error: MediaError): Promise<void>\n}\n\n// Network error recovery\nclass NetworkErrorRecovery implements ErrorRecoveryStrategy {\n\tcanRecover(error: MediaError): boolean {\n\t\treturn error.type === MediaErrorType.NETWORK_ERROR && error.retryCount < 3\n\t}\n\n\tasync recover(error: MediaError): Promise<void> {\n\t\t// Wait for network to become available\n\t\tif (navigator.onLine === false) {\n\t\t\tawait new Promise(resolve => {\n\t\t\t\tconst handleOnline = () => {\n\t\t\t\t\twindow.removeEventListener('online', handleOnline)\n\t\t\t\t\tresolve(void 0)\n\t\t\t\t}\n\t\t\t\twindow.addEventListener('online', handleOnline)\n\t\t\t})\n\t\t}\n\t\t\n\t\t// Additional delay for network stability\n\t\tawait new Promise(resolve => setTimeout(resolve, 2000))\n\t}\n}\n\n// Playback error recovery\nclass PlaybackErrorRecovery implements ErrorRecoveryStrategy {\n\tcanRecover(error: MediaError): boolean {\n\t\treturn error.type === MediaErrorType.PLAYBACK_ERROR && error.retryCount < 2\n\t}\n\n\tasync recover(error: MediaError): Promise<void> {\n\t\t// Try to reload the media element\n\t\tconst mediaElement = document.querySelector('video, audio') as HTMLMediaElement\n\t\tif (mediaElement) {\n\t\t\tmediaElement.load()\n\t\t\tawait new Promise(resolve => {\n\t\t\t\tconst handleCanPlay = () => {\n\t\t\t\t\tmediaElement.removeEventListener('canplay', handleCanPlay)\n\t\t\t\t\tresolve(void 0)\n\t\t\t\t}\n\t\t\t\tmediaElement.addEventListener('canplay', handleCanPlay)\n\t\t\t})\n\t\t}\n\t}\n}\n\n// Permission error recovery (for fullscreen, etc.)\nclass PermissionErrorRecovery implements ErrorRecoveryStrategy {\n\tcanRecover(error: MediaError): boolean {\n\t\treturn error.type === MediaErrorType.PERMISSION_ERROR && \n\t\t\t error.action?.type === 'ENTER_FULLSCREEN'\n\t}\n\n\tasync recover(error: MediaError): Promise<void> {\n\t\t// Request user interaction for fullscreen\n\t\tconsole.warn('Fullscreen requires user interaction')\n\t\t// In a real implementation, you might show a message to the user\n\t}\n}\n\n// Error handler class\nexport class MediaErrorHandler {\n\tprivate config: RetryConfig\n\tprivate recoveryStrategies: ErrorRecoveryStrategy[]\n\tprivate errorQueue: Map<string, MediaError> = new Map()\n\tprivate listeners: Set<(error: MediaError) => void> = new Set()\n\n\tconstructor(\n\t\tconfig: Partial<RetryConfig> = {},\n\t\trecoveryStrategies: ErrorRecoveryStrategy[] = []\n\t) {\n\t\tthis.config = { ...DEFAULT_RETRY_CONFIG, ...config }\n\t\tthis.recoveryStrategies = [\n\t\t\tnew NetworkErrorRecovery(),\n\t\t\tnew PlaybackErrorRecovery(),\n\t\t\tnew PermissionErrorRecovery(),\n\t\t\t...recoveryStrategies\n\t\t]\n\t}\n\n\t// Create a media error from a generic error\n\tcreateMediaError(\n\t\terror: unknown,\n\t\taction?: OptimisticMediaAction,\n\t\tretryCount = 0\n\t): MediaError {\n\t\tconst timestamp = Date.now()\n\t\t\n\t\tif (error instanceof Error) {\n\t\t\tconst errorType = this.categorizeError(error, action)\n\t\t\treturn {\n\t\t\t\ttype: errorType,\n\t\t\t\tmessage: error.message,\n\t\t\t\taction,\n\t\t\t\ttimestamp,\n\t\t\t\tretryable: this.isRetryable(errorType, action),\n\t\t\t\tretryCount,\n\t\t\t\toriginalError: error\n\t\t\t}\n\t\t}\n\t\t\n\t\treturn {\n\t\t\ttype: MediaErrorType.UNKNOWN_ERROR,\n\t\t\tmessage: typeof error === 'string' ? error : 'Unknown error occurred',\n\t\t\taction,\n\t\t\ttimestamp,\n\t\t\tretryable: this.isRetryable(MediaErrorType.UNKNOWN_ERROR, action),\n\t\t\tretryCount\n\t\t}\n\t}\n\n\t// Categorize errors based on error properties and action context\n\tprivate categorizeError(error: Error, action?: OptimisticMediaAction): MediaErrorType {\n\t\tconst message = error.message.toLowerCase()\n\t\t\n\t\t// Network-related errors\n\t\tif (message.includes('network') || \n\t\t\tmessage.includes('fetch') || \n\t\t\tmessage.includes('connection') ||\n\t\t\terror.name === 'NetworkError') {\n\t\t\treturn MediaErrorType.NETWORK_ERROR\n\t\t}\n\t\t\n\t\t// Permission errors\n\t\tif (message.includes('permission') || \n\t\t\tmessage.includes('denied') ||\n\t\t\tmessage.includes('fullscreen') ||\n\t\t\terror.name === 'NotAllowedError') {\n\t\t\treturn MediaErrorType.PERMISSION_ERROR\n\t\t}\n\t\t\n\t\t// Playback errors\n\t\tif (message.includes('decode') ||\n\t\t\tmessage.includes('format') ||\n\t\t\tmessage.includes('codec') ||\n\t\t\taction?.type === 'PLAY') {\n\t\t\treturn MediaErrorType.PLAYBACK_ERROR\n\t\t}\n\t\t\n\t\t// Timeout errors\n\t\tif (message.includes('timeout') ||\n\t\t\terror.name === 'TimeoutError') {\n\t\t\treturn MediaErrorType.TIMEOUT_ERROR\n\t\t}\n\t\t\n\t\t// Not supported errors\n\t\tif (message.includes('not supported') ||\n\t\t\tmessage.includes('unsupported') ||\n\t\t\terror.name === 'NotSupportedError') {\n\t\t\treturn MediaErrorType.NOT_SUPPORTED_ERROR\n\t\t}\n\t\t\n\t\treturn MediaErrorType.UNKNOWN_ERROR\n\t}\n\n\t// Check if an error/action combination is retryable\n\tprivate isRetryable(errorType: MediaErrorType, action?: OptimisticMediaAction): boolean {\n\t\tconst errorRetryable = this.config.retryableErrors.includes(errorType)\n\t\tconst actionRetryable = !action || this.config.retryableActions.includes(action.type)\n\t\treturn errorRetryable && actionRetryable\n\t}\n\n\t// Calculate retry delay with exponential backoff\n\tprivate calculateRetryDelay(retryCount: number): number {\n\t\tif (!this.config.exponentialBackoff) {\n\t\t\treturn this.config.baseDelay\n\t\t}\n\t\t\n\t\tconst delay = this.config.baseDelay * Math.pow(2, retryCount)\n\t\treturn Math.min(delay, this.config.maxDelay)\n\t}\n\n\t// Handle an error with automatic retry logic\n\tasync handleError(\n\t\terror: unknown,\n\t\taction?: OptimisticMediaAction,\n\t\tretryCallback?: (action: OptimisticMediaAction) => Promise<void>\n\t): Promise<MediaError> {\n\t\tconst mediaError = this.createMediaError(error, action, action?.retryCount || 0)\n\t\tconst errorId = `${action?.type}-${mediaError.timestamp}`\n\t\t\n\t\t// Store error for tracking\n\t\tthis.errorQueue.set(errorId, mediaError)\n\t\t\n\t\t// Notify listeners\n\t\tthis.listeners.forEach(listener => listener(mediaError))\n\t\t\n\t\t// Try recovery strategies\n\t\tfor (const strategy of this.recoveryStrategies) {\n\t\t\tif (strategy.canRecover(mediaError)) {\n\t\t\t\ttry {\n\t\t\t\t\tawait strategy.recover(mediaError)\n\t\t\t\t\tbreak\n\t\t\t\t} catch (recoveryError) {\n\t\t\t\t\tconsole.warn('Recovery strategy failed:', recoveryError)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t\n\t\t// Retry if possible\n\t\tif (mediaError.retryable && \n\t\t\tmediaError.retryCount < this.config.maxRetries && \n\t\t\tretryCallback && \n\t\t\taction) {\n\t\t\t\n\t\t\tconst delay = this.calculateRetryDelay(mediaError.retryCount)\n\t\t\tconsole.log(`Retrying action ${action.type} in ${delay}ms (attempt ${mediaError.retryCount + 1}/${this.config.maxRetries})`)\n\t\t\t\n\t\t\tsetTimeout(async () => {\n\t\t\t\ttry {\n\t\t\t\t\tawait retryCallback({\n\t\t\t\t\t\t...action,\n\t\t\t\t\t\tretryCount: mediaError.retryCount + 1\n\t\t\t\t\t})\n\t\t\t\t\t\n\t\t\t\t\t// Remove from error queue on successful retry\n\t\t\t\t\tthis.errorQueue.delete(errorId)\n\t\t\t\t} catch (retryError) {\n\t\t\t\t\t// Handle retry failure\n\t\t\t\t\tawait this.handleError(retryError, {\n\t\t\t\t\t\t...action,\n\t\t\t\t\t\tretryCount: mediaError.retryCount + 1\n\t\t\t\t\t}, retryCallback)\n\t\t\t\t}\n\t\t\t}, delay)\n\t\t}\n\t\t\n\t\treturn mediaError\n\t}\n\n\t// Subscribe to error events\n\tsubscribe(listener: (error: MediaError) => void): () => void {\n\t\tthis.listeners.add(listener)\n\t\treturn () => this.listeners.delete(listener)\n\t}\n\n\t// Get current errors\n\tgetErrors(): MediaError[] {\n\t\treturn Array.from(this.errorQueue.values())\n\t}\n\n\t// Clear specific error\n\tclearError(errorId: string): void {\n\t\tthis.errorQueue.delete(errorId)\n\t}\n\n\t// Clear all errors\n\tclearAllErrors(): void {\n\t\tthis.errorQueue.clear()\n\t}\n\n\t// Get error statistics\n\tgetErrorStats(): {\n\t\ttotalErrors: number\n\t\terrorsByType: Record<MediaErrorType, number>\n\t\tretryableErrors: number\n\t\trecentErrors: MediaError[]\n\t} {\n\t\tconst errors = this.getErrors()\n\t\tconst now = Date.now()\n\t\tconst recentThreshold = 5 * 60 * 1000 // 5 minutes\n\t\t\n\t\tconst errorsByType = errors.reduce((acc, error) => {\n\t\t\tacc[error.type] = (acc[error.type] || 0) + 1\n\t\t\treturn acc\n\t\t}, {} as Record<MediaErrorType, number>)\n\t\t\n\t\tconst retryableErrors = errors.filter(e => e.retryable).length\n\t\tconst recentErrors = errors.filter(e => now - e.timestamp < recentThreshold)\n\t\t\n\t\treturn {\n\t\t\ttotalErrors: errors.length,\n\t\t\terrorsByType,\n\t\t\tretryableErrors,\n\t\t\trecentErrors\n\t\t}\n\t}\n}\n\n// Hook for using error handling in components\nexport function useMediaErrorHandler(config?: Partial<RetryConfig>) {\n\tconst [handler] = React.useState(() => new MediaErrorHandler(config))\n\tconst [errors, setErrors] = React.useState<MediaError[]>([])\n\t\n\tReact.useEffect(() => {\n\t\tconst unsubscribe = handler.subscribe((error) => {\n\t\t\tsetErrors(current => [...current, error])\n\t\t})\n\t\t\n\t\treturn unsubscribe\n\t}, [handler])\n\t\n\tconst clearError = React.useCallback((errorId: string) => {\n\t\thandler.clearError(errorId)\n\t\tsetErrors(current => current.filter(e => `${e.action?.type}-${e.timestamp}` !== errorId))\n\t}, [handler])\n\t\n\tconst clearAllErrors = React.useCallback(() => {\n\t\thandler.clearAllErrors()\n\t\tsetErrors([])\n\t}, [handler])\n\t\n\treturn {\n\t\thandler,\n\t\terrors,\n\t\tclearError,\n\t\tclearAllErrors,\n\t\terrorStats: handler.getErrorStats()\n\t}\n}\n\n// Hook for error boundaries\nexport function useMediaErrorBoundary() {\n\tconst [error, setError] = React.useState<MediaError | null>(null)\n\t\n\tconst resetError = React.useCallback(() => {\n\t\tsetError(null)\n\t}, [])\n\t\n\tconst captureError = React.useCallback((error: unknown, action?: OptimisticMediaAction) => {\n\t\tconst handler = new MediaErrorHandler()\n\t\tconst mediaError = handler.createMediaError(error, action)\n\t\tsetError(mediaError)\n\t}, [])\n\t\n\treturn {\n\t\terror,\n\t\thasError: !!error,\n\t\tresetError,\n\t\tcaptureError\n\t}\n}","\"use client\"\n\nimport React from \"react\"\nimport {\n\ttype MediaAction,\n\tMediaActionTypes,\n\tMediaContext,\n\ttype MediaContextValue,\n\ttype MediaState,\n\ttype MediaStore,\n\tMediaStoreContext,\n\tinitialMediaState\n} from \"./media-context\"\nimport { createEnhancedMediaStore, type EnhancedMediaStore } from \"./media-store\"\nimport { useAutoMediaPersistence, type PersistenceConfig } from \"./persistence\"\nimport { MediaErrorHandler, type RetryConfig } from \"./error-handling\"\n\n// Legacy store for backward compatibility\nfunction createLegacyMediaStore(initialState: MediaState = initialMediaState): MediaStore {\n\tlet state = { ...initialState }\n\tconst listeners = new Set<() => void>()\n\n\tconst subscribe = (callback: () => void) => {\n\t\tlisteners.add(callback)\n\t\treturn () => listeners.delete(callback)\n\t}\n\n\tconst getState = () => state\n\n\tconst setState = (updates: Partial<MediaState>) => {\n\t\tconst newState = { ...state, ...updates }\n\t\tif (JSON.stringify(newState) !== JSON.stringify(state)) {\n\t\t\tstate = newState\n\t\t\tlisteners.forEach((callback) => callback())\n\t\t}\n\t}\n\n\tconst dispatch = (action: MediaAction) => {\n\t\tswitch (action.type) {\n\t\t\tcase MediaActionTypes.PLAY:\n\t\t\t\tsetState({ isPlaying: true, error: null })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.PAUSE:\n\t\t\t\tsetState({ isPlaying: false })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.SEEK:\n\t\t\t\tsetState({ currentTime: action.detail })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.SET_VOLUME:\n\t\t\t\tsetState({ volume: Math.max(0, Math.min(1, action.detail)) })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.MUTE:\n\t\t\t\tsetState({ isMuted: true })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.UNMUTE:\n\t\t\t\tsetState({ isMuted: false })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.TOGGLE_MUTE:\n\t\t\t\tsetState({ isMuted: !state.isMuted })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.SET_DURATION:\n\t\t\t\tsetState({ duration: action.detail })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.SET_CURRENT_TIME:\n\t\t\t\tsetState({ currentTime: action.detail })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.SET_BUFFERED:\n\t\t\t\tsetState({ buffered: action.detail })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.SET_LOADING:\n\t\t\t\tsetState({ isLoading: action.detail })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.SET_ERROR:\n\t\t\t\tsetState({ error: action.detail, isLoading: false })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.ENTER_FULLSCREEN:\n\t\t\t\tsetState({ isFullscreen: true })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.EXIT_FULLSCREEN:\n\t\t\t\tsetState({ isFullscreen: false })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.ENTER_PIP:\n\t\t\t\tsetState({ isPictureInPicture: true })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.EXIT_PIP:\n\t\t\t\tsetState({ isPictureInPicture: false })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.SET_PLAYBACK_RATE:\n\t\t\t\tsetState({ playbackRate: action.detail })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.SET_SUBTITLE_TRACK:\n\t\t\t\tsetState({ selectedSubtitleTrack: action.detail })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.SET_RENDITION:\n\t\t\t\tsetState({ selectedRendition: action.detail })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.TOGGLE_SUBTITLES:\n\t\t\t\tsetState({ subtitlesShowing: !state.subtitlesShowing })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.PREVIEW_TIME:\n\t\t\t\tsetState({ previewTime: action.detail })\n\t\t\t\tbreak\n\n\t\t\tcase MediaActionTypes.CLEAR_PREVIEW:\n\t\t\t\tsetState({ previewTime: null, previewImage: null, previewCoords: null })\n\t\t\t\tbreak\n\n\t\t\tdefault:\n\t\t\t\tconsole.warn(`Unknown media action type: ${action.type}`)\n\t\t}\n\t}\n\n\treturn { subscribe, getState, setState, dispatch }\n}\n\n// Enhanced media provider props with React 19 features\nexport interface MediaProviderProps {\n\tchildren: React.ReactNode\n\tmediaId?: string\n\tlabelId?: string\n\tdescriptionId?: string\n\tdir?: \"ltr\" | \"rtl\"\n\tportalContainer?: HTMLElement\n\ttooltipDelayDuration?: number\n\ttooltipSideOffset?: number\n\tdisabled?: boolean\n\tisVideo?: boolean\n\twithoutTooltip?: boolean\n\tinitialState?: Partial<MediaState>\n\t\n\t// React 19 enhancements\n\tuseEnhancedStore?: boolean\n\tpersistenceConfig?: Partial<PersistenceConfig>\n\tretryConfig?: Partial<RetryConfig>\n\tenableOptimisticUpdates?: boolean\n\tenableErrorRecovery?: boolean\n\tonStateRehydrated?: (state: Partial<MediaState>) => void\n}\n\n// Enhanced media provider component with React 19 features\nexport function MediaProvider({\n\tchildren,\n\tmediaId = \"media-player\",\n\tlabelId = \"media-player-label\",\n\tdescriptionId = \"media-player-description\",\n\tdir = \"ltr\",\n\tportalContainer,\n\ttooltipDelayDuration = 700,\n\ttooltipSideOffset = 4,\n\tdisabled = false,\n\tisVideo = true,\n\twithoutTooltip = false,\n\tinitialState = {},\n\t// React 19 enhancements\n\tuseEnhancedStore = true,\n\tpersistenceConfig,\n\tretryConfig,\n\tenableOptimisticUpdates = true,\n\tenableErrorRecovery = true,\n\tonStateRehydrated\n}: MediaProviderProps) {\n\tconst rootRef = React.useRef<HTMLDivElement>(null)\n\tconst mediaRef = React.useRef<HTMLVideoElement | HTMLAudioElement>(null)\n\n\t// Create enhanced or legacy store based on configuration\n\tconst store = React.useMemo(() => {\n\t\tconst combinedInitialState = { ...initialMediaState, ...initialState }\n\t\t\n\t\tif (useEnhancedStore) {\n\t\t\treturn createEnhancedMediaStore(combinedInitialState, persistenceConfig) as MediaStore & EnhancedMediaStore\n\t\t} else {\n\t\t\treturn createLegacyMediaStore(combinedInitialState)\n\t\t}\n\t}, [useEnhancedStore, persistenceConfig])\n\n\t// Error handler for React 19 features\n\tconst errorHandler = React.useMemo(() => {\n\t\tif (enableErrorRecovery && useEnhancedStore) {\n\t\t\treturn new MediaErrorHandler(retryConfig)\n\t\t}\n\t\treturn null\n\t}, [enableErrorRecovery, useEnhancedStore, retryConfig])\n\n\t// Auto-persistence for React 19 enhanced store\n\tconst persistenceResult = useEnhancedStore ? useAutoMediaPersistence(\n\t\tstore.getState(),\n\t\tmediaId,\n\t\tpersistenceConfig\n\t) : null\n\n\t// Handle state rehydration callback\n\tReact.useEffect(() => {\n\t\tif (persistenceResult?.isRehydrated && onStateRehydrated) {\n\t\t\tconst currentState = store.getState()\n\t\t\tonStateRehydrated(currentState)\n\t\t}\n\t}, [persistenceResult?.isRehydrated, onStateRehydrated, store])\n\n\t// Enhanced context value with React 19 features\n\tconst contextValue = React.useMemo<MediaContextValue & {\n\t\terrorHandler?: MediaErrorHandler | null\n\t\tisEnhanced?: boolean\n\t\tisRehydrated?: boolean\n\t}>(\n\t\t() => ({\n\t\t\tmediaId,\n\t\t\tlabelId,\n\t\t\tdescriptionId,\n\t\t\tdir,\n\t\t\trootRef,\n\t\t\tmediaRef,\n\t\t\tportalContainer,\n\t\t\ttooltipDelayDuration,\n\t\t\ttooltipSideOffset,\n\t\t\tdisabled,\n\t\t\tisVideo,\n\t\t\twithoutTooltip,\n\t\t\t// React 19 enhancements\n\t\t\terrorHandler,\n\t\t\tisEnhanced: useEnhancedStore,\n\t\t\tisRehydrated: persistenceResult?.isRehydrated\n\t\t}),\n\t\t[\n\t\t\tmediaId,\n\t\t\tlabelId,\n\t\t\tdescriptionId,\n\t\t\tdir,\n\t\t\tportalContainer,\n\t\t\ttooltipDelayDuration,\n\t\t\ttooltipSideOffset,\n\t\t\tdisabled,\n\t\t\tisVideo,\n\t\t\twithoutTooltip,\n\t\t\terrorHandler,\n\t\t\tuseEnhancedStore,\n\t\t\tpersistenceResult?.isRehydrated\n\t\t]\n\t)\n\n\treturn (\n\t\t<MediaContext.Provider value={contextValue}>\n\t\t\t<MediaStoreContext.Provider value={store}>{children}</MediaStoreContext.Provider>\n\t\t</MediaContext.Provider>\n\t)\n}\n"],"names":["REACT_ELEMENT_TYPE","REACT_FRAGMENT_TYPE","jsxProd","type","config","maybeKey","key","propName","reactJsxRuntime_production","getComponentNameFromType","REACT_CLIENT_REFERENCE","REACT_PROFILER_TYPE","REACT_STRICT_MODE_TYPE","REACT_SUSPENSE_TYPE","REACT_SUSPENSE_LIST_TYPE","REACT_ACTIVITY_TYPE","REACT_PORTAL_TYPE","REACT_CONTEXT_TYPE","REACT_CONSUMER_TYPE","REACT_FORWARD_REF_TYPE","innerType","REACT_MEMO_TYPE","REACT_LAZY_TYPE","testStringCoercion","value","checkKeyStringCoercion","JSCompiler_inline_result","JSCompiler_temp_const","JSCompiler_inline_result$jscomp$0","getTaskName","name","getOwner","dispatcher","ReactSharedInternals","UnknownOwner","hasValidKey","hasOwnProperty","getter","defineKeyPropWarningGetter","props","displayName","warnAboutAccessingKey","specialPropKeyWarningShown","elementRefGetterWithDeprecationWarning","componentName","didWarnAboutElementRef","ReactElement","self","source","owner","debugStack","debugTask","jsxDEVImpl","isStaticChildren","children","isArrayImpl","validateChildKeys","keys","k","didWarnAboutKeySpread","node","React","require$$0","createTask","callStackForError","unknownOwnerDebugStack","unknownOwnerDebugTask","reactJsxRuntime_development","trackActualOwner","jsxRuntimeModule","require$$1","MediaActionTypes","MediaContext","useMediaContext","context","MediaStoreContext","useMediaStore","store","useMediaSelector","selector","getSnapshot","useMediaDispatch","useOptimisticMediaSelector","isEnhanced","useMediaEnhancements","errorHandler","isRehydrated","initialMediaState","DEFAULT_PERSISTENCE_CONFIG","createEnhancedMediaStore","initialState","persistenceConfig","state","optimisticState","actionState","listeners","optimisticQueue","persistenceTimeout","subscribe","callback","notifyListeners","getState","getOptimisticState","getActionState","persistState","persistedData","acc","error","debouncedPersist","rehydrateFromStorage","stored","parsedData","timestamp","persistedState","maxAge","clearPersistedState","newState","setPersistenceConfig","newConfig","setState","updates","applyOptimisticUpdate","action","actionId","optimisticUpdate","processMediaAction","rollbackOptimistic","update","currentState","dispatch","dispatchOptimistic","resolve","queuedAction","shouldRetry","actionType","STORAGE_KEYS","LocalStorageAdapter","DEFAULT_CONFIG","MediaPersistenceManager","__publicField","data","parsed","preferences","updated","item","history","newItem","filteredHistory","h","updatedHistory","mediaId","position","playbackPosition","fn","existingTimeout","timeout","useMediaPersistence","manager","useAutoMediaPersistence","setIsRehydrated","isMounted","session","rehydratedState","DEFAULT_RETRY_CONFIG","NetworkErrorRecovery","handleOnline","PlaybackErrorRecovery","mediaElement","handleCanPlay","PermissionErrorRecovery","MediaErrorHandler","recoveryStrategies","retryCount","errorType","message","errorRetryable","actionRetryable","delay","retryCallback","mediaError","errorId","listener","strategy","recoveryError","retryError","errors","now","recentThreshold","errorsByType","retryableErrors","e","recentErrors","createLegacyMediaStore","MediaProvider","labelId","descriptionId","dir","portalContainer","tooltipDelayDuration","tooltipSideOffset","disabled","isVideo","withoutTooltip","useEnhancedStore","retryConfig","enableOptimisticUpdates","enableErrorRecovery","onStateRehydrated","rootRef","mediaRef","combinedInitialState","persistenceResult","contextValue","jsx"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
package/dist/hooks-C_r8wexn.cjs
DELETED
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
"use strict";const a=require("react"),D=require("./context-DCJ_scmO.cjs"),ie=require("./utils-D_czS_0K.cjs");function pe(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const s=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,s.get?s:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const K=pe(a);function oe({enabled:e=!0,state:t,controls:n,seekStep:s=10,volumeStep:m=.1}){const l=i=>{if(!e)return;const d=i.target;if(!(d.tagName==="INPUT"||d.tagName==="TEXTAREA"||d.contentEditable==="true"))switch(i.code){case"Space":case"KeyK":i.preventDefault(),n.toggle();break;case"KeyM":i.preventDefault(),n.toggleMute();break;case"KeyF":i.preventDefault(),n.toggleFullscreen();break;case"ArrowLeft":i.preventDefault(),n.seek(Math.max(0,t.currentTime-s));break;case"ArrowRight":i.preventDefault(),n.seek(Math.min(t.duration,t.currentTime+s));break;case"ArrowUp":i.preventDefault(),n.setVolume(Math.min(1,t.volume+m));break;case"ArrowDown":i.preventDefault(),n.setVolume(Math.max(0,t.volume-m));break;case"Digit0":case"Digit1":case"Digit2":case"Digit3":case"Digit4":case"Digit5":case"Digit6":case"Digit7":case"Digit8":case"Digit9":i.preventDefault();const R=parseInt(i.code.replace("Digit",""),10)/10;n.seek(t.duration*R);break;case"Home":i.preventDefault(),n.seek(0);break;case"End":i.preventDefault(),n.seek(t.duration);break}};return a.useEffect(()=>{if(e)return document.addEventListener("keydown",l),()=>{document.removeEventListener("keydown",l)}},[e,l]),{handleKeyDown:l}}const ge=Object.freeze(Object.defineProperty({__proto__:null,useKeyboardControls:oe},Symbol.toStringTag,{value:"Module"}));function ve(e,t){if(!t.optimistic)return e;switch(t.type){case"PLAY":return{...e,isPlaying:!0,error:null};case"PAUSE":return{...e,isPlaying:!1};case"SEEK":return{...e,currentTime:t.detail};case"SET_VOLUME":return{...e,volume:Math.max(0,Math.min(1,t.detail))};case"MUTE":return{...e,isMuted:!0};case"UNMUTE":return{...e,isMuted:!1};case"TOGGLE_MUTE":return{...e,isMuted:!e.isMuted};case"ENTER_FULLSCREEN":return{...e,isFullscreen:!0};case"EXIT_FULLSCREEN":return{...e,isFullscreen:!1};case"SET_PLAYBACK_RATE":return{...e,playbackRate:t.detail};case"TOGGLE_SUBTITLES":return{...e,subtitlesShowing:!e.subtitlesShowing};case"PREVIEW_TIME":return{...e,previewTime:t.detail};case"CLEAR_PREVIEW":return{...e,previewTime:null,previewImage:null,previewCoords:null};default:return e}}function ye(e){const t=a.useSyncExternalStore(e.subscribe,e.getState,e.getState),[n,s]=a.useOptimistic(t,ve),m=a.useCallback(async d=>{d.optimistic&&s(d),await e.dispatchOptimistic(d)},[e,s]),l=a.useMemo(()=>({togglePlayPause:async()=>{const d={type:n.isPlaying?"PAUSE":"PLAY",optimistic:!0,timestamp:Date.now()};await m(d)},setVolumeOptimistic:async d=>{const S={type:"SET_VOLUME",detail:Math.max(0,Math.min(1,d)),optimistic:!0,timestamp:Date.now()};await m(S)},seekOptimistic:async d=>{const S={type:"SEEK",detail:d,optimistic:!0,timestamp:Date.now()};await m(S)},toggleMuteOptimistic:async()=>{const d={type:"TOGGLE_MUTE",optimistic:!0,timestamp:Date.now()};await m(d)},toggleFullscreenOptimistic:async()=>{const d={type:n.isFullscreen?"EXIT_FULLSCREEN":"ENTER_FULLSCREEN",optimistic:!0,timestamp:Date.now()};await m(d)},setPlaybackRateOptimistic:async d=>{const S={type:"SET_PLAYBACK_RATE",detail:d,optimistic:!0,timestamp:Date.now()};await m(S)},toggleSubtitlesOptimistic:async()=>{const d={type:"TOGGLE_SUBTITLES",optimistic:!0,timestamp:Date.now()};await m(d)}}),[n,m]),i=a.useMemo(()=>({isPlaying:n.isPlaying,currentTime:n.currentTime,volume:n.volume,isMuted:n.isMuted,isFullscreen:n.isFullscreen,playbackRate:n.playbackRate,subtitlesShowing:n.subtitlesShowing,previewTime:n.previewTime,progress:n.duration>0?n.currentTime/n.duration:0,formattedTime:ne(n.currentTime),formattedDuration:ne(n.duration),canPlay:!n.isLoading&&!n.error,hasError:!!n.error,isBuffering:n.isLoading}),[n]);return{state:n,actualState:t,...i,...l,dispatchOptimistic:m}}function ne(e){if(!e||!isFinite(e))return"0:00";const t=Math.floor(e/60),n=Math.floor(e%60),s=Math.floor(t/60);return s>0?`${s}:${String(t%60).padStart(2,"0")}:${String(n).padStart(2,"0")}`:`${t}:${String(n).padStart(2,"0")}`}function B(e,t){return((n,s=!1)=>{const m={type:e,detail:n,optimistic:s,timestamp:Date.now()};return s?t.dispatchOptimistic(m):(t.dispatch(m),Promise.resolve())})}function ce(e){const[t,n]=a.useState(e.getActionState());return a.useEffect(()=>e.subscribe(()=>{const m=e.getActionState();n(l=>JSON.stringify(l)!==JSON.stringify(m)?m:l)}),[e]),t}function ue(e){const t=a.useMemo(()=>({play:B(D.MediaActionTypes.PLAY,e),pause:B(D.MediaActionTypes.PAUSE,e),seek:B(D.MediaActionTypes.SEEK,e),setVolume:B(D.MediaActionTypes.SET_VOLUME,e),mute:B(D.MediaActionTypes.MUTE,e),unmute:B(D.MediaActionTypes.UNMUTE,e),toggleMute:B(D.MediaActionTypes.TOGGLE_MUTE,e),setDuration:B(D.MediaActionTypes.SET_DURATION,e),setCurrentTime:B(D.MediaActionTypes.SET_CURRENT_TIME,e),setBuffered:B(D.MediaActionTypes.SET_BUFFERED,e),setLoading:B(D.MediaActionTypes.SET_LOADING,e),setError:B(D.MediaActionTypes.SET_ERROR,e),enterFullscreen:B(D.MediaActionTypes.ENTER_FULLSCREEN,e),exitFullscreen:B(D.MediaActionTypes.EXIT_FULLSCREEN,e),enterPiP:B(D.MediaActionTypes.ENTER_PIP,e),exitPiP:B(D.MediaActionTypes.EXIT_PIP,e),setPlaybackRate:B(D.MediaActionTypes.SET_PLAYBACK_RATE,e),setSubtitleTrack:B(D.MediaActionTypes.SET_SUBTITLE_TRACK,e),setRendition:B(D.MediaActionTypes.SET_RENDITION,e),toggleSubtitles:B(D.MediaActionTypes.TOGGLE_SUBTITLES,e),previewTime:B(D.MediaActionTypes.PREVIEW_TIME,e),clearPreview:B(D.MediaActionTypes.CLEAR_PREVIEW,e)}),[e]),n=ce(e),s=a.useMemo(()=>({togglePlayPause:async l=>{l?await t.pause(!0):await t.play(!0)},seekWithPreview:async l=>{await t.previewTime(l,!0),await t.seek(l,!0)},adjustVolume:async(l,i)=>{const d=Math.max(0,Math.min(1,i+l));await t.setVolume(d,!0)},toggleFullscreenOptimistic:async l=>{l?await t.exitFullscreen(!0):await t.enterFullscreen(!0)}}),[t]),m=a.useCallback(async()=>{const{lastAction:l}=n;l&&n.error&&await e.dispatchOptimistic({...l,retryCount:(l.retryCount||0)+1})},[e,n]);return{...t,...s,actionState:n,retryLastAction:m,isLoading:n.pending,hasError:!!n.error,errorMessage:n.error,retryCount:n.retryCount}}function Ee(e){const t=a.useRef(null),n=a.useRef(null),[s,m]=a.useTransition(),[l,i]=a.useTransition();a.useRef(0);const d=a.useRef(0),S=a.useRef(0);a.useRef();const R=a.useRef(0),F=D.useMediaStore(),w="getOptimisticState"in F,r=D.useMediaSelector(y=>y.isPlaying),E=D.useMediaSelector(y=>y.currentTime),v=D.useMediaSelector(y=>y.duration),c=D.useMediaSelector(y=>y.volume),h=D.useMediaSelector(y=>y.isMuted),L=D.useMediaSelector(y=>y.isLoading),f=D.useMediaSelector(y=>y.isBuffering),o=D.useMediaSelector(y=>y.error),g=D.useMediaSelector(y=>y.buffered),p=D.useMediaSelector(y=>y.isFullscreen),b=F,M=w?ye(b):null,T=w?ue(b):null,[H,C]=a.useState({frameRate:0,averageRenderTime:0,droppedFrames:0,bufferHealth:0}),[O,P]=a.useOptimistic(c,(y,I)=>Math.max(0,Math.min(1,I)));a.useOptimistic(E,(y,I)=>Math.max(0,Math.min(v||0,I))),a.useEffect(()=>{const y=t.current;if(!y)return;const I={volume:e.volume,muted:e.muted,autoplay:e.autoPlay,loop:e.loop,preload:e.preload,crossOrigin:e.crossOrigin};Object.entries(I).forEach(([$,j])=>{j!==void 0&&(y[$]=j)}),y.setAttribute("preload",e.preloadStrategy==="eager"?"auto":"metadata"),e.bufferingStrategy==="aggressive"&&y.setAttribute("buffered","auto"),y instanceof HTMLVideoElement&&(y.style.willChange="transform",y.style.transform="translateZ(0)")},[e.volume,e.muted,e.autoPlay,e.loop,e.preload,e.crossOrigin,e.preloadStrategy,e.bufferingStrategy]);const k=a.useCallback(()=>{const y=t.current;if(!y)return;const I=performance.now();if(e.enableTimeUpdateThrottling!==!1){if(I-R.current<(e.timeUpdateThrottleMs||100))return;R.current=I}m(()=>{w&&T&&T.setCurrentTime(y.currentTime)})},[e.enableTimeUpdateThrottling,e.timeUpdateThrottleMs,w,T]),A=a.useCallback(()=>{m(()=>{w&&T&&T.play(!0)}),e.onPlay?.()},[w,T,e.onPlay]),V=a.useCallback(()=>{m(()=>{w&&T&&T.pause(!0)}),e.onPause?.()},[w,T,e.onPause]),U=a.useCallback(()=>{const y=t.current;y&&m(()=>{w&&T&&(T.setVolume(y.volume,!0),y.muted?T.mute(!0):T.unmute(!0))})},[w,T]),x=a.useCallback(()=>{i(()=>{})},[]),W=a.useCallback(()=>{},[]),u=a.useCallback(()=>{const y=t.current;y&&m(()=>{w&&T&&T.setBuffered(y.buffered)})},[w,T]),_=a.useCallback(()=>{const y=performance.now();if(y-S.current>0&&(d.current++,d.current>=60)){const $=Math.round(d.current*1e3/(y-S.current));C(j=>({...j,frameRate:$,droppedFrames:Math.max(0,60-$)})),d.current=0,S.current=y}},[]);a.useEffect(()=>{const y=t.current;if(!y)return;const I=[{event:"timeupdate",handler:k,passive:!0},{event:"play",handler:A},{event:"pause",handler:V},{event:"volumechange",handler:U},{event:"seeking",handler:x},{event:"seeked",handler:W},{event:"progress",handler:u,passive:!0},{event:"loadedmetadata",handler:()=>_()},{event:"loadeddata",handler:()=>_()}];I.forEach(({event:X,handler:Z,passive:ee})=>{const te=ee?{passive:!0}:{};y.addEventListener(X,Z,te)});let $;const j=()=>{_(),$=requestAnimationFrame(j)};return e.enablePerformanceMonitoring&&j(),()=>{I.forEach(({event:X,handler:Z})=>{y.removeEventListener(X,Z)}),$&&cancelAnimationFrame($)}},[k,A,V,U,x,W,u,_,e.enablePerformanceMonitoring]);const q=a.useMemo(()=>{const y=async()=>{const N=t.current;if(N)if(w&&T)await T.play(!0);else try{await N.play()}catch(z){console.error("Failed to play media:",z)}},I=()=>{const N=t.current;N&&(w&&T?T.pause(!0):N.pause())};return{play:y,pause:I,toggle:()=>{r?I():y()},seek:N=>{const z=t.current;if(!z)return;const Y=Math.max(0,Math.min(N,v||0));w&&T?i(()=>{T.seek(Y,!0)}):z.currentTime=Y},setVolume:N=>{const z=t.current;if(!z)return;const Y=Math.max(0,Math.min(1,N));w&&T?(P(Y),m(()=>{T.setVolume(Y,!0)})):z.volume=Y},toggleMute:()=>{const N=t.current;N&&(w&&T?T.toggleMute(!0):N.muted=!N.muted)},enterFullscreen:async()=>{const N=n.current;if(!(!N||!document.fullscreenEnabled))try{await N.requestFullscreen(),w&&T&&T.enterFullscreen(!0)}catch(z){console.error("Failed to enter fullscreen:",z)}},exitFullscreen:async()=>{if(document.fullscreenElement)try{await document.exitFullscreen(),w&&T&&T.exitFullscreen(!0)}catch(N){console.error("Failed to exit fullscreen:",N)}}}},[r,v,w,T,m,i,P]),Q=a.useMemo(()=>({isPlaying:M?.isPlaying??r,currentTime:M?.currentTime??E,duration:M?.duration??v,volume:M?.volume??O,isMuted:M?.isMuted??h,isLoading:M?.isBuffering??L,isBuffering:M?.isBuffering??f,error:M?.error??o,buffered:M?.buffered??g,isFullscreen:M?.isFullscreen??p,progress:v>0?E/v:0,isTransitioning:s||l,canPlay:!L&&!f&&!o}),[M,r,E,v,O,h,L,f,o,g,p,s,l]);return{mediaRef:t,containerRef:n,state:Q,actualState:M?.actualState,controls:q,performanceMetrics:H,isTransitioning:s||l,actions:M?.actions,actionState:M?.actionState,optimisticState:M,isEnhanced:w}}function Te(e={}){const{maxMemoryUsage:t=100,cleanupInterval:n=3e4,enableGC:s=!0,monitorMemory:m=!0}=e;a.useRef();const l=a.useRef(new Set),i=a.useRef(new Map),d=a.useRef(new Set),S=a.useRef(new Set),R=a.useCallback(()=>{if(typeof window>"u"||!("memory"in performance))return{used:0,total:0,limit:0};const f=performance.memory;return{used:f.usedJSHeapSize,total:f.totalJSHeapSize,limit:f.jsHeapSizeLimit}},[]),[F,w]=a.useState({used:0,total:0,limit:0,usage:0,isHighUsage:!1});a.useEffect(()=>{if(!m)return;const f=()=>{const g=R(),p=g.used/1024/1024,b=p>t;w({...g,usage:p,isHighUsage:b}),b&&s&&r()};f();const o=v(f,n);return d.current.add(o),()=>{clearInterval(o),d.current.delete(o)}},[m,R,t,s,n]);const r=a.useCallback(()=>{d.current.forEach(f=>{clearTimeout(f)}),d.current.clear(),S.current.forEach(f=>{cancelAnimationFrame(f)}),S.current.clear(),l.current.forEach(f=>{f.disconnect()}),l.current.clear(),i.current.forEach((f,o)=>{f.forEach(({event:g,handler:p})=>{o.removeEventListener(g,p)})}),i.current.clear(),s&&"gc"in window&&window.gc()},[s]),E=a.useCallback((f,o,g,p)=>(f.addEventListener(o,g,p),i.current.has(f)||i.current.set(f,[]),i.current.get(f).push({event:o,handler:g}),()=>{f.removeEventListener(o,g);const b=i.current.get(f);if(b){const M=b.findIndex(T=>T.event===o&&T.handler===g);M>-1&&b.splice(M,1),b.length===0&&i.current.delete(f)}}),[]),v=a.useCallback((f,o)=>{const g=v(f,o);return d.current.add(g),()=>{clearInterval(g),d.current.delete(g)}},[]),c=a.useCallback((f,o)=>{const g=c(f,o);return d.current.add(g),()=>{clearTimeout(g),d.current.delete(g)}},[]),h=a.useCallback(f=>{const o=h(f);return S.current.add(o),()=>{cancelAnimationFrame(o),S.current.delete(o)}},[]),L=a.useCallback(f=>(l.current.add(f),()=>{f.disconnect(),l.current.delete(f)}),[]);return a.useEffect(()=>()=>{r()},[r]),{memoryStats:F,getMemoryUsage:R,performCleanup:r,addEventListener:E,setInterval:v,setTimeout:c,requestAnimationFrame:h,addObserver:L,formatBytes:f=>{if(f===0)return"0 Bytes";const o=1024,g=["Bytes","KB","MB","GB"],p=Math.floor(Math.log(f)/Math.log(o));return parseFloat((f/Math.pow(o,p)).toFixed(2))+" "+g[p]}}}function le(){const[e,t]=a.useState({isPlaying:!1,currentTime:0,duration:0,volume:1,isMuted:!1,isLoading:!1,isFullscreen:!1,error:null,buffered:null}),n=r=>{t(E=>({...E,...r}))};return{state:e,updateState:n,setPlaying:r=>{n({isPlaying:r})},setCurrentTime:r=>{n({currentTime:r})},setDuration:r=>{n({duration:r})},setVolume:r=>{n({volume:Math.max(0,Math.min(1,r))})},setMuted:r=>{n({isMuted:r})},setLoading:r=>{n({isLoading:r})},setFullscreen:r=>{n({isFullscreen:r})},setError:r=>{n({error:r})},setBuffered:r=>{n({buffered:r})}}}function de(e){const t=a.useRef(null),n=a.useRef(null),{state:s,setPlaying:m,setCurrentTime:l,setDuration:i,setVolume:d,setMuted:S,setLoading:R,setFullscreen:F,setError:w,setBuffered:r}=le();a.useEffect(()=>{const u=t.current;u&&(e.volume!==void 0&&(u.volume=e.volume,d(e.volume)),e.muted!==void 0&&(u.muted=e.muted,S(e.muted)),e.autoPlay!==void 0&&(u.autoplay=e.autoPlay),e.loop!==void 0&&(u.loop=e.loop),e.preload!==void 0&&(u.preload=e.preload),e.crossOrigin!==void 0&&(u.crossOrigin=e.crossOrigin))},[e,d,S]);const E=()=>{m(!0),e.onPlay?.()},v=()=>{m(!1),e.onPause?.()},c=()=>{const u=t.current;u&&(l(u.currentTime),e.onTimeUpdate?.(u.currentTime))},h=()=>{const u=t.current;u&&(i(u.duration),e.onDurationChange?.(u.duration))},L=()=>{const u=t.current;u&&(d(u.volume),S(u.muted),e.onVolumeChange?.(u.volume))},f=()=>{R(!0),w(null),e.onLoadStart?.()},o=()=>{R(!1),e.onLoadedData?.()},g=()=>{const u=t.current;if(!u)return;const _=u.error?.message||"An error occurred while loading the media";w(_),R(!1),e.onError?.(_)},p=()=>{m(!1),e.onEnded?.()},b=()=>{const u=t.current;u&&r(u.buffered)};a.useEffect(()=>{const u=t.current;if(u)return u.addEventListener("play",E),u.addEventListener("pause",v),u.addEventListener("timeupdate",c),u.addEventListener("durationchange",h),u.addEventListener("volumechange",L),u.addEventListener("loadstart",f),u.addEventListener("loadeddata",o),u.addEventListener("error",g),u.addEventListener("ended",p),u.addEventListener("progress",b),()=>{u.removeEventListener("play",E),u.removeEventListener("pause",v),u.removeEventListener("timeupdate",c),u.removeEventListener("durationchange",h),u.removeEventListener("volumechange",L),u.removeEventListener("loadstart",f),u.removeEventListener("loadeddata",o),u.removeEventListener("error",g),u.removeEventListener("ended",p),u.removeEventListener("progress",b)}},[E,v,c,h,L,f,o,g,p,b]);const M=async()=>{const u=t.current;if(u)try{await u.play()}catch(_){console.error("Failed to play media:",_),w("Failed to play media")}},T=()=>{const u=t.current;u&&u.pause()},H=()=>{s.isPlaying?T():M()},C=u=>{const _=t.current;_&&(_.currentTime=Math.max(0,Math.min(u,_.duration||0)))},O=u=>{const _=t.current;if(!_)return;const q=Math.max(0,Math.min(1,u));_.volume=q},P=()=>{const u=t.current;u&&(u.muted=!0)},k=()=>{const u=t.current;u&&(u.muted=!1)},A=()=>{const u=t.current;u&&(u.muted=!u.muted)},V=async()=>{const u=n.current;if(!(!u||!document.fullscreenEnabled))try{await u.requestFullscreen(),F(!0)}catch(_){console.error("Failed to enter fullscreen:",_)}},U=async()=>{if(document.fullscreenElement)try{await document.exitFullscreen(),F(!1)}catch(u){console.error("Failed to exit fullscreen:",u)}},x=()=>{document.fullscreenElement?U():V()};return a.useEffect(()=>{const u=()=>{F(!!document.fullscreenElement)};return document.addEventListener("fullscreenchange",u),()=>{document.removeEventListener("fullscreenchange",u)}},[F]),{state:s,controls:{play:M,pause:T,toggle:H,seek:C,setVolume:O,mute:P,unmute:k,toggleMute:A,enterFullscreen:V,exitFullscreen:U,toggleFullscreen:x},mediaRef:t,containerRef:n}}const G={mobile:768,desktop:1280};function re(){if(typeof window>"u")return"unknown";const e=window.navigator.userAgent.toLowerCase();return/iphone|ipad|ipod/.test(e)?"ios":/android/.test(e)?"android":/windows|mac|linux/.test(e)?"desktop":"unknown"}function se(){return typeof window>"u"?!1:"ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0}function ae(){return typeof window>"u"?!1:"vibrate"in navigator||"vibration"in navigator||"ondevicemotion"in window}function J(){const[e,t]=K.useState(()=>{if(typeof window>"u")return{isMobile:!1,isTablet:!1,isDesktop:!0,isTouchDevice:!1,platform:"unknown",supportsHaptics:!1,screenSize:{width:1920,height:1080},orientation:"landscape"};const n=window.innerWidth,s=window.innerHeight;return{isMobile:n<G.mobile,isTablet:n>=G.mobile&&n<G.desktop,isDesktop:n>=G.desktop,isTouchDevice:se(),platform:re(),supportsHaptics:ae(),screenSize:{width:n,height:s},orientation:n>s?"landscape":"portrait"}});return K.useEffect(()=>{const n=()=>{const i=window.innerWidth,d=window.innerHeight;t({isMobile:i<G.mobile,isTablet:i>=G.mobile&&i<G.desktop,isDesktop:i>=G.desktop,isTouchDevice:se(),platform:re(),supportsHaptics:ae(),screenSize:{width:i,height:d},orientation:i>d?"landscape":"portrait"})};window.addEventListener("resize",n),window.addEventListener("orientationchange",n);const s=window.matchMedia(`(max-width: ${G.mobile-1}px)`),m=window.matchMedia(`(min-width: ${G.mobile}px) and (max-width: ${G.desktop-1}px)`),l=window.matchMedia(`(min-width: ${G.desktop}px)`);return s.addEventListener("change",n),m.addEventListener("change",n),l.addEventListener("change",n),()=>{window.removeEventListener("resize",n),window.removeEventListener("orientationchange",n),s.removeEventListener("change",n),m.removeEventListener("change",n),l.removeEventListener("change",n)}},[]),e}function we(){const{platform:e,isMobile:t}=J();K.useEffect(()=>{if(t){if(e==="ios"){const n=s=>{s.touches.length>1&&s.preventDefault()};return document.addEventListener("touchstart",n,{passive:!1}),document.body.style.webkitOverflowScrolling="touch",()=>{document.removeEventListener("touchstart",n)}}e==="android"&&(document.body.style.touchAction="manipulation"),document.documentElement.style.setProperty("--webkit-transform","translateZ(0)"),document.documentElement.style.setProperty("--transform","translateZ(0)")}},[e,t])}function be(){const{supportsHaptics:e}=J();return{triggerHaptic:K.useCallback((n="light")=>{if(!e)return;const m={light:[10],medium:[20],heavy:[30],success:[10,10,10],warning:[20,20],error:[50,20,50]}[n];"vibrate"in navigator&&navigator.vibrate(m)},[e]),supportsHaptics:e}}const Se={enabledGestures:["tap","double-tap","long-press","swipe-left","swipe-right","swipe-up","swipe-down","pinch-in","pinch-out"],tapThreshold:200,doubleTapThreshold:300,longPressThreshold:500,swipeThreshold:50,swipeVelocityThreshold:.5,pinchThreshold:.1,rotationThreshold:15,enableHapticFeedback:!0};function me(e,t,n={}){const s={...Se,...n},{isTouchDevice:m}=J(),{triggerHaptic:l}=be(),i=K.useRef({isTracking:!1,touches:[],startTouches:[]}),d=v=>({id:v.identifier,x:v.clientX,y:v.clientY,timestamp:Date.now()}),S=(v,c)=>Math.sqrt(Math.pow(c.x-v.x,2)+Math.pow(c.y-v.y,2)),R=(v,c)=>{const h=Math.max(c.timestamp-v.timestamp,1);return{x:(c.x-v.x)/h,y:(c.y-v.y)/h}},F=(v,c,h,L={})=>({type:v,startPoint:{x:c.x,y:c.y},currentPoint:{x:h.x,y:h.y},duration:h.timestamp-c.timestamp,target:e.current,preventDefault:()=>{},...L}),w=K.useCallback(v=>{if(!s.enabledGestures.length)return;const c=Array.from(v.touches).map(d),h=i.current;h.isTracking=!0,h.touches=c,h.startTouches=[...c],h.longPressTimer&&clearTimeout(h.longPressTimer),c.length===1&&s.enabledGestures.includes("long-press")&&(h.longPressTimer=setTimeout(()=>{if(h.touches.length===1&&c[0]){const L=F("long-press",c[0],c[0]);t(L),s.enableHapticFeedback&&l("heavy")}},s.longPressThreshold)),c.length===2&&c[0]&&c[1]&&(h.initialDistance=S(c[0],c[1]),h.initialScale=1,h.lastScale=1)},[s,t,l]),r=K.useCallback(v=>{const c=i.current;if(!c.isTracking)return;const h=Array.from(v.touches).map(d);if(c.touches=h,h.length===2&&c.initialDistance&&h[0]&&h[1]){const L=S(h[0],h[1]),f=L/c.initialDistance;if(Math.abs(f-(c.lastScale||1))>s.pinchThreshold){const g=f>(c.lastScale||1)?"pinch-out":"pinch-in";if(s.enabledGestures.includes(g)){const p={x:(h[0].x+h[1].x)/2,y:(h[0].y+h[1].y)/2,timestamp:Date.now()},b={x:((c.startTouches[0]?.x??0)+(c.startTouches[1]?.x??0))/2,y:((c.startTouches[0]?.y??0)+(c.startTouches[1]?.y??0))/2,timestamp:c.startTouches[0]?.timestamp??Date.now()},M=F(g,b,p,{scale:f,distance:L});t(M),c.lastScale=f}}}if(c.longPressTimer&&h.length===1&&c.startTouches[0]&&h[0]){const L=c.startTouches[0],f=h[0];S(L,f)>s.swipeThreshold&&(clearTimeout(c.longPressTimer),c.longPressTimer=void 0)}},[s,t]),E=K.useCallback(v=>{const c=i.current;if(!c.isTracking)return;const h=Array.from(v.changedTouches).map(d),L=Date.now();if(c.longPressTimer&&(clearTimeout(c.longPressTimer),c.longPressTimer=void 0),c.startTouches.length===1&&h.length===1&&c.startTouches[0]&&h[0]){const f=c.startTouches[0],o=h[0],g=S(f,o),p=o.timestamp-f.timestamp;if(g>s.swipeThreshold){const b=R(f,o),M=Math.abs(b.x),T=Math.abs(b.y);if(M>s.swipeVelocityThreshold||T>s.swipeVelocityThreshold){let H;if(M>T?H=b.x>0?"swipe-right":"swipe-left":H=b.y>0?"swipe-down":"swipe-up",s.enabledGestures.includes(H)){const C=F(H,f,o,{velocity:b,distance:g});t(C),s.enableHapticFeedback&&l("light")}}}else if(p<s.tapThreshold&&g<s.swipeThreshold)if(c.lastTap&&L-c.lastTap.timestamp<s.doubleTapThreshold&&S({...c.lastTap.point},o)<s.swipeThreshold){if(s.enabledGestures.includes("double-tap")){const b=F("double-tap",f,o);t(b),s.enableHapticFeedback&&l("medium")}c.lastTap=void 0}else{if(s.enabledGestures.includes("tap")){const b=F("tap",f,o);t(b),s.enableHapticFeedback&&l("light")}c.lastTap={timestamp:L,point:{x:o.x,y:o.y}}}}v.touches.length===0&&(c.isTracking=!1,c.touches=[],c.startTouches=[],c.initialDistance=void 0,c.initialScale=void 0,c.lastScale=void 0)},[s,t,l]);return K.useEffect(()=>{const v=e.current;if(!(!v||!m))return v.addEventListener("touchstart",w,{passive:!1}),v.addEventListener("touchmove",r,{passive:!1}),v.addEventListener("touchend",E,{passive:!1}),v.addEventListener("touchcancel",E,{passive:!1}),()=>{v.removeEventListener("touchstart",w),v.removeEventListener("touchmove",r),v.removeEventListener("touchend",E),v.removeEventListener("touchcancel",E)}},[w,r,E,m]),{isGestureEnabled:m&&s.enabledGestures.length>0}}function Me(e,t){const n=K.useCallback(m=>{const{type:l,distance:i,scale:d}=m;switch(l){case"double-tap":t.onPlayPause?.();break;case"swipe-left":const S=Math.min((i||0)/10,30);t.onSeek?.("backward",S);break;case"swipe-right":const R=Math.min((i||0)/10,30);t.onSeek?.("forward",R);break;case"swipe-up":if(m.startPoint.x>(e.current?.clientWidth||0)/2){const F=Math.min((i||0)/100,.2);t.onVolumeChange?.("up",F)}break;case"swipe-down":if(m.startPoint.x>(e.current?.clientWidth||0)/2){const F=Math.min((i||0)/100,.2);t.onVolumeChange?.("down",F)}break;case"pinch-out":t.onZoom?.(d||1);break;case"pinch-in":t.onZoom?.(d||1);break;case"long-press":t.onToggleFullscreen?.();break}},[t,e]);return me(e,n,{enabledGestures:["tap","double-tap","long-press","swipe-left","swipe-right","swipe-up","swipe-down","pinch-in","pinch-out"],enableHapticFeedback:!0,swipeThreshold:30,swipeVelocityThreshold:.3})}function ke(e){const t=a.useRef(null),[n,s]=a.useState({isPlaying:!1,currentTime:0,duration:0,volume:1,isMuted:!1,isFullscreen:!1,isLoading:!0,isSeeking:!1,isBuffering:!1,bufferedRanges:[]});return a.useEffect(()=>{const r=t.current;if(!r)return;const E=()=>{s(C=>({...C,currentTime:r.currentTime}))},v=()=>{s(C=>({...C,duration:r.duration}))},c=()=>{s(C=>({...C,isPlaying:!0,isBuffering:!1}))},h=()=>{s(C=>({...C,isPlaying:!1}))},L=()=>{s(C=>({...C,volume:r.volume,isMuted:r.muted}))},f=()=>{s(C=>({...C,isLoading:!0}))},o=()=>{s(C=>({...C,isLoading:!1}))},g=()=>{s(C=>({...C,isSeeking:!0}))},p=()=>{s(C=>({...C,isSeeking:!1}))},b=()=>{s(C=>({...C,isBuffering:!0}))},M=()=>{s(C=>({...C,isBuffering:!1,isLoading:!1}))},T=()=>{s(C=>({...C,isLoading:!1,isBuffering:!1}))},H=()=>{if(!r.buffered||r.buffered.length===0||r.duration===0){s(O=>({...O,bufferedRanges:[]}));return}const C=[];for(let O=0;O<r.buffered.length;O++){const P=r.buffered.start(O),k=r.buffered.end(O);C.push({start:P,end:k,percentage:(k-P)/r.duration*100})}s(O=>({...O,bufferedRanges:C}))};return r.addEventListener("timeupdate",E),r.addEventListener("loadedmetadata",v),r.addEventListener("play",c),r.addEventListener("pause",h),r.addEventListener("volumechange",L),r.addEventListener("loadstart",f),r.addEventListener("loadeddata",o),r.addEventListener("seeking",g),r.addEventListener("seeked",p),r.addEventListener("waiting",b),r.addEventListener("playing",M),r.addEventListener("canplay",T),r.addEventListener("progress",H),()=>{r.removeEventListener("timeupdate",E),r.removeEventListener("loadedmetadata",v),r.removeEventListener("play",c),r.removeEventListener("pause",h),r.removeEventListener("volumechange",L),r.removeEventListener("loadstart",f),r.removeEventListener("loadeddata",o),r.removeEventListener("seeking",g),r.removeEventListener("seeked",p),r.removeEventListener("waiting",b),r.removeEventListener("playing",M),r.removeEventListener("canplay",T),r.removeEventListener("progress",H)}},[]),{videoRef:t,state:n,controls:{togglePlay:()=>{const r=t.current;r&&(n.isPlaying?r.pause():r.play())},seekForward:(r=10)=>{const E=t.current;E&&(E.currentTime=Math.min(n.duration,E.currentTime+r))},seekBackward:(r=10)=>{const E=t.current;E&&(E.currentTime=Math.max(0,E.currentTime-r))},toggleMute:()=>{const r=t.current;r&&(r.muted=!n.isMuted)},setVolume:r=>{const E=t.current;E&&(E.volume=r,r>0&&n.isMuted&&(E.muted=!1))},toggleFullscreen:()=>{const r=e.current;r&&(n.isFullscreen?document.exitFullscreen&&document.exitFullscreen():r.requestFullscreen&&r.requestFullscreen(),s(E=>({...E,isFullscreen:!E.isFullscreen})))},seekTo:r=>{const E=t.current;!E||n.duration===0||(E.currentTime=Math.max(0,Math.min(n.duration,r)))}}}}function fe({subtitleSrc:e,subtitleTracks:t=[],defaultFontSize:n="medium",onLoadError:s}={}){const[m,l]=a.useState(!1),[i,d]=a.useState([]),[S,R]=a.useState(""),[F,w]=a.useState(null),[r,E]=a.useState(n),[v,c]=a.useState(null),[h,L]=a.useState(!1),f={small:"text-sm",medium:"text-base",large:"text-lg"},o=!!(e||t&&t.length>0),g=P=>{const k=P.split(":"),A=k[2]?parseFloat(k[2]):0,V=k[1]?parseInt(k[1],10)*60:0;return(k[0]?parseInt(k[0],10)*3600:0)+V+A},p=P=>{const[k,A]=P.split(","),V=(k||"").split(":"),U=A?parseInt(A,10)/1e3:0,x=V[2]?parseInt(V[2],10):0,W=V[1]?parseInt(V[1],10)*60:0;return(V[0]?parseInt(V[0],10)*3600:0)+W+x+U},b=async P=>{L(!0),c(null);try{const k=await fetch(P);if(!k.ok)throw new Error(`Failed to load subtitles: ${k.status} ${k.statusText}`);const A=await k.text(),V=[],U=A.split(`
|
|
2
|
-
`);let x=0;const W=A.includes("WEBVTT")||P.endsWith(".vtt"),u=P.endsWith(".srt")||/^\d+$/.test(U[0]?.trim()||"");if(W)for(;x<U.length;){if(U[x]?.includes("-->")){const[_,q]=(U[x]||"").split("-->").map($=>$.trim()),Q=g(_||""),y=g(q||"");x++;let I="";for(;x<U.length&&U[x]?.trim()!=="";)I+=(I?" ":"")+U[x]?.trim(),x++;I&&V.push({start:Q,end:y,text:I})}x++}else if(u)for(;x<U.length;){if(/^\d+$/.test(U[x]?.trim()||"")&&(x++,U[x]?.includes("-->"))){const[_,q]=(U[x]||"").split("-->").map($=>$.trim()),Q=p(_||""),y=p(q||"");x++;let I="";for(;x<U.length&&U[x]?.trim()!=="";)I+=(I?" ":"")+U[x]?.trim(),x++;I&&V.push({start:Q,end:y,text:I})}x++}else throw new Error("Unsupported subtitle format. Only VTT and SRT are supported.");if(V.length===0)throw new Error("No subtitle cues found in file");d(V),L(!1)}catch(k){const A=k instanceof Error?k:new Error("Failed to load subtitles");console.error("Failed to load subtitles:",A),c(A),L(!1),d([]),s?.(A)}},M=P=>!m||i.length===0?"":i.find(A=>P>=A.start&&P<=A.end)?.text||"",T=()=>{l(P=>{const k=!P;if(k&&!v){if(i.length===0&&!h){const A=e||t[0]?.src;A&&(b(A),t[0]&&w(t[0].id))}}else k||R("");return k})},H=P=>{if(!P){l(!1),w(null),R("");return}const k=t.find(A=>A.id===P);k?.src&&(w(P),b(k.src),l(!0))},C=P=>{E(P)},O={fontSize:f[r],className:`${f[r]} font-medium`};return a.useEffect(()=>{m||R("")},[m]),a.useEffect(()=>{},[]),{subtitlesEnabled:m,currentSubtitle:S,subtitleCues:i,currentTrackId:F,fontSize:r,loadError:v,isLoading:h,hasSubtitles:o,toggleSubtitles:T,selectSubtitleTrack:H,changeSubtitleFontSize:C,setCurrentSubtitle:R,getCurrentSubtitle:M,getSubtitleStyles:O,availableTracks:t}}const Le=Object.freeze(Object.defineProperty({__proto__:null,useEnhancedSubtitles:fe},Symbol.toStringTag,{value:"Module"}));function Pe(e,t){const[n,s]=a.useState(!0),[m,l]=a.useState(!1),i=a.useRef(null),d=()=>{s(!0),i.current&&clearTimeout(i.current),e&&!t&&(i.current=setTimeout(()=>{s(!1)},3e3))},S=()=>{d()},R=()=>{s(!0)},F=()=>{e&&s(!1)};return a.useEffect(()=>(d(),()=>{i.current&&clearTimeout(i.current)}),[d]),{controlsVisible:n,showVolumeSlider:m,setShowVolumeSlider:l,handleMouseMove:S,handleMouseEnter:R,handleMouseLeave:F}}function Ce({videoControls:e,toggleSubtitles:t,takeScreenshot:n,duration:s}){const m=l=>{const i=document.querySelector("video");if(i)switch(l.key.toLowerCase()){case" ":case"k":l.preventDefault(),e.togglePlay();break;case"j":l.preventDefault(),e.seekBackward();break;case"l":l.preventDefault(),e.seekForward();break;case"arrowleft":l.preventDefault(),i.currentTime=Math.max(0,i.currentTime-5);break;case"arrowright":l.preventDefault(),i.currentTime=Math.min(s,i.currentTime+5);break;case"arrowup":l.preventDefault(),i.volume=Math.min(1,i.volume+.1);break;case"arrowdown":l.preventDefault(),i.volume=Math.max(0,i.volume-.1);break;case"m":l.preventDefault(),e.toggleMute();break;case"f":l.preventDefault(),e.toggleFullscreen();break;case"c":l.preventDefault(),t();break;case"s":l.preventDefault(),n(l.ctrlKey||l.metaKey);break}};a.useEffect(()=>(document.addEventListener("keydown",m),()=>document.removeEventListener("keydown",m)),[m])}function Fe(e){return{takeScreenshot:(n=!1)=>{if(!e.current)return;const s=e.current,m=document.createElement("canvas");m.width=s.videoWidth,m.height=s.videoHeight;const l=m.getContext("2d");if(l)try{l.drawImage(s,0,0),m.toBlob(i=>{if(!i){console.error("Failed to create blob from canvas");return}if(n)if(navigator.clipboard&&window.ClipboardItem){const d=new ClipboardItem({"image/png":i});navigator.clipboard.write([d]).catch(S=>{console.error("Failed to copy to clipboard:",S)})}else console.warn("Clipboard API not supported");else{const d=URL.createObjectURL(i),S=document.createElement("a");S.href=d,S.download=`screenshot-${Date.now()}.png`,S.click(),URL.revokeObjectURL(d)}},"image/png")}catch(i){i instanceof Error&&i.message.includes("tainted")?(console.error("Canvas is tainted - video source may not have proper CORS headers. Try setting crossOrigin='anonymous' on the video element."),alert("Screenshot failed: The video source doesn't allow screenshots due to CORS policy. Please ensure the video server includes proper CORS headers or set crossOrigin='anonymous' on the video player.")):(console.error("Screenshot failed:",i),alert("Screenshot failed: "+(i instanceof Error?i.message:"Unknown error")))}}}}const De=(e,t={})=>{const{trackUserBehavior:n=!0,adaptToNetwork:s=!0,strategy:m="balanced",maxPreloadItems:l=3,preloadRadius:i=2}=t,d=a.useRef({mouseMovements:0,scrollEvents:0,keyPresses:0,focusEvents:0,timeOnPage:0,engagementScore:0,lastInteraction:Date.now()}),S=a.useRef(null),R=a.useRef(new Set),F=a.useRef([]),w=a.useCallback(()=>{const o=d.current,g=Math.min(o.timeOnPage/6e4,1),p=Math.min((o.mouseMovements+o.scrollEvents+o.keyPresses)/100,1);return(g*.4+p*.6)*100},[]),r=a.useCallback((o,g=1)=>{const p=d.current;p[o]=typeof p[o]=="number"?p[o]+g:Date.now(),p.engagementScore=w(),p.lastInteraction=Date.now()},[w]),E=a.useCallback(()=>{if(!S.current||!s)return{type:"unknown",downlink:10,effectiveType:"4g",saveData:!1};const o=S.current;return{type:o.type,downlink:o.downlink||10,effectiveType:o.effectiveType||"4g",saveData:o.saveData||!1,rtt:o.rtt||100}},[s]),v=a.useCallback((o,g,p=0)=>{if(R.current.has(o.src))return{shouldPreload:!1,priority:"low",reason:"Already preloaded"};const b=Math.abs(g-p);if(b>i)return{shouldPreload:!1,priority:"low",reason:"Outside preload radius"};const M=d.current,T=E(),H=M.engagementScore,C=Date.now()-M.lastInteraction;if(T.saveData)return{shouldPreload:!1,priority:"low",reason:"Data saver mode"};let O=!1,P="medium",k="";switch(m){case"conservative":O=H>70&&T.effectiveType!=="2g"&&b===1,P=O?"medium":"low",k=O?"High engagement and optimal network":"Conservative strategy";break;case"aggressive":O=H>30&&T.effectiveType!=="slow-2g",P=H>70?"high":H>50?"medium":"low",k=O?"Aggressive preloading":"Low engagement";break;case"balanced":default:const A=T.effectiveType==="4g"?1:T.effectiveType==="3g"?.7:.3,V=H*A;O=V>40&&b<=2,P=V>70?"high":V>55?"medium":"low",k=O?`Balanced: score ${V.toFixed(1)}`:"Low adjusted score";break}return O&&((o.type==="hls"||o.type==="m3u8")&&(P=P==="low"?"medium":"high"),C<5e3&&(P="high",k+=" + Recent interaction"),(o.type==="mp4"||o.type==="webm")&&(P=P==="low"?"medium":P)),{shouldPreload:O,priority:P,reason:k}},[m,i,E,w]),c=a.useCallback(async(o,g)=>{try{const p=document.createElement("link");switch(p.rel="preload",p.href=o.src,o.type){case"hls":case"m3u8":p.as="fetch";break;case"mp4":case"webm":p.as="video";break;case"mp3":case"wav":case"ogg":p.as="audio";break;default:p.as="fetch"}p.crossOrigin="anonymous",document.head.appendChild(p),R.current.add(o.src),console.debug(`Preloaded: ${o.src} (${g})`),setTimeout(()=>{document.head.contains(p)&&document.head.removeChild(p)},3e4)}catch(p){console.warn("Failed to preload source:",o.src,p)}},[]),h=a.useCallback(()=>{if(F.current.length===0)return;const g=[...F.current].sort((p,b)=>b.priority-p.priority).slice(0,l);F.current=[],g.forEach(({source:p,priority:b})=>{c(p,b)})},[l,c]),L=a.useCallback((o=0)=>{F.current=[],e.forEach((g,p)=>{const b=v(g,p,o);if(b.shouldPreload){const M=b.priority==="high"?3:b.priority==="medium"?2:1;F.current.push({source:g,priority:M})}}),h()},[e,v,h]);return a.useEffect(()=>{if(!n)return;const o=()=>r("mouseMovements"),g=()=>r("scrollEvents"),p=()=>r("keyPresses"),b=()=>r("focusEvents");document.addEventListener("mousemove",o,{passive:!0}),document.addEventListener("scroll",g,{passive:!0}),document.addEventListener("keydown",p,{passive:!0}),document.addEventListener("focusin",b,{passive:!0});const M=setInterval(()=>{r("timeOnPage",1)},1e3);return()=>{document.removeEventListener("mousemove",o),document.removeEventListener("scroll",g),document.removeEventListener("keydown",p),document.removeEventListener("focusin",b),clearInterval(M)}},[n,r]),a.useEffect(()=>{if(!s||!("connection"in navigator))return;const o=navigator.connection;S.current=o;const g=()=>{L()};return o.addEventListener("change",g),()=>{o.removeEventListener("change",g)}},[s,L]),a.useEffect(()=>{L()},[L]),a.useMemo(()=>({preloadAtIndex:o=>{L(o)},getUserBehavior:()=>({...d.current}),getNetworkConditions:E,clearCache:()=>{R.current.clear()},getStats:()=>({preloadedItems:R.current.size,engagementScore:d.current.engagementScore,queueLength:F.current.length,maxPreloadItems:l})}),[L,E,l])};function he(e){const[t,n]=a.useState(!1),[s,m]=a.useState([]),[l,i]=a.useState(""),d=w=>{const r=w.split(":"),E=r[2]?parseFloat(r[2]):0,v=r[1]?parseInt(r[1],10)*60:0;return(r[0]?parseInt(r[0],10)*3600:0)+v+E},S=async w=>{try{const E=await(await fetch(w)).text(),v=[],c=E.split(`
|
|
3
|
-
`);let h=0;for(;h<c.length;){if(c[h]?.includes("-->")){const[L,f]=(c[h]||"").split("-->").map(b=>b.trim()),o=d(L||""),g=d(f||"");h++;let p="";for(;h<c.length&&c[h]?.trim()!=="";)p+=(p?" ":"")+c[h]?.trim(),h++;p&&v.push({start:o,end:g,text:p})}h++}m(v)}catch(r){console.error("Failed to load subtitles:",r)}},R=w=>!t||s.length===0?"":s.find(E=>w>=E.start&&w<=E.end)?.text||"",F=()=>{n(w=>{const r=!w;return r&&e&&s.length===0?S(e):r||i(""),r})};return a.useEffect(()=>{t||i("")},[t]),{subtitlesEnabled:t,currentSubtitle:l,toggleSubtitles:F,getCurrentSubtitle:R,setCurrentSubtitle:i}}function Re(e){return ie.showDeprecationWarning("useVideoPlayer","useMediaPlayer (the primary media player hook)"),de(e)}function xe(e){return ie.showDeprecationWarning("useEnhancedSubtitles","useSubtitles (the current subtitle hook)"),he(e)}exports.useDeviceInfo=J;exports.useEnhancedMediaPlayer=Ee;exports.useEnhancedSubtitles=fe;exports.useEnhancedSubtitles$1=xe;exports.useEnhancedSubtitles$2=Le;exports.useIntelligentPreloading=De;exports.useKeyboardControls=oe;exports.useKeyboardControls$1=ge;exports.useKeyboardShortcuts=Ce;exports.useMediaActionState=ce;exports.useMediaActions=ue;exports.useMediaControls=Pe;exports.useMediaGestures=Me;exports.useMediaPlayer=de;exports.useMediaState=le;exports.useMemoryOptimization=Te;exports.useMobileOptimizations=we;exports.useScreenshot=Fe;exports.useSubtitles=he;exports.useTouchGestures=me;exports.useVideoPlayer=ke;exports.useVideoPlayer$1=Re;
|
|
4
|
-
//# sourceMappingURL=hooks-C_r8wexn.cjs.map
|