@therealtinhtute/baroiplayer 1.0.7 → 1.1.0
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/LICENSE +2 -2
- package/README.md +15 -15
- package/dist/context/media.js +2 -0
- package/dist/context/media.js.map +1 -0
- package/dist/context/media.mjs +15 -0
- package/dist/context/media.mjs.map +1 -0
- package/dist/context/store.js +2 -0
- package/dist/context/store.js.map +1 -0
- package/dist/context/store.mjs +5 -0
- package/dist/context/store.mjs.map +1 -0
- package/dist/context-BYwDoSRX.js +1172 -0
- package/dist/context-BYwDoSRX.js.map +1 -0
- package/dist/context-eNS62_ac.cjs +23 -0
- package/dist/context-eNS62_ac.cjs.map +1 -0
- package/dist/core-events-B1iM2F46.cjs +2 -0
- package/dist/core-events-B1iM2F46.cjs.map +1 -0
- package/dist/core-events-DunPHKRE.js +484 -0
- package/dist/core-events-DunPHKRE.js.map +1 -0
- package/dist/core-plugins-CROGvQUy.js +686 -0
- package/dist/core-plugins-CROGvQUy.js.map +1 -0
- package/dist/core-plugins-DtsHBOtF.cjs +2 -0
- package/dist/core-plugins-DtsHBOtF.cjs.map +1 -0
- package/dist/core.js +37 -0
- package/dist/core.js.map +1 -0
- package/dist/core.mjs +1233 -0
- package/dist/core.mjs.map +1 -0
- package/dist/enhanced-components-DUw2KrmQ.js +1142 -0
- package/dist/enhanced-components-DUw2KrmQ.js.map +1 -0
- package/dist/enhanced-components-DXBCHU0v.cjs +2 -0
- package/dist/enhanced-components-DXBCHU0v.cjs.map +1 -0
- package/dist/hooks-BW-JjVgP.cjs +4 -0
- package/dist/hooks-BW-JjVgP.cjs.map +1 -0
- package/dist/hooks-CyX6De5M.js +1693 -0
- package/dist/hooks-CyX6De5M.js.map +1 -0
- package/dist/index.css +1 -102
- package/dist/index.js +112 -27
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +6275 -17
- package/dist/index.mjs.map +1 -0
- package/dist/minimal-components-Bdcpxav5.cjs +2 -0
- package/dist/minimal-components-Bdcpxav5.cjs.map +1 -0
- package/dist/minimal-components-DlRK7Qu_.js +1927 -0
- package/dist/minimal-components-DlRK7Qu_.js.map +1 -0
- package/dist/minimal-components.css +1 -589
- package/dist/mona-loading.gif +0 -0
- package/dist/performance-monitor-C5k6FDXw.js +301 -0
- package/dist/performance-monitor-C5k6FDXw.js.map +1 -0
- package/dist/performance-monitor-lJmuUjQQ.cjs +2 -0
- package/dist/performance-monitor-lJmuUjQQ.cjs.map +1 -0
- package/dist/utils-CFOue_9K.cjs +9 -0
- package/dist/utils-CFOue_9K.cjs.map +1 -0
- package/dist/utils-Dzpl2ArK.js +2844 -0
- package/dist/utils-Dzpl2ArK.js.map +1 -0
- package/dist/utils.js +2 -0
- package/dist/utils.js.map +1 -0
- package/dist/utils.mjs +11 -0
- package/dist/utils.mjs.map +1 -0
- package/package.json +11 -40
- package/src/adapters/videojs-adapter.tsx +441 -441
- package/src/components/AnimateLoading.tsx +85 -93
- package/src/components/LoadingState.tsx +199 -208
- package/src/components/__tests__/media-player-accessibility.test.tsx +510 -0
- package/src/components/__tests__/media-player-react19.test.tsx +457 -0
- package/src/components/accessibility/keyboard-help-overlay.tsx +199 -207
- package/src/components/basic/index.ts +28 -28
- package/src/components/enhanced/advanced-features.tsx +49 -54
- package/src/components/enhanced/debug-panel.tsx +148 -122
- package/src/components/enhanced/enhanced-controls.tsx +117 -120
- package/src/components/enhanced/enhanced-media-player.tsx +228 -214
- package/src/components/enhanced/error-handling.tsx +50 -57
- package/src/components/enhanced/index.ts +27 -27
- package/src/components/enhanced/media-player-enhanced.tsx +117 -83
- package/src/components/examples/basic-video-player.tsx +35 -40
- package/src/components/examples/enhanced-controls-example.tsx +16 -30
- package/src/components/examples/enhanced-media-player-example.tsx +196 -187
- package/src/components/examples/loading-states-demo.tsx +113 -113
- package/src/components/examples/react-19-demo.tsx +88 -116
- package/src/components/examples/volume-orientation-demo.tsx +77 -85
- package/src/components/icon-demo.tsx +189 -202
- package/src/components/icons/svg-icons/ArrowLeftIcon.tsx +13 -13
- package/src/components/icons/svg-icons/ArrowRightIcon.tsx +13 -13
- package/src/components/icons/svg-icons/AudioIcon.tsx +16 -16
- package/src/components/icons/svg-icons/BackwardIcon.tsx +7 -7
- package/src/components/icons/svg-icons/CameraIcon.tsx +13 -13
- package/src/components/icons/svg-icons/CheckIcon.tsx +13 -13
- package/src/components/icons/svg-icons/EnablePiPIcon.tsx +13 -13
- package/src/components/icons/svg-icons/ForwardIcon.tsx +7 -7
- package/src/components/icons/svg-icons/FullscreenEnterIcon.tsx +18 -18
- package/src/components/icons/svg-icons/FullscreenExitIcon.tsx +18 -18
- package/src/components/icons/svg-icons/LoadingIcon.tsx +27 -27
- package/src/components/icons/svg-icons/PauseIcon.tsx +18 -18
- package/src/components/icons/svg-icons/PlayIcon.tsx +16 -16
- package/src/components/icons/svg-icons/PlaybackSpeedIcon.tsx +18 -18
- package/src/components/icons/svg-icons/QualityIcon.tsx +16 -16
- package/src/components/icons/svg-icons/SettingsIcon.tsx +7 -7
- package/src/components/icons/svg-icons/SliderIcon.tsx +16 -16
- package/src/components/icons/svg-icons/SubtitleIcon.tsx +16 -16
- package/src/components/icons/svg-icons/SubtitleOffIcon.tsx +20 -20
- package/src/components/icons/svg-icons/UnPiPIcon.tsx +13 -13
- package/src/components/icons/svg-icons/VolumeMutedIcon.tsx +11 -11
- package/src/components/icons/svg-icons/VolumeOneIcon.tsx +17 -17
- package/src/components/icons/svg-icons/VolumeThreeIcon.tsx +11 -11
- package/src/components/icons/svg-icons/VolumeTwoIcon.tsx +11 -11
- package/src/components/legacy.tsx +8 -14
- package/src/components/media-metadata-display.tsx +78 -79
- package/src/components/media-player-controls.tsx +37 -40
- package/src/components/media-player-error.tsx +2 -2
- package/src/components/media-player-fullscreen.tsx +2 -2
- package/src/components/media-player-hls.tsx +89 -89
- package/src/components/media-player-play.tsx +2 -2
- package/src/components/media-player-root.tsx +20 -22
- package/src/components/media-player-seek.tsx +1 -1
- package/src/components/media-player-tooltip.tsx +1 -1
- package/src/components/media-player-video.tsx +28 -6
- package/src/components/media-player-volume.tsx +3 -3
- package/src/components/media-player.tsx +209 -174
- package/src/components/media-suspense.tsx +71 -89
- package/src/components/player-settings-form.tsx +143 -148
- package/src/components/react-player-wrapper.tsx +23 -23
- package/src/components/simple-video-player.tsx +53 -51
- package/src/components/ui/blur-poster.tsx +93 -0
- package/src/components/ui/empty-state.tsx +91 -0
- package/src/components/ui/enhanced-seek-bar.tsx +75 -56
- package/src/components/ui/error-state.tsx +124 -0
- package/src/components/ui/fullscreen-button.tsx +71 -50
- package/src/components/ui/loading-skeleton.tsx +107 -0
- package/src/components/ui/media-resource-preloader.tsx +265 -198
- package/src/components/ui/offline-message.tsx +98 -0
- package/src/components/ui/play-button.tsx +79 -87
- package/src/components/ui/seek-bar.tsx +170 -140
- package/src/components/ui/time-display.tsx +33 -12
- package/src/components/ui/volume-control.tsx +91 -44
- package/src/components/unified/base-media-player.tsx +45 -51
- package/src/components/unified/media-player.tsx +3 -3
- package/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +508 -502
- package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +108 -87
- package/src/components/variants/minimal/MinimalControls.tsx +100 -118
- package/src/components/variants/minimal/MinimalLoading.tsx +19 -23
- package/src/components/variants/minimal/MinimalMediaPlayer.tsx +283 -280
- package/src/components/variants/minimal/MinimalOverlay.tsx +43 -49
- package/src/components/variants/minimal/MinimalPlayButton.tsx +44 -53
- package/src/components/variants/minimal/MinimalSeekBar.tsx +130 -140
- package/src/components/variants/minimal/MinimalVolumeControl.tsx +59 -64
- package/src/components/variants/minimal/SimpleMinimalPlayer.tsx +29 -32
- package/src/components/variants/minimal/components/CenterPlayButton.tsx +1 -1
- package/src/components/variants/minimal/components/ControlBar.tsx +7 -11
- package/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +381 -330
- package/src/components/variants/minimal/components/PlaybackControls.tsx +6 -11
- package/src/components/variants/minimal/components/RightControls.tsx +8 -17
- package/src/components/variants/minimal/components/SeekBar.tsx +16 -20
- package/src/components/variants/minimal/components/SettingsDropdown.tsx +12 -14
- package/src/components/variants/minimal/components/SubtitleDisplay.tsx +1 -1
- package/src/components/variants/minimal/components/TimeDisplay.tsx +2 -5
- package/src/components/variants/minimal/components/VideoElement.tsx +3 -10
- package/src/components/variants/minimal/components/VolumeControl.tsx +42 -39
- package/src/components/video-player.tsx +10 -10
- package/src/context/__tests__/media-store.test.ts +509 -0
- package/src/context/error-handling.ts +106 -102
- package/src/context/media-context.tsx +56 -10
- package/src/context/media-provider.tsx +16 -17
- package/src/context/media-store.ts +68 -60
- package/src/context/persistence.ts +74 -65
- package/src/core/events/event-system.ts +422 -416
- package/src/core/events/hooks.ts +275 -252
- package/src/core/events/index.ts +14 -14
- package/src/core/events/middleware.ts +269 -252
- package/src/core/index.ts +8 -8
- package/src/core/optimization/bundle-optimizer.tsx +65 -60
- package/src/core/performance/cicd.ts +91 -89
- package/src/core/performance/index.ts +22 -22
- package/src/core/performance/media-loading-optimizer.ts +518 -512
- package/src/core/performance/performance-budgets.ts +414 -409
- package/src/core/performance/performance-monitor.tsx +451 -439
- package/src/core/performance/performance-testing.ts +439 -437
- package/src/core/plugins/__tests__/registry.test.ts +595 -0
- package/src/core/plugins/base-plugin.ts +197 -196
- package/src/core/plugins/enhanced-plugin-system.ts +136 -136
- package/src/core/plugins/examples/analytics-plugin.ts +229 -230
- package/src/core/plugins/index.ts +26 -26
- package/src/core/plugins/registry.ts +315 -323
- package/src/core/plugins/types.ts +97 -105
- package/src/core/plugins/utils.ts +292 -291
- package/src/core/progressive-loading.tsx +297 -288
- package/src/core/providers/enhanced-hls-provider.ts +118 -90
- package/src/core/providers/lazy-provider.tsx +51 -0
- package/src/core/providers/service-provider.tsx +104 -108
- package/src/core/utils.tsx +22 -26
- package/src/features/media-session/media-session-manager.ts +406 -402
- package/src/features/picture-in-picture/pip-manager.ts +364 -365
- package/src/features/playlist/playlist-manager.ts +597 -585
- package/src/features/subtitles/subtitle-manager.ts +424 -430
- package/src/features/subtitles/subtitle-parser.ts +274 -273
- package/src/features/thumbnails/thumbnail-generator.ts +504 -502
- package/src/hooks/__tests__/use-media-player.test.ts +712 -0
- package/src/hooks/__tests__/use-media-state.test.tsx +316 -0
- package/src/hooks/accessibility/index.ts +20 -20
- package/src/hooks/accessibility/use-accessibility-preferences.ts +177 -175
- package/src/hooks/accessibility/use-focus-management.ts +170 -163
- package/src/hooks/accessibility/use-keyboard-shortcuts.ts +132 -124
- package/src/hooks/accessibility/use-screen-reader.ts +191 -161
- package/src/hooks/core/index.ts +30 -30
- package/src/hooks/legacy.ts +3 -9
- package/src/hooks/use-buffer-health.ts +218 -0
- package/src/hooks/use-enhanced-media-player.ts +74 -82
- package/src/hooks/use-focus-trap.tsx +162 -0
- package/src/hooks/use-intelligent-preloading.ts +236 -232
- package/src/hooks/use-keyboard-controls.ts +80 -80
- package/src/hooks/use-keyboard-shortcuts.ts +255 -0
- package/src/hooks/use-media-actions.ts +81 -72
- package/src/hooks/use-media-metadata.ts +75 -73
- package/src/hooks/use-media-optimistic.ts +145 -151
- package/src/hooks/use-media-player.ts +109 -107
- package/src/hooks/use-media-state.ts +63 -59
- package/src/hooks/use-memory-optimization.ts +119 -117
- package/src/hooks/use-network-status.ts +124 -0
- package/src/hooks/use-optimistic-controls.ts +91 -88
- package/src/hooks/use-optimized-media.ts +76 -56
- package/src/hooks/use-smart-preload.ts +230 -0
- package/src/hooks/use-touch-gestures.ts +427 -383
- package/src/hooks/useEnhancedSubtitles.ts +245 -245
- package/src/hooks/useKeyboardShortcuts.ts +52 -52
- package/src/hooks/useMediaControls.ts +22 -22
- package/src/hooks/useScreenshot.ts +51 -47
- package/src/hooks/useSubtitles.ts +53 -53
- package/src/hooks/useVideoPlayer.ts +61 -61
- package/src/icons/components/FullscreenIcon.tsx +34 -35
- package/src/icons/components/SettingsIcon.tsx +35 -36
- package/src/icons/components/animated/LoadingIcon.tsx +25 -41
- package/src/icons/components/animated/PlayPauseIcon.tsx +38 -46
- package/src/icons/components/media/PauseIcon.tsx +36 -37
- package/src/icons/components/media/PlayIcon.tsx +35 -36
- package/src/icons/components/volume/VolumeIcon.tsx +36 -37
- package/src/icons/components/volume/VolumeOffIcon.tsx +36 -37
- package/src/icons/index.ts +38 -38
- package/src/icons/provider.tsx +40 -46
- package/src/icons/types.ts +51 -31
- package/src/index-enhanced.ts +10 -10
- package/src/index-legacy.ts +3 -4
- package/src/index.css +80 -80
- package/src/index.ts +8 -23
- package/src/lib/__tests__/async-utils.test.ts +291 -0
- package/src/lib/async-utils.ts +194 -0
- package/src/lib/deprecation.ts +4 -4
- package/src/lib/index.ts +3 -2
- package/src/lib/utils.ts +3 -3
- package/src/styles/globals.css +3 -3
- package/src/styles/minimal-player.css +606 -574
- package/src/styles/pixel-art.css +23 -28
- package/src/styles/videojs.css +43 -43
- package/src/test/accessibility-utils.ts +208 -0
- package/src/test/browser-simulation.ts +235 -0
- package/src/test/media-mocks.ts +156 -0
- package/src/test/performance-utils.ts +192 -0
- package/src/test/setup.ts +241 -44
- package/src/types/events.ts +30 -30
- package/src/types/formats.ts +56 -72
- package/src/types/index.ts +5 -40
- package/src/types/videojs-plugins.d.ts +6 -6
- package/dist/index.d.ts +0 -1425
- package/dist/package.json +0 -62
- package/dist/src/adapters/videojs-adapter.d.ts +0 -38
- package/dist/src/adapters/videojs-adapter.tsx +0 -470
- package/dist/src/components/AnimateLoading.d.ts +0 -9
- package/dist/src/components/AnimateLoading.tsx +0 -115
- package/dist/src/components/LoadingState.d.ts +0 -33
- package/dist/src/components/LoadingState.tsx +0 -248
- package/dist/src/components/accessibility/keyboard-help-overlay.d.ts +0 -17
- package/dist/src/components/accessibility/keyboard-help-overlay.tsx +0 -213
- package/dist/src/components/audio-player.d.ts +0 -3
- package/dist/src/components/audio-player.tsx +0 -85
- package/dist/src/components/basic/index.d.ts +0 -26
- package/dist/src/components/basic/index.ts +0 -37
- package/dist/src/components/enhanced/advanced-features.d.ts +0 -45
- package/dist/src/components/enhanced/advanced-features.tsx +0 -316
- package/dist/src/components/enhanced/debug-panel.d.ts +0 -70
- package/dist/src/components/enhanced/debug-panel.tsx +0 -422
- package/dist/src/components/enhanced/enhanced-controls.d.ts +0 -50
- package/dist/src/components/enhanced/enhanced-controls.tsx +0 -600
- package/dist/src/components/enhanced/enhanced-media-player.d.ts +0 -26
- package/dist/src/components/enhanced/enhanced-media-player.tsx +0 -509
- package/dist/src/components/enhanced/error-handling.d.ts +0 -36
- package/dist/src/components/enhanced/error-handling.tsx +0 -345
- package/dist/src/components/enhanced/index.d.ts +0 -7
- package/dist/src/components/enhanced/index.ts +0 -39
- package/dist/src/components/enhanced/media-player-enhanced.d.ts +0 -21
- package/dist/src/components/enhanced/media-player-enhanced.tsx +0 -349
- package/dist/src/components/examples/basic-video-player.d.ts +0 -10
- package/dist/src/components/examples/basic-video-player.tsx +0 -55
- package/dist/src/components/examples/custom-controls-example.d.ts +0 -10
- package/dist/src/components/examples/custom-controls-example.tsx +0 -63
- package/dist/src/components/examples/enhanced-controls-example.d.ts +0 -9
- package/dist/src/components/examples/enhanced-controls-example.tsx +0 -114
- package/dist/src/components/examples/enhanced-media-player-example.d.ts +0 -9
- package/dist/src/components/examples/enhanced-media-player-example.tsx +0 -293
- package/dist/src/components/examples/loading-states-demo.d.ts +0 -2
- package/dist/src/components/examples/loading-states-demo.tsx +0 -142
- package/dist/src/components/examples/react-19-demo.d.ts +0 -10
- package/dist/src/components/examples/react-19-demo.tsx +0 -381
- package/dist/src/components/examples/volume-orientation-demo.d.ts +0 -2
- package/dist/src/components/examples/volume-orientation-demo.tsx +0 -114
- package/dist/src/components/icon-demo.d.ts +0 -2
- package/dist/src/components/icon-demo.tsx +0 -209
- package/dist/src/components/icons/index.d.ts +0 -36
- package/dist/src/components/icons/index.tsx +0 -166
- package/dist/src/components/icons/svg-icons/ArrowLeftIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/ArrowLeftIcon.tsx +0 -18
- package/dist/src/components/icons/svg-icons/ArrowRightIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/ArrowRightIcon.tsx +0 -18
- package/dist/src/components/icons/svg-icons/AudioIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/AudioIcon.tsx +0 -22
- package/dist/src/components/icons/svg-icons/BackwardIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/BackwardIcon.tsx +0 -12
- package/dist/src/components/icons/svg-icons/CameraIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/CameraIcon.tsx +0 -19
- package/dist/src/components/icons/svg-icons/CheckIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/CheckIcon.tsx +0 -19
- package/dist/src/components/icons/svg-icons/EnablePiPIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/EnablePiPIcon.tsx +0 -17
- package/dist/src/components/icons/svg-icons/ForwardIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/ForwardIcon.tsx +0 -12
- package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.tsx +0 -23
- package/dist/src/components/icons/svg-icons/FullscreenExitIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/FullscreenExitIcon.tsx +0 -23
- package/dist/src/components/icons/svg-icons/LoadingIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/LoadingIcon.tsx +0 -32
- package/dist/src/components/icons/svg-icons/PauseIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/PauseIcon.tsx +0 -23
- package/dist/src/components/icons/svg-icons/PlayIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/PlayIcon.tsx +0 -21
- package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.tsx +0 -23
- package/dist/src/components/icons/svg-icons/QualityIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/QualityIcon.tsx +0 -21
- package/dist/src/components/icons/svg-icons/SettingsIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/SettingsIcon.tsx +0 -12
- package/dist/src/components/icons/svg-icons/SliderIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/SliderIcon.tsx +0 -21
- package/dist/src/components/icons/svg-icons/SubtitleIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/SubtitleIcon.tsx +0 -21
- package/dist/src/components/icons/svg-icons/SubtitleOffIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/SubtitleOffIcon.tsx +0 -25
- package/dist/src/components/icons/svg-icons/UnPiPIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/UnPiPIcon.tsx +0 -17
- package/dist/src/components/icons/svg-icons/VolumeMutedIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/VolumeMutedIcon.tsx +0 -16
- package/dist/src/components/icons/svg-icons/VolumeOneIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/VolumeOneIcon.tsx +0 -22
- package/dist/src/components/icons/svg-icons/VolumeThreeIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/VolumeThreeIcon.tsx +0 -16
- package/dist/src/components/icons/svg-icons/VolumeTwoIcon.d.ts +0 -4
- package/dist/src/components/icons/svg-icons/VolumeTwoIcon.tsx +0 -16
- package/dist/src/components/legacy.d.ts +0 -13
- package/dist/src/components/legacy.tsx +0 -93
- package/dist/src/components/media-metadata-display.d.ts +0 -11
- package/dist/src/components/media-metadata-display.tsx +0 -100
- package/dist/src/components/media-player-audio.d.ts +0 -9
- package/dist/src/components/media-player-audio.tsx +0 -39
- package/dist/src/components/media-player-controls.d.ts +0 -23
- package/dist/src/components/media-player-controls.tsx +0 -226
- package/dist/src/components/media-player-error.d.ts +0 -16
- package/dist/src/components/media-player-error.tsx +0 -163
- package/dist/src/components/media-player-fullscreen.d.ts +0 -12
- package/dist/src/components/media-player-fullscreen.tsx +0 -109
- package/dist/src/components/media-player-hls.d.ts +0 -23
- package/dist/src/components/media-player-hls.tsx +0 -111
- package/dist/src/components/media-player-loading.d.ts +0 -12
- package/dist/src/components/media-player-loading.tsx +0 -76
- package/dist/src/components/media-player-play.d.ts +0 -11
- package/dist/src/components/media-player-play.tsx +0 -75
- package/dist/src/components/media-player-root.d.ts +0 -28
- package/dist/src/components/media-player-root.tsx +0 -340
- package/dist/src/components/media-player-seek.d.ts +0 -15
- package/dist/src/components/media-player-seek.tsx +0 -168
- package/dist/src/components/media-player-time.d.ts +0 -12
- package/dist/src/components/media-player-time.tsx +0 -99
- package/dist/src/components/media-player-tooltip.d.ts +0 -13
- package/dist/src/components/media-player-tooltip.tsx +0 -58
- package/dist/src/components/media-player-video.d.ts +0 -9
- package/dist/src/components/media-player-video.tsx +0 -39
- package/dist/src/components/media-player-volume.d.ts +0 -13
- package/dist/src/components/media-player-volume.tsx +0 -155
- package/dist/src/components/media-player.d.ts +0 -3
- package/dist/src/components/media-player.tsx +0 -257
- package/dist/src/components/media-suspense.d.ts +0 -78
- package/dist/src/components/media-suspense.tsx +0 -362
- package/dist/src/components/player-settings-form.d.ts +0 -8
- package/dist/src/components/player-settings-form.tsx +0 -163
- package/dist/src/components/react-player-wrapper.d.ts +0 -64
- package/dist/src/components/react-player-wrapper.tsx +0 -651
- package/dist/src/components/simple-video-player.d.ts +0 -9
- package/dist/src/components/simple-video-player.tsx +0 -60
- package/dist/src/components/ui/button.tsx +0 -49
- package/dist/src/components/ui/dropdown-menu.tsx +0 -137
- package/dist/src/components/ui/enhanced-seek-bar.d.ts +0 -3
- package/dist/src/components/ui/enhanced-seek-bar.tsx +0 -235
- package/dist/src/components/ui/fullscreen-button.d.ts +0 -3
- package/dist/src/components/ui/fullscreen-button.tsx +0 -60
- package/dist/src/components/ui/icons.tsx +0 -174
- package/dist/src/components/ui/media-resource-preloader.d.ts +0 -21
- package/dist/src/components/ui/media-resource-preloader.tsx +0 -393
- package/dist/src/components/ui/play-button.d.ts +0 -3
- package/dist/src/components/ui/play-button.tsx +0 -107
- package/dist/src/components/ui/seek-bar.d.ts +0 -3
- package/dist/src/components/ui/seek-bar.tsx +0 -161
- package/dist/src/components/ui/slider.tsx +0 -55
- package/dist/src/components/ui/time-display.d.ts +0 -3
- package/dist/src/components/ui/time-display.tsx +0 -40
- package/dist/src/components/ui/tooltip.tsx +0 -131
- package/dist/src/components/ui/volume-control.d.ts +0 -3
- package/dist/src/components/ui/volume-control.tsx +0 -143
- package/dist/src/components/unified/base-media-player.d.ts +0 -18
- package/dist/src/components/unified/base-media-player.tsx +0 -246
- package/dist/src/components/unified/media-player.d.ts +0 -37
- package/dist/src/components/unified/media-player.tsx +0 -75
- package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts +0 -42
- package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +0 -561
- package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts +0 -44
- package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +0 -552
- package/dist/src/components/variants/minimal/MinimalControls.d.ts +0 -19
- package/dist/src/components/variants/minimal/MinimalControls.tsx +0 -142
- package/dist/src/components/variants/minimal/MinimalLoading.d.ts +0 -10
- package/dist/src/components/variants/minimal/MinimalLoading.tsx +0 -32
- package/dist/src/components/variants/minimal/MinimalMediaPlayer.d.ts +0 -38
- package/dist/src/components/variants/minimal/MinimalMediaPlayer.tsx +0 -315
- package/dist/src/components/variants/minimal/MinimalOverlay.d.ts +0 -11
- package/dist/src/components/variants/minimal/MinimalOverlay.tsx +0 -64
- package/dist/src/components/variants/minimal/MinimalPlayButton.d.ts +0 -9
- package/dist/src/components/variants/minimal/MinimalPlayButton.tsx +0 -65
- package/dist/src/components/variants/minimal/MinimalSeekBar.d.ts +0 -7
- package/dist/src/components/variants/minimal/MinimalSeekBar.tsx +0 -150
- package/dist/src/components/variants/minimal/MinimalVolumeControl.d.ts +0 -7
- package/dist/src/components/variants/minimal/MinimalVolumeControl.tsx +0 -80
- package/dist/src/components/variants/minimal/SimpleMinimalPlayer.d.ts +0 -22
- package/dist/src/components/variants/minimal/SimpleMinimalPlayer.tsx +0 -209
- package/dist/src/components/variants/minimal/components/CenterPlayButton.d.ts +0 -7
- package/dist/src/components/variants/minimal/components/CenterPlayButton.tsx +0 -22
- package/dist/src/components/variants/minimal/components/ControlBar.d.ts +0 -43
- package/dist/src/components/variants/minimal/components/ControlBar.tsx +0 -146
- package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts +0 -24
- package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +0 -361
- package/dist/src/components/variants/minimal/components/PlaybackControls.d.ts +0 -9
- package/dist/src/components/variants/minimal/components/PlaybackControls.tsx +0 -51
- package/dist/src/components/variants/minimal/components/RightControls.d.ts +0 -25
- package/dist/src/components/variants/minimal/components/RightControls.tsx +0 -173
- package/dist/src/components/variants/minimal/components/SeekBar.d.ts +0 -11
- package/dist/src/components/variants/minimal/components/SeekBar.tsx +0 -131
- package/dist/src/components/variants/minimal/components/SettingsDropdown.d.ts +0 -9
- package/dist/src/components/variants/minimal/components/SettingsDropdown.tsx +0 -70
- package/dist/src/components/variants/minimal/components/SubtitleDisplay.d.ts +0 -7
- package/dist/src/components/variants/minimal/components/SubtitleDisplay.tsx +0 -21
- package/dist/src/components/variants/minimal/components/TimeDisplay.d.ts +0 -7
- package/dist/src/components/variants/minimal/components/TimeDisplay.tsx +0 -18
- package/dist/src/components/variants/minimal/components/VideoElement.d.ts +0 -13
- package/dist/src/components/variants/minimal/components/VideoElement.tsx +0 -40
- package/dist/src/components/variants/minimal/components/VolumeControl.d.ts +0 -13
- package/dist/src/components/variants/minimal/components/VolumeControl.tsx +0 -217
- package/dist/src/components/variants/minimal/index.d.ts +0 -17
- package/dist/src/components/variants/minimal/index.ts +0 -23
- package/dist/src/components/video-player.d.ts +0 -3
- package/dist/src/components/video-player.tsx +0 -100
- package/dist/src/context/error-handling.d.ts +0 -72
- package/dist/src/context/error-handling.ts +0 -394
- package/dist/src/context/media-context.d.ts +0 -104
- package/dist/src/context/media-context.tsx +0 -208
- package/dist/src/context/media-provider.d.ts +0 -26
- package/dist/src/context/media-provider.tsx +0 -265
- package/dist/src/context/media-store.d.ts +0 -33
- package/dist/src/context/media-store.ts +0 -379
- package/dist/src/context/persistence.d.ts +0 -83
- package/dist/src/context/persistence.ts +0 -453
- package/dist/src/core/events/event-system.d.ts +0 -170
- package/dist/src/core/events/event-system.ts +0 -442
- package/dist/src/core/events/hooks.d.ts +0 -33
- package/dist/src/core/events/hooks.ts +0 -302
- package/dist/src/core/events/index.d.ts +0 -6
- package/dist/src/core/events/index.ts +0 -22
- package/dist/src/core/events/middleware.d.ts +0 -39
- package/dist/src/core/events/middleware.ts +0 -269
- package/dist/src/core/index.d.ts +0 -8
- package/dist/src/core/index.ts +0 -22
- package/dist/src/core/optimization/bundle-optimizer.d.ts +0 -44
- package/dist/src/core/optimization/bundle-optimizer.tsx +0 -308
- package/dist/src/core/performance/cicd.d.ts +0 -8
- package/dist/src/core/performance/cicd.ts +0 -96
- package/dist/src/core/performance/index.d.ts +0 -10
- package/dist/src/core/performance/index.ts +0 -38
- package/dist/src/core/performance/media-loading-optimizer.d.ts +0 -105
- package/dist/src/core/performance/media-loading-optimizer.ts +0 -538
- package/dist/src/core/performance/performance-budgets.d.ts +0 -68
- package/dist/src/core/performance/performance-budgets.ts +0 -432
- package/dist/src/core/performance/performance-monitor.d.ts +0 -95
- package/dist/src/core/performance/performance-monitor.tsx +0 -476
- package/dist/src/core/performance/performance-testing.d.ts +0 -69
- package/dist/src/core/performance/performance-testing.ts +0 -459
- package/dist/src/core/plugins/base-plugin.d.ts +0 -52
- package/dist/src/core/plugins/base-plugin.ts +0 -224
- package/dist/src/core/plugins/enhanced-plugin-system.d.ts +0 -160
- package/dist/src/core/plugins/enhanced-plugin-system.ts +0 -417
- package/dist/src/core/plugins/examples/analytics-plugin.d.ts +0 -30
- package/dist/src/core/plugins/examples/analytics-plugin.ts +0 -242
- package/dist/src/core/plugins/index.d.ts +0 -8
- package/dist/src/core/plugins/index.ts +0 -39
- package/dist/src/core/plugins/registry.d.ts +0 -31
- package/dist/src/core/plugins/registry.ts +0 -327
- package/dist/src/core/plugins/types.d.ts +0 -101
- package/dist/src/core/plugins/types.ts +0 -159
- package/dist/src/core/plugins/utils.d.ts +0 -38
- package/dist/src/core/plugins/utils.ts +0 -316
- package/dist/src/core/progressive-loading.d.ts +0 -88
- package/dist/src/core/progressive-loading.tsx +0 -322
- package/dist/src/core/providers/enhanced-hls-provider.d.ts +0 -50
- package/dist/src/core/providers/enhanced-hls-provider.ts +0 -308
- package/dist/src/core/providers/service-provider.d.ts +0 -49
- package/dist/src/core/providers/service-provider.tsx +0 -168
- package/dist/src/core/utils.d.ts +0 -25
- package/dist/src/core/utils.tsx +0 -38
- package/dist/src/features/media-session/media-session-manager.d.ts +0 -132
- package/dist/src/features/media-session/media-session-manager.ts +0 -429
- package/dist/src/features/picture-in-picture/pip-manager.d.ts +0 -94
- package/dist/src/features/picture-in-picture/pip-manager.ts +0 -429
- package/dist/src/features/playlist/playlist-manager.d.ts +0 -208
- package/dist/src/features/playlist/playlist-manager.ts +0 -606
- package/dist/src/features/subtitles/subtitle-manager.d.ts +0 -136
- package/dist/src/features/subtitles/subtitle-manager.ts +0 -441
- package/dist/src/features/subtitles/subtitle-parser.d.ts +0 -60
- package/dist/src/features/subtitles/subtitle-parser.ts +0 -280
- package/dist/src/features/thumbnails/thumbnail-generator.d.ts +0 -136
- package/dist/src/features/thumbnails/thumbnail-generator.ts +0 -519
- package/dist/src/hooks/accessibility/index.d.ts +0 -5
- package/dist/src/hooks/accessibility/index.ts +0 -27
- package/dist/src/hooks/accessibility/use-accessibility-preferences.d.ts +0 -14
- package/dist/src/hooks/accessibility/use-accessibility-preferences.ts +0 -188
- package/dist/src/hooks/accessibility/use-focus-management.d.ts +0 -31
- package/dist/src/hooks/accessibility/use-focus-management.ts +0 -176
- package/dist/src/hooks/accessibility/use-keyboard-shortcuts.d.ts +0 -38
- package/dist/src/hooks/accessibility/use-keyboard-shortcuts.ts +0 -144
- package/dist/src/hooks/accessibility/use-screen-reader.d.ts +0 -22
- package/dist/src/hooks/accessibility/use-screen-reader.ts +0 -182
- package/dist/src/hooks/core/index.d.ts +0 -18
- package/dist/src/hooks/core/index.ts +0 -47
- package/dist/src/hooks/legacy.d.ts +0 -18
- package/dist/src/hooks/legacy.ts +0 -27
- package/dist/src/hooks/use-enhanced-media-player.d.ts +0 -88
- package/dist/src/hooks/use-enhanced-media-player.ts +0 -485
- package/dist/src/hooks/use-intelligent-preloading.d.ts +0 -66
- package/dist/src/hooks/use-intelligent-preloading.ts +0 -363
- package/dist/src/hooks/use-keyboard-controls.d.ts +0 -13
- package/dist/src/hooks/use-keyboard-controls.ts +0 -115
- package/dist/src/hooks/use-media-actions.d.ts +0 -62
- package/dist/src/hooks/use-media-actions.ts +0 -175
- package/dist/src/hooks/use-media-metadata.d.ts +0 -11
- package/dist/src/hooks/use-media-metadata.ts +0 -89
- package/dist/src/hooks/use-media-optimistic.d.ts +0 -36
- package/dist/src/hooks/use-media-optimistic.ts +0 -270
- package/dist/src/hooks/use-media-player.d.ts +0 -31
- package/dist/src/hooks/use-media-player.ts +0 -310
- package/dist/src/hooks/use-media-state.d.ts +0 -17
- package/dist/src/hooks/use-media-state.ts +0 -190
- package/dist/src/hooks/use-memory-optimization.d.ts +0 -40
- package/dist/src/hooks/use-memory-optimization.ts +0 -358
- package/dist/src/hooks/use-mobile.ts +0 -125
- package/dist/src/hooks/use-optimistic-controls.d.ts +0 -22
- package/dist/src/hooks/use-optimistic-controls.ts +0 -92
- package/dist/src/hooks/use-optimized-media.d.ts +0 -46
- package/dist/src/hooks/use-optimized-media.ts +0 -263
- package/dist/src/hooks/use-touch-gestures.d.ts +0 -47
- package/dist/src/hooks/use-touch-gestures.ts +0 -417
- package/dist/src/hooks/useEnhancedSubtitles.d.ts +0 -39
- package/dist/src/hooks/useEnhancedSubtitles.ts +0 -258
- package/dist/src/hooks/useKeyboardShortcuts.d.ts +0 -10
- package/dist/src/hooks/useKeyboardShortcuts.ts +0 -74
- package/dist/src/hooks/useMediaControls.d.ts +0 -9
- package/dist/src/hooks/useMediaControls.ts +0 -52
- package/dist/src/hooks/useScreenshot.d.ts +0 -4
- package/dist/src/hooks/useScreenshot.ts +0 -57
- package/dist/src/hooks/useSubtitles.d.ts +0 -8
- package/dist/src/hooks/useSubtitles.ts +0 -91
- package/dist/src/hooks/useVideoPlayer.d.ts +0 -32
- package/dist/src/hooks/useVideoPlayer.ts +0 -232
- package/dist/src/icons/components/FullscreenIcon.d.ts +0 -3
- package/dist/src/icons/components/FullscreenIcon.tsx +0 -37
- package/dist/src/icons/components/SettingsIcon.d.ts +0 -3
- package/dist/src/icons/components/SettingsIcon.tsx +0 -38
- package/dist/src/icons/components/animated/LoadingIcon.d.ts +0 -3
- package/dist/src/icons/components/animated/LoadingIcon.tsx +0 -43
- package/dist/src/icons/components/animated/PlayPauseIcon.d.ts +0 -7
- package/dist/src/icons/components/animated/PlayPauseIcon.tsx +0 -50
- package/dist/src/icons/components/media/PauseIcon.d.ts +0 -3
- package/dist/src/icons/components/media/PauseIcon.tsx +0 -39
- package/dist/src/icons/components/media/PlayIcon.d.ts +0 -3
- package/dist/src/icons/components/media/PlayIcon.tsx +0 -38
- package/dist/src/icons/components/volume/VolumeIcon.d.ts +0 -3
- package/dist/src/icons/components/volume/VolumeIcon.tsx +0 -39
- package/dist/src/icons/components/volume/VolumeOffIcon.d.ts +0 -3
- package/dist/src/icons/components/volume/VolumeOffIcon.tsx +0 -39
- package/dist/src/icons/index.d.ts +0 -28
- package/dist/src/icons/index.ts +0 -56
- package/dist/src/icons/provider.d.ts +0 -13
- package/dist/src/icons/provider.tsx +0 -64
- package/dist/src/icons/types.d.ts +0 -18
- package/dist/src/icons/types.ts +0 -40
- package/dist/src/index-enhanced.d.ts +0 -13
- package/dist/src/index-enhanced.ts +0 -35
- package/dist/src/index-legacy.d.ts +0 -81
- package/dist/src/index-legacy.ts +0 -327
- package/dist/src/index.css +0 -102
- package/dist/src/index.d.ts +0 -38
- package/dist/src/index.minimal.d.ts +0 -2
- package/dist/src/index.minimal.ts +0 -4
- package/dist/src/index.ts +0 -216
- package/dist/src/lib/deprecation.d.ts +0 -7
- package/dist/src/lib/deprecation.ts +0 -51
- package/dist/src/lib/format-time.d.ts +0 -9
- package/dist/src/lib/format-time.ts +0 -37
- package/dist/src/lib/index.d.ts +0 -3
- package/dist/src/lib/index.ts +0 -3
- package/dist/src/lib/utils.d.ts +0 -3
- package/dist/src/lib/utils.ts +0 -6
- package/dist/src/styles/globals.css +0 -462
- package/dist/src/styles/minimal-player.css +0 -589
- package/dist/src/styles/pixel-art.css +0 -46
- package/dist/src/styles/videojs.css +0 -100
- package/dist/src/test/setup.d.ts +0 -2
- package/dist/src/test/setup.ts +0 -79
- package/dist/src/types/events.d.ts +0 -41
- package/dist/src/types/events.ts +0 -47
- package/dist/src/types/formats.d.ts +0 -45
- package/dist/src/types/formats.ts +0 -95
- package/dist/src/types/index.d.ts +0 -128
- package/dist/src/types/index.ts +0 -225
- package/dist/src/types/videojs-plugins.d.ts +0 -14
- package/dist/styles/globals.css +0 -462
- package/dist/styles/minimal-player.css +0 -589
- package/dist/styles/pixel-art.css +0 -46
- package/dist/styles/videojs.css +0 -100
- package/src/adapters/videojs-adapter.d.ts +0 -38
- package/src/adapters/videojs-adapter.d.ts.map +0 -1
- package/src/components/AnimateLoading.d.ts +0 -9
- package/src/components/AnimateLoading.d.ts.map +0 -1
- package/src/components/LoadingState.d.ts +0 -33
- package/src/components/LoadingState.d.ts.map +0 -1
- package/src/components/accessibility/keyboard-help-overlay.d.ts +0 -17
- package/src/components/accessibility/keyboard-help-overlay.d.ts.map +0 -1
- package/src/components/audio-player.d.ts +0 -3
- package/src/components/audio-player.d.ts.map +0 -1
- package/src/components/basic/index.d.ts +0 -26
- package/src/components/basic/index.d.ts.map +0 -1
- package/src/components/enhanced/advanced-features.d.ts +0 -45
- package/src/components/enhanced/advanced-features.d.ts.map +0 -1
- package/src/components/enhanced/debug-panel.d.ts +0 -70
- package/src/components/enhanced/debug-panel.d.ts.map +0 -1
- package/src/components/enhanced/enhanced-controls.d.ts +0 -50
- package/src/components/enhanced/enhanced-controls.d.ts.map +0 -1
- package/src/components/enhanced/enhanced-media-player.d.ts +0 -26
- package/src/components/enhanced/enhanced-media-player.d.ts.map +0 -1
- package/src/components/enhanced/error-handling.d.ts +0 -36
- package/src/components/enhanced/error-handling.d.ts.map +0 -1
- package/src/components/enhanced/index.d.ts +0 -7
- package/src/components/enhanced/index.d.ts.map +0 -1
- package/src/components/enhanced/media-player-enhanced.d.ts +0 -21
- package/src/components/enhanced/media-player-enhanced.d.ts.map +0 -1
- package/src/components/examples/basic-video-player.d.ts +0 -10
- package/src/components/examples/basic-video-player.d.ts.map +0 -1
- package/src/components/examples/custom-controls-example.d.ts +0 -10
- package/src/components/examples/custom-controls-example.d.ts.map +0 -1
- package/src/components/examples/enhanced-controls-example.d.ts +0 -9
- package/src/components/examples/enhanced-controls-example.d.ts.map +0 -1
- package/src/components/examples/enhanced-media-player-example.d.ts +0 -9
- package/src/components/examples/enhanced-media-player-example.d.ts.map +0 -1
- package/src/components/examples/loading-states-demo.d.ts +0 -2
- package/src/components/examples/loading-states-demo.d.ts.map +0 -1
- package/src/components/examples/react-19-demo.d.ts +0 -10
- package/src/components/examples/react-19-demo.d.ts.map +0 -1
- package/src/components/examples/volume-orientation-demo.d.ts +0 -2
- package/src/components/examples/volume-orientation-demo.d.ts.map +0 -1
- package/src/components/icon-demo.d.ts +0 -2
- package/src/components/icon-demo.d.ts.map +0 -1
- package/src/components/icons/index.d.ts +0 -36
- package/src/components/icons/index.d.ts.map +0 -1
- package/src/components/icons/svg-icons/ArrowLeftIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/ArrowRightIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/ArrowRightIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/AudioIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/AudioIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/BackwardIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/BackwardIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/CameraIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/CameraIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/CheckIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/CheckIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/EnablePiPIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/EnablePiPIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/ForwardIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/ForwardIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/FullscreenExitIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/LoadingIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/LoadingIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/PauseIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/PauseIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/PlayIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/PlayIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/QualityIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/QualityIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/SettingsIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/SettingsIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/SliderIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/SliderIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/SubtitleIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/SubtitleIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/SubtitleOffIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/UnPiPIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/UnPiPIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/VolumeMutedIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/VolumeOneIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/VolumeOneIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/VolumeThreeIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +0 -1
- package/src/components/icons/svg-icons/VolumeTwoIcon.d.ts +0 -4
- package/src/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +0 -1
- package/src/components/legacy.d.ts +0 -13
- package/src/components/legacy.d.ts.map +0 -1
- package/src/components/media-metadata-display.d.ts +0 -11
- package/src/components/media-metadata-display.d.ts.map +0 -1
- package/src/components/media-player-audio.d.ts +0 -9
- package/src/components/media-player-audio.d.ts.map +0 -1
- package/src/components/media-player-controls.d.ts +0 -23
- package/src/components/media-player-controls.d.ts.map +0 -1
- package/src/components/media-player-error.d.ts +0 -16
- package/src/components/media-player-error.d.ts.map +0 -1
- package/src/components/media-player-fullscreen.d.ts +0 -12
- package/src/components/media-player-fullscreen.d.ts.map +0 -1
- package/src/components/media-player-hls.d.ts +0 -23
- package/src/components/media-player-hls.d.ts.map +0 -1
- package/src/components/media-player-loading.d.ts +0 -12
- package/src/components/media-player-loading.d.ts.map +0 -1
- package/src/components/media-player-play.d.ts +0 -11
- package/src/components/media-player-play.d.ts.map +0 -1
- package/src/components/media-player-root.d.ts +0 -28
- package/src/components/media-player-root.d.ts.map +0 -1
- package/src/components/media-player-seek.d.ts +0 -15
- package/src/components/media-player-seek.d.ts.map +0 -1
- package/src/components/media-player-time.d.ts +0 -12
- package/src/components/media-player-time.d.ts.map +0 -1
- package/src/components/media-player-tooltip.d.ts +0 -13
- package/src/components/media-player-tooltip.d.ts.map +0 -1
- package/src/components/media-player-video.d.ts +0 -9
- package/src/components/media-player-video.d.ts.map +0 -1
- package/src/components/media-player-volume.d.ts +0 -13
- package/src/components/media-player-volume.d.ts.map +0 -1
- package/src/components/media-player.d.ts +0 -3
- package/src/components/media-player.d.ts.map +0 -1
- package/src/components/media-suspense.d.ts +0 -78
- package/src/components/media-suspense.d.ts.map +0 -1
- package/src/components/player-settings-form.d.ts +0 -8
- package/src/components/player-settings-form.d.ts.map +0 -1
- package/src/components/react-player-wrapper.d.ts +0 -64
- package/src/components/react-player-wrapper.d.ts.map +0 -1
- package/src/components/simple-video-player.d.ts +0 -9
- package/src/components/simple-video-player.d.ts.map +0 -1
- package/src/components/ui/button.tsx +0 -49
- package/src/components/ui/dropdown-menu.tsx +0 -137
- package/src/components/ui/enhanced-seek-bar.d.ts +0 -3
- package/src/components/ui/enhanced-seek-bar.d.ts.map +0 -1
- package/src/components/ui/fullscreen-button.d.ts +0 -3
- package/src/components/ui/fullscreen-button.d.ts.map +0 -1
- package/src/components/ui/icons.tsx +0 -174
- package/src/components/ui/media-resource-preloader.d.ts +0 -21
- package/src/components/ui/media-resource-preloader.d.ts.map +0 -1
- package/src/components/ui/play-button.d.ts +0 -3
- package/src/components/ui/play-button.d.ts.map +0 -1
- package/src/components/ui/seek-bar.d.ts +0 -3
- package/src/components/ui/seek-bar.d.ts.map +0 -1
- package/src/components/ui/slider.tsx +0 -55
- package/src/components/ui/time-display.d.ts +0 -3
- package/src/components/ui/time-display.d.ts.map +0 -1
- package/src/components/ui/tooltip.tsx +0 -131
- package/src/components/ui/volume-control.d.ts +0 -3
- package/src/components/ui/volume-control.d.ts.map +0 -1
- package/src/components/unified/base-media-player.d.ts +0 -18
- package/src/components/unified/base-media-player.d.ts.map +0 -1
- package/src/components/unified/media-player.d.ts +0 -37
- package/src/components/unified/media-player.d.ts.map +0 -1
- package/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts +0 -42
- package/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts.map +0 -1
- package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts +0 -44
- package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts.map +0 -1
- package/src/components/variants/minimal/MinimalControls.d.ts +0 -19
- package/src/components/variants/minimal/MinimalControls.d.ts.map +0 -1
- package/src/components/variants/minimal/MinimalLoading.d.ts +0 -10
- package/src/components/variants/minimal/MinimalLoading.d.ts.map +0 -1
- package/src/components/variants/minimal/MinimalMediaPlayer.d.ts +0 -38
- package/src/components/variants/minimal/MinimalMediaPlayer.d.ts.map +0 -1
- package/src/components/variants/minimal/MinimalOverlay.d.ts +0 -11
- package/src/components/variants/minimal/MinimalOverlay.d.ts.map +0 -1
- package/src/components/variants/minimal/MinimalPlayButton.d.ts +0 -9
- package/src/components/variants/minimal/MinimalPlayButton.d.ts.map +0 -1
- package/src/components/variants/minimal/MinimalSeekBar.d.ts +0 -7
- package/src/components/variants/minimal/MinimalSeekBar.d.ts.map +0 -1
- package/src/components/variants/minimal/MinimalVolumeControl.d.ts +0 -7
- package/src/components/variants/minimal/MinimalVolumeControl.d.ts.map +0 -1
- package/src/components/variants/minimal/SimpleMinimalPlayer.d.ts +0 -22
- package/src/components/variants/minimal/SimpleMinimalPlayer.d.ts.map +0 -1
- package/src/components/variants/minimal/components/CenterPlayButton.d.ts +0 -7
- package/src/components/variants/minimal/components/CenterPlayButton.d.ts.map +0 -1
- package/src/components/variants/minimal/components/ControlBar.d.ts +0 -43
- package/src/components/variants/minimal/components/ControlBar.d.ts.map +0 -1
- package/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts +0 -24
- package/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts.map +0 -1
- package/src/components/variants/minimal/components/PlaybackControls.d.ts +0 -9
- package/src/components/variants/minimal/components/PlaybackControls.d.ts.map +0 -1
- package/src/components/variants/minimal/components/RightControls.d.ts +0 -25
- package/src/components/variants/minimal/components/RightControls.d.ts.map +0 -1
- package/src/components/variants/minimal/components/SeekBar.d.ts +0 -11
- package/src/components/variants/minimal/components/SeekBar.d.ts.map +0 -1
- package/src/components/variants/minimal/components/SettingsDropdown.d.ts +0 -9
- package/src/components/variants/minimal/components/SettingsDropdown.d.ts.map +0 -1
- package/src/components/variants/minimal/components/SubtitleDisplay.d.ts +0 -7
- package/src/components/variants/minimal/components/SubtitleDisplay.d.ts.map +0 -1
- package/src/components/variants/minimal/components/TimeDisplay.d.ts +0 -7
- package/src/components/variants/minimal/components/TimeDisplay.d.ts.map +0 -1
- package/src/components/variants/minimal/components/VideoElement.d.ts +0 -13
- package/src/components/variants/minimal/components/VideoElement.d.ts.map +0 -1
- package/src/components/variants/minimal/components/VolumeControl.d.ts +0 -13
- package/src/components/variants/minimal/components/VolumeControl.d.ts.map +0 -1
- package/src/components/variants/minimal/index.d.ts +0 -17
- package/src/components/variants/minimal/index.d.ts.map +0 -1
- package/src/components/video-player.d.ts +0 -3
- package/src/components/video-player.d.ts.map +0 -1
- package/src/context/error-handling.d.ts +0 -72
- package/src/context/error-handling.d.ts.map +0 -1
- package/src/context/media-context.d.ts +0 -104
- package/src/context/media-context.d.ts.map +0 -1
- package/src/context/media-provider.d.ts +0 -26
- package/src/context/media-provider.d.ts.map +0 -1
- package/src/context/media-store.d.ts +0 -33
- package/src/context/media-store.d.ts.map +0 -1
- package/src/context/persistence.d.ts +0 -83
- package/src/context/persistence.d.ts.map +0 -1
- package/src/core/events/event-system.d.ts +0 -170
- package/src/core/events/event-system.d.ts.map +0 -1
- package/src/core/events/hooks.d.ts +0 -33
- package/src/core/events/hooks.d.ts.map +0 -1
- package/src/core/events/index.d.ts +0 -6
- package/src/core/events/index.d.ts.map +0 -1
- package/src/core/events/middleware.d.ts +0 -39
- package/src/core/events/middleware.d.ts.map +0 -1
- package/src/core/index.d.ts +0 -8
- package/src/core/index.d.ts.map +0 -1
- package/src/core/optimization/bundle-optimizer.d.ts +0 -44
- package/src/core/optimization/bundle-optimizer.d.ts.map +0 -1
- package/src/core/performance/cicd.d.ts +0 -8
- package/src/core/performance/cicd.d.ts.map +0 -1
- package/src/core/performance/index.d.ts +0 -10
- package/src/core/performance/index.d.ts.map +0 -1
- package/src/core/performance/media-loading-optimizer.d.ts +0 -105
- package/src/core/performance/media-loading-optimizer.d.ts.map +0 -1
- package/src/core/performance/performance-budgets.d.ts +0 -68
- package/src/core/performance/performance-budgets.d.ts.map +0 -1
- package/src/core/performance/performance-monitor.d.ts +0 -95
- package/src/core/performance/performance-monitor.d.ts.map +0 -1
- package/src/core/performance/performance-testing.d.ts +0 -69
- package/src/core/performance/performance-testing.d.ts.map +0 -1
- package/src/core/plugins/base-plugin.d.ts +0 -52
- package/src/core/plugins/base-plugin.d.ts.map +0 -1
- package/src/core/plugins/enhanced-plugin-system.d.ts +0 -160
- package/src/core/plugins/enhanced-plugin-system.d.ts.map +0 -1
- package/src/core/plugins/examples/analytics-plugin.d.ts +0 -30
- package/src/core/plugins/examples/analytics-plugin.d.ts.map +0 -1
- package/src/core/plugins/index.d.ts +0 -8
- package/src/core/plugins/index.d.ts.map +0 -1
- package/src/core/plugins/registry.d.ts +0 -31
- package/src/core/plugins/registry.d.ts.map +0 -1
- package/src/core/plugins/types.d.ts +0 -101
- package/src/core/plugins/types.d.ts.map +0 -1
- package/src/core/plugins/utils.d.ts +0 -38
- package/src/core/plugins/utils.d.ts.map +0 -1
- package/src/core/progressive-loading.d.ts +0 -88
- package/src/core/progressive-loading.d.ts.map +0 -1
- package/src/core/providers/enhanced-hls-provider.d.ts +0 -50
- package/src/core/providers/enhanced-hls-provider.d.ts.map +0 -1
- package/src/core/providers/service-provider.d.ts +0 -49
- package/src/core/providers/service-provider.d.ts.map +0 -1
- package/src/core/utils.d.ts +0 -25
- package/src/core/utils.d.ts.map +0 -1
- package/src/features/media-session/media-session-manager.d.ts +0 -132
- package/src/features/media-session/media-session-manager.d.ts.map +0 -1
- package/src/features/picture-in-picture/pip-manager.d.ts +0 -94
- package/src/features/picture-in-picture/pip-manager.d.ts.map +0 -1
- package/src/features/playlist/playlist-manager.d.ts +0 -208
- package/src/features/playlist/playlist-manager.d.ts.map +0 -1
- package/src/features/subtitles/subtitle-manager.d.ts +0 -136
- package/src/features/subtitles/subtitle-manager.d.ts.map +0 -1
- package/src/features/subtitles/subtitle-parser.d.ts +0 -60
- package/src/features/subtitles/subtitle-parser.d.ts.map +0 -1
- package/src/features/thumbnails/thumbnail-generator.d.ts +0 -136
- package/src/features/thumbnails/thumbnail-generator.d.ts.map +0 -1
- package/src/hooks/accessibility/index.d.ts +0 -5
- package/src/hooks/accessibility/index.d.ts.map +0 -1
- package/src/hooks/accessibility/use-accessibility-preferences.d.ts +0 -14
- package/src/hooks/accessibility/use-accessibility-preferences.d.ts.map +0 -1
- package/src/hooks/accessibility/use-focus-management.d.ts +0 -31
- package/src/hooks/accessibility/use-focus-management.d.ts.map +0 -1
- package/src/hooks/accessibility/use-keyboard-shortcuts.d.ts +0 -38
- package/src/hooks/accessibility/use-keyboard-shortcuts.d.ts.map +0 -1
- package/src/hooks/accessibility/use-screen-reader.d.ts +0 -22
- package/src/hooks/accessibility/use-screen-reader.d.ts.map +0 -1
- package/src/hooks/core/index.d.ts +0 -18
- package/src/hooks/core/index.d.ts.map +0 -1
- package/src/hooks/legacy.d.ts +0 -18
- package/src/hooks/legacy.d.ts.map +0 -1
- package/src/hooks/use-enhanced-media-player.d.ts +0 -88
- package/src/hooks/use-enhanced-media-player.d.ts.map +0 -1
- package/src/hooks/use-intelligent-preloading.d.ts +0 -66
- package/src/hooks/use-intelligent-preloading.d.ts.map +0 -1
- package/src/hooks/use-keyboard-controls.d.ts +0 -13
- package/src/hooks/use-keyboard-controls.d.ts.map +0 -1
- package/src/hooks/use-media-actions.d.ts +0 -62
- package/src/hooks/use-media-actions.d.ts.map +0 -1
- package/src/hooks/use-media-metadata.d.ts +0 -11
- package/src/hooks/use-media-metadata.d.ts.map +0 -1
- package/src/hooks/use-media-optimistic.d.ts +0 -36
- package/src/hooks/use-media-optimistic.d.ts.map +0 -1
- package/src/hooks/use-media-player.d.ts +0 -31
- package/src/hooks/use-media-player.d.ts.map +0 -1
- package/src/hooks/use-media-state.d.ts +0 -17
- package/src/hooks/use-media-state.d.ts.map +0 -1
- package/src/hooks/use-memory-optimization.d.ts +0 -40
- package/src/hooks/use-memory-optimization.d.ts.map +0 -1
- package/src/hooks/use-mobile.ts +0 -125
- package/src/hooks/use-optimistic-controls.d.ts +0 -22
- package/src/hooks/use-optimistic-controls.d.ts.map +0 -1
- package/src/hooks/use-optimized-media.d.ts +0 -46
- package/src/hooks/use-optimized-media.d.ts.map +0 -1
- package/src/hooks/use-touch-gestures.d.ts +0 -47
- package/src/hooks/use-touch-gestures.d.ts.map +0 -1
- package/src/hooks/useEnhancedSubtitles.d.ts +0 -39
- package/src/hooks/useEnhancedSubtitles.d.ts.map +0 -1
- package/src/hooks/useKeyboardShortcuts.d.ts +0 -10
- package/src/hooks/useKeyboardShortcuts.d.ts.map +0 -1
- package/src/hooks/useMediaControls.d.ts +0 -9
- package/src/hooks/useMediaControls.d.ts.map +0 -1
- package/src/hooks/useScreenshot.d.ts +0 -4
- package/src/hooks/useScreenshot.d.ts.map +0 -1
- package/src/hooks/useSubtitles.d.ts +0 -8
- package/src/hooks/useSubtitles.d.ts.map +0 -1
- package/src/hooks/useVideoPlayer.d.ts +0 -32
- package/src/hooks/useVideoPlayer.d.ts.map +0 -1
- package/src/icons/components/FullscreenIcon.d.ts +0 -3
- package/src/icons/components/FullscreenIcon.d.ts.map +0 -1
- package/src/icons/components/SettingsIcon.d.ts +0 -3
- package/src/icons/components/SettingsIcon.d.ts.map +0 -1
- package/src/icons/components/animated/LoadingIcon.d.ts +0 -3
- package/src/icons/components/animated/LoadingIcon.d.ts.map +0 -1
- package/src/icons/components/animated/PlayPauseIcon.d.ts +0 -7
- package/src/icons/components/animated/PlayPauseIcon.d.ts.map +0 -1
- package/src/icons/components/media/PauseIcon.d.ts +0 -3
- package/src/icons/components/media/PauseIcon.d.ts.map +0 -1
- package/src/icons/components/media/PlayIcon.d.ts +0 -3
- package/src/icons/components/media/PlayIcon.d.ts.map +0 -1
- package/src/icons/components/volume/VolumeIcon.d.ts +0 -3
- package/src/icons/components/volume/VolumeIcon.d.ts.map +0 -1
- package/src/icons/components/volume/VolumeOffIcon.d.ts +0 -3
- package/src/icons/components/volume/VolumeOffIcon.d.ts.map +0 -1
- package/src/icons/index.d.ts +0 -28
- package/src/icons/index.d.ts.map +0 -1
- package/src/icons/provider.d.ts +0 -13
- package/src/icons/provider.d.ts.map +0 -1
- package/src/icons/types.d.ts +0 -18
- package/src/icons/types.d.ts.map +0 -1
- package/src/index-enhanced.d.ts +0 -13
- package/src/index-enhanced.d.ts.map +0 -1
- package/src/index-legacy.d.ts +0 -81
- package/src/index-legacy.d.ts.map +0 -1
- package/src/index.d.ts +0 -38
- package/src/index.d.ts.map +0 -1
- package/src/index.minimal.d.ts +0 -2
- package/src/index.minimal.d.ts.map +0 -1
- package/src/index.minimal.ts +0 -4
- package/src/lib/deprecation.d.ts +0 -7
- package/src/lib/deprecation.d.ts.map +0 -1
- package/src/lib/format-time.d.ts +0 -9
- package/src/lib/format-time.d.ts.map +0 -1
- package/src/lib/index.d.ts +0 -3
- package/src/lib/index.d.ts.map +0 -1
- package/src/lib/utils.d.ts +0 -3
- package/src/lib/utils.d.ts.map +0 -1
- package/src/test/setup.d.ts +0 -2
- package/src/test/setup.d.ts.map +0 -1
- package/src/types/events.d.ts +0 -41
- package/src/types/events.d.ts.map +0 -1
- package/src/types/formats.d.ts +0 -45
- package/src/types/formats.d.ts.map +0 -1
- package/src/types/index.d.ts +0 -128
- package/src/types/index.d.ts.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minimal-components-Bdcpxav5.cjs","sources":["../src/components/media-player-root.tsx","../src/components/icons/svg-icons/BackwardIcon.tsx","../src/components/icons/svg-icons/CameraIcon.tsx","../src/components/icons/svg-icons/ForwardIcon.tsx","../src/components/icons/svg-icons/FullscreenEnterIcon.tsx","../src/components/icons/svg-icons/FullscreenExitIcon.tsx","../src/components/icons/svg-icons/LoadingIcon.tsx","../src/components/icons/svg-icons/PauseIcon.tsx","../src/components/icons/svg-icons/PlayIcon.tsx","../src/components/icons/svg-icons/SettingsIcon.tsx","../src/components/icons/svg-icons/SubtitleIcon.tsx","../src/components/icons/svg-icons/VolumeMutedIcon.tsx","../src/components/icons/svg-icons/VolumeTwoIcon.tsx","../src/components/icons/index.tsx","../src/components/media-player-video.tsx","../src/components/media-player-time.tsx","../src/components/variants/minimal/MinimalPlayButton.tsx","../src/components/variants/minimal/MinimalSeekBar.tsx","../src/components/variants/minimal/MinimalVolumeControl.tsx","../src/components/variants/minimal/MinimalControls.tsx","../src/components/variants/minimal/MinimalLoading.tsx","../src/components/variants/minimal/MinimalOverlay.tsx","../src/components/variants/minimal/MinimalMediaPlayer.tsx","../src/assets/mona-loading.gif","../src/components/AnimateLoading.tsx","../src/components/LoadingState.tsx","../src/components/variants/minimal/components/CenterPlayButton.tsx","../src/components/variants/minimal/components/PlaybackControls.tsx","../src/components/variants/minimal/components/SettingsDropdown.tsx","../src/components/variants/minimal/components/RightControls.tsx","../src/components/variants/minimal/components/SeekBar.tsx","../src/components/variants/minimal/components/TimeDisplay.tsx","../src/components/variants/minimal/components/VolumeControl.tsx","../src/components/variants/minimal/components/ControlBar.tsx","../src/components/variants/minimal/components/SubtitleDisplay.tsx","../src/components/variants/minimal/components/VideoElement.tsx","../src/components/variants/minimal/SimpleMinimalPlayer.tsx"],"sourcesContent":["\"use client\"\n\nimport { useDeviceInfo, useMobileOptimizations } from \"@rp/ui/hooks/use-mobile\"\nimport React from \"react\"\nimport {\n\tMediaActionTypes,\n\tuseMediaContext,\n\tuseMediaDispatch,\n\tuseMediaSelector\n} from \"../context/media-context\"\nimport { MediaProvider } from \"../context/media-provider\"\nimport { useMediaGestures } from \"../hooks/use-touch-gestures\"\nimport { cn } from \"../lib/utils\"\n\n// Utility function to compose refs\nfunction composeRefs<T>(...refs: Array<React.Ref<T> | undefined>) {\n\treturn (node: T) => {\n\t\trefs.forEach((ref) => {\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(node)\n\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t;(ref as React.MutableRefObject<T>).current = node\n\t\t\t}\n\t\t})\n\t}\n}\n\n// MediaPlayer root component props\nexport interface MediaPlayerRootProps {\n\tchildren: React.ReactNode\n\tclassName?: string\n\tdir?: \"ltr\" | \"rtl\"\n\tdisabled?: boolean\n\tasChild?: boolean\n\tautoHide?: boolean\n\ttooltipDelayDuration?: number\n\ttooltipSideOffset?: number\n\twithoutTooltip?: boolean\n\n\t// Mobile-first options\n\tenableGestures?: boolean\n\tenableMobileOptimizations?: boolean\n\n\t// Media event handlers\n\tonPlay?: () => void\n\tonPause?: () => void\n\tonEnded?: () => void\n\tonTimeUpdate?: (currentTime: number) => void\n\tonVolumeChange?: (volume: number) => void\n\tonMuted?: (muted: boolean) => void\n\tonMediaError?: (error: string) => void\n\tonPipError?: (error: Error) => void\n\tonFullscreenChange?: (isFullscreen: boolean) => void\n}\n\n// Internal MediaPlayer implementation\nfunction MediaPlayerImpl({\n\tchildren,\n\tclassName,\n\tdir = \"ltr\",\n\tdisabled = false,\n\tasChild = false,\n\tautoHide = true,\n\tenableGestures = true,\n\tenableMobileOptimizations = true,\n\tonPlay,\n\tonPause,\n\tonEnded,\n\tonTimeUpdate,\n\tonVolumeChange,\n\tonMuted,\n\tonMediaError,\n\tonPipError,\n\tonFullscreenChange,\n\t...props\n}: MediaPlayerRootProps) {\n\tconst context = useMediaContext()\n\tconst dispatch = useMediaDispatch()\n\tconst { isTouchDevice } = useDeviceInfo()\n\n\t// Get state values\n\tconst isPlaying = useMediaSelector((state) => state.isPlaying)\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst volume = useMediaSelector((state) => state.volume)\n\tconst isMuted = useMediaSelector((state) => state.isMuted)\n\tconst error = useMediaSelector((state) => state.error)\n\tconst isFullscreen = useMediaSelector((state) => state.isFullscreen)\n\tconst isPictureInPicture = useMediaSelector((state) => state.isPictureInPicture)\n\n\t// Enable mobile optimizations\n\tuseMobileOptimizations()\n\n\t// Gesture handling actions - React 19 compiler will optimize this\n\tconst gestureActions = {\n\t\tonPlayPause: () => {\n\t\t\tif (disabled) return\n\t\t\tdispatch({\n\t\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t\t})\n\t\t},\n\t\tonSeek: (direction: \"forward\" | \"backward\", amount: number) => {\n\t\t\tif (disabled || !context.isVideo) return\n\t\t\tconst mediaElement = context.mediaRef.current\n\t\t\tif (!mediaElement) return\n\n\t\t\tconst newTime =\n\t\t\t\tdirection === \"forward\"\n\t\t\t\t\t? Math.min(mediaElement.duration || 0, currentTime + amount)\n\t\t\t\t\t: Math.max(0, currentTime - amount)\n\n\t\t\tdispatch({\n\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\tdetail: newTime\n\t\t\t})\n\t\t},\n\t\tonVolumeChange: (direction: \"up\" | \"down\", amount: number) => {\n\t\t\tif (disabled) return\n\t\t\tconst newVolume =\n\t\t\t\tdirection === \"up\" ? Math.min(1, volume + amount) : Math.max(0, volume - amount)\n\n\t\t\tdispatch({\n\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\tdetail: newVolume\n\t\t\t})\n\t\t},\n\t\tonToggleFullscreen: () => {\n\t\t\tif (disabled || !context.isVideo) return\n\t\t\tdispatch({\n\t\t\t\ttype: isFullscreen ? MediaActionTypes.EXIT_FULLSCREEN : MediaActionTypes.ENTER_FULLSCREEN\n\t\t\t})\n\t\t},\n\t\tonZoom: (scale: number) => {\n\t\t\t// Handle video zoom - this could be implemented with CSS transforms\n\t\t\t// For now, we'll just log it as a placeholder\n\t\t\tconsole.log(\"Zoom gesture detected:\", scale)\n\t\t}\n\t}\n\n\t// Set up touch gestures for mobile devices\n\tconst { isGestureEnabled } = useMediaGestures(\n\t\tcontext.rootRef as React.RefObject<HTMLElement>,\n\t\tenableGestures ? gestureActions : {}\n\t)\n\n\t// Keyboard event handler - React 19 compiler will optimize this\n\tconst handleKeyDown = (event: React.KeyboardEvent) => {\n\t\tif (disabled) return\n\n\t\tconst target = event.target as HTMLElement\n\t\tconst isInputElement =\n\t\t\ttarget.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.isContentEditable\n\n\t\tif (isInputElement) return\n\n\t\tconst mediaElement = context.mediaRef.current\n\t\tif (!mediaElement) return\n\n\t\tswitch (event.code) {\n\t\t\tcase \"Space\":\n\t\t\tcase \"KeyK\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t\t\t})\n\t\t\t\tbreak\n\n\t\t\tcase \"KeyF\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: isFullscreen ? MediaActionTypes.EXIT_FULLSCREEN : MediaActionTypes.ENTER_FULLSCREEN\n\t\t\t\t})\n\t\t\t\tbreak\n\n\t\t\tcase \"KeyM\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: MediaActionTypes.TOGGLE_MUTE\n\t\t\t\t})\n\t\t\t\tbreak\n\n\t\t\tcase \"ArrowLeft\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tif (context.isVideo && mediaElement instanceof HTMLVideoElement) {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: Math.max(0, currentTime - 10)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase \"ArrowRight\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tif (context.isVideo && mediaElement instanceof HTMLVideoElement) {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: Math.min(mediaElement.duration || 0, currentTime + 10)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase \"ArrowUp\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\tdetail: Math.min(1, volume + 0.1)\n\t\t\t\t})\n\t\t\t\tbreak\n\n\t\t\tcase \"ArrowDown\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\tdetail: Math.max(0, volume - 0.1)\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\t// Set up media element event listeners\n\tReact.useEffect(() => {\n\t\tconst mediaElement = context.mediaRef.current\n\t\tif (!mediaElement) return\n\n\t\tconst handlePlay = () => {\n\t\t\tdispatch({ type: MediaActionTypes.PLAY })\n\t\t\tonPlay?.()\n\t\t}\n\n\t\tconst handlePause = () => {\n\t\t\tdispatch({ type: MediaActionTypes.PAUSE })\n\t\t\tonPause?.()\n\t\t}\n\n\t\tconst handleEnded = () => {\n\t\t\tdispatch({ type: MediaActionTypes.PAUSE })\n\t\t\tonEnded?.()\n\t\t}\n\n\t\tconst handleTimeUpdate = () => {\n\t\t\tconst time = mediaElement.currentTime\n\t\t\tdispatch({ type: MediaActionTypes.SET_CURRENT_TIME, detail: time })\n\t\t\tonTimeUpdate?.(time)\n\t\t}\n\n\t\tconst handleVolumeChange = () => {\n\t\t\tconst vol = mediaElement.volume\n\t\t\tconst muted = mediaElement.muted\n\t\t\tdispatch({ type: MediaActionTypes.SET_VOLUME, detail: vol })\n\t\t\tdispatch({ type: muted ? MediaActionTypes.MUTE : MediaActionTypes.UNMUTE })\n\t\t\tonVolumeChange?.(vol)\n\t\t\tonMuted?.(muted)\n\t\t}\n\n\t\tconst handleLoadedMetadata = () => {\n\t\t\tdispatch({ type: MediaActionTypes.SET_DURATION, detail: mediaElement.duration })\n\t\t\tdispatch({ type: MediaActionTypes.SET_LOADING, detail: false })\n\t\t}\n\n\t\tconst handleError = () => {\n\t\t\tconst errorMessage = \"An error occurred while loading the media\"\n\t\t\tdispatch({ type: MediaActionTypes.SET_ERROR, detail: errorMessage })\n\t\t\tonMediaError?.(errorMessage)\n\t\t}\n\n\t\tconst handleLoadStart = () => {\n\t\t\tdispatch({ type: MediaActionTypes.SET_LOADING, detail: true })\n\t\t}\n\n\t\t// Add event listeners\n\t\tmediaElement.addEventListener(\"play\", handlePlay)\n\t\tmediaElement.addEventListener(\"pause\", handlePause)\n\t\tmediaElement.addEventListener(\"ended\", handleEnded)\n\t\tmediaElement.addEventListener(\"timeupdate\", handleTimeUpdate)\n\t\tmediaElement.addEventListener(\"volumechange\", handleVolumeChange)\n\t\tmediaElement.addEventListener(\"loadedmetadata\", handleLoadedMetadata)\n\t\tmediaElement.addEventListener(\"error\", handleError)\n\t\tmediaElement.addEventListener(\"loadstart\", handleLoadStart)\n\n\t\treturn () => {\n\t\t\tmediaElement.removeEventListener(\"play\", handlePlay)\n\t\t\tmediaElement.removeEventListener(\"pause\", handlePause)\n\t\t\tmediaElement.removeEventListener(\"ended\", handleEnded)\n\t\t\tmediaElement.removeEventListener(\"timeupdate\", handleTimeUpdate)\n\t\t\tmediaElement.removeEventListener(\"volumechange\", handleVolumeChange)\n\t\t\tmediaElement.removeEventListener(\"loadedmetadata\", handleLoadedMetadata)\n\t\t\tmediaElement.removeEventListener(\"error\", handleError)\n\t\t\tmediaElement.removeEventListener(\"loadstart\", handleLoadStart)\n\t\t}\n\t}, [dispatch, onPlay, onPause, onEnded, onTimeUpdate, onVolumeChange, onMuted, onMediaError])\n\n\tconst rootProps = {\n\t\t\"aria-labelledby\": context.labelId,\n\t\t\"aria-describedby\": context.descriptionId,\n\t\t\"aria-disabled\": disabled,\n\t\t\"data-disabled\": disabled ? \"\" : undefined,\n\t\t\"data-slot\": \"media-player\",\n\t\t\"data-state\": isFullscreen ? \"fullscreen\" : \"inline\",\n\t\tdir,\n\t\ttabIndex: disabled ? -1 : 0,\n\t\tclassName: cn(\n\t\t\t\"dark relative isolate flex flex-col overflow-hidden rounded-lg bg-background outline-none\",\n\t\t\t\"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n\t\t\t\"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n\t\t\t\"[&_video]:relative [&_video]:object-contain\",\n\t\t\t\"data-[state=fullscreen]:[&_video]:size-full\",\n\t\t\t\"[:fullscreen_&]:flex [:fullscreen_&]:h-full [:fullscreen_&]:max-h-screen [:fullscreen_&]:flex-col [:fullscreen_&]:justify-between\",\n\t\t\t// Mobile-first optimizations\n\t\t\tisTouchDevice && [\n\t\t\t\t\"touch-manipulation\", // Improves touch responsiveness\n\t\t\t\t\"select-none\", // Prevents text selection during gestures\n\t\t\t\t\"overscroll-contain\" // Prevents scroll chaining\n\t\t\t],\n\t\t\t// Enable hardware acceleration for smooth animations\n\t\t\t\"will-change-transform\",\n\t\t\t\"transform-gpu\",\n\t\t\tclassName\n\t\t),\n\t\tonKeyDown: handleKeyDown,\n\t\t...props\n\t}\n\n\treturn (\n\t\t<div ref={composeRefs(context.rootRef)} {...rootProps}>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\n// Main MediaPlayer component with provider\nexport function MediaPlayerRoot(props: MediaPlayerRootProps) {\n\treturn (\n\t\t<MediaProvider>\n\t\t\t<MediaPlayerImpl {...props} />\n\t\t</MediaProvider>\n\t)\n}\n\nMediaPlayerRoot.displayName = \"MediaPlayerRoot\"\n","import * as React from \"react\"\nimport { SVGProps, memo } from \"react\"\n\nconst BackwardIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M3 2.25a1 1 0 0 0-1 1V9a1 1 0 0 0 1 1h5.25a1 1 0 0 0 0-2H4.863c.985-1.179 2.208-2.113 3.682-2.57a9.435 9.435 0 0 1 6.106.16c1.981.738 3.81 2.232 4.722 3.894a1 1 0 1 0 1.754-.961c-1.175-2.143-3.415-3.927-5.778-4.807a11.435 11.435 0 0 0-7.395-.196C6.378 4.008 5.068 4.9 4 5.979V3.25a1 1 0 0 0-1-1ZM9.75 12a1 1 0 0 0-1.762-.647l-.222.265c-.515.623-1.078 1.303-2.28 2.024a1 1 0 1 0 1.029 1.716c.483-.29.889-.582 1.235-.865V20a1 1 0 0 0 2 0v-8Zm6.5-1c-1.386 0-2.4.635-3.008 1.661c-.564.95-.742 2.161-.742 3.339s.178 2.39.742 3.339C13.85 20.365 14.864 21 16.25 21s2.4-.635 3.008-1.661c.564-.95.742-2.161.742-3.339s-.178-2.39-.742-3.339C18.65 11.635 17.636 11 16.25 11Zm-1.75 5c0-1.031.166-1.82.461-2.318c.251-.422.613-.682 1.289-.682c.676 0 1.038.26 1.288.682c.296.498.462 1.287.462 2.318c0 1.031-.166 1.82-.462 2.318c-.25.422-.612.682-1.288.682s-1.038-.26-1.289-.682c-.295-.498-.461-1.287-.461-2.318Z\"></path>\n\t</svg>\n)\n\nexport default BackwardIcon\n","import * as React from \"react\"\nimport { SVGProps, memo } from \"react\"\n\nconst CameraIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth={32}\n\t\theight={32}\n\t\tviewBox=\"0 0 24 24\"\n\t\tstyle={{ width: \"100%\", height: \"100%\" }}\n\t\t{...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M12 18q2.075 0 3.538-1.462Q17 15.075 17 13q0-2.075-1.462-3.538Q14.075 8 12 8 9.925 8 8.463 9.462 7 10.925 7 13q0 2.075 1.463 3.538Q9.925 18 12 18Zm0-2q-1.25 0-2.125-.875T9 13q0-1.25.875-2.125T12 10q1.25 0 2.125.875T15 13q0 1.25-.875 2.125T12 16Zm6-6q.425 0 .712-.288Q19 9.425 19 9t-.288-.713Q18.425 8 18 8t-.712.287Q17 8.575 17 9t.288.712Q17.575 10 18 10ZM4 21q-.825 0-1.412-.587Q2 19.825 2 19V7q0-.825.588-1.412Q3.175 5 4 5h3.15L8.7 3.325q.15-.15.337-.238Q9.225 3 9.425 3h5.15q.2 0 .388.087.187.088.337.238L16.85 5H20q.825 0 1.413.588Q22 6.175 22 7v12q0 .825-.587 1.413Q20.825 21 20 21Zm16-2V7h-4.05l-1.825-2h-4.25L8.05 7H4v12Zm-8-6Z\"\n\t\t/>\n\t</svg>\n)\n\nconst Memo = CameraIcon\nexport default Memo\n","import * as React from \"react\"\nimport { SVGProps, memo } from \"react\"\n\nconst ForwardIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M21 2.25a1 1 0 0 1 1 1V9a1 1 0 0 1-1 1h-5.25a1 1 0 0 1 0-2h3.387c-.985-1.179-2.208-2.113-3.682-2.57a9.435 9.435 0 0 0-6.106.16c-1.981.738-3.81 2.232-4.722 3.894a1 1 0 0 1-1.754-.961C4.048 6.38 6.288 4.596 8.652 3.716a11.435 11.435 0 0 1 7.394-.196c1.576.488 2.886 1.38 3.954 2.459V3.25a1 1 0 0 1 1-1ZM9.095 11.061A1 1 0 0 1 9.75 12v8a1 1 0 0 1-2 0v-5.507c-.346.283-.752.575-1.235.864a1 1 0 1 1-1.03-1.715c1.203-.721 1.766-1.4 2.281-2.024c.074-.09.148-.178.222-.265a1 1 0 0 1 1.107-.292Zm4.147 1.6C13.85 11.635 14.864 11 16.25 11s2.4.635 3.008 1.661c.564.95.742 2.161.742 3.339s-.178 2.39-.742 3.339C18.65 20.365 17.636 21 16.25 21s-2.4-.636-3.008-1.661c-.564-.95-.742-2.161-.742-3.339s.178-2.39.742-3.339Zm1.72 1.021c-.296.498-.462 1.287-.462 2.318c0 1.031.166 1.82.461 2.318c.251.422.613.682 1.289.682c.676 0 1.038-.26 1.288-.682c.296-.498.462-1.287.462-2.318c0-1.031-.166-1.82-.462-2.318c-.25-.422-.612-.682-1.288-.682s-1.038.26-1.289.682Z\"></path>\n\t</svg>\n)\n\nexport default ForwardIcon\n","import * as React from \"react\"\nimport { SVGProps, memo } from \"react\"\n\nconst FullscreenEnterIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth=\"24\"\n\t\theight=\"24\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tdata-uia=\"control-fullscreen-enter\"\n\t\tstyle={{ width: \"100%\", height: \"100%\" }}\n\t\t{...props}>\n\t\t<path\n\t\t\tfillRule=\"evenodd\"\n\t\t\tclipRule=\"evenodd\"\n\t\t\td=\"M0 5a2 2 0 0 1 2-2h7v2H2v4H0V5Zm22 0h-7V3h7a2 2 0 0 1 2 2v4h-2V5ZM2 15v4h7v2H2a2 2 0 0 1-2-2v-4h2Zm20 4v-4h2v4a2 2 0 0 1-2 2h-7v-2h7Z\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n)\n\nexport default FullscreenEnterIcon\n","import * as React from \"react\"\nimport { SVGProps, memo } from \"react\"\n\nconst FullscreenExitIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth=\"24\"\n\t\theight=\"24\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tdata-uia=\"control-fullscreen-exit\"\n\t\tstyle={{ width: \"100%\", height: \"100%\" }}\n\t\t{...props}>\n\t\t<path\n\t\t\tfillRule=\"evenodd\"\n\t\t\tclipRule=\"evenodd\"\n\t\t\td=\"M24 8h-5V3h-2v7h7V8ZM0 16h5v5h2v-7H0v2Zm7-6H0V8h5V3h2v7Zm12 11v-5h5v-2h-7v7h2Z\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n)\n\nexport default FullscreenExitIcon\n","import * as React from \"react\"\nimport { SVGProps, memo } from \"react\"\n\nconst LoadingIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth=\"24\"\n\t\theight=\"24\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName=\"svg-icon-nfplayerPlay\"\n\t\tstyle={{ width: \"100%\", height: \"100%\" }}\n\t\t{...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M12 2A10 10 0 1 0 22 12A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8A8 8 0 0 1 12 20Z\"\n\t\t\topacity=\".5\"\n\t\t/>\n\t\t<path fill=\"currentColor\" d=\"M20 12h2A10 10 0 0 0 12 2V4A8 8 0 0 1 20 12Z\">\n\t\t\t<animateTransform\n\t\t\t\tattributeName=\"transform\"\n\t\t\t\tdur=\"1s\"\n\t\t\t\tfrom=\"0 12 12\"\n\t\t\t\trepeatCount=\"indefinite\"\n\t\t\t\tto=\"360 12 12\"\n\t\t\t\ttype=\"rotate\"\n\t\t\t/>\n\t\t</path>\n\t</svg>\n)\n\nexport default LoadingIcon\n","import * as React from \"react\"\nimport { SVGProps, memo } from \"react\"\n\nconst PauseIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth=\"24\"\n\t\theight=\"24\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName=\"svg-icon-nfplayerPause\"\n\t\tstyle={{ width: \"100%\", height: \"100%\" }}\n\t\t{...props}>\n\t\t<path\n\t\t\tfillRule=\"evenodd\"\n\t\t\tclipRule=\"evenodd\"\n\t\t\td=\"M4.5 3a.5.5 0 0 0-.5.5v17a.5.5 0 0 0 .5.5h5a.5.5 0 0 0 .5-.5v-17a.5.5 0 0 0-.5-.5h-5Zm10 0a.5.5 0 0 0-.5.5v17a.5.5 0 0 0 .5.5h5a.5.5 0 0 0 .5-.5v-17a.5.5 0 0 0-.5-.5h-5Z\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n)\n\nexport default PauseIcon\n","import * as React from \"react\"\nimport { SVGProps, memo } from \"react\"\n\nconst PlayIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth=\"24\"\n\t\theight=\"24\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName=\"svg-icon-nfplayerPlay\"\n\t\tstyle={{ width: \"100%\", height: \"100%\" }}\n\t\t{...props}>\n\t\t<path\n\t\t\td=\"M4 2.691a1 1 0 0 1 1.482-.876l16.925 9.309a1 1 0 0 1 0 1.752L5.482 22.185A1 1 0 0 1 4 21.309V2.69Z\"\n\t\t\tfill=\"currentColor\"\n\t\t/>\n\t</svg>\n)\n\nexport default PlayIcon\n","import * as React from \"react\"\nimport { SVGProps } from \"react\"\n\nconst SettingsIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M2 12c0-.865.11-1.703.316-2.504A3 3 0 0 0 4.99 4.867a9.99 9.99 0 0 1 4.335-2.505a3 3 0 0 0 5.348 0a9.99 9.99 0 0 1 4.335 2.505a3 3 0 0 0 2.675 4.63a10.036 10.036 0 0 1 0 5.007a3 3 0 0 0-2.675 4.629a9.99 9.99 0 0 1-4.335 2.505a3 3 0 0 0-5.348 0a9.99 9.99 0 0 1-4.335-2.505a3 3 0 0 0-2.675-4.63A10.056 10.056 0 0 1 2 12zm4.804 3c.63 1.091.81 2.346.564 3.524c.408.29.842.541 1.297.75A4.993 4.993 0 0 1 12 18c1.26 0 2.438.471 3.335 1.274c.455-.209.889-.46 1.297-.75A4.993 4.993 0 0 1 17.196 15a4.993 4.993 0 0 1 2.77-2.25a8.126 8.126 0 0 0 0-1.5A4.993 4.993 0 0 1 17.195 9a4.993 4.993 0 0 1-.564-3.524a7.989 7.989 0 0 0-1.297-.75A4.993 4.993 0 0 1 12 6a4.993 4.993 0 0 1-3.335-1.274a7.99 7.99 0 0 0-1.297.75A4.993 4.993 0 0 1 6.804 9a4.993 4.993 0 0 1-2.77 2.25a8.126 8.126 0 0 0 0 1.5A4.993 4.993 0 0 1 6.805 15zM12 15a3 3 0 1 1 0-6a3 3 0 0 1 0 6zm0-2a1 1 0 1 0 0-2a1 1 0 0 0 0 2z\"></path>\n\t</svg>\n)\n\nexport default SettingsIcon\n","import * as React from \"react\"\nimport { SVGProps, memo } from \"react\"\n\nconst SubtitleIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg\n\t\twidth=\"24\"\n\t\theight=\"24\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\tclassName=\"Hawkins-Icon Hawkins-Icon-Standard\"\n\t\tstyle={{ width: \"100%\", height: \"100%\" }}\n\t\t{...props}>\n\t\t<path\n\t\t\tfill=\"currentColor\"\n\t\t\td=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 14H4V6h16v12zM6 10h2v2H6zm0 4h8v2H6zm10 0h2v2h-2zm-6-4h8v2h-8z\"\n\t\t/>\n\t</svg>\n)\n\nexport default SubtitleIcon\n","import * as React from \"react\"\nimport { SVGProps, memo } from \"react\"\n\nconst VolumeMutedIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<g fill=\"currentColor\">\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M20.515 6.316a.75.75 0 0 1 .991.376c.468 1.035.994 2.768.994 5.308c0 2.192-.392 3.783-.8 4.844a7.72 7.72 0 0 1-.572 1.195a4.73 4.73 0 0 1-.289.425l-.007.01l-.003.003l-.002.002L20.25 18l.576.48a.75.75 0 0 1-1.156-.956l.003-.004l.031-.041a3.27 3.27 0 0 0 .137-.212c.12-.199.288-.516.459-.961c.342-.889.7-2.298.7-4.306c0-2.326-.48-3.849-.86-4.692a.75.75 0 0 1 .375-.992Zm-2.101 2.95a.75.75 0 0 1 .887.582c.11.53.199 1.24.199 2.152c0 1.11-.132 1.923-.273 2.474a5.172 5.172 0 0 1-.203.631a2.977 2.977 0 0 1-.102.228l-.01.018l-.003.007l-.002.003v.002s-.001.001-.657-.363l.656.364a.75.75 0 0 1-1.317-.719l.005-.01a1.85 1.85 0 0 0 .038-.087a3.66 3.66 0 0 0 .141-.447c.11-.424.227-1.111.227-2.101a9.17 9.17 0 0 0-.168-1.848a.75.75 0 0 1 .582-.886Z\"\n\t\t\t\tclipRule=\"evenodd\"></path>\n\t\t\t<path d=\"M21.78 3.53a.75.75 0 0 0-1.06-1.06l-4.45 4.449a11.265 11.265 0 0 0-.193-1.39c-.172-.788-.477-1.473-1.116-1.923a3.066 3.066 0 0 0-.769-.39c-.818-.28-1.631-.057-2.457.345c-.814.395-1.8 1.046-3.032 1.857l-.267.176c-.447.295-.602.394-.76.464a2.17 2.17 0 0 1-.535.16c-.171.03-.354.032-.89.032h-.162c-1.217 0-2.062-.001-2.814.347A3.962 3.962 0 0 0 1.548 8.22c-.392.729-.438 1.491-.504 2.575l-.008.13C1.014 11.294 1 11.658 1 12c0 .342.014.706.036 1.074l.008.13c.066 1.084.112 1.846.504 2.575a3.962 3.962 0 0 0 1.727 1.624c.61.283 1.283.336 2.166.345L2.72 20.47a.75.75 0 1 0 1.06 1.06l18-18ZM16.5 12a.75.75 0 0 0-1.255-.554l-.071.074l-6 6.274A.778.778 0 0 0 9.34 19c1.039.68 1.899 1.225 2.631 1.549c.743.328 1.48.489 2.222.236a3.08 3.08 0 0 0 .769-.391c.706-.497 1.005-1.28 1.167-2.18c.159-.884.213-2.056.281-3.516l.003-.058a68.23 68.23 0 0 0 .088-2.64Z\"></path>\n\t\t</g>\n\t</svg>\n)\n\nexport default VolumeMutedIcon\n","import * as React from \"react\"\nimport { SVGProps, memo } from \"react\"\n\nconst VolumeTwoIcon = (props: SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t<g fill=\"currentColor\">\n\t\t\t<path d=\"M2.003 11.716c.037-1.843.056-2.764.668-3.552a3.18 3.18 0 0 1 .413-.431c.752-.636 1.746-.636 3.733-.636c.71 0 1.065 0 1.403-.092c.07-.02.14-.042.209-.067c.33-.121.627-.33 1.22-.746c2.338-1.645 3.508-2.467 4.489-2.11c.188.069.37.168.533.29c.848.635.913 2.115 1.042 5.073a70.58 70.58 0 0 1 .08 2.555c0 .521-.032 1.46-.08 2.555c-.13 2.958-.194 4.438-1.042 5.073a2.109 2.109 0 0 1-.533.29c-.982.357-2.15-.465-4.49-2.11c-.592-.416-.889-.625-1.22-.746a2.61 2.61 0 0 0-.208-.067c-.338-.092-.693-.092-1.403-.092c-1.987 0-2.98 0-3.733-.636a3.145 3.145 0 0 1-.413-.43c-.612-.79-.63-1.71-.668-3.553a14.06 14.06 0 0 1 0-.569Z\"></path>\n\t\t\t<path\n\t\t\t\tfillRule=\"evenodd\"\n\t\t\t\td=\"M19.49 5.552a.66.66 0 0 1 .97.094l-.529.471l.53-.47l.002.002l.003.004l.007.009a2.572 2.572 0 0 1 .079.112c.047.071.111.173.186.305c.149.264.339.652.526 1.171C21.64 8.291 22 9.851 22 12c0 2.15-.36 3.71-.736 4.75c-.187.52-.377.907-.526 1.172a4.655 4.655 0 0 1-.265.417l-.007.009l-.003.003l-.001.002s-.001.001-.531-.47l.53.471a.66.66 0 0 1-.971.094a.77.77 0 0 1-.09-1.035l.03-.041c.026-.04.07-.11.125-.207a6.28 6.28 0 0 0 .422-.943c.314-.871.644-2.253.644-4.222c0-1.97-.33-3.35-.644-4.222a6.28 6.28 0 0 0-.422-.942a3.152 3.152 0 0 0-.157-.253m-1.641 1.833c.333-.197.753-.07.938.286l-.603.357l.603-.357l.001.002l.002.003l.003.007l.01.018l.024.053c.018.042.042.099.07.17c.053.145.12.35.185.62c.13.54.252 1.337.252 2.425c0 1.089-.122 1.886-.252 2.426c-.065.27-.132.475-.186.619a3.04 3.04 0 0 1-.094.223l-.009.018l-.003.007l-.002.003v.002s-.001.001-.604-.356l.603.357c-.185.355-.605.483-.938.286c-.33-.196-.45-.638-.272-.991l.004-.01l.035-.085c.032-.086.08-.23.13-.438c.1-.416.208-1.09.208-2.06c0-.971-.108-1.645-.208-2.06a3.757 3.757 0 0 0-.165-.524l-.004-.01a.76.76 0 0 1 .272-.991Z\"\n\t\t\t\tclipRule=\"evenodd\"></path>\n\t\t</g>\n\t</svg>\n)\n\nexport default VolumeTwoIcon\n","\"use client\"\n\nimport React from \"react\"\nimport BackwardIcon from \"./svg-icons/BackwardIcon\"\nimport CameraIcon from \"./svg-icons/CameraIcon\"\nimport ForwardIcon from \"./svg-icons/ForwardIcon\"\nimport FullscreenEnterIcon from \"./svg-icons/FullscreenEnterIcon\"\nimport FullscreenExitIcon from \"./svg-icons/FullscreenExitIcon\"\nimport LoadingIcon from \"./svg-icons/LoadingIcon\"\nimport PauseIcon from \"./svg-icons/PauseIcon\"\nimport PlayIcon from \"./svg-icons/PlayIcon\"\nimport PlaybackSpeedIcon from \"./svg-icons/PlaybackSpeedIcon\"\nimport SettingsIcon from \"./svg-icons/SettingsIcon\"\nimport SubtitleIconSVG from \"./svg-icons/SubtitleIcon\"\nimport VolumeMutedIcon from \"./svg-icons/VolumeMutedIcon\"\nimport VolumeOneIcon from \"./svg-icons/VolumeOneIcon\"\nimport VolumeThreeIcon from \"./svg-icons/VolumeThreeIcon\"\nimport VolumeTwoIcon from \"./svg-icons/VolumeTwoIcon\"\n\nexport interface IconProps {\n\tsize?: number\n\tclassName?: string\n\tcolor?: string\n}\n\n// Minimal Play Icon\nexport const MinimalPlayIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <PlayIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Pause Icon\nexport const MinimalPauseIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <PauseIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Volume Icon\nexport const MinimalVolumeIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <VolumeTwoIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Volume Muted Icon\nexport const MinimalVolumeMutedIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <VolumeMutedIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Fullscreen Icon\nexport const MinimalFullscreenIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <FullscreenEnterIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Exit Fullscreen Icon\nexport const MinimalExitFullscreenIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <FullscreenExitIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Settings Icon\nexport const MinimalSettingsIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <SettingsIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Loading Spinner\nexport const MinimalSpinner: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => (\n\t<LoadingIcon\n\t\twidth={size}\n\t\theight={size}\n\t\tclassName={`animate-spin ${className}`}\n\t\tstyle={{ color }}\n\t/>\n)\n\n// Minimal Forward Icon (using backward design)\nexport const MinimalForwardIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <BackwardIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Backward Icon\nexport const MinimalBackwardIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <ForwardIcon width={size} height={size} className={className} style={{ color }} />\n\n// Forward 10 seconds icon\nexport const MinimalForward10Icon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <ForwardIcon width={size} height={size} className={className} style={{ color }} />\n\n// Backward 10 seconds icon\nexport const MinimalBackward10Icon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <BackwardIcon width={size} height={size} className={className} style={{ color }} />\n\n// Subtitle/Caption icon\nexport const MinimalSubtitleIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <SubtitleIconSVG width={size} height={size} className={className} style={{ color }} />\n\n// Screenshot/Camera icon\nexport const MinimalScreenshotIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <CameraIcon width={size} height={size} className={className} style={{ color }} />\n\n// Speed icon\nexport const MinimalSpeedIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <PlaybackSpeedIcon width={size} height={size} className={className} style={{ color }} />\n\n// Icon Set Type\nexport interface IconSet {\n\tplay?: React.FC<IconProps>\n\tpause?: React.FC<IconProps>\n\tvolume?: React.FC<IconProps>\n\tvolumeMuted?: React.FC<IconProps>\n\tfullscreen?: React.FC<IconProps>\n\texitFullscreen?: React.FC<IconProps>\n\tsettings?: React.FC<IconProps>\n\tforward?: React.FC<IconProps>\n\tbackward?: React.FC<IconProps>\n\tspinner?: React.FC<IconProps>\n\tsubtitle?: React.FC<IconProps>\n}\n\n// Default Icon Set\nexport const defaultMinimalIcons: IconSet = {\n\tplay: MinimalPlayIcon,\n\tpause: MinimalPauseIcon,\n\tvolume: MinimalVolumeIcon,\n\tvolumeMuted: MinimalVolumeMutedIcon,\n\tfullscreen: MinimalFullscreenIcon,\n\texitFullscreen: MinimalExitFullscreenIcon,\n\tsettings: MinimalSettingsIcon,\n\tforward: MinimalForwardIcon,\n\tbackward: MinimalBackwardIcon,\n\tspinner: MinimalSpinner,\n\tsubtitle: MinimalSubtitleIcon\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { useMediaContext } from \"../context/media-context\"\n\n// Utility function to compose refs\nfunction composeRefs<T>(...refs: Array<React.Ref<T> | undefined>) {\n\treturn (node: T) => {\n\t\trefs.forEach((ref) => {\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(node)\n\t\t\t} else if (ref) {\n\t\t\t\t;(ref as React.MutableRefObject<T>).current = node\n\t\t\t}\n\t\t})\n\t}\n}\n\nexport interface MediaPlayerVideoProps extends React.VideoHTMLAttributes<HTMLVideoElement> {\n\tasChild?: boolean\n}\n\nexport function MediaPlayerVideo({\n\tasChild = false,\n\tclassName,\n\tchildren,\n\t...props\n}: MediaPlayerVideoProps) {\n\tconst context = useMediaContext()\n\n\t// Create a ref that will be composed with the context mediaRef when mounted\n\tconst [combinedRef, setCombinedRef] = React.useState<React.RefCallback<HTMLVideoElement> | null>(\n\t\t() => {\n\t\t\t// This runs once during initialization to create the combined ref\n\t\t\treturn composeRefs(context.mediaRef)\n\t\t}\n\t)\n\n\t// Update combined ref when context changes (but this won't trigger render)\n\tReact.useEffect(() => {\n\t\tsetCombinedRef(() => composeRefs(context.mediaRef))\n\t}, [context.mediaRef])\n\n\tif (asChild) {\n\t\t// When asChild is true, clone the child element and add our props\n\t\tconst child = React.Children.only(children) as React.ReactElement\n\t\treturn React.cloneElement(child, {\n\t\t\t...props,\n\t\t\tref: combinedRef,\n\t\t\t\"data-slot\": \"media-player-video\"\n\t\t} as any)\n\t}\n\n\treturn (\n\t\t<video ref={combinedRef} data-slot=\"media-player-video\" className={className} {...props}>\n\t\t\t{children}\n\t\t</video>\n\t)\n}\n\nMediaPlayerVideo.displayName = \"MediaPlayerVideo\"\n","\"use client\"\n\nimport React from \"react\"\nimport { useMediaContext, useMediaSelector } from \"../context/media-context\"\nimport { formatTime } from \"../lib/format-time\"\nimport { cn } from \"../lib/utils\"\n\nexport interface MediaPlayerTimeProps {\n\tvariant?: \"current\" | \"duration\" | \"remaining\" | \"current-duration\"\n\tclassName?: string\n\tasChild?: boolean\n\tchildren?: React.ReactNode\n}\n\nexport function MediaPlayerTime({\n\tvariant = \"current-duration\",\n\tclassName,\n\tasChild = false,\n\tchildren,\n\t...props\n}: MediaPlayerTimeProps) {\n\tconst context = useMediaContext()\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst duration = useMediaSelector((state) => state.duration)\n\n\tconst times = React.useMemo(() => {\n\t\tif (variant === \"remaining\") {\n\t\t\treturn {\n\t\t\t\tremaining: formatTime(Math.max(0, duration - currentTime))\n\t\t\t}\n\t\t}\n\n\t\tif (variant === \"duration\") {\n\t\t\treturn {\n\t\t\t\tduration: formatTime(duration)\n\t\t\t}\n\t\t}\n\n\t\tif (variant === \"current\") {\n\t\t\treturn {\n\t\t\t\tcurrent: formatTime(currentTime)\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcurrent: formatTime(currentTime),\n\t\t\tduration: formatTime(duration)\n\t\t}\n\t}, [variant, currentTime, duration])\n\n\tconst timeProps = {\n\t\t\"data-slot\": \"media-player-time\",\n\t\t\"data-variant\": variant,\n\t\tdir: context.dir,\n\t\tclassName: cn(\"text-sm text-foreground/80 tabular-nums\", className),\n\t\t...props\n\t}\n\n\tif (variant !== \"current-duration\") {\n\t\tconst content = times[variant as keyof typeof times]\n\n\t\tif (asChild) {\n\t\t\tconst child = React.Children.only(children) as React.ReactElement\n\t\t\treturn React.cloneElement(child, timeProps as any, content)\n\t\t}\n\n\t\treturn <time {...timeProps}>{content}</time>\n\t}\n\n\tconst content = (\n\t\t<>\n\t\t\t<time>{times.current}</time>\n\t\t\t<span className=\"text-foreground/60\">/</span>\n\t\t\t<time>{times.duration}</time>\n\t\t</>\n\t)\n\n\tif (asChild) {\n\t\tconst child = React.Children.only(children) as React.ReactElement\n\t\treturn React.cloneElement(\n\t\t\tchild,\n\t\t\t{\n\t\t\t\t...timeProps,\n\t\t\t\tclassName: cn(\"flex items-center gap-1 text-foreground/80 text-sm\", className)\n\t\t\t} as any,\n\t\t\tcontent\n\t\t)\n\t}\n\n\treturn (\n\t\t<div\n\t\t\t{...timeProps}\n\t\t\tclassName={cn(\"flex items-center gap-1 text-foreground/80 text-sm\", className)}>\n\t\t\t{content}\n\t\t</div>\n\t)\n}\n\nMediaPlayerTime.displayName = \"MediaPlayerTime\"\n","\"use client\"\n\nimport React from \"react\"\nimport { MediaActionTypes, useMediaContext, useMediaDispatch } from \"../../../context/media-context\"\nimport { cn } from \"../../../lib/utils\"\nimport type { IconSet } from \"../../icons\"\n\nexport interface MinimalPlayButtonProps {\n\tisPlaying: boolean\n\ticons: IconSet\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n\tclassName?: string\n}\n\nexport function MinimalPlayButton({\n\tisPlaying,\n\ticons,\n\tsize = \"md\",\n\tclassName\n}: MinimalPlayButtonProps) {\n\tconst dispatch = useMediaDispatch()\n\n\tconst handleClick = () => {\n\t\tdispatch({\n\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t})\n\t}\n\n\tconst sizeClasses = {\n\t\tsm: \"h-10 w-10\",\n\t\tmd: \"h-12 w-12 minimal-btn\",\n\t\tlg: \"h-16 w-16 minimal-btn-lg\",\n\t\txl: \"h-20 w-20 minimal-btn-lg\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: 27,\n\t\tmd: 30,\n\t\tlg: 36,\n\t\txl: 42\n\t}\n\n\tconst PlayIcon = icons.play\n\tconst PauseIcon = icons.pause\n\n\tif (!PlayIcon || !PauseIcon) return null\n\n\treturn (\n\t\t<button\n\t\t\tclassName={cn(\"minimal-btn\", sizeClasses[size], className)}\n\t\t\tonClick={handleClick}\n\t\t\taria-label={isPlaying ? \"Pause\" : \"Play\"}>\n\t\t\t{isPlaying ? <PauseIcon size={iconSizes[size]} /> : <PlayIcon size={iconSizes[size]} />}\n\t\t</button>\n\t)\n}\n","\"use client\"\n\nimport React, { useRef, useState } from \"react\"\nimport {\n\tMediaActionTypes,\n\tuseMediaDispatch,\n\tuseMediaSelector\n} from \"../../../context/media-context\"\nimport { formatTime } from \"../../../lib/format-time\"\nimport { cn } from \"../../../lib/utils\"\n\nexport interface MinimalSeekBarProps {\n\tthumbnails?: string\n\tonSeek?: (time: number) => void\n\tclassName?: string\n}\n\nexport function MinimalSeekBar({ thumbnails, onSeek, className }: MinimalSeekBarProps) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst duration = useMediaSelector((state) => state.duration)\n\tconst buffered = useMediaSelector((state) => state.buffered)\n\n\tconst [isDragging, setIsDragging] = useState(false)\n\tconst [hoverTime, setHoverTime] = useState(0)\n\tconst [hoverPosition, setHoverPosition] = useState(0)\n\tconst seekBarRef = useRef<HTMLDivElement>(null)\n\n\tconst progress = duration > 0 ? (currentTime / duration) * 100 : 0\n\tconst bufferedProgress =\n\t\tbuffered && buffered.length > 0 && duration > 0\n\t\t\t? (buffered.end(buffered.length - 1) / duration) * 100\n\t\t\t: 0\n\n\tconst handleSeek = (clientX: number) => {\n\t\tif (!seekBarRef.current || duration === 0) return\n\n\t\tconst rect = seekBarRef.current.getBoundingClientRect()\n\t\tconst position = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n\t\tconst newTime = position * duration\n\n\t\tdispatch({\n\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\tdetail: newTime\n\t\t})\n\n\t\tonSeek?.(newTime)\n\t}\n\n\tconst handleMouseDown = (e: React.MouseEvent) => {\n\t\te.preventDefault()\n\t\tsetIsDragging(true)\n\t\thandleSeek(e.clientX)\n\t}\n\n\tconst handleMouseMove = (e: React.MouseEvent) => {\n\t\tif (!seekBarRef.current || duration === 0) return\n\n\t\tconst rect = seekBarRef.current.getBoundingClientRect()\n\t\tconst position = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n\t\tconst time = position * duration\n\n\t\tsetHoverTime(time)\n\t\tsetHoverPosition(e.clientX - rect.left)\n\n\t\tif (isDragging) {\n\t\t\thandleSeek(e.clientX)\n\t\t}\n\t}\n\n\tconst handleMouseUp = () => {\n\t\tsetIsDragging(false)\n\t}\n\n\tconst handleMouseLeave = () => {\n\t\tsetIsDragging(false)\n\t\tsetHoverTime(0)\n\t}\n\n\tReact.useEffect(() => {\n\t\tif (isDragging) {\n\t\t\tconst handleGlobalMouseMove = (e: MouseEvent) => {\n\t\t\t\thandleSeek(e.clientX)\n\t\t\t}\n\n\t\t\tconst handleGlobalMouseUp = () => {\n\t\t\t\tsetIsDragging(false)\n\t\t\t}\n\n\t\t\tdocument.addEventListener(\"mousemove\", handleGlobalMouseMove)\n\t\t\tdocument.addEventListener(\"mouseup\", handleGlobalMouseUp)\n\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener(\"mousemove\", handleGlobalMouseMove)\n\t\t\t\tdocument.removeEventListener(\"mouseup\", handleGlobalMouseUp)\n\t\t\t}\n\t\t}\n\t}, [isDragging])\n\n\treturn (\n\t\t<div className={cn(\"group relative\", className)}>\n\t\t\t{/* Preview Tooltip */}\n\t\t\t{hoverTime > 0 && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"pointer-events-none absolute bottom-full z-50 mb-2\"\n\t\t\t\t\tstyle={{ left: `${hoverPosition}px`, transform: \"translateX(-50%)\" }}>\n\t\t\t\t\t{thumbnails && (\n\t\t\t\t\t\t<div className=\"mb-1 rounded bg-black/90 p-1\">\n\t\t\t\t\t\t\t<div className=\"h-18 w-32 rounded bg-gray-800\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t\t<div className=\"whitespace-nowrap rounded bg-black/90 px-2 py-1 text-white text-xs\">\n\t\t\t\t\t\t{formatTime(hoverTime)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Seek Bar */}\n\t\t\t<div\n\t\t\t\tref={seekBarRef}\n\t\t\t\tclassName=\"minimal-seekbar\"\n\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\tonMouseUp={handleMouseUp}\n\t\t\t\tonMouseLeave={handleMouseLeave}>\n\t\t\t\t{/* Buffered Progress */}\n\t\t\t\t<div className=\"minimal-seekbar-buffered\" style={{ width: `${bufferedProgress}%` }} />\n\n\t\t\t\t{/* Progress */}\n\t\t\t\t<div className=\"minimal-seekbar-progress\" style={{ width: `${progress}%` }} />\n\n\t\t\t\t{/* Thumb */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\"minimal-seekbar-thumb\", isDragging && \"active\")}\n\t\t\t\t\tstyle={{ left: `${progress}%` }}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","\"use client\"\n\nimport React, { useState } from \"react\"\nimport {\n\tMediaActionTypes,\n\tuseMediaDispatch,\n\tuseMediaSelector\n} from \"../../../context/media-context\"\nimport { cn } from \"../../../lib/utils\"\nimport type { IconSet } from \"../../icons\"\n\nexport interface MinimalVolumeControlProps {\n\ticons: IconSet\n\tclassName?: string\n}\n\nexport function MinimalVolumeControl({ icons, className }: MinimalVolumeControlProps) {\n\tconst dispatch = useMediaDispatch()\n\tconst volume = useMediaSelector((state) => state.volume)\n\tconst isMuted = useMediaSelector((state) => state.isMuted)\n\tconst [isExpanded, setIsExpanded] = useState(false)\n\n\tconst handleVolumeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n\t\tconst newVolume = parseFloat(e.target.value)\n\t\tdispatch({\n\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\tdetail: newVolume\n\t\t})\n\t}\n\n\tconst handleMuteToggle = () => {\n\t\tdispatch({\n\t\t\ttype: MediaActionTypes.TOGGLE_MUTE\n\t\t})\n\t}\n\n\tconst VolumeIcon = isMuted || volume === 0 ? icons.volumeMuted : icons.volume\n\n\tif (!VolumeIcon) return null\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"minimal-volume-group flex items-center gap-2\", className)}\n\t\t\tonMouseEnter={() => setIsExpanded(true)}\n\t\t\tonMouseLeave={() => setIsExpanded(false)}>\n\t\t\t{/* Volume Button */}\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn inline-flex h-8 w-8 items-center justify-center rounded-full border border-white/20 bg-white/10 text-white transition-all duration-150 hover:border-white/30 hover:bg-white/20\"\n\t\t\t\tonClick={handleMuteToggle}\n\t\t\t\taria-label={isMuted ? \"Unmute\" : \"Mute\"}>\n\t\t\t\t<VolumeIcon size={18} />\n\t\t\t</button>\n\n\t\t\t{/* Volume Slider */}\n\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"overflow-hidden transition-all duration-250\",\n\t\t\t\t\tisExpanded ? \"w-20 opacity-100\" : \"w-0 opacity-0\"\n\t\t\t\t)}>\n\t\t\t\t<input\n\t\t\t\t\ttype=\"range\"\n\t\t\t\t\tmin=\"0\"\n\t\t\t\t\tmax=\"1\"\n\t\t\t\t\tstep=\"0.01\"\n\t\t\t\t\tvalue={isMuted ? 0 : volume}\n\t\t\t\t\tonChange={handleVolumeChange}\n\t\t\t\t\tclassName=\"minimal-volume-slider h-1 w-full cursor-pointer appearance-none rounded-full bg-white/20\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbackground: `linear-gradient(to right, rgb(59 130 246) 0%, rgb(59 130 246) ${(isMuted ? 0 : volume) * 100}%, rgba(255,255,255,0.2) ${(isMuted ? 0 : volume) * 100}%, rgba(255,255,255,0.2) 100%)`\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { cn } from \"../../../lib/utils\"\nimport type { IconSet } from \"../../icons\"\nimport { MediaPlayerFullscreen } from \"../../media-player-fullscreen\"\nimport { MediaPlayerPlay } from \"../../media-player-play\"\nimport { MediaPlayerSeek } from \"../../media-player-seek\"\nimport { MediaPlayerTime } from \"../../media-player-time\"\nimport { MediaPlayerVolume } from \"../../media-player-volume\"\nimport { MinimalPlayButton } from \"./MinimalPlayButton\"\nimport { MinimalSeekBar } from \"./MinimalSeekBar\"\nimport { MinimalVolumeControl } from \"./MinimalVolumeControl\"\n\nexport interface MinimalControlsProps {\n\tvisible: boolean\n\ticons: IconSet\n\tisPlaying: boolean\n\tshowQualitySelector?: boolean\n\tshowSpeedControl?: boolean\n\tqualities?: Array<{\n\t\tsrc: string\n\t\tquality: string\n\t\tdefault?: boolean\n\t}>\n\tthumbnails?: string\n\tonUserInteractionStart?: () => void\n\tonUserInteractionEnd?: () => void\n\tonSeek?: (time: number) => void\n}\n\nexport function MinimalControls({\n\tvisible,\n\ticons,\n\tisPlaying,\n\tshowQualitySelector,\n\tshowSpeedControl,\n\tqualities,\n\tthumbnails,\n\tonUserInteractionStart,\n\tonUserInteractionEnd,\n\tonSeek\n}: MinimalControlsProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"minimal-control-bar\",\n\t\t\t\t\"absolute right-0 bottom-0 left-0 z-40\",\n\t\t\t\t\"px-6 py-3 transition-all duration-200\",\n\t\t\t\tvisible ? \"minimal-controls-visible\" : \"minimal-controls-hidden\"\n\t\t\t)}\n\t\t\tdata-hidden={!visible}\n\t\t\tonMouseDown={onUserInteractionStart}\n\t\t\tonMouseUp={onUserInteractionEnd}\n\t\t\tonTouchStart={onUserInteractionStart}\n\t\t\tonTouchEnd={onUserInteractionEnd}>\n\t\t\t{/* Seek Bar - Top of controls */}\n\t\t\t<div className=\"mb-2\">\n\t\t\t\t<MinimalSeekBar thumbnails={thumbnails} onSeek={onSeek} />\n\t\t\t</div>\n\n\t\t\t{/* Main Controls Row */}\n\t\t\t<div className=\"flex items-center justify-between gap-3\">\n\t\t\t\t{/* Left Side Controls */}\n\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t{/* Play/Pause Button */}\n\t\t\t\t\t<MinimalPlayButton isPlaying={isPlaying} icons={icons} />\n\n\t\t\t\t\t{/* Volume Control */}\n\t\t\t\t\t<MinimalVolumeControl icons={icons} />\n\n\t\t\t\t\t{/* Time Display */}\n\t\t\t\t\t<div className=\"minimal-time select-none font-mono text-sm text-white/90\">\n\t\t\t\t\t\t<MediaPlayerTime variant=\"current\" />\n\t\t\t\t\t\t<span className=\"mx-1 text-white/60\">/</span>\n\t\t\t\t\t\t<MediaPlayerTime variant=\"duration\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t{/* Right Side Controls */}\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t{/* Quality Selector */}\n\t\t\t\t\t{showQualitySelector && qualities && qualities.length > 1 && (\n\t\t\t\t\t\t<button className=\"minimal-btn w-auto px-3 font-medium text-xs\" title=\"Quality\">\n\t\t\t\t\t\t\t{qualities.find((q) => q.default)?.quality || qualities[0]?.quality || \"Auto\"}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Speed Control */}\n\t\t\t\t\t{showSpeedControl && (\n\t\t\t\t\t\t<button className=\"minimal-btn w-auto px-3 font-medium text-xs\" title=\"Playback Speed\">\n\t\t\t\t\t\t\t1x\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Settings */}\n\t\t\t\t\t{icons.settings && (showQualitySelector || showSpeedControl) && (\n\t\t\t\t\t\t<button className=\"minimal-btn\" title=\"Settings\">\n\t\t\t\t\t\t\t<icons.settings size={18} />\n\t\t\t\t\t\t</button>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Fullscreen Button */}\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName=\"minimal-btn\"\n\t\t\t\t\t\ttitle=\"Toggle Fullscreen\"\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t// This would need to be connected to fullscreen logic\n\t\t\t\t\t\t\tconst elem = document.documentElement\n\t\t\t\t\t\t\tif (!document.fullscreenElement) {\n\t\t\t\t\t\t\t\telem.requestFullscreen?.()\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdocument.exitFullscreen?.()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}>\n\t\t\t\t\t\t{document.fullscreenElement\n\t\t\t\t\t\t\t? icons.exitFullscreen && <icons.exitFullscreen size={18} />\n\t\t\t\t\t\t\t: icons.fullscreen && <icons.fullscreen size={18} />}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { cn } from \"../../../lib/utils\"\n\nexport interface MinimalLoadingProps {\n\ticon?: React.FC<{ size?: number; className?: string }>\n\tclassName?: string\n}\n\nexport function MinimalLoading({ icon: LoadingIcon, className }: MinimalLoadingProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute inset-0 z-40 flex items-center justify-center\",\n\t\t\t\t\"bg-black/60 backdrop-blur-sm\",\n\t\t\t\tclassName\n\t\t\t)}>\n\t\t\t<div className=\"text-white\">\n\t\t\t\t{LoadingIcon ? (\n\t\t\t\t\t<LoadingIcon size={48} className=\"animate-spin\" />\n\t\t\t\t) : (\n\t\t\t\t\t<div className=\"minimal-spinner h-12 w-12 animate-spin rounded-full border-3 border-white/20 border-t-white\" />\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { cn } from \"../../../lib/utils\"\nimport type { IconSet } from \"../../icons\"\n\nexport interface MinimalOverlayProps {\n\tvisible: boolean\n\tshowCenterButton?: boolean\n\tisPlaying?: boolean\n\ticons: IconSet\n\tonPlayPause?: () => void\n\tclassName?: string\n}\n\nexport function MinimalOverlay({\n\tvisible,\n\tshowCenterButton = false,\n\tisPlaying = false,\n\ticons,\n\tonPlayPause,\n\tclassName\n}: MinimalOverlayProps) {\n\tif (!visible || !showCenterButton) return null\n\n\tconst PlayIcon = icons.play\n\tconst PauseIcon = icons.pause\n\n\tif (!PlayIcon || !PauseIcon) return null\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"absolute inset-0 z-30 flex items-center justify-center\",\n\t\t\t\t\"bg-black/20 transition-opacity duration-200\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tonClick={onPlayPause}>\n\t\t\t<button\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"minimal-center-play\",\n\t\t\t\t\t\"h-20 w-20 rounded-full\",\n\t\t\t\t\t\"flex items-center justify-center\",\n\t\t\t\t\t\"text-white\",\n\t\t\t\t\t\"transition-all duration-200\",\n\t\t\t\t\t\"hover:scale-110\",\n\t\t\t\t\t\"active:scale-95\"\n\t\t\t\t)}\n\t\t\t\tonClick={(e) => {\n\t\t\t\t\te.stopPropagation()\n\t\t\t\t\tonPlayPause?.()\n\t\t\t\t}}\n\t\t\t\taria-label={isPlaying ? \"Pause\" : \"Play\"}>\n\t\t\t\t{isPlaying ? <PauseIcon size={48} /> : <PlayIcon size={48} className=\"ml-1\" />}\n\t\t\t</button>\n\t\t</div>\n\t)\n}\n","\"use client\"\n\nimport React, { useCallback, useEffect, useRef, useState } from \"react\"\nimport { cn } from \"../../../lib/utils\"\nimport type { IconSet } from \"../../icons\"\nimport { defaultMinimalIcons } from \"../../icons\"\nimport { MediaPlayerRoot } from \"../../media-player-root\"\nimport { MediaPlayerVideo } from \"../../media-player-video\"\nimport { MinimalControls } from \"./MinimalControls\"\nimport { MinimalLoading } from \"./MinimalLoading\"\nimport { MinimalOverlay } from \"./MinimalOverlay\"\n\nexport interface MinimalMediaPlayerProps {\n\tsrc: string | string[]\n\tposter?: string\n\tautoPlay?: boolean\n\tmuted?: boolean\n\tloop?: boolean\n\tautoHideControls?: boolean\n\thideDelay?: number\n\ttheme?: \"dark\" | \"light\" | \"transparent\"\n\tcustomIcons?: IconSet\n\tshowCenterPlayButton?: boolean\n\tshowLoadingSpinner?: boolean\n\tclassName?: string\n\tonPlay?: () => void\n\tonPause?: () => void\n\tonEnded?: () => void\n\tonTimeUpdate?: (currentTime: number) => void\n\tonVolumeChange?: (volume: number) => void\n\tonSeek?: (time: number) => void\n\tonError?: (error: Error) => void\n\twatermark?: {\n\t\tsrc: string\n\t\tposition?: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n\t\topacity?: number\n\t\tsize?: \"small\" | \"medium\" | \"large\"\n\t}\n\tqualities?: Array<{\n\t\tsrc: string\n\t\tquality: string\n\t\tdefault?: boolean\n\t}>\n\tshowQualitySelector?: boolean\n\tshowSpeedControl?: boolean\n\tthumbnails?: string\n}\n\nexport function MinimalMediaPlayer({\n\tsrc,\n\tposter,\n\tautoPlay = false,\n\tmuted = false,\n\tloop = false,\n\tautoHideControls = true,\n\thideDelay = 2500,\n\ttheme = \"dark\",\n\tcustomIcons,\n\tshowCenterPlayButton = true,\n\tshowLoadingSpinner = true,\n\tclassName,\n\tonPlay,\n\tonPause,\n\tonEnded,\n\tonTimeUpdate,\n\tonVolumeChange,\n\tonSeek,\n\tonError,\n\twatermark,\n\tqualities,\n\tshowQualitySelector = false,\n\tshowSpeedControl = false,\n\tthumbnails\n}: MinimalMediaPlayerProps) {\n\tconst [controlsVisible, setControlsVisible] = useState(true)\n\tconst [isPlaying, setIsPlaying] = useState(false)\n\tconst [isLoading, setIsLoading] = useState(false)\n\tconst [error, setError] = useState<string | null>(null)\n\tconst hideTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n\tconst containerRef = useRef<HTMLDivElement | null>(null)\n\tconst [isHovered, setIsHovered] = useState(false)\n\tconst [userInteracting, setUserInteracting] = useState(false)\n\n\t// Merge default icons with custom icons\n\tconst icons = { ...defaultMinimalIcons, ...customIcons }\n\n\t// Auto-hide controls logic\n\tconst resetHideTimer = () => {\n\t\tif (!autoHideControls) return\n\n\t\tif (hideTimeoutRef.current) {\n\t\t\tclearTimeout(hideTimeoutRef.current)\n\t\t}\n\t\tsetControlsVisible(true)\n\n\t\tif (!userInteracting && isPlaying) {\n\t\t\thideTimeoutRef.current = setTimeout(() => {\n\t\t\t\tsetControlsVisible(false)\n\t\t\t}, hideDelay)\n\t\t}\n\t}\n\n\t// Handle mouse movement\n\tconst handleMouseMove = () => {\n\t\tresetHideTimer()\n\t}\n\n\t// Handle mouse enter/leave\n\tconst handleMouseEnter = () => {\n\t\tsetIsHovered(true)\n\t\tsetControlsVisible(true)\n\t\tif (hideTimeoutRef.current) {\n\t\t\tclearTimeout(hideTimeoutRef.current)\n\t\t}\n\t}\n\n\tconst handleMouseLeave = () => {\n\t\tsetIsHovered(false)\n\t\tif (isPlaying && autoHideControls && !userInteracting) {\n\t\t\thideTimeoutRef.current = setTimeout(() => {\n\t\t\t\tsetControlsVisible(false)\n\t\t\t}, 500)\n\t\t}\n\t}\n\n\t// Handle user interaction\n\tconst handleUserInteractionStart = () => {\n\t\tsetUserInteracting(true)\n\t\tsetControlsVisible(true)\n\t\tif (hideTimeoutRef.current) {\n\t\t\tclearTimeout(hideTimeoutRef.current)\n\t\t}\n\t}\n\n\tconst handleUserInteractionEnd = () => {\n\t\tsetUserInteracting(false)\n\t\tresetHideTimer()\n\t}\n\n\t// Handle play state changes\n\tconst handlePlayStateChange = (playing: boolean) => {\n\t\tsetIsPlaying(playing)\n\t\tif (playing) {\n\t\t\tonPlay?.()\n\t\t\tresetHideTimer()\n\t\t} else {\n\t\t\tonPause?.()\n\t\t\tsetControlsVisible(true)\n\t\t\tif (hideTimeoutRef.current) {\n\t\t\t\tclearTimeout(hideTimeoutRef.current)\n\t\t\t}\n\t\t}\n\t}\n\n\t// Handle loading state\n\tconst handleLoadStart = () => {\n\t\tsetIsLoading(true)\n\t\tsetError(null)\n\t}\n\n\tconst handleLoadedData = () => {\n\t\tsetIsLoading(false)\n\t}\n\n\t// Handle errors\n\tconst handleError = (e: Error) => {\n\t\tsetIsLoading(false)\n\t\tsetError(e.message || \"An error occurred\")\n\t\tonError?.(e)\n\t}\n\n\t// Cleanup on unmount\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (hideTimeoutRef.current) {\n\t\t\t\tclearTimeout(hideTimeoutRef.current)\n\t\t\t}\n\t\t}\n\t}, [])\n\n\t// Determine video source\n\tconst videoSrc =\n\t\tqualities && qualities.length > 0\n\t\t\t? qualities.find((q) => q.default)?.src ||\n\t\t\t\tqualities[0]?.src ||\n\t\t\t\t(typeof src === \"string\" ? src : src[0])\n\t\t\t: typeof src === \"string\"\n\t\t\t\t? src\n\t\t\t\t: src[0]\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={cn(\n\t\t\t\t\"minimal-player theme-minimal relative overflow-hidden rounded-lg bg-black\",\n\t\t\t\t`theme-minimal-${theme}`,\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tdata-theme={theme}\n\t\t\tonMouseMove={handleMouseMove}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}>\n\t\t\t<MediaPlayerRoot\n\t\t\t\tclassName=\"relative h-full w-full\"\n\t\t\t\tautoHide={false}\n\t\t\t\tenableGestures={true}\n\t\t\t\tenableMobileOptimizations={true}>\n\t\t\t\t{/* Video Element */}\n\t\t\t\t<MediaPlayerVideo\n\t\t\t\t\tsrc={videoSrc}\n\t\t\t\t\tposter={poster}\n\t\t\t\t\tautoPlay={autoPlay}\n\t\t\t\t\tmuted={muted}\n\t\t\t\t\tloop={loop}\n\t\t\t\t\tplaysInline\n\t\t\t\t\tcrossOrigin=\"anonymous\"\n\t\t\t\t\tonPlay={() => handlePlayStateChange(true)}\n\t\t\t\t\tonPause={() => handlePlayStateChange(false)}\n\t\t\t\t\tonEnded={onEnded}\n\t\t\t\t\tonTimeUpdate={(e) => {\n\t\t\t\t\t\tconst video = e.currentTarget as HTMLVideoElement\n\t\t\t\t\t\tonTimeUpdate?.(video.currentTime)\n\t\t\t\t\t}}\n\t\t\t\t\tonVolumeChange={(e) => {\n\t\t\t\t\t\tconst video = e.currentTarget as HTMLVideoElement\n\t\t\t\t\t\tonVolumeChange?.(video.volume)\n\t\t\t\t\t}}\n\t\t\t\t\tonLoadStart={handleLoadStart}\n\t\t\t\t\tonLoadedData={handleLoadedData}\n\t\t\t\t\tonError={(e) => handleError(new Error(\"Failed to load video\"))}\n\t\t\t\t/>\n\n\t\t\t\t{/* Loading State */}\n\t\t\t\t{showLoadingSpinner && isLoading && <MinimalLoading icon={icons.spinner} />}\n\n\t\t\t\t{/* Error State */}\n\t\t\t\t{error && (\n\t\t\t\t\t<div className=\"absolute inset-0 z-50 flex items-center justify-center bg-black/80\">\n\t\t\t\t\t\t<div className=\"text-center\">\n\t\t\t\t\t\t\t<div className=\"mb-4 text-red-500\">\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\tclassName=\"mx-auto h-12 w-12\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\">\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\t\t\td=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<p className=\"mb-2 text-lg text-white\">Playback Error</p>\n\t\t\t\t\t\t\t<p className=\"text-gray-400 text-sm\">{error}</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Watermark */}\n\t\t\t\t{watermark && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\"pointer-events-none absolute z-20\", {\n\t\t\t\t\t\t\t\"top-4 left-4\": watermark.position === \"top-left\",\n\t\t\t\t\t\t\t\"top-4 right-4\": watermark.position === \"top-right\",\n\t\t\t\t\t\t\t\"bottom-16 left-4\": watermark.position === \"bottom-left\",\n\t\t\t\t\t\t\t\"right-4 bottom-16\": watermark.position === \"bottom-right\"\n\t\t\t\t\t\t})}\n\t\t\t\t\t\tstyle={{ opacity: watermark.opacity || 0.7 }}>\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={watermark.src}\n\t\t\t\t\t\t\talt=\"\"\n\t\t\t\t\t\t\tclassName={cn(\"object-contain\", {\n\t\t\t\t\t\t\t\t\"h-8\": watermark.size === \"small\",\n\t\t\t\t\t\t\t\t\"h-12\": watermark.size === \"medium\" || !watermark.size,\n\t\t\t\t\t\t\t\t\"h-16\": watermark.size === \"large\"\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\n\t\t\t\t{/* Center Play Button */}\n\t\t\t\t{showCenterPlayButton && !isPlaying && !isLoading && (\n\t\t\t\t\t<MinimalOverlay\n\t\t\t\t\t\tvisible={true}\n\t\t\t\t\t\tshowCenterButton={true}\n\t\t\t\t\t\tisPlaying={isPlaying}\n\t\t\t\t\t\ticons={icons}\n\t\t\t\t\t\tonPlayPause={() => {\n\t\t\t\t\t\t\tconst video = containerRef.current?.querySelector(\"video\")\n\t\t\t\t\t\t\tif (video) {\n\t\t\t\t\t\t\t\tif (isPlaying) {\n\t\t\t\t\t\t\t\t\tvideo.pause()\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tvideo.play()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* Controls */}\n\t\t\t\t<MinimalControls\n\t\t\t\t\tvisible={controlsVisible || !isPlaying || isHovered}\n\t\t\t\t\ticons={icons}\n\t\t\t\t\tisPlaying={isPlaying}\n\t\t\t\t\tshowQualitySelector={showQualitySelector}\n\t\t\t\t\tshowSpeedControl={showSpeedControl}\n\t\t\t\t\tqualities={qualities}\n\t\t\t\t\tthumbnails={thumbnails}\n\t\t\t\t\tonUserInteractionStart={handleUserInteractionStart}\n\t\t\t\t\tonUserInteractionEnd={handleUserInteractionEnd}\n\t\t\t\t\tonSeek={onSeek}\n\t\t\t\t/>\n\t\t\t</MediaPlayerRoot>\n\t\t</div>\n\t)\n}\n","export default \"data:image/gif;base64,R0lGODlhgAGAAZECAPr7/ERNVv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5OTk5ODkxZS0wMWE2LTRlMTItYWM1Mi00YTIzMzI1MTViYjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkU2QTk5NkYxM0UzMTFFQzg5RkRCRTMwRTcyQUZCRjIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkU2QTk5NkUxM0UzMTFFQzg5RkRCRTMwRTcyQUZCRjIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxOTQyMDFlMi00OGRjLTQ3OTgtOTFlNi05ZjkyNzhjNTJlZTUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMjk3YTUwZC00MTM4LWVmNDYtYTY3Ni1kZTkzNDU1ZjNmOTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRm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\"","\"use client\"\n\nimport React, { useState, useEffect } from \"react\"\nimport { cn } from \"../lib/utils\"\n\n// Try to import the GIF using direct import for better compatibility\nlet monaLoadingGif: string | undefined\n\n// Import the GIF statically for bundling - this will be handled by Vite\n// @ts-ignore - Vite handles this import\nimport monaGifSrc from \"../assets/mona-loading.gif\"\n\ntry {\n\tmonaLoadingGif = monaGifSrc\n} catch {\n\t// GIF import failed, will use fallback\n\tmonaLoadingGif = undefined\n}\n\ninterface AnimateLoadingProps extends React.HTMLAttributes<HTMLDivElement> {\n\tloadingText?: string\n\tgifSrc?: string\n\tshowFallback?: boolean\n}\n\nexport function AnimateLoading({\n\tloadingText = \"Loading...\",\n\tgifSrc,\n\tshowFallback = true,\n\tclassName,\n\t...props\n}: AnimateLoadingProps) {\n\tconst [imageError, setImageError] = useState(false)\n\tconst [imageLoaded, setImageLoaded] = useState(false)\n\n\t// Try multiple paths for the GIF\n\tconst gifPaths = [\n\t\tgifSrc,\n\t\tmonaLoadingGif,\n\t\t\"/mona-loading.gif\",\n\t\t\"./mona-loading.gif\",\n\t\t\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" // 1x1 transparent gif as last resort\n\t].filter(Boolean) as string[]\n\n\tconst [currentGifIndex, setCurrentGifIndex] = useState(0)\n\tconst currentGif = gifPaths[currentGifIndex]\n\n\tconst handleImageError = () => {\n\t\tif (currentGifIndex < gifPaths.length - 1) {\n\t\t\tsetCurrentGifIndex(currentGifIndex + 1)\n\t\t} else {\n\t\t\tsetImageError(true)\n\t\t}\n\t}\n\n\t// Enhanced fallback CSS animation\n\tconst FallbackAnimation = () => (\n\t\t<div className=\"relative h-12 w-12\">\n\t\t\t{/* Outer spinning gradient ring */}\n\t\t\t<div className=\"absolute inset-0 animate-spin rounded-full bg-gradient-to-r from-cyan-400 via-blue-500 to-cyan-400 opacity-75\" />\n\n\t\t\t{/* Inner background */}\n\t\t\t<div className=\"absolute inset-1 rounded-full bg-black/90\" />\n\n\t\t\t{/* Center spinning element */}\n\t\t\t<div className=\"absolute inset-0 flex items-center justify-center\">\n\t\t\t\t<div className=\"relative\">\n\t\t\t\t\t<div className=\"h-8 w-8 rounded-full border-2 border-white/20\" />\n\t\t\t\t\t<div className=\"absolute inset-0 h-8 w-8 animate-spin rounded-full border-2 border-transparent border-t-cyan-400\" />\n\n\t\t\t\t\t{/* Pulsing dot in center */}\n\t\t\t\t\t<div className=\"absolute inset-0 flex items-center justify-center\">\n\t\t\t\t\t\t<div className=\"h-2 w-2 animate-pulse rounded-full bg-cyan-400\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex flex-col items-center justify-center space-y-2 rounded py-2 text-white\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...props}>\n\t\t\t{/* Show fallback while image is loading or if error */}\n\t\t\t{(!imageLoaded || imageError) && showFallback && <FallbackAnimation />}\n\n\t\t\t{/* Try to load the actual GIF (hidden if not loaded) */}\n\t\t\t{!imageError && currentGif && (\n\t\t\t\t<img\n\t\t\t\t\talt=\"loading\"\n\t\t\t\t\theight={50}\n\t\t\t\t\twidth={50}\n\t\t\t\t\tsrc={currentGif}\n\t\t\t\t\tonError={handleImageError}\n\t\t\t\t\tonLoad={() => setImageLoaded(true)}\n\t\t\t\t\tclassName={cn(\"object-contain\", !imageLoaded && \"hidden\")}\n\t\t\t\t\tstyle={{ display: imageLoaded ? \"block\" : \"none\" }}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<span className=\"mt-2 text-sm tracking-wider\">{loadingText}</span>\n\t\t</div>\n\t)\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { cn } from \"../lib/utils\"\nimport { AnimateLoading } from \"./AnimateLoading\"\n\nexport type LoadingVariant = \"animate\" | \"spinner\" | \"skeleton\" | \"dots\"\nexport type LoadingContext = \"initial\" | \"seeking\" | \"buffering\"\nexport type LoadingSize = \"sm\" | \"md\" | \"lg\" | \"xl\"\n\nexport interface LoadingStateProps {\n\tvariant?: LoadingVariant\n\tcontext?: LoadingContext\n\tsize?: LoadingSize\n\tcolor?: string\n\tmessage?: string\n\tshowMessage?: boolean\n\tclassName?: string\n\tstyle?: React.CSSProperties\n}\n\nconst sizeMap: Record<LoadingSize, { container: string; spinner: string; dots: string }> = {\n\tsm: {\n\t\tcontainer: \"h-8 w-8\",\n\t\tspinner: \"h-6 w-6 border-2\",\n\t\tdots: \"h-1.5 w-1.5\"\n\t},\n\tmd: {\n\t\tcontainer: \"h-12 w-12\",\n\t\tspinner: \"h-10 w-10 border-3\",\n\t\tdots: \"h-2 w-2\"\n\t},\n\tlg: {\n\t\tcontainer: \"h-16 w-16\",\n\t\tspinner: \"h-14 w-14 border-4\",\n\t\tdots: \"h-2.5 w-2.5\"\n\t},\n\txl: {\n\t\tcontainer: \"h-20 w-20\",\n\t\tspinner: \"h-18 w-18 border-4\",\n\t\tdots: \"h-3 w-3\"\n\t}\n}\n\nconst contextStyles: Record<LoadingContext, { wrapper: string; background: string }> = {\n\tinitial: {\n\t\twrapper: \"absolute inset-0 z-50 flex items-center justify-center\",\n\t\tbackground: \"bg-black/80\"\n\t},\n\tseeking: {\n\t\twrapper: \"absolute inset-0 z-40 flex items-center justify-center\",\n\t\tbackground: \"bg-black/40\"\n\t},\n\tbuffering: {\n\t\twrapper: \"absolute inset-0 z-45 flex items-center justify-center\",\n\t\tbackground: \"bg-black/60\"\n\t}\n}\n\n// Default AnimateLoading wrapper component\nexport const AnimateLoadingWrapper = function AnimateLoadingWrapper({\n\tcontext = \"initial\",\n\tmessage,\n\tclassName,\n\ttextSize = \"text-sm\"\n}: {\n\tcontext?: LoadingContext\n\tmessage?: string\n\tclassName?: string\n\ttextSize?: string\n}) {\n\tconst contextStyle = contextStyles[context]\n\n\tconst getLoadingText = () => {\n\t\tif (message) return message\n\n\t\tswitch (context) {\n\t\t\tcase \"initial\":\n\t\t\t\treturn \"Loading video...\"\n\t\t\tcase \"seeking\":\n\t\t\t\treturn \"Seeking...\"\n\t\t\tcase \"buffering\":\n\t\t\t\treturn \"Buffering...\"\n\t\t\tdefault:\n\t\t\t\treturn \"Loading...\"\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className={cn(contextStyle.wrapper, contextStyle.background, className)}>\n\t\t\t<AnimateLoading loadingText={getLoadingText()} className={cn(\"text-white\", textSize)} />\n\t\t</div>\n\t)\n}\n\nexport const LoadingState = function LoadingState({\n\tvariant = \"animate\",\n\tcontext = \"initial\",\n\tsize = \"md\",\n\tcolor,\n\tmessage,\n\tshowMessage = true,\n\tclassName,\n\tstyle\n}: LoadingStateProps) {\n\tconst sizes = sizeMap[size]\n\tconst contextStyle = contextStyles[context]\n\n\t// Use AnimateLoading as default\n\tif (variant === \"animate\") {\n\t\treturn (\n\t\t\t<AnimateLoadingWrapper\n\t\t\t\tcontext={context}\n\t\t\t\tmessage={message}\n\t\t\t\tclassName={className}\n\t\t\t\ttextSize={size === \"sm\" ? \"text-xs\" : size === \"lg\" ? \"text-base\" : \"text-sm\"}\n\t\t\t/>\n\t\t)\n\t}\n\n\tconst renderLoadingIndicator = () => {\n\t\tswitch (variant) {\n\t\t\tcase \"spinner\":\n\t\t\t\treturn (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"minimal-loading-spinner animate-spin rounded-full\",\n\t\t\t\t\t\t\t\"border-white/20 border-t-cyan-500\",\n\t\t\t\t\t\t\tsizes.spinner,\n\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tborderTopColor: color || undefined,\n\t\t\t\t\t\t\t...style\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)\n\n\t\t\tcase \"dots\":\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"flex items-center gap-1\">\n\t\t\t\t\t\t{[0, 1, 2].map((i) => (\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"minimal-loading-dot rounded-full bg-cyan-500\",\n\t\t\t\t\t\t\t\t\tsizes.dots,\n\t\t\t\t\t\t\t\t\tclassName\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tbackgroundColor: color || undefined,\n\t\t\t\t\t\t\t\t\tanimationDelay: `${i * 150}ms`,\n\t\t\t\t\t\t\t\t\t...style\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t)\n\n\t\t\tcase \"skeleton\":\n\t\t\t\treturn (\n\t\t\t\t\t<div className={cn(\"space-y-3\", className)}>\n\t\t\t\t\t\t<div className=\"minimal-loading-skeleton h-4 w-32 rounded bg-white/10\" />\n\t\t\t\t\t\t<div className=\"minimal-loading-skeleton h-3 w-24 rounded bg-white/10\" />\n\t\t\t\t\t\t<div className=\"minimal-loading-skeleton h-3 w-28 rounded bg-white/10\" />\n\t\t\t\t\t</div>\n\t\t\t\t)\n\n\t\t\tdefault:\n\t\t\t\treturn null\n\t\t}\n\t}\n\n\tconst getMessage = () => {\n\t\tif (message) return message\n\n\t\tswitch (context) {\n\t\t\tcase \"initial\":\n\t\t\t\treturn \"Loading video...\"\n\t\t\tcase \"seeking\":\n\t\t\t\treturn \"Seeking...\"\n\t\t\tcase \"buffering\":\n\t\t\t\treturn \"Buffering...\"\n\t\t\tdefault:\n\t\t\t\treturn \"Loading...\"\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className={cn(contextStyle.wrapper, contextStyle.background)}>\n\t\t\t<div className=\"flex flex-col items-center gap-4\">\n\t\t\t\t<div className={cn(sizes.container, \"flex items-center justify-center\")}>\n\t\t\t\t\t{renderLoadingIndicator()}\n\t\t\t\t</div>\n\n\t\t\t\t{showMessage && (\n\t\t\t\t\t<div className=\"text-center\">\n\t\t\t\t\t\t<p className=\"font-medium text-sm text-white/90\">{getMessage()}</p>\n\t\t\t\t\t\t{context === \"buffering\" && (\n\t\t\t\t\t\t\t<p className=\"mt-1 text-white/60 text-xs\">Please wait...</p>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Custom loading component wrapper\nexport interface CustomLoadingProps {\n\tchildren: React.ReactNode\n\tcontext?: LoadingContext\n\tclassName?: string\n}\n\nexport const CustomLoading = function CustomLoading({\n\tchildren,\n\tcontext = \"initial\",\n\tclassName\n}: CustomLoadingProps) {\n\tconst contextStyle = contextStyles[context]\n\n\treturn (\n\t\t<div className={cn(contextStyle.wrapper, contextStyle.background, className)}>{children}</div>\n\t)\n}\n\n// Export default presets\nexport const LoadingPresets = {\n\tInitial: (props: Partial<LoadingStateProps>) => (\n\t\t<LoadingState variant=\"animate\" context=\"initial\" size=\"md\" {...props} />\n\t),\n\tSeeking: (props: Partial<LoadingStateProps>) => (\n\t\t<LoadingState variant=\"animate\" context=\"seeking\" size=\"sm\" {...props} />\n\t),\n\tBuffering: (props: Partial<LoadingStateProps>) => (\n\t\t<LoadingState variant=\"animate\" context=\"buffering\" size=\"sm\" {...props} />\n\t)\n}\n","import React, { memo } from \"react\"\nimport { defaultMinimalIcons } from \"../../../icons\"\n\ninterface CenterPlayButtonProps {\n\tisPlaying: boolean\n\tonTogglePlay: () => void\n}\n\nexport const CenterPlayButton = function CenterPlayButton({\n\tisPlaying,\n\tonTogglePlay\n}: CenterPlayButtonProps) {\n\tif (isPlaying) return null\n\n\tconst PlayIcon = defaultMinimalIcons.play\n\n\treturn (\n\t\t<div className=\"minimal-center-play cursor-pointer\" onClick={onTogglePlay}>\n\t\t\t{PlayIcon && <PlayIcon size={60} />}\n\t\t</div>\n\t)\n}\n","import React, { memo } from \"react\"\nimport { MinimalBackward10Icon, MinimalForward10Icon, defaultMinimalIcons } from \"../../../icons\"\n\ninterface PlaybackControlsProps {\n\tisPlaying: boolean\n\tonTogglePlay: () => void\n\tonSeekBackward: () => void\n\tonSeekForward: () => void\n}\n\nexport const PlaybackControls = function PlaybackControls({\n\tisPlaying,\n\tonTogglePlay,\n\tonSeekBackward,\n\tonSeekForward\n}: PlaybackControlsProps) {\n\tconst PlayIcon = defaultMinimalIcons.play\n\tconst PauseIcon = defaultMinimalIcons.pause\n\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn size-15\"\n\t\t\t\tonClick={onTogglePlay}\n\t\t\t\taria-label={isPlaying ? \"Pause\" : \"Play\"}>\n\t\t\t\t{isPlaying ? PauseIcon && <PauseIcon size={32} /> : PlayIcon && <PlayIcon size={32} />}\n\t\t\t</button>\n\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn h-9 w-9\"\n\t\t\t\tonClick={onSeekBackward}\n\t\t\t\taria-label=\"Backward 10 seconds\"\n\t\t\t\ttitle=\"Backward 10s (J)\">\n\t\t\t\t<MinimalBackward10Icon size={18} />\n\t\t\t</button>\n\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn h-9 w-9\"\n\t\t\t\tonClick={onSeekForward}\n\t\t\t\taria-label=\"Forward 10 seconds\"\n\t\t\t\ttitle=\"Forward 10s (L)\">\n\t\t\t\t<MinimalForward10Icon size={18} />\n\t\t\t</button>\n\t\t</div>\n\t)\n}\n","import React, { memo, useCallback } from \"react\"\nimport { cn } from \"../../../../lib/utils\"\nimport { defaultMinimalIcons } from \"../../../icons\"\n\ninterface SettingsDropdownProps {\n\tshowSettings: boolean\n\tplaybackRate: number\n\tonToggleSettings: () => void\n\tonChangePlaybackRate: (rate: number) => void\n}\n\nexport const SettingsDropdown = function SettingsDropdown({\n\tshowSettings,\n\tplaybackRate,\n\tonToggleSettings,\n\tonChangePlaybackRate\n}: SettingsDropdownProps) {\n\tconst playbackRates = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]\n\n\tconst handleSettingsClick = useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\te.stopPropagation()\n\t\t\tonToggleSettings()\n\t\t},\n\t\t[onToggleSettings]\n\t)\n\n\tconst handleDropdownClick = useCallback((e: React.MouseEvent) => {\n\t\te.stopPropagation()\n\t}, [])\n\n\treturn (\n\t\t<div className=\"relative\" style={{ zIndex: showSettings ? 60 : \"auto\" }}>\n\t\t\t<button\n\t\t\t\tclassName={cn(\"minimal-btn h-9 w-9\", showSettings && \"text-cyan-500\")}\n\t\t\t\tonClick={handleSettingsClick}\n\t\t\t\taria-label=\"Settings\">\n\t\t\t\t{defaultMinimalIcons.settings && <defaultMinimalIcons.settings size={18} />}\n\t\t\t</button>\n\n\t\t\t{showSettings && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute right-0 mb-2 min-w-[200px] rounded-lg border border-gray-700 bg-gray-900 py-2 shadow-xl\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbottom: \"100%\",\n\t\t\t\t\t\tzIndex: 1000\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={handleDropdownClick}>\n\t\t\t\t\t<div className=\"px-3 py-1 text-gray-400 text-xs uppercase tracking-wider\">Speed</div>\n\t\t\t\t\t<div className=\"px-1\">\n\t\t\t\t\t\t{playbackRates.map((rate) => (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tkey={rate}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"w-full rounded px-3 py-1.5 text-left text-sm transition-colors hover:bg-gray-800\",\n\t\t\t\t\t\t\t\t\t\"text-white\",\n\t\t\t\t\t\t\t\t\tplaybackRate === rate && \"bg-cyan-700/20 text-cyan-400\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tonClick={() => onChangePlaybackRate(rate)}>\n\t\t\t\t\t\t\t\t{rate === 1 ? \"Normal\" : `${rate}x`}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n","import React, { memo, useState, useRef, useEffect } from \"react\"\nimport { cn } from \"../../../../lib/utils\"\nimport { MinimalScreenshotIcon, MinimalSubtitleIcon, defaultMinimalIcons } from \"../../../icons\"\nimport { SettingsDropdown } from \"./SettingsDropdown\"\n\ninterface RightControlsProps {\n\tsubtitleSrc?: string\n\tsubtitlesEnabled: boolean\n\tsubtitleTracks?: Array<{\n\t\tid: string\n\t\tlabel: string\n\t\tlanguage?: string\n\t\tsrc?: string\n\t}>\n\tcurrentTrackId?: string | null\n\thasSubtitles?: boolean\n\tsubtitleLoadError?: Error | null\n\tisFullscreen: boolean\n\tshowSettings: boolean\n\tplaybackRate: number\n\tonToggleSubtitles: () => void\n\tonSelectSubtitleTrack?: (trackId: string | null) => void\n\tonTakeScreenshot: (ctrlKey: boolean) => void\n\tonToggleFullscreen: () => void\n\tonToggleSettings: () => void\n\tonChangePlaybackRate: (rate: number) => void\n}\n\nexport const RightControls = function RightControls({\n\tsubtitleSrc,\n\tsubtitlesEnabled,\n\tsubtitleTracks,\n\tcurrentTrackId,\n\thasSubtitles,\n\tsubtitleLoadError,\n\tisFullscreen,\n\tshowSettings,\n\tplaybackRate,\n\tonToggleSubtitles,\n\tonSelectSubtitleTrack,\n\tonTakeScreenshot,\n\tonToggleFullscreen,\n\tonToggleSettings,\n\tonChangePlaybackRate\n}: RightControlsProps) {\n\tconst [showSubtitleMenu, setShowSubtitleMenu] = useState(false)\n\tconst subtitleMenuRef = useRef<HTMLDivElement>(null)\n\tconst FullscreenIcon = defaultMinimalIcons.fullscreen\n\tconst ExitFullscreenIcon = defaultMinimalIcons.exitFullscreen\n\n\t// Close subtitle menu when clicking outside\n\tuseEffect(() => {\n\t\tconst handleClickOutside = (event: MouseEvent) => {\n\t\t\tif (subtitleMenuRef.current && !subtitleMenuRef.current.contains(event.target as Node)) {\n\t\t\t\tsetShowSubtitleMenu(false)\n\t\t\t}\n\t\t}\n\n\t\tif (showSubtitleMenu) {\n\t\t\tdocument.addEventListener(\"mousedown\", handleClickOutside)\n\t\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside)\n\t\t}\n\t}, [showSubtitleMenu])\n\n\tconst handleSubtitleClick = () => {\n\t\tif (subtitleTracks && subtitleTracks.length > 0) {\n\t\t\tsetShowSubtitleMenu(!showSubtitleMenu)\n\t\t} else {\n\t\t\tonToggleSubtitles()\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t{/* Subtitle Button with Dropdown */}\n\t\t\t{hasSubtitles && (\n\t\t\t\t<div className=\"relative\" ref={subtitleMenuRef}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"minimal-btn h-9 w-9\",\n\t\t\t\t\t\t\tsubtitlesEnabled && \"text-cyan-500\",\n\t\t\t\t\t\t\tsubtitleLoadError && \"text-red-500\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tonClick={handleSubtitleClick}\n\t\t\t\t\t\taria-label=\"Subtitles\"\n\t\t\t\t\t\ttitle={subtitleLoadError ? \"Subtitle Error\" : \"Subtitles (C)\"}>\n\t\t\t\t\t\t<MinimalSubtitleIcon size={18} />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t{/* Subtitle Track Selection Menu */}\n\t\t\t\t\t{showSubtitleMenu && subtitleTracks && subtitleTracks.length > 0 && (\n\t\t\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 w-48 rounded-md bg-gray-900/95 py-2 shadow-lg backdrop-blur-sm\">\n\t\t\t\t\t\t\t<div className=\"px-3 py-1 font-semibold text-gray-400 text-xs\">Subtitles</div>\n\n\t\t\t\t\t\t\t{/* Off Option */}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"flex w-full items-center px-3 py-1.5 text-gray-300 text-sm hover:bg-gray-800\",\n\t\t\t\t\t\t\t\t\t!subtitlesEnabled && \"bg-gray-800 text-cyan-500\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tonSelectSubtitleTrack?.(null)\n\t\t\t\t\t\t\t\t\tsetShowSubtitleMenu(false)\n\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\tOff\n\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t{/* Track Options */}\n\t\t\t\t\t\t\t{subtitleTracks.map((track) => (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tkey={track.id}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex w-full items-center px-3 py-1.5 text-gray-300 text-sm hover:bg-gray-800\",\n\t\t\t\t\t\t\t\t\t\tcurrentTrackId === track.id && \"bg-gray-800 text-cyan-500\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tonSelectSubtitleTrack?.(track.id)\n\t\t\t\t\t\t\t\t\t\tsetShowSubtitleMenu(false)\n\t\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t\t<span>{track.label}</span>\n\t\t\t\t\t\t\t\t\t{track.language && (\n\t\t\t\t\t\t\t\t\t\t<span className=\"ml-2 text-gray-500 text-xs\">({track.language})</span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t\t{/* Error Message */}\n\t\t\t\t\t\t\t{subtitleLoadError && (\n\t\t\t\t\t\t\t\t<div className=\"mt-2 border-gray-800 border-t px-3 py-2\">\n\t\t\t\t\t\t\t\t\t<p className=\"text-red-400 text-xs\">Failed to load subtitles</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn h-9 w-9\"\n\t\t\t\tonClick={(e) => onTakeScreenshot(e.ctrlKey || e.metaKey)}\n\t\t\t\taria-label=\"Take Screenshot\"\n\t\t\t\ttitle=\"Screenshot (S) - Ctrl+Click to copy\">\n\t\t\t\t<MinimalScreenshotIcon size={18} />\n\t\t\t</button>\n\n\t\t\t<SettingsDropdown\n\t\t\t\tshowSettings={showSettings}\n\t\t\t\tplaybackRate={playbackRate}\n\t\t\t\tonToggleSettings={onToggleSettings}\n\t\t\t\tonChangePlaybackRate={onChangePlaybackRate}\n\t\t\t/>\n\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn h-9 w-9\"\n\t\t\t\tonClick={onToggleFullscreen}\n\t\t\t\taria-label={isFullscreen ? \"Exit Fullscreen\" : \"Enter Fullscreen\"}\n\t\t\t\ttitle=\"Fullscreen (F)\">\n\t\t\t\t{isFullscreen\n\t\t\t\t\t? ExitFullscreenIcon && <ExitFullscreenIcon size={18} />\n\t\t\t\t\t: FullscreenIcon && <FullscreenIcon size={18} />}\n\t\t\t</button>\n\t\t</div>\n\t)\n}\n","import React, { memo, useState, useRef } from \"react\"\nimport type { BufferedRange } from \"../../../../hooks/useVideoPlayer\"\nimport { cn } from \"../../../../lib/utils\"\n\ninterface SeekBarProps {\n\tcurrentTime: number\n\tduration: number\n\tbufferedRanges?: BufferedRange[]\n\tisSeeking?: boolean\n\tonSeek: (time: number) => void\n}\n\nexport const SeekBar = function SeekBar({\n\tcurrentTime,\n\tduration,\n\tbufferedRanges = [],\n\tisSeeking = false,\n\tonSeek\n}: SeekBarProps) {\n\tconst [isHovering, setIsHovering] = useState(false)\n\tconst [hoverPosition, setHoverPosition] = useState(0)\n\tconst [showRipple, setShowRipple] = useState(false)\n\tconst [ripplePosition, setRipplePosition] = useState({ x: 0, y: 0 })\n\tconst seekBarRef = useRef<HTMLDivElement>(null)\n\n\tconst progress = duration > 0 ? (currentTime / duration) * 100 : 0\n\n\tconst handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (duration === 0) return\n\n\t\tconst rect = e.currentTarget.getBoundingClientRect()\n\t\tconst position = (e.clientX - rect.left) / rect.width\n\t\tconst newTime = Math.max(0, Math.min(duration, position * duration))\n\n\t\t// Add ripple effect\n\t\tsetRipplePosition({ x: e.clientX - rect.left, y: e.clientY - rect.top })\n\t\tsetShowRipple(true)\n\t\tsetTimeout(() => setShowRipple(false), 600)\n\n\t\tonSeek(newTime)\n\t}\n\n\tconst handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (!seekBarRef.current) return\n\t\tconst rect = seekBarRef.current.getBoundingClientRect()\n\t\tconst position = ((e.clientX - rect.left) / rect.width) * 100\n\t\tsetHoverPosition(Math.max(0, Math.min(100, position)))\n\t}\n\n\tconst handleMouseEnter = () => setIsHovering(true)\n\tconst handleMouseLeave = () => setIsHovering(false)\n\n\treturn (\n\t\t<div className=\"relative mb-3\">\n\t\t\t<div\n\t\t\t\tref={seekBarRef}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"minimal-seekbar group relative cursor-pointer\",\n\t\t\t\t\tisSeeking && \"minimal-seekbar-seeking\"\n\t\t\t\t)}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\tonMouseLeave={handleMouseLeave}>\n\t\t\t\t{/* Buffered ranges */}\n\t\t\t\t{bufferedRanges.map((range, index) => {\n\t\t\t\t\tconst startPercent = duration > 0 ? (range.start / duration) * 100 : 0\n\t\t\t\t\tconst widthPercent = duration > 0 ? ((range.end - range.start) / duration) * 100 : 0\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tclassName=\"minimal-seekbar-buffered\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tleft: `${startPercent}%`,\n\t\t\t\t\t\t\t\twidth: `${widthPercent}%`\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\n\t\t\t\t{/* Progress bar */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"minimal-seekbar-progress\",\n\t\t\t\t\t\tisSeeking && \"minimal-seekbar-progress-seeking\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ width: `${progress}%` }}\n\t\t\t\t/>\n\n\t\t\t\t{/* Hover indicator */}\n\t\t\t\t{isHovering && !isSeeking && (\n\t\t\t\t\t<div className=\"minimal-seekbar-hover-indicator\" style={{ left: `${hoverPosition}%` }} />\n\t\t\t\t)}\n\n\t\t\t\t{/* Thumb */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"minimal-seekbar-thumb\",\n\t\t\t\t\t\t(isHovering || isSeeking) && \"opacity-100\",\n\t\t\t\t\t\tisSeeking && \"minimal-seekbar-thumb-seeking\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ left: `${progress}%` }}\n\t\t\t\t/>\n\n\t\t\t\t{/* Ripple effect */}\n\t\t\t\t{showRipple && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"minimal-seekbar-ripple\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: ripplePosition.x,\n\t\t\t\t\t\t\ttop: ripplePosition.y\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\n\t\t\t{/* Seeking indicator */}\n\t\t\t{isSeeking && (\n\t\t\t\t<div className=\"-top-6 -translate-x-1/2 absolute left-1/2 transform\">\n\t\t\t\t\t<div className=\"rounded bg-black/80 px-2 py-1 text-white text-xs backdrop-blur-sm\">\n\t\t\t\t\t\tSeeking...\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n","import React, { memo } from \"react\"\nimport { formatTime } from \"../../../../lib/format-time\"\n\ninterface TimeDisplayProps {\n\tcurrentTime: number\n\tduration: number\n}\n\nexport const TimeDisplay = function TimeDisplay({ currentTime, duration }: TimeDisplayProps) {\n\treturn (\n\t\t<div className=\"font-mono text-sm text-white\">\n\t\t\t{formatTime(currentTime)} / {formatTime(duration)}\n\t\t</div>\n\t)\n}\n","import React, { memo, useCallback, useRef, useEffect } from \"react\"\nimport { cn } from \"../../../../lib/utils\"\nimport { defaultMinimalIcons } from \"../../../icons\"\n\ninterface VolumeControlProps {\n\tvolume: number\n\tisMuted: boolean\n\tshowVolumeSlider: boolean\n\tonToggleMute: () => void\n\tonVolumeChange: (volume: number) => void\n\tonShowVolumeSlider: (show: boolean) => void\n\torientation?: \"horizontal\" | \"vertical\"\n\tclassName?: string\n}\n\nexport const VolumeControl = function VolumeControl({\n\tvolume,\n\tisMuted,\n\tshowVolumeSlider,\n\tonToggleMute,\n\tonVolumeChange,\n\tonShowVolumeSlider,\n\torientation = \"horizontal\",\n\tclassName\n}: VolumeControlProps) {\n\tconst VolumeIcon = defaultMinimalIcons.volume\n\tconst VolumeMutedIcon = defaultMinimalIcons.volumeMuted\n\tconst sliderRefHorizontal = useRef<HTMLDivElement>(null)\n\tconst sliderRefVertical = useRef<HTMLDivElement>(null)\n\tconst isDragging = useRef(false)\n\tconst [isDraggingState, setIsDraggingState] = React.useState(false)\n\tconst [isHovering, setIsHovering] = React.useState(false)\n\tconst hideTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n\n\tconst handleVolumeChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst newVolume = parseFloat(e.target.value)\n\t\t\tonVolumeChange(newVolume)\n\t\t},\n\t\t[onVolumeChange]\n\t)\n\n\tconst handleSliderClick = useCallback(\n\t\t(e: React.MouseEvent<HTMLDivElement>, isVertical: boolean) => {\n\t\t\tconst sliderRef = isVertical ? sliderRefVertical : sliderRefHorizontal\n\t\t\tif (!sliderRef.current) return\n\t\t\tconst rect = sliderRef.current.getBoundingClientRect()\n\n\t\t\tlet percentage: number\n\t\t\tif (!isVertical) {\n\t\t\t\tpercentage = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n\t\t\t} else {\n\t\t\t\tpercentage = Math.max(0, Math.min(1, 1 - (e.clientY - rect.top) / rect.height))\n\t\t\t}\n\n\t\t\tonVolumeChange(percentage)\n\t\t},\n\t\t[onVolumeChange]\n\t)\n\n\tconst handleMouseDown = useCallback(\n\t\t(e: React.MouseEvent<HTMLDivElement>, isVertical: boolean) => {\n\t\t\te.preventDefault()\n\t\t\te.stopPropagation()\n\t\t\tisDragging.current = true\n\t\t\tsetIsDraggingState(true)\n\t\t\thandleSliderClick(e, isVertical)\n\t\t},\n\t\t[handleSliderClick]\n\t)\n\n\tuseEffect(() => {\n\t\tconst handleMouseMove = (e: MouseEvent) => {\n\t\t\tif (!isDragging.current) return\n\n\t\t\tconst sliderRef = orientation === \"vertical\" ? sliderRefVertical : sliderRefHorizontal\n\t\t\tif (!sliderRef.current) return\n\n\t\t\tconst rect = sliderRef.current.getBoundingClientRect()\n\t\t\tlet percentage: number\n\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\tpercentage = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n\t\t\t} else {\n\t\t\t\tpercentage = Math.max(0, Math.min(1, 1 - (e.clientY - rect.top) / rect.height))\n\t\t\t}\n\n\t\t\tonVolumeChange(percentage)\n\t\t}\n\n\t\tconst handleMouseUp = () => {\n\t\t\tisDragging.current = false\n\t\t\tsetIsDraggingState(false)\n\t\t}\n\n\t\tif (isDraggingState) {\n\t\t\tdocument.addEventListener(\"mousemove\", handleMouseMove)\n\t\t\tdocument.addEventListener(\"mouseup\", handleMouseUp)\n\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener(\"mousemove\", handleMouseMove)\n\t\t\t\tdocument.removeEventListener(\"mouseup\", handleMouseUp)\n\t\t\t}\n\t\t}\n\t}, [isDraggingState, orientation, onVolumeChange])\n\n\tconst handleMouseEnter = useCallback(() => {\n\t\tif (hideTimeoutRef.current) {\n\t\t\tclearTimeout(hideTimeoutRef.current)\n\t\t}\n\t\tsetIsHovering(true)\n\t\tonShowVolumeSlider(true)\n\t}, [onShowVolumeSlider])\n\n\tconst handleMouseLeave = useCallback(() => {\n\t\t// Add a small delay before hiding to prevent flickering\n\t\thideTimeoutRef.current = setTimeout(() => {\n\t\t\tif (!isDragging.current) {\n\t\t\t\tsetIsHovering(false)\n\t\t\t\tonShowVolumeSlider(false)\n\t\t\t}\n\t\t}, 200)\n\t}, [onShowVolumeSlider])\n\n\t// Clean up timeout on unmount\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (hideTimeoutRef.current) {\n\t\t\t\tclearTimeout(hideTimeoutRef.current)\n\t\t\t}\n\t\t}\n\t}, [])\n\n\tconst volumePercentage = (isMuted ? 0 : volume) * 100\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"volume-control-wrapper\",\n\t\t\t\torientation === \"vertical\" ? \"relative\" : \"flex items-center gap-2\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}>\n\t\t\t{/* Volume slider for vertical orientation (appears above) */}\n\t\t\t{orientation === \"vertical\" && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"volume-slider-vertical\",\n\t\t\t\t\t\t\"-translate-x-1/2 absolute bottom-full left-1/2 mb-2\",\n\t\t\t\t\t\t\"transition-all duration-300 ease-out\",\n\t\t\t\t\t\tshowVolumeSlider || isHovering || isDraggingState\n\t\t\t\t\t\t\t? \"pointer-events-auto translate-y-0 opacity-100\"\n\t\t\t\t\t\t\t: \"pointer-events-none translate-y-2 opacity-0\"\n\t\t\t\t\t)}>\n\t\t\t\t\t<div className=\"rounded-lg bg-black/80 p-3 backdrop-blur-sm\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tref={sliderRefVertical}\n\t\t\t\t\t\t\tclassName=\"volume-slider-track-vertical group\"\n\t\t\t\t\t\t\tonMouseDown={(e) => handleMouseDown(e, true)}\n\t\t\t\t\t\t\tonClick={(e) => handleSliderClick(e, true)}>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName=\"volume-slider-fill-vertical pointer-events-none\"\n\t\t\t\t\t\t\t\tstyle={{ height: `${volumePercentage}%` }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"volume-slider-thumb-vertical pointer-events-none\",\n\t\t\t\t\t\t\t\t\tisDraggingState && \"active\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tstyle={{ bottom: `${volumePercentage}%` }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"mt-2 text-center text-white/70 text-xs\">\n\t\t\t\t\t\t\t{Math.round(volumePercentage)}%\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Volume button */}\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn h-10 w-10\"\n\t\t\t\tonClick={onToggleMute}\n\t\t\t\taria-label={isMuted ? \"Unmute\" : \"Mute\"}>\n\t\t\t\t{isMuted || volume === 0\n\t\t\t\t\t? VolumeMutedIcon && <VolumeMutedIcon size={20} />\n\t\t\t\t\t: VolumeIcon && <VolumeIcon size={20} />}\n\t\t\t</button>\n\n\t\t\t{/* Volume slider for horizontal orientation (appears beside) */}\n\t\t\t{orientation === \"horizontal\" && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"volume-slider-horizontal-wrapper\",\n\t\t\t\t\t\t\"overflow-hidden transition-all duration-300 ease-out\",\n\t\t\t\t\t\tshowVolumeSlider || isHovering || isDraggingState ? \"w-24 opacity-100\" : \"w-0 opacity-0\"\n\t\t\t\t\t)}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={sliderRefHorizontal}\n\t\t\t\t\t\tclassName=\"volume-slider-track-horizontal group\"\n\t\t\t\t\t\tonMouseDown={(e) => handleMouseDown(e, false)}\n\t\t\t\t\t\tonClick={(e) => handleSliderClick(e, false)}>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName=\"volume-slider-fill-horizontal pointer-events-none\"\n\t\t\t\t\t\t\tstyle={{ width: `${volumePercentage}%` }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"volume-slider-thumb-horizontal pointer-events-none\",\n\t\t\t\t\t\t\t\tisDraggingState && \"active\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tstyle={{ left: `${volumePercentage}%` }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n","import React, { memo } from \"react\"\nimport type { BufferedRange } from \"../../../../hooks/useVideoPlayer\"\nimport { cn } from \"../../../../lib/utils\"\nimport { PlaybackControls } from \"./PlaybackControls\"\nimport { RightControls } from \"./RightControls\"\nimport { SeekBar } from \"./SeekBar\"\nimport { TimeDisplay } from \"./TimeDisplay\"\nimport { VolumeControl } from \"./VolumeControl\"\n\ninterface ControlBarProps {\n\tcontrolsVisible: boolean\n\tcurrentTime: number\n\tduration: number\n\tisPlaying: boolean\n\tvolume: number\n\tisMuted: boolean\n\tshowVolumeSlider: boolean\n\tisFullscreen: boolean\n\tshowSettings: boolean\n\tplaybackRate: number\n\tsubtitleSrc?: string\n\tsubtitlesEnabled: boolean\n\tsubtitleTracks?: Array<{\n\t\tid: string\n\t\tlabel: string\n\t\tlanguage?: string\n\t\tsrc?: string\n\t}>\n\tcurrentTrackId?: string | null\n\thasSubtitles?: boolean\n\tsubtitleLoadError?: Error | null\n\tvolumeOrientation?: \"horizontal\" | \"vertical\"\n\tbufferedRanges?: BufferedRange[]\n\tisSeeking?: boolean\n\tonSeek: (time: number) => void\n\tonTogglePlay: () => void\n\tonSeekBackward: () => void\n\tonSeekForward: () => void\n\tonToggleMute: () => void\n\tonVolumeChange: (volume: number) => void\n\tonShowVolumeSlider: (show: boolean) => void\n\tonToggleSubtitles: () => void\n\tonSelectSubtitleTrack?: (trackId: string | null) => void\n\tonTakeScreenshot: (ctrlKey: boolean) => void\n\tonToggleFullscreen: () => void\n\tonToggleSettings: () => void\n\tonChangePlaybackRate: (rate: number) => void\n}\n\nexport const ControlBar = function ControlBar({\n\tcontrolsVisible,\n\tcurrentTime,\n\tduration,\n\tisPlaying,\n\tvolume,\n\tisMuted,\n\tshowVolumeSlider,\n\tisFullscreen,\n\tshowSettings,\n\tplaybackRate,\n\tsubtitleSrc,\n\tsubtitlesEnabled,\n\tsubtitleTracks,\n\tcurrentTrackId,\n\thasSubtitles,\n\tsubtitleLoadError,\n\tvolumeOrientation = \"horizontal\",\n\tbufferedRanges,\n\tisSeeking,\n\tonSeek,\n\tonTogglePlay,\n\tonSeekBackward,\n\tonSeekForward,\n\tonToggleMute,\n\tonVolumeChange,\n\tonShowVolumeSlider,\n\tonToggleSubtitles,\n\tonSelectSubtitleTrack,\n\tonTakeScreenshot,\n\tonToggleFullscreen,\n\tonToggleSettings,\n\tonChangePlaybackRate\n}: ControlBarProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"minimal-control-bar\",\n\t\t\t\t\"absolute right-0 bottom-0 left-0 z-40\",\n\t\t\t\t\"px-6 py-3 transition-all duration-200\",\n\t\t\t\tcontrolsVisible ? \"minimal-controls-visible\" : \"minimal-controls-hidden\"\n\t\t\t)}>\n\t\t\t<SeekBar\n\t\t\t\tcurrentTime={currentTime}\n\t\t\t\tduration={duration}\n\t\t\t\tbufferedRanges={bufferedRanges}\n\t\t\t\tisSeeking={isSeeking}\n\t\t\t\tonSeek={onSeek}\n\t\t\t/>\n\n\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<PlaybackControls\n\t\t\t\t\t\tisPlaying={isPlaying}\n\t\t\t\t\t\tonTogglePlay={onTogglePlay}\n\t\t\t\t\t\tonSeekBackward={onSeekBackward}\n\t\t\t\t\t\tonSeekForward={onSeekForward}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<VolumeControl\n\t\t\t\t\t\tvolume={volume}\n\t\t\t\t\t\tisMuted={isMuted}\n\t\t\t\t\t\tshowVolumeSlider={showVolumeSlider}\n\t\t\t\t\t\tonToggleMute={onToggleMute}\n\t\t\t\t\t\tonVolumeChange={onVolumeChange}\n\t\t\t\t\t\tonShowVolumeSlider={onShowVolumeSlider}\n\t\t\t\t\t\torientation={volumeOrientation}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<TimeDisplay currentTime={currentTime} duration={duration} />\n\t\t\t\t</div>\n\n\t\t\t\t<RightControls\n\t\t\t\t\tsubtitleSrc={subtitleSrc}\n\t\t\t\t\tsubtitlesEnabled={subtitlesEnabled}\n\t\t\t\t\tsubtitleTracks={subtitleTracks}\n\t\t\t\t\tcurrentTrackId={currentTrackId}\n\t\t\t\t\thasSubtitles={hasSubtitles}\n\t\t\t\t\tsubtitleLoadError={subtitleLoadError}\n\t\t\t\t\tisFullscreen={isFullscreen}\n\t\t\t\t\tshowSettings={showSettings}\n\t\t\t\t\tplaybackRate={playbackRate}\n\t\t\t\t\tonToggleSubtitles={onToggleSubtitles}\n\t\t\t\t\tonSelectSubtitleTrack={onSelectSubtitleTrack}\n\t\t\t\t\tonTakeScreenshot={onTakeScreenshot}\n\t\t\t\t\tonToggleFullscreen={onToggleFullscreen}\n\t\t\t\t\tonToggleSettings={onToggleSettings}\n\t\t\t\t\tonChangePlaybackRate={onChangePlaybackRate}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import React, { memo } from \"react\"\n\ninterface SubtitleDisplayProps {\n\tsubtitlesEnabled: boolean\n\tsubtitleText: string\n}\n\nexport const SubtitleDisplay = function SubtitleDisplay({\n\tsubtitlesEnabled,\n\tsubtitleText\n}: SubtitleDisplayProps) {\n\tif (!subtitlesEnabled || !subtitleText) return null\n\n\treturn (\n\t\t<div className=\"pointer-events-none absolute right-0 bottom-20 left-0 px-4 text-center\">\n\t\t\t<div className=\"inline-block rounded bg-black/75 px-4 py-2 font-medium text-lg text-white\">\n\t\t\t\t{subtitleText}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","import React, { memo } from \"react\"\n\ninterface VideoElementProps {\n\tvideoRef: React.RefObject<HTMLVideoElement | null>\n\tsrc: string\n\tposter?: string\n\tsubtitleSrc?: string\n\tsubtitlesEnabled: boolean\n\tcrossOrigin?: \"anonymous\" | \"use-credentials\"\n\tonTogglePlay: () => void\n}\n\nexport const VideoElement = function VideoElement({\n\tvideoRef,\n\tsrc,\n\tposter,\n\tsubtitleSrc,\n\tsubtitlesEnabled,\n\tcrossOrigin,\n\tonTogglePlay\n}: VideoElementProps) {\n\treturn (\n\t\t<video\n\t\t\tref={videoRef}\n\t\t\tsrc={src}\n\t\t\tposter={poster}\n\t\t\tcrossOrigin={crossOrigin}\n\t\t\tclassName=\"h-full w-full object-contain\"\n\t\t\tonClick={onTogglePlay}>\n\t\t\t{subtitleSrc && <track kind=\"subtitles\" src={subtitleSrc} default={subtitlesEnabled} />}\n\t\t</video>\n\t)\n}\n","\"use client\"\n\nimport { useCallback, useEffect, useRef, useState } from \"react\"\nimport \"../../../styles/minimal-player.css\"\nimport { useEnhancedSubtitles } from \"../../../hooks/useEnhancedSubtitles\"\nimport { useKeyboardShortcuts } from \"../../../hooks/useKeyboardShortcuts\"\nimport { useMediaControls } from \"../../../hooks/useMediaControls\"\nimport { useScreenshot } from \"../../../hooks/useScreenshot\"\nimport { useVideoPlayer } from \"../../../hooks/useVideoPlayer\"\nimport { cn } from \"../../../lib/utils\"\nimport { CustomLoading, LoadingPresets, LoadingState } from \"../../LoadingState\"\nimport type { LoadingStateProps } from \"../../LoadingState\"\nimport { CenterPlayButton } from \"./components/CenterPlayButton\"\nimport { ControlBar } from \"./components/ControlBar\"\nimport { SubtitleDisplay } from \"./components/SubtitleDisplay\"\nimport { VideoElement } from \"./components/VideoElement\"\n\nexport interface SimpleMinimalPlayerProps {\n\tsrc: string\n\tposter?: string\n\tclassName?: string\n\tsubtitleSrc?: string\n\tsubtitleTracks?: Array<{\n\t\tid: string\n\t\tlabel: string\n\t\tlanguage?: string\n\t\tsrc?: string\n\t}>\n\tcrossOrigin?: \"anonymous\" | \"use-credentials\"\n\tvolumeOrientation?: \"horizontal\" | \"vertical\"\n\tloadingComponent?: React.ComponentType<{ context: \"initial\" | \"seeking\" | \"buffering\" }>\n\tshowLoadingState?: boolean\n\tloadingProps?: Partial<LoadingStateProps>\n}\n\nexport function SimpleMinimalPlayer(props: SimpleMinimalPlayerProps) {\n\tconst {\n\t\tsrc,\n\t\tposter,\n\t\tclassName,\n\t\tsubtitleSrc,\n\t\tsubtitleTracks,\n\t\tcrossOrigin,\n\t\tvolumeOrientation = \"horizontal\",\n\t\tloadingComponent: LoadingComponent = undefined,\n\t\tshowLoadingState = true,\n\t\tloadingProps = {}\n\t} = props\n\tconst containerRef = useRef<HTMLDivElement>(null)\n\tconst [showSettings, setShowSettings] = useState(false)\n\tconst [playbackRate, setPlaybackRate] = useState(1)\n\n\tconst { videoRef, state: videoState, controls: videoControls } = useVideoPlayer(containerRef)\n\tconst {\n\t\tsubtitlesEnabled,\n\t\tcurrentSubtitle,\n\t\ttoggleSubtitles,\n\t\tgetCurrentSubtitle,\n\t\tsetCurrentSubtitle,\n\t\tselectSubtitleTrack,\n\t\tavailableTracks,\n\t\tcurrentTrackId,\n\t\tloadError,\n\t\thasSubtitles\n\t} = useEnhancedSubtitles({\n\t\tsubtitleSrc,\n\t\tsubtitleTracks,\n\t\tonLoadError: (error) => console.error(\"Subtitle load error:\", error)\n\t})\n\tconst { takeScreenshot } = useScreenshot(videoRef)\n\tconst {\n\t\tcontrolsVisible,\n\t\tshowVolumeSlider,\n\t\tsetShowVolumeSlider,\n\t\thandleMouseMove,\n\t\thandleMouseEnter,\n\t\thandleMouseLeave\n\t} = useMediaControls(videoState.isPlaying, showSettings)\n\n\t// Update subtitle display based on current time\n\tuseEffect(() => {\n\t\tif (subtitlesEnabled) {\n\t\t\tconst subtitle = getCurrentSubtitle(videoState.currentTime)\n\t\t\tsetCurrentSubtitle(subtitle)\n\t\t}\n\t}, [videoState.currentTime, subtitlesEnabled, getCurrentSubtitle, setCurrentSubtitle])\n\n\t// Change playback rate\n\tconst changePlaybackRate = (rate: number) => {\n\t\tif (!videoRef.current) return\n\t\tvideoRef.current.playbackRate = rate\n\t\tsetPlaybackRate(rate)\n\t\tsetShowSettings(false)\n\t}\n\n\t// Keyboard shortcuts\n\tuseKeyboardShortcuts({\n\t\tvideoControls,\n\t\ttoggleSubtitles,\n\t\ttakeScreenshot,\n\t\tduration: videoState.duration\n\t})\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={cn(\"minimal-player relative rounded-lg bg-black\", className)}\n\t\t\tstyle={{ overflow: \"hidden\" }}\n\t\t\tonMouseMove={handleMouseMove}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}>\n\t\t\t<VideoElement\n\t\t\t\tvideoRef={videoRef}\n\t\t\t\tsrc={src}\n\t\t\t\tposter={poster}\n\t\t\t\tsubtitleSrc={subtitleSrc}\n\t\t\t\tsubtitlesEnabled={subtitlesEnabled}\n\t\t\t\tcrossOrigin={crossOrigin}\n\t\t\t\tonTogglePlay={videoControls.togglePlay}\n\t\t\t/>\n\n\t\t\t<SubtitleDisplay subtitlesEnabled={subtitlesEnabled} subtitleText={currentSubtitle} />\n\n\t\t\t{/* Show center play button only when not loading */}\n\t\t\t{!videoState.isLoading && (\n\t\t\t\t<CenterPlayButton\n\t\t\t\t\tisPlaying={videoState.isPlaying}\n\t\t\t\t\tonTogglePlay={videoControls.togglePlay}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<ControlBar\n\t\t\t\tcontrolsVisible={controlsVisible}\n\t\t\t\tcurrentTime={videoState.currentTime}\n\t\t\t\tduration={videoState.duration}\n\t\t\t\tisPlaying={videoState.isPlaying}\n\t\t\t\tvolume={videoState.volume}\n\t\t\t\tisMuted={videoState.isMuted}\n\t\t\t\tshowVolumeSlider={showVolumeSlider}\n\t\t\t\tisFullscreen={videoState.isFullscreen}\n\t\t\t\tshowSettings={showSettings}\n\t\t\t\tplaybackRate={playbackRate}\n\t\t\t\tsubtitleSrc={subtitleSrc}\n\t\t\t\tsubtitlesEnabled={subtitlesEnabled}\n\t\t\t\tsubtitleTracks={availableTracks}\n\t\t\t\tcurrentTrackId={currentTrackId}\n\t\t\t\thasSubtitles={hasSubtitles}\n\t\t\t\tsubtitleLoadError={loadError}\n\t\t\t\tvolumeOrientation={volumeOrientation}\n\t\t\t\tbufferedRanges={videoState.bufferedRanges}\n\t\t\t\tisSeeking={videoState.isSeeking}\n\t\t\t\tonSeek={videoControls.seekTo}\n\t\t\t\tonTogglePlay={videoControls.togglePlay}\n\t\t\t\tonSeekBackward={videoControls.seekBackward}\n\t\t\t\tonSeekForward={videoControls.seekForward}\n\t\t\t\tonToggleMute={videoControls.toggleMute}\n\t\t\t\tonVolumeChange={videoControls.setVolume}\n\t\t\t\tonShowVolumeSlider={setShowVolumeSlider}\n\t\t\t\tonToggleSubtitles={toggleSubtitles}\n\t\t\t\tonSelectSubtitleTrack={selectSubtitleTrack}\n\t\t\t\tonTakeScreenshot={takeScreenshot}\n\t\t\t\tonToggleFullscreen={videoControls.toggleFullscreen}\n\t\t\t\tonToggleSettings={() => setShowSettings(!showSettings)}\n\t\t\t\tonChangePlaybackRate={changePlaybackRate}\n\t\t\t/>\n\n\t\t\t{/* Loading states */}\n\t\t\t{showLoadingState && (\n\t\t\t\t<>\n\t\t\t\t\t{/* Initial loading */}\n\t\t\t\t\t{videoState.isLoading &&\n\t\t\t\t\t\t!videoState.isSeeking &&\n\t\t\t\t\t\t!videoState.isBuffering &&\n\t\t\t\t\t\t(LoadingComponent ? (\n\t\t\t\t\t\t\t<CustomLoading context=\"initial\">\n\t\t\t\t\t\t\t\t<LoadingComponent context=\"initial\" />\n\t\t\t\t\t\t\t</CustomLoading>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<LoadingPresets.Initial {...loadingProps} />\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t{/* Seeking */}\n\t\t\t\t\t{videoState.isSeeking &&\n\t\t\t\t\t\t(LoadingComponent ? (\n\t\t\t\t\t\t\t<CustomLoading context=\"seeking\">\n\t\t\t\t\t\t\t\t<LoadingComponent context=\"seeking\" />\n\t\t\t\t\t\t\t</CustomLoading>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<LoadingPresets.Seeking {...loadingProps} />\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t{/* Buffering */}\n\t\t\t\t\t{videoState.isBuffering &&\n\t\t\t\t\t\t!videoState.isSeeking &&\n\t\t\t\t\t\t(LoadingComponent ? (\n\t\t\t\t\t\t\t<CustomLoading context=\"buffering\">\n\t\t\t\t\t\t\t\t<LoadingComponent context=\"buffering\" />\n\t\t\t\t\t\t\t</CustomLoading>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<LoadingPresets.Buffering {...loadingProps} />\n\t\t\t\t\t\t))}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n"],"names":["composeRefs","refs","node","ref","MediaPlayerImpl","children","className","dir","disabled","asChild","autoHide","enableGestures","enableMobileOptimizations","onPlay","onPause","onEnded","onTimeUpdate","onVolumeChange","onMuted","onMediaError","onPipError","onFullscreenChange","props","context","useMediaContext","dispatch","useMediaDispatch","isTouchDevice","useDeviceInfo","isPlaying","useMediaSelector","state","currentTime","volume","isFullscreen","useMobileOptimizations","gestureActions","MediaActionTypes","direction","amount","mediaElement","newTime","newVolume","scale","useMediaGestures","handleKeyDown","event","target","React","handlePlay","handlePause","handleEnded","handleTimeUpdate","time","handleVolumeChange","vol","muted","handleLoadedMetadata","handleError","errorMessage","handleLoadStart","rootProps","cn","jsx","MediaPlayerRoot","MediaProvider","BackwardIcon","CameraIcon","Memo","ForwardIcon","FullscreenEnterIcon","FullscreenExitIcon","LoadingIcon","jsxs","PauseIcon","PlayIcon","SettingsIcon","SubtitleIcon","VolumeMutedIcon","VolumeTwoIcon","MinimalPlayIcon","size","color","MinimalPauseIcon","MinimalVolumeIcon","MinimalVolumeMutedIcon","MinimalFullscreenIcon","MinimalExitFullscreenIcon","MinimalSettingsIcon","MinimalSpinner","MinimalForwardIcon","MinimalBackwardIcon","MinimalForward10Icon","MinimalBackward10Icon","MinimalSubtitleIcon","SubtitleIconSVG","MinimalScreenshotIcon","defaultMinimalIcons","MediaPlayerVideo","combinedRef","setCombinedRef","child","MediaPlayerTime","variant","duration","times","formatTime","timeProps","content","Fragment","MinimalPlayButton","icons","handleClick","sizeClasses","iconSizes","MinimalSeekBar","thumbnails","onSeek","buffered","isDragging","setIsDragging","useState","hoverTime","setHoverTime","hoverPosition","setHoverPosition","seekBarRef","useRef","progress","bufferedProgress","handleSeek","clientX","rect","handleMouseDown","e","handleMouseMove","handleMouseUp","handleMouseLeave","handleGlobalMouseMove","handleGlobalMouseUp","MinimalVolumeControl","isMuted","isExpanded","setIsExpanded","handleMuteToggle","VolumeIcon","MinimalControls","visible","showQualitySelector","showSpeedControl","qualities","onUserInteractionStart","onUserInteractionEnd","q","elem","MinimalLoading","MinimalOverlay","showCenterButton","onPlayPause","MinimalMediaPlayer","src","poster","autoPlay","loop","autoHideControls","hideDelay","theme","customIcons","showCenterPlayButton","showLoadingSpinner","onError","watermark","controlsVisible","setControlsVisible","setIsPlaying","isLoading","setIsLoading","error","setError","hideTimeoutRef","containerRef","isHovered","setIsHovered","userInteracting","setUserInteracting","resetHideTimer","handleMouseEnter","handleUserInteractionStart","handleUserInteractionEnd","handlePlayStateChange","playing","handleLoadedData","useEffect","videoSrc","video","monaGifSrc","monaLoadingGif","AnimateLoading","loadingText","gifSrc","showFallback","imageError","setImageError","imageLoaded","setImageLoaded","gifPaths","currentGifIndex","setCurrentGifIndex","currentGif","handleImageError","FallbackAnimation","sizeMap","contextStyles","AnimateLoadingWrapper","message","textSize","contextStyle","getLoadingText","LoadingState","showMessage","style","sizes","renderLoadingIndicator","i","getMessage","CustomLoading","LoadingPresets","CenterPlayButton","onTogglePlay","PlaybackControls","onSeekBackward","onSeekForward","SettingsDropdown","showSettings","playbackRate","onToggleSettings","onChangePlaybackRate","playbackRates","handleSettingsClick","useCallback","handleDropdownClick","rate","RightControls","subtitleSrc","subtitlesEnabled","subtitleTracks","currentTrackId","hasSubtitles","subtitleLoadError","onToggleSubtitles","onSelectSubtitleTrack","onTakeScreenshot","onToggleFullscreen","showSubtitleMenu","setShowSubtitleMenu","subtitleMenuRef","FullscreenIcon","ExitFullscreenIcon","handleClickOutside","handleSubtitleClick","track","SeekBar","bufferedRanges","isSeeking","isHovering","setIsHovering","showRipple","setShowRipple","ripplePosition","setRipplePosition","position","range","index","startPercent","widthPercent","TimeDisplay","VolumeControl","showVolumeSlider","onToggleMute","onShowVolumeSlider","orientation","sliderRefHorizontal","sliderRefVertical","isDraggingState","setIsDraggingState","handleSliderClick","isVertical","sliderRef","percentage","volumePercentage","ControlBar","volumeOrientation","SubtitleDisplay","subtitleText","VideoElement","videoRef","crossOrigin","SimpleMinimalPlayer","LoadingComponent","showLoadingState","loadingProps","setShowSettings","setPlaybackRate","videoState","videoControls","useVideoPlayer","currentSubtitle","toggleSubtitles","getCurrentSubtitle","setCurrentSubtitle","selectSubtitleTrack","availableTracks","loadError","useEnhancedSubtitles","takeScreenshot","useScreenshot","setShowVolumeSlider","useMediaControls","subtitle","changePlaybackRate","useKeyboardShortcuts"],"mappings":"8IAeA,SAASA,MAAkBC,EAAuC,CACjE,OAAQC,GAAY,CACnBD,EAAK,QAASE,GAAQ,CACjB,OAAOA,GAAQ,WAClBA,EAAID,CAAI,EACEC,GAAO,OAAOA,GAAQ,WAC9BA,EAAkC,QAAUD,EAEhD,CAAC,CACF,CACD,CA+BA,SAASE,GAAgB,CACxB,SAAAC,EACA,UAAAC,EACA,IAAAC,EAAM,MACN,SAAAC,EAAW,GACX,QAAAC,EAAU,GACV,SAAAC,EAAW,GACX,eAAAC,EAAiB,GACjB,0BAAAC,EAA4B,GAC5B,OAAAC,EACA,QAAAC,EACA,QAAAC,EACA,aAAAC,EACA,eAAAC,EACA,QAAAC,EACA,aAAAC,EACA,WAAAC,EACA,mBAAAC,EACA,GAAGC,CACJ,EAAyB,CACxB,MAAMC,EAAUC,EAAAA,gBAAA,EACVC,EAAWC,EAAAA,iBAAA,EACX,CAAE,cAAAC,CAAA,EAAkBC,gBAAA,EAGpBC,EAAYC,EAAAA,iBAAkBC,GAAUA,EAAM,SAAS,EACvDC,EAAcF,EAAAA,iBAAkBC,GAAUA,EAAM,WAAW,EAC3DE,EAASH,EAAAA,iBAAkBC,GAAUA,EAAM,MAAM,EACvCD,mBAAkBC,GAAUA,EAAM,OAAO,EAC3CD,mBAAkBC,GAAUA,EAAM,KAAK,EACrD,MAAMG,EAAeJ,EAAAA,iBAAkBC,GAAUA,EAAM,YAAY,EACxCD,mBAAkBC,GAAUA,EAAM,kBAAkB,EAG/EI,yBAAA,EAGA,MAAMC,EAAiB,CACtB,YAAa,IAAM,CACd5B,GACJiB,EAAS,CACR,KAAMI,EAAYQ,mBAAiB,MAAQA,EAAAA,iBAAiB,IAAA,CAC5D,CACF,EACA,OAAQ,CAACC,EAAmCC,IAAmB,CAC9D,GAAI/B,GAAY,CAACe,EAAQ,QAAS,OAClC,MAAMiB,EAAejB,EAAQ,SAAS,QACtC,GAAI,CAACiB,EAAc,OAEnB,MAAMC,EACLH,IAAc,UACX,KAAK,IAAIE,EAAa,UAAY,EAAGR,EAAcO,CAAM,EACzD,KAAK,IAAI,EAAGP,EAAcO,CAAM,EAEpCd,EAAS,CACR,KAAMY,EAAAA,iBAAiB,KACvB,OAAQI,CAAA,CACR,CACF,EACA,eAAgB,CAACH,EAA0BC,IAAmB,CAC7D,GAAI/B,EAAU,OACd,MAAMkC,EACLJ,IAAc,KAAO,KAAK,IAAI,EAAGL,EAASM,CAAM,EAAI,KAAK,IAAI,EAAGN,EAASM,CAAM,EAEhFd,EAAS,CACR,KAAMY,EAAAA,iBAAiB,WACvB,OAAQK,CAAA,CACR,CACF,EACA,mBAAoB,IAAM,CACrBlC,GAAY,CAACe,EAAQ,SACzBE,EAAS,CACR,KAAMS,EAAeG,mBAAiB,gBAAkBA,EAAAA,iBAAiB,gBAAA,CACzE,CACF,EACA,OAASM,GAAkB,CAG1B,QAAQ,IAAI,yBAA0BA,CAAK,CAC5C,CAAA,EAI4BC,EAAAA,iBAC5BrB,EAAQ,QACRZ,EAAiByB,EAAiB,CAAA,CAAC,EAIpC,MAAMS,EAAiBC,GAA+B,CACrD,GAAItC,EAAU,OAEd,MAAMuC,EAASD,EAAM,OAIrB,GAFCC,EAAO,UAAY,SAAWA,EAAO,UAAY,YAAcA,EAAO,kBAEnD,OAEpB,MAAMP,EAAejB,EAAQ,SAAS,QACtC,GAAKiB,EAEL,OAAQM,EAAM,KAAA,CACb,IAAK,QACL,IAAK,OACJA,EAAM,eAAA,EACNrB,EAAS,CACR,KAAMI,EAAYQ,mBAAiB,MAAQA,EAAAA,iBAAiB,IAAA,CAC5D,EACD,MAED,IAAK,OACJS,EAAM,eAAA,EACNrB,EAAS,CACR,KAAMS,EAAeG,mBAAiB,gBAAkBA,EAAAA,iBAAiB,gBAAA,CACzE,EACD,MAED,IAAK,OACJS,EAAM,eAAA,EACNrB,EAAS,CACR,KAAMY,EAAAA,iBAAiB,WAAA,CACvB,EACD,MAED,IAAK,YACJS,EAAM,eAAA,EACFvB,EAAQ,SAAWiB,aAAwB,kBAC9Cf,EAAS,CACR,KAAMY,EAAAA,iBAAiB,KACvB,OAAQ,KAAK,IAAI,EAAGL,EAAc,EAAE,CAAA,CACpC,EAEF,MAED,IAAK,aACJc,EAAM,eAAA,EACFvB,EAAQ,SAAWiB,aAAwB,kBAC9Cf,EAAS,CACR,KAAMY,EAAAA,iBAAiB,KACvB,OAAQ,KAAK,IAAIG,EAAa,UAAY,EAAGR,EAAc,EAAE,CAAA,CAC7D,EAEF,MAED,IAAK,UACJc,EAAM,eAAA,EACNrB,EAAS,CACR,KAAMY,EAAAA,iBAAiB,WACvB,OAAQ,KAAK,IAAI,EAAGJ,EAAS,EAAG,CAAA,CAChC,EACD,MAED,IAAK,YACJa,EAAM,eAAA,EACNrB,EAAS,CACR,KAAMY,EAAAA,iBAAiB,WACvB,OAAQ,KAAK,IAAI,EAAGJ,EAAS,EAAG,CAAA,CAChC,EACD,KAAA,CAEH,EAGAe,EAAM,UAAU,IAAM,CACrB,MAAMR,EAAejB,EAAQ,SAAS,QACtC,GAAI,CAACiB,EAAc,OAEnB,MAAMS,EAAa,IAAM,CACxBxB,EAAS,CAAE,KAAMY,EAAAA,iBAAiB,IAAA,CAAM,EACxCxB,IAAA,CACD,EAEMqC,EAAc,IAAM,CACzBzB,EAAS,CAAE,KAAMY,EAAAA,iBAAiB,KAAA,CAAO,EACzCvB,IAAA,CACD,EAEMqC,EAAc,IAAM,CACzB1B,EAAS,CAAE,KAAMY,EAAAA,iBAAiB,KAAA,CAAO,EACzCtB,IAAA,CACD,EAEMqC,EAAmB,IAAM,CAC9B,MAAMC,EAAOb,EAAa,YAC1Bf,EAAS,CAAE,KAAMY,EAAAA,iBAAiB,iBAAkB,OAAQgB,EAAM,EAClErC,IAAeqC,CAAI,CACpB,EAEMC,EAAqB,IAAM,CAChC,MAAMC,EAAMf,EAAa,OACnBgB,EAAQhB,EAAa,MAC3Bf,EAAS,CAAE,KAAMY,EAAAA,iBAAiB,WAAY,OAAQkB,EAAK,EAC3D9B,EAAS,CAAE,KAAM+B,EAAQnB,EAAAA,iBAAiB,KAAOA,EAAAA,iBAAiB,OAAQ,EAC1EpB,IAAiBsC,CAAG,EACpBrC,IAAUsC,CAAK,CAChB,EAEMC,EAAuB,IAAM,CAClChC,EAAS,CAAE,KAAMY,EAAAA,iBAAiB,aAAc,OAAQG,EAAa,SAAU,EAC/Ef,EAAS,CAAE,KAAMY,EAAAA,iBAAiB,YAAa,OAAQ,GAAO,CAC/D,EAEMqB,EAAc,IAAM,CACzB,MAAMC,EAAe,4CACrBlC,EAAS,CAAE,KAAMY,EAAAA,iBAAiB,UAAW,OAAQsB,EAAc,EACnExC,IAAewC,CAAY,CAC5B,EAEMC,EAAkB,IAAM,CAC7BnC,EAAS,CAAE,KAAMY,EAAAA,iBAAiB,YAAa,OAAQ,GAAM,CAC9D,EAGA,OAAAG,EAAa,iBAAiB,OAAQS,CAAU,EAChDT,EAAa,iBAAiB,QAASU,CAAW,EAClDV,EAAa,iBAAiB,QAASW,CAAW,EAClDX,EAAa,iBAAiB,aAAcY,CAAgB,EAC5DZ,EAAa,iBAAiB,eAAgBc,CAAkB,EAChEd,EAAa,iBAAiB,iBAAkBiB,CAAoB,EACpEjB,EAAa,iBAAiB,QAASkB,CAAW,EAClDlB,EAAa,iBAAiB,YAAaoB,CAAe,EAEnD,IAAM,CACZpB,EAAa,oBAAoB,OAAQS,CAAU,EACnDT,EAAa,oBAAoB,QAASU,CAAW,EACrDV,EAAa,oBAAoB,QAASW,CAAW,EACrDX,EAAa,oBAAoB,aAAcY,CAAgB,EAC/DZ,EAAa,oBAAoB,eAAgBc,CAAkB,EACnEd,EAAa,oBAAoB,iBAAkBiB,CAAoB,EACvEjB,EAAa,oBAAoB,QAASkB,CAAW,EACrDlB,EAAa,oBAAoB,YAAaoB,CAAe,CAC9D,CACD,EAAG,CAACnC,EAAUZ,EAAQC,EAASC,EAASC,EAAcC,EAAgBC,EAASC,CAAY,CAAC,EAE5F,MAAM0C,EAAY,CACjB,kBAAmBtC,EAAQ,QAC3B,mBAAoBA,EAAQ,cAC5B,gBAAiBf,EACjB,gBAAiBA,EAAW,GAAK,OACjC,YAAa,eACb,aAAc0B,EAAe,aAAe,SAC5C,IAAA3B,EACA,SAAUC,EAAW,GAAK,EAC1B,UAAWsD,EAAAA,GACV,4FACA,gFACA,iEACA,8CACA,8CACA,oIAEAnC,GAAiB,CAChB,qBACA,cACA,oBAAA,EAGD,wBACA,gBACArB,CAAA,EAED,UAAWuC,EACX,GAAGvB,CAAA,EAGJ,OACCyC,wBAAC,OAAI,IAAK/D,GAAYuB,EAAQ,OAAO,EAAI,GAAGsC,EAC1C,SAAAxD,EACF,CAEF,CAGO,SAAS2D,EAAgB1C,EAA6B,CAC5D,+BACE2C,gBAAA,CACA,SAAAF,EAAAA,kBAAAA,IAAC3D,GAAA,CAAiB,GAAGkB,EAAO,EAC7B,CAEF,CAEA0C,EAAgB,YAAc,kBC9U9B,MAAME,GAAgB5C,GACrByC,EAAAA,kBAAAA,IAAC,OAAI,MAAM,6BAA6B,MAAM,MAAM,OAAO,MAAM,QAAQ,YAAa,GAAGzC,EACxF,SAAAyC,EAAAA,kBAAAA,IAAC,OAAA,CACA,KAAK,eACL,EAAE,i4BAAA,CAAk4B,EACt4B,ECLKI,GAAc7C,GACnByC,EAAAA,kBAAAA,IAAC,MAAA,CACA,MAAO,GACP,OAAQ,GACR,QAAQ,YACR,MAAO,CAAE,MAAO,OAAQ,OAAQ,MAAA,EAC/B,GAAGzC,EACJ,SAAAyC,EAAAA,kBAAAA,IAAC,OAAA,CACA,KAAK,eACL,EAAE,4nBAAA,CAAA,CACH,CACD,EAGKK,GAAOD,GCdPE,GAAe/C,GACpByC,EAAAA,kBAAAA,IAAC,OAAI,MAAM,6BAA6B,MAAM,MAAM,OAAO,MAAM,QAAQ,YAAa,GAAGzC,EACxF,SAAAyC,EAAAA,kBAAAA,IAAC,OAAA,CACA,KAAK,eACL,EAAE,+6BAAA,CAAg7B,EACp7B,ECLKO,GAAuBhD,GAC5ByC,EAAAA,kBAAAA,IAAC,MAAA,CACA,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,MAAM,6BACN,WAAS,2BACT,MAAO,CAAE,MAAO,OAAQ,OAAQ,MAAA,EAC/B,GAAGzC,EACJ,SAAAyC,EAAAA,kBAAAA,IAAC,OAAA,CACA,SAAS,UACT,SAAS,UACT,EAAE,wIACF,KAAK,cAAA,CAAA,CACN,CACD,EChBKQ,GAAsBjD,GAC3ByC,EAAAA,kBAAAA,IAAC,MAAA,CACA,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,MAAM,6BACN,WAAS,0BACT,MAAO,CAAE,MAAO,OAAQ,OAAQ,MAAA,EAC/B,GAAGzC,EACJ,SAAAyC,EAAAA,kBAAAA,IAAC,OAAA,CACA,SAAS,UACT,SAAS,UACT,EAAE,iFACF,KAAK,cAAA,CAAA,CACN,CACD,EChBKS,GAAelD,GACpBmD,EAAAA,kBAAAA,KAAC,MAAA,CACA,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,MAAM,6BACN,UAAU,wBACV,MAAO,CAAE,MAAO,OAAQ,OAAQ,MAAA,EAC/B,GAAGnD,EACJ,SAAA,CAAAyC,EAAAA,kBAAAA,IAAC,OAAA,CACA,KAAK,eACL,EAAE,gFACF,QAAQ,IAAA,CAAA,EAETA,EAAAA,kBAAAA,IAAC,OAAA,CAAK,KAAK,eAAe,EAAE,+CAC3B,SAAAA,EAAAA,kBAAAA,IAAC,mBAAA,CACA,cAAc,YACd,IAAI,KACJ,KAAK,UACL,YAAY,aACZ,GAAG,YACH,KAAK,QAAA,CAAA,CACN,CACD,CAAA,CAAA,CACD,ECzBKW,GAAapD,GAClByC,EAAAA,kBAAAA,IAAC,MAAA,CACA,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,MAAM,6BACN,UAAU,yBACV,MAAO,CAAE,MAAO,OAAQ,OAAQ,MAAA,EAC/B,GAAGzC,EACJ,SAAAyC,EAAAA,kBAAAA,IAAC,OAAA,CACA,SAAS,UACT,SAAS,UACT,EAAE,4KACF,KAAK,cAAA,CAAA,CACN,CACD,EChBKY,GAAYrD,GACjByC,EAAAA,kBAAAA,IAAC,MAAA,CACA,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,MAAM,6BACN,UAAU,wBACV,MAAO,CAAE,MAAO,OAAQ,OAAQ,MAAA,EAC/B,GAAGzC,EACJ,SAAAyC,EAAAA,kBAAAA,IAAC,OAAA,CACA,EAAE,qGACF,KAAK,cAAA,CAAA,CACN,CACD,ECdKa,GAAgBtD,GACrByC,EAAAA,kBAAAA,IAAC,MAAA,CAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAa,GAAGzC,EACnD,SAAAyC,EAAAA,kBAAAA,IAAC,OAAA,CACA,KAAK,eACL,EAAE,+2BAAA,CAAg3B,EACp3B,ECLKc,GAAgBvD,GACrByC,EAAAA,kBAAAA,IAAC,MAAA,CACA,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,MAAM,6BACN,UAAU,qCACV,MAAO,CAAE,MAAO,OAAQ,OAAQ,MAAA,EAC/B,GAAGzC,EACJ,SAAAyC,EAAAA,kBAAAA,IAAC,OAAA,CACA,KAAK,eACL,EAAE,+IAAA,CAAA,CACH,CACD,ECdKe,GAAmBxD,2BACvB,MAAA,CAAI,MAAM,6BAA6B,MAAM,MAAM,OAAO,MAAM,QAAQ,YAAa,GAAGA,EACxF,SAAAmD,yBAAC,IAAA,CAAE,KAAK,eACP,SAAA,CAAAV,EAAAA,kBAAAA,IAAC,OAAA,CACA,SAAS,UACT,EAAE,quBACF,SAAS,SAAA,CAAA,EACVA,EAAAA,kBAAAA,IAAC,OAAA,CAAK,EAAE,+0BAAA,CAAg1B,CAAA,CAAA,CACz1B,CAAA,CACD,ECTKgB,GAAiBzD,2BACrB,MAAA,CAAI,MAAM,6BAA6B,MAAM,MAAM,OAAO,MAAM,QAAQ,YAAa,GAAGA,EACxF,SAAAmD,yBAAC,IAAA,CAAE,KAAK,eACP,SAAA,CAAAV,EAAAA,kBAAAA,IAAC,OAAA,CAAK,EAAE,smBAAA,CAAumB,EAC/mBA,EAAAA,kBAAAA,IAAC,OAAA,CACA,SAAS,UACT,EAAE,wjCACF,SAAS,SAAA,CAAA,CAAU,CAAA,CACrB,CAAA,CACD,ECcYiB,GAAuC,CAAC,CACpD,KAAAC,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACY,GAAA,CAAS,MAAOM,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAGtEC,GAAwC,CAAC,CACrD,KAAAF,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACW,GAAA,CAAU,MAAOO,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAGvEE,GAAyC,CAAC,CACtD,KAAAH,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACgB,GAAA,CAAc,MAAOE,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAG3EG,GAA8C,CAAC,CAC3D,KAAAJ,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACe,GAAA,CAAgB,MAAOG,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAG7EI,GAA6C,CAAC,CAC1D,KAAAL,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACO,GAAA,CAAoB,MAAOW,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAGjFK,GAAiD,CAAC,CAC9D,KAAAN,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACQ,GAAA,CAAmB,MAAOU,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAGhFM,GAA2C,CAAC,CACxD,KAAAP,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACa,GAAA,CAAa,MAAOK,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAG1EO,GAAsC,CAAC,CACnD,KAAAR,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IACCnB,EAAAA,kBAAAA,IAACS,GAAA,CACA,MAAOS,EACP,OAAQA,EACR,UAAW,gBAAgB3E,CAAS,GACpC,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAChB,EAIYQ,GAA0C,CAAC,CACvD,KAAAT,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACG,GAAA,CAAa,MAAOe,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAG1ES,GAA2C,CAAC,CACxD,KAAAV,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACM,GAAA,CAAY,MAAOY,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAGzEU,GAA4C,CAAC,CACzD,KAAAX,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACM,GAAA,CAAY,MAAOY,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAGzEW,GAA6C,CAAC,CAC1D,KAAAZ,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACG,GAAA,CAAa,MAAOe,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAG1EY,GAA2C,CAAC,CACxD,KAAAb,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACgC,GAAA,CAAgB,MAAOd,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAG7Ec,GAA6C,CAAC,CAC1D,KAAAf,EAAO,GACP,UAAA3E,EAAY,GACZ,MAAA4E,EAAQ,cACT,IAAMnB,wBAACI,GAAA,CAAW,MAAOc,EAAM,OAAQA,EAAM,UAAA3E,EAAsB,MAAO,CAAE,MAAA4E,CAAA,CAAM,CAAG,EAyBxEe,EAA+B,CAC3C,KAAMjB,GACN,MAAOG,GACP,OAAQC,GACR,YAAaC,GACb,WAAYC,GACZ,eAAgBC,GAChB,SAAUC,GACV,QAASE,GACT,SAAUC,GACV,QAASF,GACT,SAAUK,EACX,EC/JA,SAAS9F,MAAkBC,EAAuC,CACjE,OAAQC,GAAY,CACnBD,EAAK,QAASE,GAAQ,CACjB,OAAOA,GAAQ,WAClBA,EAAID,CAAI,EACEC,IACRA,EAAkC,QAAUD,EAEhD,CAAC,CACF,CACD,CAMO,SAASgG,GAAiB,CAChC,QAAAzF,EAAU,GACV,UAAAH,EACA,SAAAD,EACA,GAAGiB,CACJ,EAA0B,CACzB,MAAMC,EAAUC,EAAAA,gBAAA,EAGV,CAAC2E,EAAaC,CAAc,EAAIpD,EAAM,SAC3C,IAEQhD,GAAYuB,EAAQ,QAAQ,CACpC,EAQD,GAJAyB,EAAM,UAAU,IAAM,CACrBoD,EAAe,IAAMpG,GAAYuB,EAAQ,QAAQ,CAAC,CACnD,EAAG,CAACA,EAAQ,QAAQ,CAAC,EAEjBd,EAAS,CAEZ,MAAM4F,EAAQrD,EAAM,SAAS,KAAK3C,CAAQ,EAC1C,OAAO2C,EAAM,aAAaqD,EAAO,CAChC,GAAG/E,EACH,IAAK6E,EACL,YAAa,oBAAA,CACN,CACT,CAEA,OACCpC,wBAAC,SAAM,IAAKoC,EAAa,YAAU,qBAAqB,UAAA7F,EAAuB,GAAGgB,EAChF,SAAAjB,CAAA,CACF,CAEF,CAEA6F,GAAiB,YAAc,mBC9CxB,SAASI,EAAgB,CAC/B,QAAAC,EAAU,mBACV,UAAAjG,EACA,QAAAG,EAAU,GACV,SAAAJ,EACA,GAAGiB,CACJ,EAAyB,CACxB,MAAMC,EAAUC,EAAAA,gBAAA,EACVQ,EAAcF,EAAAA,iBAAkBC,GAAUA,EAAM,WAAW,EAC3DyE,EAAW1E,EAAAA,iBAAkBC,GAAUA,EAAM,QAAQ,EAErD0E,EAAQzD,EAAM,QAAQ,IACvBuD,IAAY,YACR,CACN,UAAWG,EAAAA,WAAW,KAAK,IAAI,EAAGF,EAAWxE,CAAW,CAAC,CAAA,EAIvDuE,IAAY,WACR,CACN,SAAUG,EAAAA,WAAWF,CAAQ,CAAA,EAI3BD,IAAY,UACR,CACN,QAASG,EAAAA,WAAW1E,CAAW,CAAA,EAI1B,CACN,QAAS0E,EAAAA,WAAW1E,CAAW,EAC/B,SAAU0E,EAAAA,WAAWF,CAAQ,CAAA,EAE5B,CAACD,EAASvE,EAAawE,CAAQ,CAAC,EAE7BG,EAAY,CACjB,YAAa,oBACb,eAAgBJ,EAChB,IAAKhF,EAAQ,IACb,UAAWuC,EAAAA,GAAG,0CAA2CxD,CAAS,EAClE,GAAGgB,CAAA,EAGJ,GAAIiF,IAAY,mBAAoB,CACnC,MAAMK,EAAUH,EAAMF,CAA6B,EAEnD,GAAI9F,EAAS,CACZ,MAAM4F,EAAQrD,EAAM,SAAS,KAAK3C,CAAQ,EAC1C,OAAO2C,EAAM,aAAaqD,EAAOM,EAAkBC,CAAO,CAC3D,CAEA,OAAO7C,EAAAA,kBAAAA,IAAC,OAAA,CAAM,GAAG4C,EAAY,SAAAC,EAAQ,CACtC,CAEA,MAAMA,EACLnC,EAAAA,kBAAAA,KAAAoC,EAAAA,kBAAAA,SAAA,CACC,SAAA,CAAA9C,EAAAA,kBAAAA,IAAC,OAAA,CAAM,WAAM,OAAA,CAAQ,EACrBA,EAAAA,kBAAAA,IAAC,OAAA,CAAK,UAAU,qBAAqB,SAAA,IAAC,EACtCA,EAAAA,kBAAAA,IAAC,OAAA,CAAM,SAAA0C,EAAM,QAAA,CAAS,CAAA,EACvB,EAGD,GAAIhG,EAAS,CACZ,MAAM4F,EAAQrD,EAAM,SAAS,KAAK3C,CAAQ,EAC1C,OAAO2C,EAAM,aACZqD,EACA,CACC,GAAGM,EACH,UAAW7C,EAAAA,GAAG,qDAAsDxD,CAAS,CAAA,EAE9EsG,CAAA,CAEF,CAEA,OACC7C,EAAAA,kBAAAA,IAAC,MAAA,CACC,GAAG4C,EACJ,UAAW7C,EAAAA,GAAG,qDAAsDxD,CAAS,EAC5E,SAAAsG,CAAA,CAAA,CAGJ,CAEAN,EAAgB,YAAc,kBCpFvB,SAASQ,GAAkB,CACjC,UAAAjF,EACA,MAAAkF,EACA,KAAA9B,EAAO,KACP,UAAA3E,CACD,EAA2B,CAC1B,MAAMmB,EAAWC,EAAAA,iBAAA,EAEXsF,EAAc,IAAM,CACzBvF,EAAS,CACR,KAAMI,EAAYQ,mBAAiB,MAAQA,EAAAA,iBAAiB,IAAA,CAC5D,CACF,EAEM4E,EAAc,CACnB,GAAI,YACJ,GAAI,wBACJ,GAAI,2BACJ,GAAI,0BAAA,EAGCC,EAAY,CACjB,GAAI,GACJ,GAAI,GACJ,GAAI,GACJ,GAAI,EAAA,EAGCvC,EAAWoC,EAAM,KACjBrC,EAAYqC,EAAM,MAExB,MAAI,CAACpC,GAAY,CAACD,EAAkB,KAGnCX,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAWD,EAAAA,GAAG,cAAemD,EAAYhC,CAAI,EAAG3E,CAAS,EACzD,QAAS0G,EACT,aAAYnF,EAAY,QAAU,OACjC,SAAAA,EAAYkC,EAAAA,kBAAAA,IAACW,EAAA,CAAU,KAAMwC,EAAUjC,CAAI,CAAA,CAAG,EAAKlB,EAAAA,kBAAAA,IAACY,EAAA,CAAS,KAAMuC,EAAUjC,CAAI,CAAA,CAAG,CAAA,CAAA,CAGxF,CCtCO,SAASkC,GAAe,CAAE,WAAAC,EAAY,OAAAC,EAAQ,UAAA/G,GAAkC,CACtF,MAAMmB,EAAWC,EAAAA,iBAAA,EACXM,EAAcF,EAAAA,iBAAkBC,GAAUA,EAAM,WAAW,EAC3DyE,EAAW1E,EAAAA,iBAAkBC,GAAUA,EAAM,QAAQ,EACrDuF,EAAWxF,EAAAA,iBAAkBC,GAAUA,EAAM,QAAQ,EAErD,CAACwF,EAAYC,CAAa,EAAIC,EAAAA,SAAS,EAAK,EAC5C,CAACC,EAAWC,CAAY,EAAIF,EAAAA,SAAS,CAAC,EACtC,CAACG,EAAeC,CAAgB,EAAIJ,EAAAA,SAAS,CAAC,EAC9CK,EAAaC,EAAAA,OAAuB,IAAI,EAExCC,EAAWxB,EAAW,EAAKxE,EAAcwE,EAAY,IAAM,EAC3DyB,EACLX,GAAYA,EAAS,OAAS,GAAKd,EAAW,EAC1Cc,EAAS,IAAIA,EAAS,OAAS,CAAC,EAAId,EAAY,IACjD,EAEE0B,EAAcC,GAAoB,CACvC,GAAI,CAACL,EAAW,SAAWtB,IAAa,EAAG,OAE3C,MAAM4B,EAAON,EAAW,QAAQ,sBAAA,EAE1BrF,EADW,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI0F,EAAUC,EAAK,MAAQA,EAAK,KAAK,CAAC,EACjD5B,EAE3B/E,EAAS,CACR,KAAMY,EAAAA,iBAAiB,KACvB,OAAQI,CAAA,CACR,EAED4E,IAAS5E,CAAO,CACjB,EAEM4F,EAAmBC,GAAwB,CAChDA,EAAE,eAAA,EACFd,EAAc,EAAI,EAClBU,EAAWI,EAAE,OAAO,CACrB,EAEMC,EAAmBD,GAAwB,CAChD,GAAI,CAACR,EAAW,SAAWtB,IAAa,EAAG,OAE3C,MAAM4B,EAAON,EAAW,QAAQ,sBAAA,EAE1BzE,EADW,KAAK,IAAI,EAAG,KAAK,IAAI,GAAIiF,EAAE,QAAUF,EAAK,MAAQA,EAAK,KAAK,CAAC,EACtD5B,EAExBmB,EAAatE,CAAI,EACjBwE,EAAiBS,EAAE,QAAUF,EAAK,IAAI,EAElCb,GACHW,EAAWI,EAAE,OAAO,CAEtB,EAEME,EAAgB,IAAM,CAC3BhB,EAAc,EAAK,CACpB,EAEMiB,EAAmB,IAAM,CAC9BjB,EAAc,EAAK,EACnBG,EAAa,CAAC,CACf,EAEA,OAAA3E,EAAM,UAAU,IAAM,CACrB,GAAIuE,EAAY,CACf,MAAMmB,EAAyBJ,GAAkB,CAChDJ,EAAWI,EAAE,OAAO,CACrB,EAEMK,EAAsB,IAAM,CACjCnB,EAAc,EAAK,CACpB,EAEA,gBAAS,iBAAiB,YAAakB,CAAqB,EAC5D,SAAS,iBAAiB,UAAWC,CAAmB,EAEjD,IAAM,CACZ,SAAS,oBAAoB,YAAaD,CAAqB,EAC/D,SAAS,oBAAoB,UAAWC,CAAmB,CAC5D,CACD,CACD,EAAG,CAACpB,CAAU,CAAC,2BAGb,MAAA,CAAI,UAAWzD,EAAAA,GAAG,iBAAkBxD,CAAS,EAE5C,SAAA,CAAAoH,EAAY,GACZjD,EAAAA,kBAAAA,KAAC,MAAA,CACA,UAAU,qDACV,MAAO,CAAE,KAAM,GAAGmD,CAAa,KAAM,UAAW,kBAAA,EAC/C,SAAA,CAAAR,GACArD,EAAAA,kBAAAA,IAAC,OAAI,UAAU,+BACd,iCAAC,MAAA,CAAI,UAAU,gCAAgC,CAAA,CAChD,0BAEA,MAAA,CAAI,UAAU,qEACb,SAAA2C,EAAAA,WAAWgB,CAAS,CAAA,CACtB,CAAA,CAAA,CAAA,EAKFjD,EAAAA,kBAAAA,KAAC,MAAA,CACA,IAAKqD,EACL,UAAU,kBACV,YAAaO,EACb,YAAaE,EACb,UAAWC,EACX,aAAcC,EAEd,SAAA,CAAA1E,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,2BAA2B,MAAO,CAAE,MAAO,GAAGkE,CAAgB,GAAA,CAAI,CAAG,EAGpFlE,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,2BAA2B,MAAO,CAAE,MAAO,GAAGiE,CAAQ,GAAA,CAAI,CAAG,EAG5EjE,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GAAG,wBAAyByD,GAAc,QAAQ,EAC7D,MAAO,CAAE,KAAM,GAAGS,CAAQ,GAAA,CAAI,CAAA,CAC/B,CAAA,CAAA,CACD,EACD,CAEF,CC3HO,SAASY,GAAqB,CAAE,MAAA7B,EAAO,UAAAzG,GAAwC,CACrF,MAAMmB,EAAWC,EAAAA,iBAAA,EACXO,EAASH,EAAAA,iBAAkBC,GAAUA,EAAM,MAAM,EACjD8G,EAAU/G,EAAAA,iBAAkBC,GAAUA,EAAM,OAAO,EACnD,CAAC+G,EAAYC,CAAa,EAAItB,EAAAA,SAAS,EAAK,EAE5CnE,EAAsBgF,GAA2C,CACtE,MAAM5F,EAAY,WAAW4F,EAAE,OAAO,KAAK,EAC3C7G,EAAS,CACR,KAAMY,EAAAA,iBAAiB,WACvB,OAAQK,CAAA,CACR,CACF,EAEMsG,EAAmB,IAAM,CAC9BvH,EAAS,CACR,KAAMY,EAAAA,iBAAiB,WAAA,CACvB,CACF,EAEM4G,EAAaJ,GAAW5G,IAAW,EAAI8E,EAAM,YAAcA,EAAM,OAEvE,OAAKkC,EAGJxE,EAAAA,kBAAAA,KAAC,MAAA,CACA,UAAWX,EAAAA,GAAG,+CAAgDxD,CAAS,EACvE,aAAc,IAAMyI,EAAc,EAAI,EACtC,aAAc,IAAMA,EAAc,EAAK,EAEvC,SAAA,CAAAhF,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAU,6LACV,QAASiF,EACT,aAAYH,EAAU,SAAW,OACjC,SAAA9E,EAAAA,kBAAAA,IAACkF,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,CAAA,EAIvBlF,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GACV,8CACAgF,EAAa,mBAAqB,eAAA,EAEnC,SAAA/E,EAAAA,kBAAAA,IAAC,QAAA,CACA,KAAK,QACL,IAAI,IACJ,IAAI,IACJ,KAAK,OACL,MAAO8E,EAAU,EAAI5G,EACrB,SAAUqB,EACV,UAAU,2FACV,MAAO,CACN,WAAY,kEAAkEuF,EAAU,EAAI5G,GAAU,GAAG,6BAA6B4G,EAAU,EAAI5G,GAAU,GAAG,gCAAA,CAClK,CAAA,CACD,CAAA,CACD,CAAA,CAAA,EAjCsB,IAoCzB,CC3CO,SAASiH,GAAgB,CAC/B,QAAAC,EACA,MAAApC,EACA,UAAAlF,EACA,oBAAAuH,EACA,iBAAAC,EACA,UAAAC,EACA,WAAAlC,EACA,uBAAAmC,EACA,qBAAAC,EACA,OAAAnC,CACD,EAAyB,CACxB,OACC5C,EAAAA,kBAAAA,KAAC,MAAA,CACA,UAAWX,EAAAA,GACV,sBACA,wCACA,wCACAqF,EAAU,2BAA6B,yBAAA,EAExC,cAAa,CAACA,EACd,YAAaI,EACb,UAAWC,EACX,aAAcD,EACd,WAAYC,EAEZ,SAAA,CAAAzF,EAAAA,kBAAAA,IAAC,OAAI,UAAU,OACd,iCAACoD,GAAA,CAAe,WAAAC,EAAwB,OAAAC,EAAgB,CAAA,CACzD,EAGA5C,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,0CAEd,SAAA,CAAAA,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,0BAEd,SAAA,CAAAV,EAAAA,kBAAAA,IAAC+C,GAAA,CAAkB,UAAAjF,EAAsB,MAAAkF,CAAA,CAAc,EAGvDhD,wBAAC6E,IAAqB,MAAA7B,EAAc,EAGpCtC,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,2DACd,SAAA,CAAAV,EAAAA,kBAAAA,IAACuC,EAAA,CAAgB,QAAQ,SAAA,CAAU,EACnCvC,EAAAA,kBAAAA,IAAC,OAAA,CAAK,UAAU,qBAAqB,SAAA,IAAC,EACtCA,EAAAA,kBAAAA,IAACuC,EAAA,CAAgB,QAAQ,UAAA,CAAW,CAAA,CAAA,CACrC,CAAA,EACD,EAGA7B,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,0BAEb,SAAA,CAAA2E,GAAuBE,GAAaA,EAAU,OAAS,2BACtD,SAAA,CAAO,UAAU,8CAA8C,MAAM,UACpE,SAAAA,EAAU,KAAMG,GAAMA,EAAE,OAAO,GAAG,SAAWH,EAAU,CAAC,GAAG,SAAW,MAAA,CACxE,EAIAD,GACAtF,EAAAA,kBAAAA,IAAC,SAAA,CAAO,UAAU,8CAA8C,MAAM,iBAAiB,SAAA,KAEvF,EAIAgD,EAAM,WAAaqC,GAAuBC,IAC1CtF,EAAAA,kBAAAA,IAAC,UAAO,UAAU,cAAc,MAAM,WACrC,iCAACgD,EAAM,SAAN,CAAe,KAAM,GAAI,EAC3B,EAIDhD,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAU,cACV,MAAM,oBACN,QAAS,IAAM,CAEd,MAAM2F,EAAO,SAAS,gBACjB,SAAS,kBAGb,SAAS,iBAAA,EAFTA,EAAK,oBAAA,CAIP,EACC,kBAAS,kBACP3C,EAAM,gBAAkBhD,wBAACgD,EAAM,eAAN,CAAqB,KAAM,GAAI,EACxDA,EAAM,YAAchD,EAAAA,kBAAAA,IAACgD,EAAM,WAAN,CAAiB,KAAM,EAAA,CAAI,CAAA,CAAA,CACpD,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAAA,CAAA,CAGH,CCjHO,SAAS4C,GAAe,CAAE,KAAMnF,EAAa,UAAAlE,GAAkC,CACrF,OACCyD,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GACV,yDACA,+BACAxD,CAAA,EAED,iCAAC,MAAA,CAAI,UAAU,aACb,SAAAkE,0BACCA,EAAA,CAAY,KAAM,GAAI,UAAU,eAAe,EAEhDT,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,8FAA8F,CAAA,CAE/G,CAAA,CAAA,CAGH,CCZO,SAAS6F,GAAe,CAC9B,QAAAT,EACA,iBAAAU,EAAmB,GACnB,UAAAhI,EAAY,GACZ,MAAAkF,EACA,YAAA+C,EACA,UAAAxJ,CACD,EAAwB,CACvB,GAAI,CAAC6I,GAAW,CAACU,EAAkB,OAAO,KAE1C,MAAMlF,EAAWoC,EAAM,KACjBrC,EAAYqC,EAAM,MAExB,MAAI,CAACpC,GAAY,CAACD,EAAkB,KAGnCX,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GACV,yDACA,8CACAxD,CAAA,EAED,QAASwJ,EACT,SAAA/F,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAWD,EAAAA,GACV,sBACA,yBACA,mCACA,aACA,8BACA,kBACA,iBAAA,EAED,QAAUwE,GAAM,CACfA,EAAE,gBAAA,EACFwB,IAAA,CACD,EACA,aAAYjI,EAAY,QAAU,OACjC,SAAAA,EAAYkC,EAAAA,kBAAAA,IAACW,EAAA,CAAU,KAAM,EAAA,CAAI,EAAKX,EAAAA,kBAAAA,IAACY,EAAA,CAAS,KAAM,GAAI,UAAU,MAAA,CAAO,CAAA,CAAA,CAC7E,CAAA,CAGH,CCTO,SAASoF,GAAmB,CAClC,IAAAC,EACA,OAAAC,EACA,SAAAC,EAAW,GACX,MAAA1G,EAAQ,GACR,KAAA2G,EAAO,GACP,iBAAAC,EAAmB,GACnB,UAAAC,EAAY,KACZ,MAAAC,EAAQ,OACR,YAAAC,EACA,qBAAAC,EAAuB,GACvB,mBAAAC,EAAqB,GACrB,UAAAnK,EACA,OAAAO,EACA,QAAAC,EACA,QAAAC,EACA,aAAAC,EACA,eAAAC,EACA,OAAAoG,EACA,QAAAqD,EACA,UAAAC,EACA,UAAArB,EACA,oBAAAF,EAAsB,GACtB,iBAAAC,EAAmB,GACnB,WAAAjC,CACD,EAA4B,CAC3B,KAAM,CAACwD,EAAiBC,CAAkB,EAAIpD,EAAAA,SAAS,EAAI,EACrD,CAAC5F,EAAWiJ,CAAY,EAAIrD,EAAAA,SAAS,EAAK,EAC1C,CAACsD,EAAWC,CAAY,EAAIvD,EAAAA,SAAS,EAAK,EAC1C,CAACwD,EAAOC,CAAQ,EAAIzD,EAAAA,SAAwB,IAAI,EAChD0D,EAAiBpD,EAAAA,OAA8B,IAAI,EACnDqD,EAAerD,EAAAA,OAA8B,IAAI,EACjD,CAACsD,EAAWC,CAAY,EAAI7D,EAAAA,SAAS,EAAK,EAC1C,CAAC8D,EAAiBC,CAAkB,EAAI/D,EAAAA,SAAS,EAAK,EAGtDV,EAAQ,CAAE,GAAGd,EAAqB,GAAGsE,CAAA,EAGrCkB,EAAiB,IAAM,CACvBrB,IAEDe,EAAe,SAClB,aAAaA,EAAe,OAAO,EAEpCN,EAAmB,EAAI,EAEnB,CAACU,GAAmB1J,IACvBsJ,EAAe,QAAU,WAAW,IAAM,CACzCN,EAAmB,EAAK,CACzB,EAAGR,CAAS,GAEd,EAGM9B,GAAkB,IAAM,CAC7BkD,EAAA,CACD,EAGMC,GAAmB,IAAM,CAC9BJ,EAAa,EAAI,EACjBT,EAAmB,EAAI,EACnBM,EAAe,SAClB,aAAaA,EAAe,OAAO,CAErC,EAEM1C,GAAmB,IAAM,CAC9B6C,EAAa,EAAK,EACdzJ,GAAauI,GAAoB,CAACmB,IACrCJ,EAAe,QAAU,WAAW,IAAM,CACzCN,EAAmB,EAAK,CACzB,EAAG,GAAG,EAER,EAGMc,GAA6B,IAAM,CACxCH,EAAmB,EAAI,EACvBX,EAAmB,EAAI,EACnBM,EAAe,SAClB,aAAaA,EAAe,OAAO,CAErC,EAEMS,GAA2B,IAAM,CACtCJ,EAAmB,EAAK,EACxBC,EAAA,CACD,EAGMI,GAAyBC,GAAqB,CACnDhB,EAAagB,CAAO,EAChBA,GACHjL,IAAA,EACA4K,EAAA,IAEA3K,IAAA,EACA+J,EAAmB,EAAI,EACnBM,EAAe,SAClB,aAAaA,EAAe,OAAO,EAGtC,EAGMvH,GAAkB,IAAM,CAC7BoH,EAAa,EAAI,EACjBE,EAAS,IAAI,CACd,EAEMa,GAAmB,IAAM,CAC9Bf,EAAa,EAAK,CACnB,EAGMtH,GAAe4E,GAAa,CACjC0C,EAAa,EAAK,EAClBE,EAAS5C,EAAE,SAAW,mBAAmB,EACzCoC,IAAUpC,CAAC,CACZ,EAGA0D,EAAAA,UAAU,IACF,IAAM,CACRb,EAAe,SAClB,aAAaA,EAAe,OAAO,CAErC,EACE,CAAA,CAAE,EAGL,MAAMc,GACL3C,GAAaA,EAAU,OAAS,IAC7BA,EAAU,KAAMG,GAAMA,EAAE,OAAO,GAAG,KACnCH,EAAU,CAAC,GAAG,OACb,OAAOU,GAAQ,SAAWA,EAAMA,EAAI,CAAC,GAKzC,OACCjG,EAAAA,kBAAAA,IAAC,MAAA,CACA,IAAKqH,EACL,UAAWtH,EAAAA,GACV,4EACA,iBAAiBwG,CAAK,GACtBhK,CAAA,EAED,aAAYgK,EACZ,YAAa/B,GACb,aAAcmD,GACd,aAAcjD,GACd,SAAAhE,EAAAA,kBAAAA,KAACT,EAAA,CACA,UAAU,yBACV,SAAU,GACV,eAAgB,GAChB,0BAA2B,GAE3B,SAAA,CAAAD,EAAAA,kBAAAA,IAACmC,GAAA,CACA,IAAK+F,GACL,OAAAhC,EACA,SAAAC,EACA,MAAA1G,EACA,KAAA2G,EACA,YAAW,GACX,YAAY,YACZ,OAAQ,IAAM0B,GAAsB,EAAI,EACxC,QAAS,IAAMA,GAAsB,EAAK,EAC1C,QAAA9K,EACA,aAAeuH,GAAM,CACpB,MAAM4D,EAAQ5D,EAAE,cAChBtH,IAAekL,EAAM,WAAW,CACjC,EACA,eAAiB5D,GAAM,CACtB,MAAM4D,EAAQ5D,EAAE,cAChBrH,IAAiBiL,EAAM,MAAM,CAC9B,EACA,YAAatI,GACb,aAAcmI,GACd,QAAUzD,GAAM5E,GAAY,IAAI,MAAM,sBAAsB,CAAC,CAAA,CAAA,EAI7D+G,GAAsBM,GAAahH,wBAAC4F,GAAA,CAAe,KAAM5C,EAAM,QAAS,EAGxEkE,2BACC,MAAA,CAAI,UAAU,qEACd,SAAAxG,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,cACd,SAAA,CAAAV,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,oBACd,SAAAA,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAU,oBACV,KAAK,OACL,QAAQ,YACR,OAAO,eACP,SAAAA,EAAAA,kBAAAA,IAAC,OAAA,CACA,cAAc,QACd,eAAe,QACf,YAAa,EACb,EAAE,mDAAA,CAAA,CACH,CAAA,EAEF,EACAA,EAAAA,kBAAAA,IAAC,IAAA,CAAE,UAAU,0BAA0B,SAAA,iBAAc,EACrDA,EAAAA,kBAAAA,IAAC,IAAA,CAAE,UAAU,wBAAyB,SAAAkH,CAAA,CAAM,CAAA,CAAA,CAC7C,CAAA,CACD,EAIAN,GACA5G,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GAAG,oCAAqC,CAClD,eAAgB6G,EAAU,WAAa,WACvC,gBAAiBA,EAAU,WAAa,YACxC,mBAAoBA,EAAU,WAAa,cAC3C,oBAAqBA,EAAU,WAAa,cAAA,CAC5C,EACD,MAAO,CAAE,QAASA,EAAU,SAAW,EAAA,EACvC,SAAA5G,EAAAA,kBAAAA,IAAC,MAAA,CACA,IAAK4G,EAAU,IACf,IAAI,GACJ,UAAW7G,EAAAA,GAAG,iBAAkB,CAC/B,MAAO6G,EAAU,OAAS,QAC1B,OAAQA,EAAU,OAAS,UAAY,CAACA,EAAU,KAClD,OAAQA,EAAU,OAAS,OAAA,CAC3B,CAAA,CAAA,CACF,CAAA,EAKDH,GAAwB,CAAC3I,GAAa,CAACkJ,GACvChH,EAAAA,kBAAAA,IAAC6F,GAAA,CACA,QAAS,GACT,iBAAkB,GAClB,UAAA/H,EACA,MAAAkF,EACA,YAAa,IAAM,CAClB,MAAMmF,EAAQd,EAAa,SAAS,cAAc,OAAO,EACrDc,IACCrK,EACHqK,EAAM,MAAA,EAENA,EAAM,KAAA,EAGT,CAAA,CAAA,EAKFnI,EAAAA,kBAAAA,IAACmF,GAAA,CACA,QAAS0B,GAAmB,CAAC/I,GAAawJ,EAC1C,MAAAtE,EACA,UAAAlF,EACA,oBAAAuH,EACA,iBAAAC,EACA,UAAAC,EACA,WAAAlC,EACA,uBAAwBuE,GACxB,qBAAsBC,GACtB,OAAAvE,CAAA,CAAA,CACD,CAAA,CAAA,CACD,CAAA,CAGH,CC7TA,MAAA8E,GAAe,60vBCMf,IAAIC,EAMJ,GAAI,CACHA,EAAiBD,EAClB,MAAQ,CAEPC,EAAiB,MAClB,CAQO,SAASC,GAAe,CAC9B,YAAAC,EAAc,aACd,OAAAC,EACA,aAAAC,EAAe,GACf,UAAAlM,EACA,GAAGgB,CACJ,EAAwB,CACvB,KAAM,CAACmL,EAAYC,CAAa,EAAIjF,EAAAA,SAAS,EAAK,EAC5C,CAACkF,EAAaC,CAAc,EAAInF,EAAAA,SAAS,EAAK,EAG9CoF,EAAW,CAChBN,EACAH,EACA,oBACA,qBACA,gFAAA,EACC,OAAO,OAAO,EAEV,CAACU,EAAiBC,CAAkB,EAAItF,EAAAA,SAAS,CAAC,EAClDuF,EAAaH,EAASC,CAAe,EAErCG,EAAmB,IAAM,CAC1BH,EAAkBD,EAAS,OAAS,EACvCE,EAAmBD,EAAkB,CAAC,EAEtCJ,EAAc,EAAI,CAEpB,EAGMQ,EAAoB,IACzBzI,yBAAC,MAAA,CAAI,UAAU,qBAEd,SAAA,CAAAV,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,+GAAA,CAAgH,EAG/HA,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,2CAAA,CAA4C,0BAG1D,MAAA,CAAI,UAAU,oDACd,SAAAU,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,WACd,SAAA,CAAAV,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,+CAAA,CAAgD,EAC/DA,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,kGAAA,CAAmG,EAGlHA,EAAAA,kBAAAA,IAAC,OAAI,UAAU,oDACd,iCAAC,MAAA,CAAI,UAAU,iDAAiD,CAAA,CACjE,CAAA,CAAA,CACD,CAAA,CACD,CAAA,EACD,EAGD,OACCU,EAAAA,kBAAAA,KAAC,MAAA,CACA,UAAWX,EAAAA,GACV,8EACAxD,CAAA,EAEA,GAAGgB,EAEF,SAAA,EAAA,CAACqL,GAAeF,IAAeD,GAAgBzI,EAAAA,kBAAAA,IAACmJ,EAAA,EAAkB,EAGnE,CAACT,GAAcO,GACfjJ,EAAAA,kBAAAA,IAAC,MAAA,CACA,IAAI,UACJ,OAAQ,GACR,MAAO,GACP,IAAKiJ,EACL,QAASC,EACT,OAAQ,IAAML,EAAe,EAAI,EACjC,UAAW9I,EAAAA,GAAG,iBAAkB,CAAC6I,GAAe,QAAQ,EACxD,MAAO,CAAE,QAASA,EAAc,QAAU,MAAA,CAAO,CAAA,EAInD5I,EAAAA,kBAAAA,IAAC,OAAA,CAAK,UAAU,8BAA+B,SAAAuI,CAAA,CAAY,CAAA,CAAA,CAAA,CAG9D,CCrFA,MAAMa,GAAqF,CAC1F,GAAI,CACH,UAAW,UACX,QAAS,mBACT,KAAM,aAAA,EAEP,GAAI,CACH,UAAW,YACX,QAAS,qBACT,KAAM,SAAA,EAEP,GAAI,CACH,UAAW,YACX,QAAS,qBACT,KAAM,aAAA,EAEP,GAAI,CACH,UAAW,YACX,QAAS,qBACT,KAAM,SAAA,CAER,EAEMC,EAAiF,CACtF,QAAS,CACR,QAAS,yDACT,WAAY,aAAA,EAEb,QAAS,CACR,QAAS,yDACT,WAAY,aAAA,EAEb,UAAW,CACV,QAAS,yDACT,WAAY,aAAA,CAEd,EAGaC,GAAwB,SAA+B,CAAA,QACnE9L,EAAU,UACV,QAAA+L,EACA,UAAAhN,EACA,SAAAiN,EAAW,SACZ,EAKG,CACF,MAAMC,EAAeJ,EAAc7L,CAAO,EAEpCkM,EAAiB,IAAM,CAC5B,GAAIH,EAAS,OAAOA,EAEpB,OAAQ/L,EAAA,CACP,IAAK,UACJ,MAAO,mBACR,IAAK,UACJ,MAAO,aACR,IAAK,YACJ,MAAO,eACR,QACC,MAAO,YAAA,CAEV,EAEA,OACCwC,wBAAC,OAAI,UAAWD,EAAAA,GAAG0J,EAAa,QAASA,EAAa,WAAYlN,CAAS,EAC1E,iCAAC+L,GAAA,CAAe,YAAaoB,IAAkB,UAAW3J,EAAAA,GAAG,aAAcyJ,CAAQ,EAAG,EACvF,CAEF,EAEaG,EAAe,SAAsB,CACjD,QAAAnH,EAAU,UAAA,QACVhF,EAAU,UACV,KAAA0D,EAAO,KACP,MAAAC,EACA,QAAAoI,EACA,YAAAK,EAAc,GACd,UAAArN,EACA,MAAAsN,CACD,EAAsB,CACrB,MAAMC,EAAQV,GAAQlI,CAAI,EACpBuI,EAAeJ,EAAc7L,CAAO,EAG1C,GAAIgF,IAAY,UACf,OACCxC,EAAAA,kBAAAA,IAACsJ,GAAA,CAAA,QACA9L,EACA,QAAA+L,EACA,UAAAhN,EACA,SAAU2E,IAAS,KAAO,UAAYA,IAAS,KAAO,YAAc,SAAA,CAAA,EAKvE,MAAM6I,EAAyB,IAAM,CACpC,OAAQvH,EAAA,CACP,IAAK,UACJ,OACCxC,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GACV,oDACA,oCACA+J,EAAM,QACNvN,CAAA,EAED,MAAO,CACN,eAAgB4E,GAAS,OACzB,GAAG0I,CAAA,CACJ,CAAA,EAIH,IAAK,OACJ,OACC7J,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,0BACb,SAAA,CAAC,EAAG,EAAG,CAAC,EAAE,IAAKgK,GACfhK,EAAAA,kBAAAA,IAAC,MAAA,CAEA,UAAWD,EAAAA,GACV,+CACA+J,EAAM,KACNvN,CAAA,EAED,MAAO,CACN,gBAAiB4E,GAAS,OAC1B,eAAgB,GAAG6I,EAAI,GAAG,KAC1B,GAAGH,CAAA,CACJ,EAVKG,CAAA,CAYN,EACF,EAGF,IAAK,WACJ,gCACE,MAAA,CAAI,UAAWjK,EAAAA,GAAG,YAAaxD,CAAS,EACxC,SAAA,CAAAyD,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,uDAAA,CAAwD,EACvEA,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,uDAAA,CAAwD,EACvEA,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,uDAAA,CAAwD,CAAA,EACxE,EAGF,QACC,OAAO,IAAA,CAEV,EAEMiK,EAAa,IAAM,CACxB,GAAIV,EAAS,OAAOA,EAEpB,OAAQ/L,EAAA,CACP,IAAK,UACJ,MAAO,mBACR,IAAK,UACJ,MAAO,aACR,IAAK,YACJ,MAAO,eACR,QACC,MAAO,YAAA,CAEV,EAEA,OACCwC,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAWD,EAAAA,GAAG0J,EAAa,QAASA,EAAa,UAAU,EAC/D,SAAA/I,yBAAC,MAAA,CAAI,UAAU,mCACd,SAAA,CAAAV,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAWD,KAAG+J,EAAM,UAAW,kCAAkC,EACpE,YAAuB,CACzB,EAECF,GACAlJ,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,cACd,SAAA,CAAAV,EAAAA,kBAAAA,IAAC,IAAA,CAAE,UAAU,oCAAqC,SAAAiK,EAAA,EAAa,EAC9DzM,IAAY,aACZwC,EAAAA,kBAAAA,IAAC,IAAA,CAAE,UAAU,6BAA6B,SAAA,gBAAA,CAAc,CAAA,CAAA,CAE1D,CAAA,CAAA,CAEF,CAAA,CACD,CAEF,EASakK,EAAgB,SAAuB,CACnD,SAAA5N,EAAA,QACAkB,EAAU,UACV,UAAAjB,CACD,EAAuB,CACtB,MAAMkN,EAAeJ,EAAc7L,CAAO,EAE1C,OACCwC,wBAAC,MAAA,CAAI,UAAWD,EAAAA,GAAG0J,EAAa,QAASA,EAAa,WAAYlN,CAAS,EAAI,SAAAD,CAAA,CAAS,CAE1F,EAGa6N,EAAiB,CAC7B,QAAU5M,GACTyC,wBAAC2J,EAAA,CAAa,QAAQ,UAAU,QAAQ,UAAU,KAAK,KAAM,GAAGpM,CAAA,CAAO,EAExE,QAAUA,GACTyC,wBAAC2J,EAAA,CAAa,QAAQ,UAAU,QAAQ,UAAU,KAAK,KAAM,GAAGpM,CAAA,CAAO,EAExE,UAAYA,GACXyC,wBAAC2J,EAAA,CAAa,QAAQ,UAAU,QAAQ,YAAY,KAAK,KAAM,GAAGpM,CAAA,CAAO,CAE3E,ECtOa6M,GAAmB,SAA0B,CACzD,UAAAtM,EACA,aAAAuM,CACD,EAA0B,CACzB,GAAIvM,EAAW,OAAO,KAEtB,MAAM8C,EAAWsB,EAAoB,KAErC,OACClC,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,qCAAqC,QAASqK,EAC3D,SAAAzJ,GAAYZ,EAAAA,kBAAAA,IAACY,EAAA,CAAS,KAAM,EAAA,CAAI,EAClC,CAEF,ECXa0J,GAAmB,SAA0B,CACzD,UAAAxM,EACA,aAAAuM,EACA,eAAAE,EACA,cAAAC,CACD,EAA0B,CACzB,MAAM5J,EAAWsB,EAAoB,KAC/BvB,EAAYuB,EAAoB,MAEtC,OACCxB,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAV,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAU,sBACV,QAASqK,EACT,aAAYvM,EAAY,QAAU,OACjC,SAAAA,EAAY6C,GAAaX,EAAAA,kBAAAA,IAACW,EAAA,CAAU,KAAM,EAAA,CAAI,EAAKC,GAAYZ,EAAAA,kBAAAA,IAACY,EAAA,CAAS,KAAM,EAAA,CAAI,CAAA,CAAA,EAGrFZ,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAU,sBACV,QAASuK,EACT,aAAW,sBACX,MAAM,mBACN,SAAAvK,EAAAA,kBAAAA,IAAC8B,GAAA,CAAsB,KAAM,EAAA,CAAI,CAAA,CAAA,EAGlC9B,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAU,sBACV,QAASwK,EACT,aAAW,qBACX,MAAM,kBACN,SAAAxK,EAAAA,kBAAAA,IAAC6B,GAAA,CAAqB,KAAM,EAAA,CAAI,CAAA,CAAA,CACjC,EACD,CAEF,EClCa4I,GAAmB,SAA0B,CACzD,aAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,qBAAAC,CACD,EAA0B,CACzB,MAAMC,EAAgB,CAAC,IAAM,GAAK,IAAM,EAAG,KAAM,IAAK,KAAM,CAAC,EAEvDC,EAAsBC,EAAAA,YAC1BzG,GAAwB,CACxBA,EAAE,gBAAA,EACFqG,EAAA,CACD,EACA,CAACA,CAAgB,CAAA,EAGZK,EAAsBD,cAAazG,GAAwB,CAChEA,EAAE,gBAAA,CACH,EAAG,CAAA,CAAE,EAEL,OACC7D,yBAAC,MAAA,CAAI,UAAU,WAAW,MAAO,CAAE,OAAQgK,EAAe,GAAK,MAAA,EAC9D,SAAA,CAAA1K,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAWD,EAAAA,GAAG,sBAAuB2K,GAAgB,eAAe,EACpE,QAASK,EACT,aAAW,WACV,WAAoB,UAAY/K,EAAAA,kBAAAA,IAACkC,EAAoB,SAApB,CAA6B,KAAM,EAAA,CAAI,CAAA,CAAA,EAGzEwI,GACAhK,EAAAA,kBAAAA,KAAC,MAAA,CACA,UAAU,mGACV,MAAO,CACN,OAAQ,OACR,OAAQ,GAAA,EAET,QAASuK,EACT,SAAA,CAAAjL,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,2DAA2D,SAAA,QAAK,0BAC9E,MAAA,CAAI,UAAU,OACb,SAAA8K,EAAc,IAAKI,GACnBlL,EAAAA,kBAAAA,IAAC,SAAA,CAEA,UAAWD,EAAAA,GACV,mFACA,aACA4K,IAAiBO,GAAQ,8BAAA,EAE1B,QAAS,IAAML,EAAqBK,CAAI,EACvC,SAAAA,IAAS,EAAI,SAAW,GAAGA,CAAI,GAAA,EAP3BA,CAAA,CASN,CAAA,CACF,CAAA,CAAA,CAAA,CACD,EAEF,CAEF,ECvCaC,GAAgB,SAAuB,CACnD,YAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,eAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,aAAAtN,EACA,aAAAuM,EACA,aAAAC,EACA,kBAAAe,EACA,sBAAAC,EACA,iBAAAC,EACA,mBAAAC,EACA,iBAAAjB,EACA,qBAAAC,CACD,EAAuB,CACtB,KAAM,CAACiB,EAAkBC,CAAmB,EAAIrI,EAAAA,SAAS,EAAK,EACxDsI,EAAkBhI,EAAAA,OAAuB,IAAI,EAC7CiI,EAAiB/J,EAAoB,WACrCgK,EAAqBhK,EAAoB,eAG/C+F,EAAAA,UAAU,IAAM,CACf,MAAMkE,EAAsBpN,GAAsB,CAC7CiN,EAAgB,SAAW,CAACA,EAAgB,QAAQ,SAASjN,EAAM,MAAc,GACpFgN,EAAoB,EAAK,CAE3B,EAEA,GAAID,EACH,gBAAS,iBAAiB,YAAaK,CAAkB,EAClD,IAAM,SAAS,oBAAoB,YAAaA,CAAkB,CAE3E,EAAG,CAACL,CAAgB,CAAC,EAErB,MAAMM,EAAsB,IAAM,CAC7Bd,GAAkBA,EAAe,OAAS,EAC7CS,EAAoB,CAACD,CAAgB,EAErCJ,EAAA,CAEF,EAEA,OACChL,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,0BAEb,SAAA,CAAA8K,GACA9K,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,WAAW,IAAKsL,EAC9B,SAAA,CAAAhM,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAWD,EAAAA,GACV,sBACAsL,GAAoB,gBACpBI,GAAqB,cAAA,EAEtB,QAASW,EACT,aAAW,YACX,MAAOX,EAAoB,iBAAmB,gBAC9C,SAAAzL,EAAAA,kBAAAA,IAAC+B,GAAA,CAAoB,KAAM,EAAA,CAAI,CAAA,CAAA,EAI/B+J,GAAoBR,GAAkBA,EAAe,OAAS,GAC9D5K,yBAAC,MAAA,CAAI,UAAU,mGACd,SAAA,CAAAV,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,gDAAgD,SAAA,YAAS,EAGxEA,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAWD,EAAAA,GACV,+EACA,CAACsL,GAAoB,2BAAA,EAEtB,QAAS,IAAM,CACdM,IAAwB,IAAI,EAC5BI,EAAoB,EAAK,CAC1B,EAAG,SAAA,KAAA,CAAA,EAKHT,EAAe,IAAKe,GACpB3L,EAAAA,kBAAAA,KAAC,SAAA,CAEA,UAAWX,EAAAA,GACV,+EACAwL,IAAmBc,EAAM,IAAM,2BAAA,EAEhC,QAAS,IAAM,CACdV,IAAwBU,EAAM,EAAE,EAChCN,EAAoB,EAAK,CAC1B,EACA,SAAA,CAAA/L,EAAAA,kBAAAA,IAAC,OAAA,CAAM,WAAM,KAAA,CAAM,EAClBqM,EAAM,UACN3L,yBAAC,OAAA,CAAK,UAAU,6BAA6B,SAAA,CAAA,IAAE2L,EAAM,SAAS,GAAA,CAAA,CAAC,CAAA,CAAA,EAX3DA,EAAM,EAAA,CAcZ,EAGAZ,GACAzL,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,0CACd,iCAAC,IAAA,CAAE,UAAU,uBAAuB,SAAA,0BAAA,CAAwB,CAAA,CAC7D,CAAA,CAAA,CAEF,CAAA,EAEF,EAGDA,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAU,sBACV,QAAUuE,GAAMqH,EAAiBrH,EAAE,SAAWA,EAAE,OAAO,EACvD,aAAW,kBACX,MAAM,sCACN,SAAAvE,EAAAA,kBAAAA,IAACiC,GAAA,CAAsB,KAAM,EAAA,CAAI,CAAA,CAAA,EAGlCjC,EAAAA,kBAAAA,IAACyK,GAAA,CACA,aAAAC,EACA,aAAAC,EACA,iBAAAC,EACA,qBAAAC,CAAA,CAAA,EAGD7K,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAU,sBACV,QAAS6L,EACT,aAAY1N,EAAe,kBAAoB,mBAC/C,MAAM,iBACL,SAAAA,EACE+N,GAAsBlM,EAAAA,kBAAAA,IAACkM,EAAA,CAAmB,KAAM,EAAA,CAAI,EACpDD,GAAkBjM,EAAAA,kBAAAA,IAACiM,EAAA,CAAe,KAAM,EAAA,CAAI,CAAA,CAAA,CAChD,EACD,CAEF,ECvJaK,GAAU,SAAiB,CACvC,YAAArO,EACA,SAAAwE,EACA,eAAA8J,EAAiB,CAAA,EACjB,UAAAC,EAAY,GACZ,OAAAlJ,CACD,EAAiB,CAChB,KAAM,CAACmJ,EAAYC,CAAa,EAAIhJ,EAAAA,SAAS,EAAK,EAC5C,CAACG,EAAeC,CAAgB,EAAIJ,EAAAA,SAAS,CAAC,EAC9C,CAACiJ,EAAYC,CAAa,EAAIlJ,EAAAA,SAAS,EAAK,EAC5C,CAACmJ,EAAgBC,CAAiB,EAAIpJ,EAAAA,SAAS,CAAE,EAAG,EAAG,EAAG,EAAG,EAC7DK,EAAaC,EAAAA,OAAuB,IAAI,EAExCC,EAAWxB,EAAW,EAAKxE,EAAcwE,EAAY,IAAM,EAE3DQ,EAAesB,GAAwC,CAC5D,GAAI9B,IAAa,EAAG,OAEpB,MAAM4B,EAAOE,EAAE,cAAc,sBAAA,EACvBwI,GAAYxI,EAAE,QAAUF,EAAK,MAAQA,EAAK,MAC1C3F,EAAU,KAAK,IAAI,EAAG,KAAK,IAAI+D,EAAUsK,EAAWtK,CAAQ,CAAC,EAGnEqK,EAAkB,CAAE,EAAGvI,EAAE,QAAUF,EAAK,KAAM,EAAGE,EAAE,QAAUF,EAAK,GAAA,CAAK,EACvEuI,EAAc,EAAI,EAClB,WAAW,IAAMA,EAAc,EAAK,EAAG,GAAG,EAE1CtJ,EAAO5E,CAAO,CACf,EAEM8F,EAAmBD,GAAwC,CAChE,GAAI,CAACR,EAAW,QAAS,OACzB,MAAMM,EAAON,EAAW,QAAQ,sBAAA,EAC1BgJ,GAAaxI,EAAE,QAAUF,EAAK,MAAQA,EAAK,MAAS,IAC1DP,EAAiB,KAAK,IAAI,EAAG,KAAK,IAAI,IAAKiJ,CAAQ,CAAC,CAAC,CACtD,EAEMpF,EAAmB,IAAM+E,EAAc,EAAI,EAC3ChI,EAAmB,IAAMgI,EAAc,EAAK,EAElD,OACChM,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,gBACd,SAAA,CAAAA,EAAAA,kBAAAA,KAAC,MAAA,CACA,IAAKqD,EACL,UAAWhE,EAAAA,GACV,gDACAyM,GAAa,yBAAA,EAEd,QAASvJ,EACT,YAAauB,EACb,aAAcmD,EACd,aAAcjD,EAEb,SAAA,CAAA6H,EAAe,IAAI,CAACS,EAAOC,IAAU,CACrC,MAAMC,EAAezK,EAAW,EAAKuK,EAAM,MAAQvK,EAAY,IAAM,EAC/D0K,EAAe1K,EAAW,GAAMuK,EAAM,IAAMA,EAAM,OAASvK,EAAY,IAAM,EACnF,OACCzC,EAAAA,kBAAAA,IAAC,MAAA,CAEA,UAAU,2BACV,MAAO,CACN,KAAM,GAAGkN,CAAY,IACrB,MAAO,GAAGC,CAAY,GAAA,CACvB,EALKF,CAAA,CAQR,CAAC,EAGDjN,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GACV,2BACAyM,GAAa,kCAAA,EAEd,MAAO,CAAE,MAAO,GAAGvI,CAAQ,GAAA,CAAI,CAAA,EAI/BwI,GAAc,CAACD,GACfxM,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,kCAAkC,MAAO,CAAE,KAAM,GAAG6D,CAAa,IAAI,CAAG,EAIxF7D,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GACV,yBACC0M,GAAcD,IAAc,cAC7BA,GAAa,+BAAA,EAEd,MAAO,CAAE,KAAM,GAAGvI,CAAQ,GAAA,CAAI,CAAA,EAI9B0I,GACA3M,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAU,yBACV,MAAO,CACN,KAAM6M,EAAe,EACrB,IAAKA,EAAe,CAAA,CACrB,CAAA,CACD,CAAA,CAAA,EAKDL,GACAxM,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,sDACd,iCAAC,MAAA,CAAI,UAAU,oEAAoE,SAAA,YAAA,CAEnF,CAAA,CACD,CAAA,EAEF,CAEF,ECtHaoN,GAAc,SAAqB,CAAE,YAAAnP,EAAa,SAAAwE,GAA8B,CAC5F,OACC/B,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,+BACb,SAAA,CAAAiC,EAAAA,WAAW1E,CAAW,EAAE,MAAI0E,EAAAA,WAAWF,CAAQ,CAAA,EACjD,CAEF,ECCa4K,GAAgB,SAAuB,CACnD,OAAAnP,EACA,QAAA4G,EACA,iBAAAwI,EACA,aAAAC,EACA,eAAArQ,EACA,mBAAAsQ,EACA,YAAAC,EAAc,aACd,UAAAlR,CACD,EAAuB,CACtB,MAAM2I,EAAahD,EAAoB,OACjCnB,EAAkBmB,EAAoB,YACtCwL,EAAsB1J,EAAAA,OAAuB,IAAI,EACjD2J,EAAoB3J,EAAAA,OAAuB,IAAI,EAC/CR,EAAaQ,EAAAA,OAAO,EAAK,EACzB,CAAC4J,EAAiBC,CAAkB,EAAI5O,EAAM,SAAS,EAAK,EAC5D,CAACwN,EAAYC,CAAa,EAAIzN,EAAM,SAAS,EAAK,EAClDmI,EAAiBpD,EAAAA,OAA8B,IAAI,EAE9BgH,EAAAA,YACzBzG,GAA2C,CAC3C,MAAM5F,EAAY,WAAW4F,EAAE,OAAO,KAAK,EAC3CrH,EAAeyB,CAAS,CACzB,EACA,CAACzB,CAAc,CAAA,EAGhB,MAAM4Q,EAAoB9C,EAAAA,YACzB,CAACzG,EAAqCwJ,IAAwB,CAC7D,MAAMC,EAAYD,EAAaJ,EAAoBD,EACnD,GAAI,CAACM,EAAU,QAAS,OACxB,MAAM3J,EAAO2J,EAAU,QAAQ,sBAAA,EAE/B,IAAIC,EACCF,EAGJE,EAAa,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,GAAK1J,EAAE,QAAUF,EAAK,KAAOA,EAAK,MAAM,CAAC,EAF9E4J,EAAa,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI1J,EAAE,QAAUF,EAAK,MAAQA,EAAK,KAAK,CAAC,EAK3EnH,EAAe+Q,CAAU,CAC1B,EACA,CAAC/Q,CAAc,CAAA,EAGVoH,EAAkB0G,EAAAA,YACvB,CAACzG,EAAqCwJ,IAAwB,CAC7DxJ,EAAE,eAAA,EACFA,EAAE,gBAAA,EACFf,EAAW,QAAU,GACrBqK,EAAmB,EAAI,EACvBC,EAAkBvJ,EAAGwJ,CAAU,CAChC,EACA,CAACD,CAAiB,CAAA,EAGnB7F,EAAAA,UAAU,IAAM,CACf,MAAMzD,EAAmBD,GAAkB,CAC1C,GAAI,CAACf,EAAW,QAAS,OAEzB,MAAMwK,EAAYP,IAAgB,WAAaE,EAAoBD,EACnE,GAAI,CAACM,EAAU,QAAS,OAExB,MAAM3J,EAAO2J,EAAU,QAAQ,sBAAA,EAC/B,IAAIC,EAEAR,IAAgB,aACnBQ,EAAa,KAAK,IAAI,EAAG,KAAK,IAAI,GAAI1J,EAAE,QAAUF,EAAK,MAAQA,EAAK,KAAK,CAAC,EAE1E4J,EAAa,KAAK,IAAI,EAAG,KAAK,IAAI,EAAG,GAAK1J,EAAE,QAAUF,EAAK,KAAOA,EAAK,MAAM,CAAC,EAG/EnH,EAAe+Q,CAAU,CAC1B,EAEMxJ,EAAgB,IAAM,CAC3BjB,EAAW,QAAU,GACrBqK,EAAmB,EAAK,CACzB,EAEA,GAAID,EACH,gBAAS,iBAAiB,YAAapJ,CAAe,EACtD,SAAS,iBAAiB,UAAWC,CAAa,EAE3C,IAAM,CACZ,SAAS,oBAAoB,YAAaD,CAAe,EACzD,SAAS,oBAAoB,UAAWC,CAAa,CACtD,CAEF,EAAG,CAACmJ,EAAiBH,EAAavQ,CAAc,CAAC,EAEjD,MAAMyK,EAAmBqD,EAAAA,YAAY,IAAM,CACtC5D,EAAe,SAClB,aAAaA,EAAe,OAAO,EAEpCsF,EAAc,EAAI,EAClBc,EAAmB,EAAI,CACxB,EAAG,CAACA,CAAkB,CAAC,EAEjB9I,EAAmBsG,EAAAA,YAAY,IAAM,CAE1C5D,EAAe,QAAU,WAAW,IAAM,CACpC5D,EAAW,UACfkJ,EAAc,EAAK,EACnBc,EAAmB,EAAK,EAE1B,EAAG,GAAG,CACP,EAAG,CAACA,CAAkB,CAAC,EAGvBvF,EAAAA,UAAU,IACF,IAAM,CACRb,EAAe,SAClB,aAAaA,EAAe,OAAO,CAErC,EACE,CAAA,CAAE,EAEL,MAAM8G,GAAoBpJ,EAAU,EAAI5G,GAAU,IAElD,OACCwC,EAAAA,kBAAAA,KAAC,MAAA,CACA,UAAWX,EAAAA,GACV,yBACA0N,IAAgB,WAAa,WAAa,0BAC1ClR,CAAA,EAED,aAAcoL,EACd,aAAcjD,EAEb,SAAA,CAAA+I,IAAgB,YAChBzN,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GACV,yBACA,sDACA,uCACAuN,GAAoBb,GAAcmB,EAC/B,gDACA,6CAAA,EAEJ,SAAAlN,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,8CACd,SAAA,CAAAA,EAAAA,kBAAAA,KAAC,MAAA,CACA,IAAKiN,EACL,UAAU,qCACV,YAAcpJ,GAAMD,EAAgBC,EAAG,EAAI,EAC3C,QAAUA,GAAMuJ,EAAkBvJ,EAAG,EAAI,EACzC,SAAA,CAAAvE,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAU,kDACV,MAAO,CAAE,OAAQ,GAAGkO,CAAgB,GAAA,CAAI,CAAA,EAEzClO,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GACV,mDACA6N,GAAmB,QAAA,EAEpB,MAAO,CAAE,OAAQ,GAAGM,CAAgB,GAAA,CAAI,CAAA,CACzC,CAAA,CAAA,EAEDxN,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,yCACb,SAAA,CAAA,KAAK,MAAMwN,CAAgB,EAAE,GAAA,CAAA,CAC/B,CAAA,CAAA,CACD,CAAA,CAAA,EAKFlO,EAAAA,kBAAAA,IAAC,SAAA,CACA,UAAU,wBACV,QAASuN,EACT,aAAYzI,EAAU,SAAW,OAChC,SAAAA,GAAW5G,IAAW,EACpB6C,GAAmBf,EAAAA,kBAAAA,IAACe,EAAA,CAAgB,KAAM,EAAA,CAAI,EAC9CmE,GAAclF,EAAAA,kBAAAA,IAACkF,EAAA,CAAW,KAAM,EAAA,CAAI,CAAA,CAAA,EAIvCuI,IAAgB,cAChBzN,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GACV,mCACA,uDACAuN,GAAoBb,GAAcmB,EAAkB,mBAAqB,eAAA,EAE1E,SAAAlN,EAAAA,kBAAAA,KAAC,MAAA,CACA,IAAKgN,EACL,UAAU,uCACV,YAAcnJ,GAAMD,EAAgBC,EAAG,EAAK,EAC5C,QAAUA,GAAMuJ,EAAkBvJ,EAAG,EAAK,EAC1C,SAAA,CAAAvE,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAU,oDACV,MAAO,CAAE,MAAO,GAAGkO,CAAgB,GAAA,CAAI,CAAA,EAExClO,EAAAA,kBAAAA,IAAC,MAAA,CACA,UAAWD,EAAAA,GACV,qDACA6N,GAAmB,QAAA,EAEpB,MAAO,CAAE,KAAM,GAAGM,CAAgB,GAAA,CAAI,CAAA,CACvC,CAAA,CAAA,CACD,CAAA,CACD,CAAA,CAAA,CAIJ,EC1KaC,GAAa,SAAoB,CAC7C,gBAAAtH,EACA,YAAA5I,EACA,SAAAwE,EACA,UAAA3E,EACA,OAAAI,EACA,QAAA4G,EACA,iBAAAwI,EACA,aAAAnP,EACA,aAAAuM,EACA,aAAAC,EACA,YAAAS,EACA,iBAAAC,EACA,eAAAC,EACA,eAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,kBAAA2C,EAAoB,aACpB,eAAA7B,EACA,UAAAC,EACA,OAAAlJ,EACA,aAAA+G,EACA,eAAAE,EACA,cAAAC,EACA,aAAA+C,EACA,eAAArQ,EACA,mBAAAsQ,EACA,kBAAA9B,EACA,sBAAAC,EACA,iBAAAC,EACA,mBAAAC,EACA,iBAAAjB,EACA,qBAAAC,CACD,EAAoB,CACnB,OACCnK,EAAAA,kBAAAA,KAAC,MAAA,CACA,UAAWX,EAAAA,GACV,sBACA,wCACA,wCACA8G,EAAkB,2BAA6B,yBAAA,EAEhD,SAAA,CAAA7G,EAAAA,kBAAAA,IAACsM,GAAA,CACA,YAAArO,EACA,SAAAwE,EACA,eAAA8J,EACA,UAAAC,EACA,OAAAlJ,CAAA,CAAA,EAGD5C,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,oCACd,SAAA,CAAAA,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,0BACd,SAAA,CAAAV,EAAAA,kBAAAA,IAACsK,GAAA,CACA,UAAAxM,EACA,aAAAuM,EACA,eAAAE,EACA,cAAAC,CAAA,CAAA,EAGDxK,EAAAA,kBAAAA,IAACqN,GAAA,CACA,OAAAnP,EACA,QAAA4G,EACA,iBAAAwI,EACA,aAAAC,EACA,eAAArQ,EACA,mBAAAsQ,EACA,YAAaY,CAAA,CAAA,EAGdpO,EAAAA,kBAAAA,IAACoN,GAAA,CAAY,YAAAnP,EAA0B,SAAAwE,CAAA,CAAoB,CAAA,EAC5D,EAEAzC,EAAAA,kBAAAA,IAACmL,GAAA,CACA,YAAAC,EACA,iBAAAC,EACA,eAAAC,EACA,eAAAC,EACA,aAAAC,EACA,kBAAAC,EACA,aAAAtN,EACA,aAAAuM,EACA,aAAAC,EACA,kBAAAe,EACA,sBAAAC,EACA,iBAAAC,EACA,mBAAAC,EACA,iBAAAjB,EACA,qBAAAC,CAAA,CAAA,CACD,CAAA,CACD,CAAA,CAAA,CAAA,CAGH,ECtIawD,GAAkB,SAAyB,CACvD,iBAAAhD,EACA,aAAAiD,CACD,EAAyB,CACxB,MAAI,CAACjD,GAAoB,CAACiD,EAAqB,KAG9CtO,EAAAA,kBAAAA,IAAC,OAAI,UAAU,yEACd,iCAAC,MAAA,CAAI,UAAU,4EACb,SAAAsO,CAAA,CACF,CAAA,CACD,CAEF,ECRaC,GAAe,SAAsB,CACjD,SAAAC,EACA,IAAAvI,EACA,OAAAC,EACA,YAAAkF,EACA,iBAAAC,EACA,YAAAoD,EACA,aAAApE,CACD,EAAsB,CACrB,OACCrK,EAAAA,kBAAAA,IAAC,QAAA,CACA,IAAKwO,EACL,IAAAvI,EACA,OAAAC,EACA,YAAAuI,EACA,UAAU,+BACV,QAASpE,EACR,SAAAe,2BAAgB,QAAA,CAAM,KAAK,YAAY,IAAKA,EAAa,QAASC,CAAA,CAAkB,CAAA,CAAA,CAGxF,ECGO,SAASqD,GAAoBnR,EAAiC,CACpE,KAAM,CACL,IAAA0I,EACA,OAAAC,EACA,UAAA3J,EACA,YAAA6O,EACA,eAAAE,EACA,YAAAmD,EACA,kBAAAL,EAAoB,aACpB,iBAAkBO,EAAmB,OACrC,iBAAAC,EAAmB,GACnB,aAAAC,EAAe,CAAA,CAAC,EACbtR,EACE8J,EAAerD,EAAAA,OAAuB,IAAI,EAC1C,CAAC0G,EAAcoE,CAAe,EAAIpL,EAAAA,SAAS,EAAK,EAChD,CAACiH,EAAcoE,CAAe,EAAIrL,EAAAA,SAAS,CAAC,EAE5C,CAAE,SAAA8K,EAAU,MAAOQ,EAAY,SAAUC,CAAA,EAAkBC,EAAAA,eAAe7H,CAAY,EACtF,CACL,iBAAAgE,EACA,gBAAA8D,EACA,gBAAAC,EACA,mBAAAC,EACA,mBAAAC,EACA,oBAAAC,EACA,gBAAAC,EACA,eAAAjE,EACA,UAAAkE,EACA,aAAAjE,CAAA,EACGkE,uBAAqB,CACxB,YAAAtE,EACA,eAAAE,EACA,YAAcpE,GAAU,QAAQ,MAAM,uBAAwBA,CAAK,CAAA,CACnE,EACK,CAAE,eAAAyI,CAAA,EAAmBC,EAAAA,cAAcpB,CAAQ,EAC3C,CACL,gBAAA3H,EACA,iBAAAyG,EACA,oBAAAuC,EACA,gBAAArL,EACA,iBAAAmD,EACA,iBAAAjD,CAAA,EACGoL,mBAAiBd,EAAW,UAAWtE,CAAY,EAGvDzC,EAAAA,UAAU,IAAM,CACf,GAAIoD,EAAkB,CACrB,MAAM0E,EAAWV,EAAmBL,EAAW,WAAW,EAC1DM,EAAmBS,CAAQ,CAC5B,CACD,EAAG,CAACf,EAAW,YAAa3D,EAAkBgE,EAAoBC,CAAkB,CAAC,EAGrF,MAAMU,EAAsB9E,GAAiB,CACvCsD,EAAS,UACdA,EAAS,QAAQ,aAAetD,EAChC6D,EAAgB7D,CAAI,EACpB4D,EAAgB,EAAK,EACtB,EAGAmB,OAAAA,uBAAqB,CACpB,cAAAhB,EACA,gBAAAG,EACA,eAAAO,EACA,SAAUX,EAAW,QAAA,CACrB,EAGAtO,EAAAA,kBAAAA,KAAC,MAAA,CACA,IAAK2G,EACL,UAAWtH,EAAAA,GAAG,8CAA+CxD,CAAS,EACtE,MAAO,CAAE,SAAU,QAAA,EACnB,YAAaiI,EACb,aAAcmD,EACd,aAAcjD,EACd,SAAA,CAAA1E,EAAAA,kBAAAA,IAACuO,GAAA,CACA,SAAAC,EACA,IAAAvI,EACA,OAAAC,EACA,YAAAkF,EACA,iBAAAC,EACA,YAAAoD,EACA,aAAcQ,EAAc,UAAA,CAAA,EAG7BjP,EAAAA,kBAAAA,IAACqO,GAAA,CAAgB,iBAAAhD,EAAoC,aAAc8D,CAAA,CAAiB,EAGnF,CAACH,EAAW,WACZhP,EAAAA,kBAAAA,IAACoK,GAAA,CACA,UAAW4E,EAAW,UACtB,aAAcC,EAAc,UAAA,CAAA,EAI9BjP,EAAAA,kBAAAA,IAACmO,GAAA,CACA,gBAAAtH,EACA,YAAamI,EAAW,YACxB,SAAUA,EAAW,SACrB,UAAWA,EAAW,UACtB,OAAQA,EAAW,OACnB,QAASA,EAAW,QACpB,iBAAA1B,EACA,aAAc0B,EAAW,aACzB,aAAAtE,EACA,aAAAC,EACA,YAAAS,EACA,iBAAAC,EACA,eAAgBmE,EAChB,eAAAjE,EACA,aAAAC,EACA,kBAAmBiE,EACnB,kBAAArB,EACA,eAAgBY,EAAW,eAC3B,UAAWA,EAAW,UACtB,OAAQC,EAAc,OACtB,aAAcA,EAAc,WAC5B,eAAgBA,EAAc,aAC9B,cAAeA,EAAc,YAC7B,aAAcA,EAAc,WAC5B,eAAgBA,EAAc,UAC9B,mBAAoBY,EACpB,kBAAmBT,EACnB,sBAAuBG,EACvB,iBAAkBI,EAClB,mBAAoBV,EAAc,iBAClC,iBAAkB,IAAMH,EAAgB,CAACpE,CAAY,EACrD,qBAAsBsF,CAAA,CAAA,EAItBpB,GACAlO,EAAAA,kBAAAA,KAAAoC,6BAAA,CAEE,SAAA,CAAAkM,EAAW,WACX,CAACA,EAAW,WACZ,CAACA,EAAW,cACXL,EACA3O,EAAAA,kBAAAA,IAACkK,EAAA,CAAc,QAAQ,UACtB,SAAAlK,EAAAA,kBAAAA,IAAC2O,EAAA,CAAiB,QAAQ,SAAA,CAAU,CAAA,CACrC,0BAECxE,EAAe,QAAf,CAAwB,GAAG0E,CAAA,CAAc,GAI3CG,EAAW,YACVL,0BACCzE,EAAA,CAAc,QAAQ,UACtB,SAAAlK,wBAAC2O,EAAA,CAAiB,QAAQ,UAAU,EACrC,EAEA3O,EAAAA,kBAAAA,IAACmK,EAAe,QAAf,CAAwB,GAAG0E,CAAA,CAAc,GAI3CG,EAAW,aACX,CAACA,EAAW,YACXL,EACA3O,EAAAA,kBAAAA,IAACkK,GAAc,QAAQ,YACtB,iCAACyE,EAAA,CAAiB,QAAQ,YAAY,CAAA,CACvC,0BAECxE,EAAe,UAAf,CAA0B,GAAG0E,CAAA,CAAc,EAAA,CAAA,CAE/C,CAAA,CAAA,CAAA,CAIJ"}
|