@therealtinhtute/baroiplayer 1.0.8 → 1.2.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.
Files changed (1004) hide show
  1. package/LICENSE +2 -2
  2. package/README.md +15 -15
  3. package/dist/context/media.js +2 -0
  4. package/dist/context/media.js.map +1 -0
  5. package/dist/context/media.mjs +15 -0
  6. package/dist/context/media.mjs.map +1 -0
  7. package/dist/context/store.js +2 -0
  8. package/dist/context/store.js.map +1 -0
  9. package/dist/context/store.mjs +5 -0
  10. package/dist/context/store.mjs.map +1 -0
  11. package/dist/context-BYwDoSRX.js +1172 -0
  12. package/dist/context-BYwDoSRX.js.map +1 -0
  13. package/dist/context-eNS62_ac.cjs +23 -0
  14. package/dist/context-eNS62_ac.cjs.map +1 -0
  15. package/dist/core-events-B1iM2F46.cjs +2 -0
  16. package/dist/core-events-B1iM2F46.cjs.map +1 -0
  17. package/dist/core-events-DunPHKRE.js +484 -0
  18. package/dist/core-events-DunPHKRE.js.map +1 -0
  19. package/dist/core-plugins-By-4-kGs.cjs +2 -0
  20. package/dist/core-plugins-By-4-kGs.cjs.map +1 -0
  21. package/dist/core-plugins-DSBWcTuX.js +821 -0
  22. package/dist/core-plugins-DSBWcTuX.js.map +1 -0
  23. package/dist/core.js +37 -0
  24. package/dist/core.js.map +1 -0
  25. package/dist/core.mjs +1233 -0
  26. package/dist/core.mjs.map +1 -0
  27. package/dist/enhanced-components-B_l3cist.js +1142 -0
  28. package/dist/enhanced-components-B_l3cist.js.map +1 -0
  29. package/dist/enhanced-components-BspFs9OO.cjs +2 -0
  30. package/dist/enhanced-components-BspFs9OO.cjs.map +1 -0
  31. package/dist/hooks-BXwI8QG6.cjs +4 -0
  32. package/dist/hooks-BXwI8QG6.cjs.map +1 -0
  33. package/dist/hooks-Bpi-jDiO.js +1816 -0
  34. package/dist/hooks-Bpi-jDiO.js.map +1 -0
  35. package/dist/index.css +1 -102
  36. package/dist/index.js +112 -21
  37. package/dist/index.js.map +1 -0
  38. package/dist/index.mjs +6273 -16
  39. package/dist/index.mjs.map +1 -0
  40. package/dist/minimal-components-C4z900Ro.js +1926 -0
  41. package/dist/minimal-components-C4z900Ro.js.map +1 -0
  42. package/dist/minimal-components-v4qBp6jv.cjs +2 -0
  43. package/dist/minimal-components-v4qBp6jv.cjs.map +1 -0
  44. package/dist/minimal-components.css +1 -589
  45. package/dist/mona-loading.gif +0 -0
  46. package/dist/performance-monitor-C5k6FDXw.js +301 -0
  47. package/dist/performance-monitor-C5k6FDXw.js.map +1 -0
  48. package/dist/performance-monitor-lJmuUjQQ.cjs +2 -0
  49. package/dist/performance-monitor-lJmuUjQQ.cjs.map +1 -0
  50. package/dist/utils-CFOue_9K.cjs +9 -0
  51. package/dist/utils-CFOue_9K.cjs.map +1 -0
  52. package/dist/utils-Dzpl2ArK.js +2844 -0
  53. package/dist/utils-Dzpl2ArK.js.map +1 -0
  54. package/dist/utils.js +2 -0
  55. package/dist/utils.js.map +1 -0
  56. package/dist/utils.mjs +11 -0
  57. package/dist/utils.mjs.map +1 -0
  58. package/package.json +11 -40
  59. package/src/adapters/videojs-adapter.tsx +441 -441
  60. package/src/components/AnimateLoading.tsx +85 -93
  61. package/src/components/LoadingState.tsx +199 -208
  62. package/src/components/__tests__/media-player-accessibility.test.tsx +510 -0
  63. package/src/components/__tests__/media-player-react19.test.tsx +457 -0
  64. package/src/components/accessibility/keyboard-help-overlay.tsx +201 -207
  65. package/src/components/basic/index.ts +28 -28
  66. package/src/components/enhanced/advanced-features.tsx +49 -54
  67. package/src/components/enhanced/debug-panel.tsx +148 -122
  68. package/src/components/enhanced/enhanced-controls.tsx +117 -120
  69. package/src/components/enhanced/enhanced-media-player.tsx +281 -224
  70. package/src/components/enhanced/error-handling.tsx +50 -57
  71. package/src/components/enhanced/index.ts +27 -27
  72. package/src/components/enhanced/media-player-enhanced.tsx +117 -83
  73. package/src/components/examples/basic-video-player.tsx +35 -40
  74. package/src/components/examples/enhanced-controls-example.tsx +16 -30
  75. package/src/components/examples/enhanced-media-player-example.tsx +196 -187
  76. package/src/components/examples/loading-states-demo.tsx +113 -113
  77. package/src/components/examples/react-19-demo.tsx +88 -116
  78. package/src/components/examples/volume-orientation-demo.tsx +77 -85
  79. package/src/components/icon-demo.tsx +189 -202
  80. package/src/components/icons/svg-icons/ArrowLeftIcon.tsx +13 -13
  81. package/src/components/icons/svg-icons/ArrowRightIcon.tsx +13 -13
  82. package/src/components/icons/svg-icons/AudioIcon.tsx +16 -16
  83. package/src/components/icons/svg-icons/BackwardIcon.tsx +7 -7
  84. package/src/components/icons/svg-icons/CameraIcon.tsx +13 -13
  85. package/src/components/icons/svg-icons/CheckIcon.tsx +13 -13
  86. package/src/components/icons/svg-icons/EnablePiPIcon.tsx +13 -13
  87. package/src/components/icons/svg-icons/ForwardIcon.tsx +7 -7
  88. package/src/components/icons/svg-icons/FullscreenEnterIcon.tsx +18 -18
  89. package/src/components/icons/svg-icons/FullscreenExitIcon.tsx +18 -18
  90. package/src/components/icons/svg-icons/LoadingIcon.tsx +27 -27
  91. package/src/components/icons/svg-icons/PauseIcon.tsx +18 -18
  92. package/src/components/icons/svg-icons/PlayIcon.tsx +16 -16
  93. package/src/components/icons/svg-icons/PlaybackSpeedIcon.tsx +18 -18
  94. package/src/components/icons/svg-icons/QualityIcon.tsx +16 -16
  95. package/src/components/icons/svg-icons/SettingsIcon.tsx +7 -7
  96. package/src/components/icons/svg-icons/SliderIcon.tsx +16 -16
  97. package/src/components/icons/svg-icons/SubtitleIcon.tsx +16 -16
  98. package/src/components/icons/svg-icons/SubtitleOffIcon.tsx +20 -20
  99. package/src/components/icons/svg-icons/UnPiPIcon.tsx +13 -13
  100. package/src/components/icons/svg-icons/VolumeMutedIcon.tsx +11 -11
  101. package/src/components/icons/svg-icons/VolumeOneIcon.tsx +17 -17
  102. package/src/components/icons/svg-icons/VolumeThreeIcon.tsx +11 -11
  103. package/src/components/icons/svg-icons/VolumeTwoIcon.tsx +11 -11
  104. package/src/components/legacy.tsx +14 -20
  105. package/src/components/media-metadata-display.tsx +78 -79
  106. package/src/components/media-player-controls.tsx +37 -40
  107. package/src/components/media-player-error.tsx +2 -2
  108. package/src/components/media-player-fullscreen.tsx +2 -2
  109. package/src/components/media-player-hls.tsx +89 -89
  110. package/src/components/media-player-play.tsx +2 -2
  111. package/src/components/media-player-root.tsx +20 -22
  112. package/src/components/media-player-seek.tsx +1 -1
  113. package/src/components/media-player-tooltip.tsx +1 -1
  114. package/src/components/media-player-video.tsx +21 -6
  115. package/src/components/media-player-volume.tsx +3 -3
  116. package/src/components/media-player.tsx +209 -174
  117. package/src/components/media-suspense.tsx +71 -89
  118. package/src/components/player-settings-form.tsx +143 -148
  119. package/src/components/react-player-wrapper.tsx +23 -23
  120. package/src/components/simple-video-player.tsx +53 -51
  121. package/src/components/ui/blur-poster.tsx +93 -0
  122. package/src/components/ui/empty-state.tsx +91 -0
  123. package/src/components/ui/enhanced-seek-bar.tsx +77 -58
  124. package/src/components/ui/error-state.tsx +124 -0
  125. package/src/components/ui/fullscreen-button.tsx +71 -50
  126. package/src/components/ui/loading-skeleton.tsx +107 -0
  127. package/src/components/ui/media-resource-preloader.tsx +262 -197
  128. package/src/components/ui/offline-message.tsx +98 -0
  129. package/src/components/ui/play-button.tsx +79 -87
  130. package/src/components/ui/seek-bar.tsx +170 -140
  131. package/src/components/ui/time-display.tsx +33 -12
  132. package/src/components/ui/volume-control.tsx +91 -44
  133. package/src/components/unified/base-media-player.tsx +61 -55
  134. package/src/components/unified/media-player.tsx +3 -3
  135. package/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +528 -502
  136. package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +110 -89
  137. package/src/components/variants/minimal/MinimalControls.tsx +100 -118
  138. package/src/components/variants/minimal/MinimalLoading.tsx +19 -23
  139. package/src/components/variants/minimal/MinimalMediaPlayer.tsx +283 -280
  140. package/src/components/variants/minimal/MinimalOverlay.tsx +43 -49
  141. package/src/components/variants/minimal/MinimalPlayButton.tsx +44 -53
  142. package/src/components/variants/minimal/MinimalSeekBar.tsx +130 -140
  143. package/src/components/variants/minimal/MinimalVolumeControl.tsx +59 -64
  144. package/src/components/variants/minimal/SimpleMinimalPlayer.tsx +29 -32
  145. package/src/components/variants/minimal/components/CenterPlayButton.tsx +1 -1
  146. package/src/components/variants/minimal/components/ControlBar.tsx +7 -11
  147. package/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +381 -330
  148. package/src/components/variants/minimal/components/PlaybackControls.tsx +6 -11
  149. package/src/components/variants/minimal/components/RightControls.tsx +8 -17
  150. package/src/components/variants/minimal/components/SeekBar.tsx +16 -20
  151. package/src/components/variants/minimal/components/SettingsDropdown.tsx +12 -14
  152. package/src/components/variants/minimal/components/SubtitleDisplay.tsx +1 -1
  153. package/src/components/variants/minimal/components/TimeDisplay.tsx +2 -5
  154. package/src/components/variants/minimal/components/VideoElement.tsx +3 -10
  155. package/src/components/variants/minimal/components/VolumeControl.tsx +42 -39
  156. package/src/components/video-player.tsx +10 -10
  157. package/src/context/__tests__/media-store.test.ts +509 -0
  158. package/src/context/error-handling.ts +106 -102
  159. package/src/context/media-context.tsx +56 -10
  160. package/src/context/media-provider.tsx +16 -17
  161. package/src/context/media-store.ts +68 -60
  162. package/src/context/persistence.ts +74 -65
  163. package/src/core/events/event-system.ts +422 -416
  164. package/src/core/events/hooks.ts +275 -252
  165. package/src/core/events/index.ts +14 -14
  166. package/src/core/events/middleware.ts +269 -252
  167. package/src/core/index.ts +8 -8
  168. package/src/core/optimization/bundle-optimizer.tsx +76 -72
  169. package/src/core/performance/cicd.ts +91 -89
  170. package/src/core/performance/index.ts +22 -22
  171. package/src/core/performance/media-loading-optimizer.ts +518 -512
  172. package/src/core/performance/performance-budgets.ts +414 -409
  173. package/src/core/performance/performance-monitor.tsx +451 -439
  174. package/src/core/performance/performance-testing.ts +439 -437
  175. package/src/core/plugins/__tests__/registry.test.ts +595 -0
  176. package/src/core/plugins/base-plugin.ts +197 -196
  177. package/src/core/plugins/enhanced-plugin-system.ts +157 -139
  178. package/src/core/plugins/examples/analytics-plugin.ts +229 -230
  179. package/src/core/plugins/index.ts +26 -26
  180. package/src/core/plugins/registry.ts +544 -325
  181. package/src/core/plugins/types.ts +115 -105
  182. package/src/core/plugins/utils.ts +292 -291
  183. package/src/core/progressive-loading.tsx +297 -288
  184. package/src/core/providers/enhanced-hls-provider.ts +98 -99
  185. package/src/core/providers/lazy-provider.tsx +14 -0
  186. package/src/core/providers/service-provider.tsx +104 -108
  187. package/src/core/utils.tsx +22 -26
  188. package/src/features/media-session/media-session-manager.ts +391 -409
  189. package/src/features/picture-in-picture/pip-manager.ts +364 -365
  190. package/src/features/playlist/playlist-manager.ts +605 -585
  191. package/src/features/subtitles/subtitle-manager.ts +424 -430
  192. package/src/features/subtitles/subtitle-parser.ts +277 -273
  193. package/src/features/thumbnails/thumbnail-generator.ts +511 -502
  194. package/src/hooks/__tests__/currentTime-fix.test.ts +149 -0
  195. package/src/hooks/__tests__/use-media-player.test.ts +712 -0
  196. package/src/hooks/__tests__/use-media-state.test.tsx +316 -0
  197. package/src/hooks/accessibility/index.ts +20 -20
  198. package/src/hooks/accessibility/use-accessibility-preferences.ts +177 -175
  199. package/src/hooks/accessibility/use-focus-management.ts +170 -163
  200. package/src/hooks/accessibility/use-keyboard-shortcuts.ts +132 -124
  201. package/src/hooks/accessibility/use-screen-reader.ts +191 -161
  202. package/src/hooks/core/index.ts +30 -30
  203. package/src/hooks/legacy.ts +3 -9
  204. package/src/hooks/use-buffer-health.ts +218 -0
  205. package/src/hooks/use-enhanced-media-player.ts +171 -81
  206. package/src/hooks/use-focus-trap.tsx +162 -0
  207. package/src/hooks/use-intelligent-preloading.ts +256 -232
  208. package/src/hooks/use-keyboard-controls.ts +80 -80
  209. package/src/hooks/use-keyboard-shortcuts.ts +255 -0
  210. package/src/hooks/use-media-actions.ts +81 -72
  211. package/src/hooks/use-media-metadata.ts +75 -73
  212. package/src/hooks/use-media-optimistic.ts +145 -151
  213. package/src/hooks/use-media-player.ts +193 -160
  214. package/src/hooks/use-media-state.ts +63 -59
  215. package/src/hooks/use-memory-optimization.ts +121 -119
  216. package/src/hooks/use-network-status.ts +124 -0
  217. package/src/hooks/use-optimistic-controls.ts +91 -88
  218. package/src/hooks/use-optimized-media.ts +76 -56
  219. package/src/hooks/use-smart-preload.ts +229 -0
  220. package/src/hooks/use-touch-gestures.ts +427 -383
  221. package/src/hooks/useEnhancedSubtitles.ts +245 -245
  222. package/src/hooks/useKeyboardShortcuts.ts +84 -52
  223. package/src/hooks/useMediaControls.ts +22 -22
  224. package/src/hooks/useScreenshot.ts +51 -47
  225. package/src/hooks/useSubtitles.ts +53 -53
  226. package/src/hooks/useVideoPlayer.ts +107 -61
  227. package/src/icons/components/FullscreenIcon.tsx +34 -35
  228. package/src/icons/components/SettingsIcon.tsx +35 -36
  229. package/src/icons/components/animated/LoadingIcon.tsx +25 -41
  230. package/src/icons/components/animated/PlayPauseIcon.tsx +38 -46
  231. package/src/icons/components/media/PauseIcon.tsx +36 -37
  232. package/src/icons/components/media/PlayIcon.tsx +35 -36
  233. package/src/icons/components/volume/VolumeIcon.tsx +36 -37
  234. package/src/icons/components/volume/VolumeOffIcon.tsx +36 -37
  235. package/src/icons/index.ts +38 -38
  236. package/src/icons/provider.tsx +40 -46
  237. package/src/icons/types.ts +51 -31
  238. package/src/index-enhanced.ts +10 -10
  239. package/src/index-legacy.ts +4 -7
  240. package/src/index.css +80 -80
  241. package/src/index.ts +8 -23
  242. package/src/lib/__tests__/async-utils.test.ts +291 -0
  243. package/src/lib/async-utils.ts +194 -0
  244. package/src/lib/deprecation.ts +4 -4
  245. package/src/lib/index.ts +3 -2
  246. package/src/lib/utils.ts +3 -3
  247. package/src/styles/globals.css +3 -3
  248. package/src/styles/minimal-player.css +606 -574
  249. package/src/styles/pixel-art.css +23 -28
  250. package/src/styles/videojs.css +43 -43
  251. package/src/test/accessibility-utils.ts +208 -0
  252. package/src/test/browser-simulation.ts +235 -0
  253. package/src/test/media-mocks.ts +169 -0
  254. package/src/test/performance-utils.ts +192 -0
  255. package/src/test/setup.ts +256 -41
  256. package/src/types/events.ts +30 -30
  257. package/src/types/formats.ts +56 -72
  258. package/src/types/index.ts +16 -38
  259. package/src/types/videojs-plugins.d.ts +6 -6
  260. package/dist/index.d.ts +0 -1425
  261. package/dist/package.json +0 -62
  262. package/dist/src/adapters/videojs-adapter.d.ts +0 -38
  263. package/dist/src/adapters/videojs-adapter.tsx +0 -470
  264. package/dist/src/components/AnimateLoading.d.ts +0 -9
  265. package/dist/src/components/AnimateLoading.tsx +0 -115
  266. package/dist/src/components/LoadingState.d.ts +0 -33
  267. package/dist/src/components/LoadingState.tsx +0 -248
  268. package/dist/src/components/accessibility/keyboard-help-overlay.d.ts +0 -17
  269. package/dist/src/components/accessibility/keyboard-help-overlay.tsx +0 -213
  270. package/dist/src/components/audio-player.d.ts +0 -3
  271. package/dist/src/components/audio-player.tsx +0 -85
  272. package/dist/src/components/basic/index.d.ts +0 -26
  273. package/dist/src/components/basic/index.ts +0 -37
  274. package/dist/src/components/enhanced/advanced-features.d.ts +0 -45
  275. package/dist/src/components/enhanced/advanced-features.tsx +0 -316
  276. package/dist/src/components/enhanced/debug-panel.d.ts +0 -70
  277. package/dist/src/components/enhanced/debug-panel.tsx +0 -422
  278. package/dist/src/components/enhanced/enhanced-controls.d.ts +0 -50
  279. package/dist/src/components/enhanced/enhanced-controls.tsx +0 -600
  280. package/dist/src/components/enhanced/enhanced-media-player.d.ts +0 -26
  281. package/dist/src/components/enhanced/enhanced-media-player.tsx +0 -509
  282. package/dist/src/components/enhanced/error-handling.d.ts +0 -36
  283. package/dist/src/components/enhanced/error-handling.tsx +0 -345
  284. package/dist/src/components/enhanced/index.d.ts +0 -7
  285. package/dist/src/components/enhanced/index.ts +0 -39
  286. package/dist/src/components/enhanced/media-player-enhanced.d.ts +0 -21
  287. package/dist/src/components/enhanced/media-player-enhanced.tsx +0 -349
  288. package/dist/src/components/examples/basic-video-player.d.ts +0 -10
  289. package/dist/src/components/examples/basic-video-player.tsx +0 -55
  290. package/dist/src/components/examples/custom-controls-example.d.ts +0 -10
  291. package/dist/src/components/examples/custom-controls-example.tsx +0 -63
  292. package/dist/src/components/examples/enhanced-controls-example.d.ts +0 -9
  293. package/dist/src/components/examples/enhanced-controls-example.tsx +0 -114
  294. package/dist/src/components/examples/enhanced-media-player-example.d.ts +0 -9
  295. package/dist/src/components/examples/enhanced-media-player-example.tsx +0 -293
  296. package/dist/src/components/examples/loading-states-demo.d.ts +0 -2
  297. package/dist/src/components/examples/loading-states-demo.tsx +0 -142
  298. package/dist/src/components/examples/react-19-demo.d.ts +0 -10
  299. package/dist/src/components/examples/react-19-demo.tsx +0 -381
  300. package/dist/src/components/examples/volume-orientation-demo.d.ts +0 -2
  301. package/dist/src/components/examples/volume-orientation-demo.tsx +0 -114
  302. package/dist/src/components/icon-demo.d.ts +0 -2
  303. package/dist/src/components/icon-demo.tsx +0 -209
  304. package/dist/src/components/icons/index.d.ts +0 -36
  305. package/dist/src/components/icons/index.tsx +0 -166
  306. package/dist/src/components/icons/svg-icons/ArrowLeftIcon.d.ts +0 -4
  307. package/dist/src/components/icons/svg-icons/ArrowLeftIcon.tsx +0 -18
  308. package/dist/src/components/icons/svg-icons/ArrowRightIcon.d.ts +0 -4
  309. package/dist/src/components/icons/svg-icons/ArrowRightIcon.tsx +0 -18
  310. package/dist/src/components/icons/svg-icons/AudioIcon.d.ts +0 -4
  311. package/dist/src/components/icons/svg-icons/AudioIcon.tsx +0 -22
  312. package/dist/src/components/icons/svg-icons/BackwardIcon.d.ts +0 -4
  313. package/dist/src/components/icons/svg-icons/BackwardIcon.tsx +0 -12
  314. package/dist/src/components/icons/svg-icons/CameraIcon.d.ts +0 -4
  315. package/dist/src/components/icons/svg-icons/CameraIcon.tsx +0 -19
  316. package/dist/src/components/icons/svg-icons/CheckIcon.d.ts +0 -4
  317. package/dist/src/components/icons/svg-icons/CheckIcon.tsx +0 -19
  318. package/dist/src/components/icons/svg-icons/EnablePiPIcon.d.ts +0 -4
  319. package/dist/src/components/icons/svg-icons/EnablePiPIcon.tsx +0 -17
  320. package/dist/src/components/icons/svg-icons/ForwardIcon.d.ts +0 -4
  321. package/dist/src/components/icons/svg-icons/ForwardIcon.tsx +0 -12
  322. package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts +0 -4
  323. package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.tsx +0 -23
  324. package/dist/src/components/icons/svg-icons/FullscreenExitIcon.d.ts +0 -4
  325. package/dist/src/components/icons/svg-icons/FullscreenExitIcon.tsx +0 -23
  326. package/dist/src/components/icons/svg-icons/LoadingIcon.d.ts +0 -4
  327. package/dist/src/components/icons/svg-icons/LoadingIcon.tsx +0 -32
  328. package/dist/src/components/icons/svg-icons/PauseIcon.d.ts +0 -4
  329. package/dist/src/components/icons/svg-icons/PauseIcon.tsx +0 -23
  330. package/dist/src/components/icons/svg-icons/PlayIcon.d.ts +0 -4
  331. package/dist/src/components/icons/svg-icons/PlayIcon.tsx +0 -21
  332. package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +0 -4
  333. package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.tsx +0 -23
  334. package/dist/src/components/icons/svg-icons/QualityIcon.d.ts +0 -4
  335. package/dist/src/components/icons/svg-icons/QualityIcon.tsx +0 -21
  336. package/dist/src/components/icons/svg-icons/SettingsIcon.d.ts +0 -4
  337. package/dist/src/components/icons/svg-icons/SettingsIcon.tsx +0 -12
  338. package/dist/src/components/icons/svg-icons/SliderIcon.d.ts +0 -4
  339. package/dist/src/components/icons/svg-icons/SliderIcon.tsx +0 -21
  340. package/dist/src/components/icons/svg-icons/SubtitleIcon.d.ts +0 -4
  341. package/dist/src/components/icons/svg-icons/SubtitleIcon.tsx +0 -21
  342. package/dist/src/components/icons/svg-icons/SubtitleOffIcon.d.ts +0 -4
  343. package/dist/src/components/icons/svg-icons/SubtitleOffIcon.tsx +0 -25
  344. package/dist/src/components/icons/svg-icons/UnPiPIcon.d.ts +0 -4
  345. package/dist/src/components/icons/svg-icons/UnPiPIcon.tsx +0 -17
  346. package/dist/src/components/icons/svg-icons/VolumeMutedIcon.d.ts +0 -4
  347. package/dist/src/components/icons/svg-icons/VolumeMutedIcon.tsx +0 -16
  348. package/dist/src/components/icons/svg-icons/VolumeOneIcon.d.ts +0 -4
  349. package/dist/src/components/icons/svg-icons/VolumeOneIcon.tsx +0 -22
  350. package/dist/src/components/icons/svg-icons/VolumeThreeIcon.d.ts +0 -4
  351. package/dist/src/components/icons/svg-icons/VolumeThreeIcon.tsx +0 -16
  352. package/dist/src/components/icons/svg-icons/VolumeTwoIcon.d.ts +0 -4
  353. package/dist/src/components/icons/svg-icons/VolumeTwoIcon.tsx +0 -16
  354. package/dist/src/components/legacy.d.ts +0 -13
  355. package/dist/src/components/legacy.tsx +0 -93
  356. package/dist/src/components/media-metadata-display.d.ts +0 -11
  357. package/dist/src/components/media-metadata-display.tsx +0 -100
  358. package/dist/src/components/media-player-audio.d.ts +0 -9
  359. package/dist/src/components/media-player-audio.tsx +0 -39
  360. package/dist/src/components/media-player-controls.d.ts +0 -23
  361. package/dist/src/components/media-player-controls.tsx +0 -226
  362. package/dist/src/components/media-player-error.d.ts +0 -16
  363. package/dist/src/components/media-player-error.tsx +0 -163
  364. package/dist/src/components/media-player-fullscreen.d.ts +0 -12
  365. package/dist/src/components/media-player-fullscreen.tsx +0 -109
  366. package/dist/src/components/media-player-hls.d.ts +0 -23
  367. package/dist/src/components/media-player-hls.tsx +0 -111
  368. package/dist/src/components/media-player-loading.d.ts +0 -12
  369. package/dist/src/components/media-player-loading.tsx +0 -76
  370. package/dist/src/components/media-player-play.d.ts +0 -11
  371. package/dist/src/components/media-player-play.tsx +0 -75
  372. package/dist/src/components/media-player-root.d.ts +0 -28
  373. package/dist/src/components/media-player-root.tsx +0 -340
  374. package/dist/src/components/media-player-seek.d.ts +0 -15
  375. package/dist/src/components/media-player-seek.tsx +0 -168
  376. package/dist/src/components/media-player-time.d.ts +0 -12
  377. package/dist/src/components/media-player-time.tsx +0 -99
  378. package/dist/src/components/media-player-tooltip.d.ts +0 -13
  379. package/dist/src/components/media-player-tooltip.tsx +0 -58
  380. package/dist/src/components/media-player-video.d.ts +0 -9
  381. package/dist/src/components/media-player-video.tsx +0 -39
  382. package/dist/src/components/media-player-volume.d.ts +0 -13
  383. package/dist/src/components/media-player-volume.tsx +0 -155
  384. package/dist/src/components/media-player.d.ts +0 -3
  385. package/dist/src/components/media-player.tsx +0 -257
  386. package/dist/src/components/media-suspense.d.ts +0 -78
  387. package/dist/src/components/media-suspense.tsx +0 -362
  388. package/dist/src/components/player-settings-form.d.ts +0 -8
  389. package/dist/src/components/player-settings-form.tsx +0 -163
  390. package/dist/src/components/react-player-wrapper.d.ts +0 -64
  391. package/dist/src/components/react-player-wrapper.tsx +0 -651
  392. package/dist/src/components/simple-video-player.d.ts +0 -9
  393. package/dist/src/components/simple-video-player.tsx +0 -60
  394. package/dist/src/components/ui/button.tsx +0 -49
  395. package/dist/src/components/ui/dropdown-menu.tsx +0 -137
  396. package/dist/src/components/ui/enhanced-seek-bar.d.ts +0 -3
  397. package/dist/src/components/ui/enhanced-seek-bar.tsx +0 -235
  398. package/dist/src/components/ui/fullscreen-button.d.ts +0 -3
  399. package/dist/src/components/ui/fullscreen-button.tsx +0 -60
  400. package/dist/src/components/ui/icons.tsx +0 -174
  401. package/dist/src/components/ui/media-resource-preloader.d.ts +0 -21
  402. package/dist/src/components/ui/media-resource-preloader.tsx +0 -393
  403. package/dist/src/components/ui/play-button.d.ts +0 -3
  404. package/dist/src/components/ui/play-button.tsx +0 -107
  405. package/dist/src/components/ui/seek-bar.d.ts +0 -3
  406. package/dist/src/components/ui/seek-bar.tsx +0 -161
  407. package/dist/src/components/ui/slider.tsx +0 -55
  408. package/dist/src/components/ui/time-display.d.ts +0 -3
  409. package/dist/src/components/ui/time-display.tsx +0 -40
  410. package/dist/src/components/ui/tooltip.tsx +0 -131
  411. package/dist/src/components/ui/volume-control.d.ts +0 -3
  412. package/dist/src/components/ui/volume-control.tsx +0 -143
  413. package/dist/src/components/unified/base-media-player.d.ts +0 -18
  414. package/dist/src/components/unified/base-media-player.tsx +0 -246
  415. package/dist/src/components/unified/media-player.d.ts +0 -37
  416. package/dist/src/components/unified/media-player.tsx +0 -75
  417. package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts +0 -42
  418. package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +0 -561
  419. package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts +0 -44
  420. package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +0 -552
  421. package/dist/src/components/variants/minimal/MinimalControls.d.ts +0 -19
  422. package/dist/src/components/variants/minimal/MinimalControls.tsx +0 -142
  423. package/dist/src/components/variants/minimal/MinimalLoading.d.ts +0 -10
  424. package/dist/src/components/variants/minimal/MinimalLoading.tsx +0 -32
  425. package/dist/src/components/variants/minimal/MinimalMediaPlayer.d.ts +0 -38
  426. package/dist/src/components/variants/minimal/MinimalMediaPlayer.tsx +0 -315
  427. package/dist/src/components/variants/minimal/MinimalOverlay.d.ts +0 -11
  428. package/dist/src/components/variants/minimal/MinimalOverlay.tsx +0 -64
  429. package/dist/src/components/variants/minimal/MinimalPlayButton.d.ts +0 -9
  430. package/dist/src/components/variants/minimal/MinimalPlayButton.tsx +0 -65
  431. package/dist/src/components/variants/minimal/MinimalSeekBar.d.ts +0 -7
  432. package/dist/src/components/variants/minimal/MinimalSeekBar.tsx +0 -150
  433. package/dist/src/components/variants/minimal/MinimalVolumeControl.d.ts +0 -7
  434. package/dist/src/components/variants/minimal/MinimalVolumeControl.tsx +0 -80
  435. package/dist/src/components/variants/minimal/SimpleMinimalPlayer.d.ts +0 -22
  436. package/dist/src/components/variants/minimal/SimpleMinimalPlayer.tsx +0 -209
  437. package/dist/src/components/variants/minimal/components/CenterPlayButton.d.ts +0 -7
  438. package/dist/src/components/variants/minimal/components/CenterPlayButton.tsx +0 -22
  439. package/dist/src/components/variants/minimal/components/ControlBar.d.ts +0 -43
  440. package/dist/src/components/variants/minimal/components/ControlBar.tsx +0 -146
  441. package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts +0 -24
  442. package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +0 -361
  443. package/dist/src/components/variants/minimal/components/PlaybackControls.d.ts +0 -9
  444. package/dist/src/components/variants/minimal/components/PlaybackControls.tsx +0 -51
  445. package/dist/src/components/variants/minimal/components/RightControls.d.ts +0 -25
  446. package/dist/src/components/variants/minimal/components/RightControls.tsx +0 -173
  447. package/dist/src/components/variants/minimal/components/SeekBar.d.ts +0 -11
  448. package/dist/src/components/variants/minimal/components/SeekBar.tsx +0 -131
  449. package/dist/src/components/variants/minimal/components/SettingsDropdown.d.ts +0 -9
  450. package/dist/src/components/variants/minimal/components/SettingsDropdown.tsx +0 -70
  451. package/dist/src/components/variants/minimal/components/SubtitleDisplay.d.ts +0 -7
  452. package/dist/src/components/variants/minimal/components/SubtitleDisplay.tsx +0 -21
  453. package/dist/src/components/variants/minimal/components/TimeDisplay.d.ts +0 -7
  454. package/dist/src/components/variants/minimal/components/TimeDisplay.tsx +0 -18
  455. package/dist/src/components/variants/minimal/components/VideoElement.d.ts +0 -13
  456. package/dist/src/components/variants/minimal/components/VideoElement.tsx +0 -40
  457. package/dist/src/components/variants/minimal/components/VolumeControl.d.ts +0 -13
  458. package/dist/src/components/variants/minimal/components/VolumeControl.tsx +0 -217
  459. package/dist/src/components/variants/minimal/index.d.ts +0 -17
  460. package/dist/src/components/variants/minimal/index.ts +0 -23
  461. package/dist/src/components/video-player.d.ts +0 -3
  462. package/dist/src/components/video-player.tsx +0 -100
  463. package/dist/src/context/error-handling.d.ts +0 -72
  464. package/dist/src/context/error-handling.ts +0 -394
  465. package/dist/src/context/media-context.d.ts +0 -104
  466. package/dist/src/context/media-context.tsx +0 -208
  467. package/dist/src/context/media-provider.d.ts +0 -26
  468. package/dist/src/context/media-provider.tsx +0 -265
  469. package/dist/src/context/media-store.d.ts +0 -33
  470. package/dist/src/context/media-store.ts +0 -379
  471. package/dist/src/context/persistence.d.ts +0 -83
  472. package/dist/src/context/persistence.ts +0 -453
  473. package/dist/src/core/events/event-system.d.ts +0 -170
  474. package/dist/src/core/events/event-system.ts +0 -442
  475. package/dist/src/core/events/hooks.d.ts +0 -33
  476. package/dist/src/core/events/hooks.ts +0 -302
  477. package/dist/src/core/events/index.d.ts +0 -6
  478. package/dist/src/core/events/index.ts +0 -22
  479. package/dist/src/core/events/middleware.d.ts +0 -39
  480. package/dist/src/core/events/middleware.ts +0 -269
  481. package/dist/src/core/index.d.ts +0 -8
  482. package/dist/src/core/index.ts +0 -22
  483. package/dist/src/core/optimization/bundle-optimizer.d.ts +0 -44
  484. package/dist/src/core/optimization/bundle-optimizer.tsx +0 -308
  485. package/dist/src/core/performance/cicd.d.ts +0 -8
  486. package/dist/src/core/performance/cicd.ts +0 -96
  487. package/dist/src/core/performance/index.d.ts +0 -10
  488. package/dist/src/core/performance/index.ts +0 -38
  489. package/dist/src/core/performance/media-loading-optimizer.d.ts +0 -105
  490. package/dist/src/core/performance/media-loading-optimizer.ts +0 -538
  491. package/dist/src/core/performance/performance-budgets.d.ts +0 -68
  492. package/dist/src/core/performance/performance-budgets.ts +0 -432
  493. package/dist/src/core/performance/performance-monitor.d.ts +0 -95
  494. package/dist/src/core/performance/performance-monitor.tsx +0 -476
  495. package/dist/src/core/performance/performance-testing.d.ts +0 -69
  496. package/dist/src/core/performance/performance-testing.ts +0 -459
  497. package/dist/src/core/plugins/base-plugin.d.ts +0 -52
  498. package/dist/src/core/plugins/base-plugin.ts +0 -224
  499. package/dist/src/core/plugins/enhanced-plugin-system.d.ts +0 -160
  500. package/dist/src/core/plugins/enhanced-plugin-system.ts +0 -417
  501. package/dist/src/core/plugins/examples/analytics-plugin.d.ts +0 -30
  502. package/dist/src/core/plugins/examples/analytics-plugin.ts +0 -242
  503. package/dist/src/core/plugins/index.d.ts +0 -8
  504. package/dist/src/core/plugins/index.ts +0 -39
  505. package/dist/src/core/plugins/registry.d.ts +0 -31
  506. package/dist/src/core/plugins/registry.ts +0 -327
  507. package/dist/src/core/plugins/types.d.ts +0 -101
  508. package/dist/src/core/plugins/types.ts +0 -159
  509. package/dist/src/core/plugins/utils.d.ts +0 -38
  510. package/dist/src/core/plugins/utils.ts +0 -316
  511. package/dist/src/core/progressive-loading.d.ts +0 -88
  512. package/dist/src/core/progressive-loading.tsx +0 -322
  513. package/dist/src/core/providers/enhanced-hls-provider.d.ts +0 -50
  514. package/dist/src/core/providers/enhanced-hls-provider.ts +0 -308
  515. package/dist/src/core/providers/service-provider.d.ts +0 -49
  516. package/dist/src/core/providers/service-provider.tsx +0 -168
  517. package/dist/src/core/utils.d.ts +0 -25
  518. package/dist/src/core/utils.tsx +0 -38
  519. package/dist/src/features/media-session/media-session-manager.d.ts +0 -132
  520. package/dist/src/features/media-session/media-session-manager.ts +0 -429
  521. package/dist/src/features/picture-in-picture/pip-manager.d.ts +0 -94
  522. package/dist/src/features/picture-in-picture/pip-manager.ts +0 -429
  523. package/dist/src/features/playlist/playlist-manager.d.ts +0 -208
  524. package/dist/src/features/playlist/playlist-manager.ts +0 -606
  525. package/dist/src/features/subtitles/subtitle-manager.d.ts +0 -136
  526. package/dist/src/features/subtitles/subtitle-manager.ts +0 -441
  527. package/dist/src/features/subtitles/subtitle-parser.d.ts +0 -60
  528. package/dist/src/features/subtitles/subtitle-parser.ts +0 -280
  529. package/dist/src/features/thumbnails/thumbnail-generator.d.ts +0 -136
  530. package/dist/src/features/thumbnails/thumbnail-generator.ts +0 -519
  531. package/dist/src/hooks/accessibility/index.d.ts +0 -5
  532. package/dist/src/hooks/accessibility/index.ts +0 -27
  533. package/dist/src/hooks/accessibility/use-accessibility-preferences.d.ts +0 -14
  534. package/dist/src/hooks/accessibility/use-accessibility-preferences.ts +0 -188
  535. package/dist/src/hooks/accessibility/use-focus-management.d.ts +0 -31
  536. package/dist/src/hooks/accessibility/use-focus-management.ts +0 -176
  537. package/dist/src/hooks/accessibility/use-keyboard-shortcuts.d.ts +0 -38
  538. package/dist/src/hooks/accessibility/use-keyboard-shortcuts.ts +0 -144
  539. package/dist/src/hooks/accessibility/use-screen-reader.d.ts +0 -22
  540. package/dist/src/hooks/accessibility/use-screen-reader.ts +0 -182
  541. package/dist/src/hooks/core/index.d.ts +0 -18
  542. package/dist/src/hooks/core/index.ts +0 -47
  543. package/dist/src/hooks/legacy.d.ts +0 -18
  544. package/dist/src/hooks/legacy.ts +0 -27
  545. package/dist/src/hooks/use-enhanced-media-player.d.ts +0 -88
  546. package/dist/src/hooks/use-enhanced-media-player.ts +0 -485
  547. package/dist/src/hooks/use-intelligent-preloading.d.ts +0 -66
  548. package/dist/src/hooks/use-intelligent-preloading.ts +0 -363
  549. package/dist/src/hooks/use-keyboard-controls.d.ts +0 -13
  550. package/dist/src/hooks/use-keyboard-controls.ts +0 -115
  551. package/dist/src/hooks/use-media-actions.d.ts +0 -62
  552. package/dist/src/hooks/use-media-actions.ts +0 -175
  553. package/dist/src/hooks/use-media-metadata.d.ts +0 -11
  554. package/dist/src/hooks/use-media-metadata.ts +0 -89
  555. package/dist/src/hooks/use-media-optimistic.d.ts +0 -36
  556. package/dist/src/hooks/use-media-optimistic.ts +0 -270
  557. package/dist/src/hooks/use-media-player.d.ts +0 -31
  558. package/dist/src/hooks/use-media-player.ts +0 -310
  559. package/dist/src/hooks/use-media-state.d.ts +0 -17
  560. package/dist/src/hooks/use-media-state.ts +0 -190
  561. package/dist/src/hooks/use-memory-optimization.d.ts +0 -40
  562. package/dist/src/hooks/use-memory-optimization.ts +0 -358
  563. package/dist/src/hooks/use-mobile.ts +0 -125
  564. package/dist/src/hooks/use-optimistic-controls.d.ts +0 -22
  565. package/dist/src/hooks/use-optimistic-controls.ts +0 -92
  566. package/dist/src/hooks/use-optimized-media.d.ts +0 -46
  567. package/dist/src/hooks/use-optimized-media.ts +0 -263
  568. package/dist/src/hooks/use-touch-gestures.d.ts +0 -47
  569. package/dist/src/hooks/use-touch-gestures.ts +0 -417
  570. package/dist/src/hooks/useEnhancedSubtitles.d.ts +0 -39
  571. package/dist/src/hooks/useEnhancedSubtitles.ts +0 -258
  572. package/dist/src/hooks/useKeyboardShortcuts.d.ts +0 -10
  573. package/dist/src/hooks/useKeyboardShortcuts.ts +0 -74
  574. package/dist/src/hooks/useMediaControls.d.ts +0 -9
  575. package/dist/src/hooks/useMediaControls.ts +0 -52
  576. package/dist/src/hooks/useScreenshot.d.ts +0 -4
  577. package/dist/src/hooks/useScreenshot.ts +0 -57
  578. package/dist/src/hooks/useSubtitles.d.ts +0 -8
  579. package/dist/src/hooks/useSubtitles.ts +0 -91
  580. package/dist/src/hooks/useVideoPlayer.d.ts +0 -32
  581. package/dist/src/hooks/useVideoPlayer.ts +0 -232
  582. package/dist/src/icons/components/FullscreenIcon.d.ts +0 -3
  583. package/dist/src/icons/components/FullscreenIcon.tsx +0 -37
  584. package/dist/src/icons/components/SettingsIcon.d.ts +0 -3
  585. package/dist/src/icons/components/SettingsIcon.tsx +0 -38
  586. package/dist/src/icons/components/animated/LoadingIcon.d.ts +0 -3
  587. package/dist/src/icons/components/animated/LoadingIcon.tsx +0 -43
  588. package/dist/src/icons/components/animated/PlayPauseIcon.d.ts +0 -7
  589. package/dist/src/icons/components/animated/PlayPauseIcon.tsx +0 -50
  590. package/dist/src/icons/components/media/PauseIcon.d.ts +0 -3
  591. package/dist/src/icons/components/media/PauseIcon.tsx +0 -39
  592. package/dist/src/icons/components/media/PlayIcon.d.ts +0 -3
  593. package/dist/src/icons/components/media/PlayIcon.tsx +0 -38
  594. package/dist/src/icons/components/volume/VolumeIcon.d.ts +0 -3
  595. package/dist/src/icons/components/volume/VolumeIcon.tsx +0 -39
  596. package/dist/src/icons/components/volume/VolumeOffIcon.d.ts +0 -3
  597. package/dist/src/icons/components/volume/VolumeOffIcon.tsx +0 -39
  598. package/dist/src/icons/index.d.ts +0 -28
  599. package/dist/src/icons/index.ts +0 -56
  600. package/dist/src/icons/provider.d.ts +0 -13
  601. package/dist/src/icons/provider.tsx +0 -64
  602. package/dist/src/icons/types.d.ts +0 -18
  603. package/dist/src/icons/types.ts +0 -40
  604. package/dist/src/index-enhanced.d.ts +0 -13
  605. package/dist/src/index-enhanced.ts +0 -35
  606. package/dist/src/index-legacy.d.ts +0 -81
  607. package/dist/src/index-legacy.ts +0 -327
  608. package/dist/src/index.css +0 -102
  609. package/dist/src/index.d.ts +0 -38
  610. package/dist/src/index.minimal.d.ts +0 -2
  611. package/dist/src/index.minimal.ts +0 -4
  612. package/dist/src/index.ts +0 -216
  613. package/dist/src/lib/deprecation.d.ts +0 -7
  614. package/dist/src/lib/deprecation.ts +0 -51
  615. package/dist/src/lib/format-time.d.ts +0 -9
  616. package/dist/src/lib/format-time.ts +0 -37
  617. package/dist/src/lib/index.d.ts +0 -3
  618. package/dist/src/lib/index.ts +0 -3
  619. package/dist/src/lib/utils.d.ts +0 -3
  620. package/dist/src/lib/utils.ts +0 -6
  621. package/dist/src/styles/globals.css +0 -462
  622. package/dist/src/styles/minimal-player.css +0 -589
  623. package/dist/src/styles/pixel-art.css +0 -46
  624. package/dist/src/styles/videojs.css +0 -100
  625. package/dist/src/test/setup.d.ts +0 -2
  626. package/dist/src/test/setup.ts +0 -79
  627. package/dist/src/types/events.d.ts +0 -41
  628. package/dist/src/types/events.ts +0 -47
  629. package/dist/src/types/formats.d.ts +0 -45
  630. package/dist/src/types/formats.ts +0 -95
  631. package/dist/src/types/index.d.ts +0 -128
  632. package/dist/src/types/index.ts +0 -225
  633. package/dist/src/types/videojs-plugins.d.ts +0 -14
  634. package/dist/styles/globals.css +0 -462
  635. package/dist/styles/minimal-player.css +0 -589
  636. package/dist/styles/pixel-art.css +0 -46
  637. package/dist/styles/videojs.css +0 -100
  638. package/src/adapters/videojs-adapter.d.ts +0 -38
  639. package/src/adapters/videojs-adapter.d.ts.map +0 -1
  640. package/src/components/AnimateLoading.d.ts +0 -9
  641. package/src/components/AnimateLoading.d.ts.map +0 -1
  642. package/src/components/LoadingState.d.ts +0 -33
  643. package/src/components/LoadingState.d.ts.map +0 -1
  644. package/src/components/accessibility/keyboard-help-overlay.d.ts +0 -17
  645. package/src/components/accessibility/keyboard-help-overlay.d.ts.map +0 -1
  646. package/src/components/audio-player.d.ts +0 -3
  647. package/src/components/audio-player.d.ts.map +0 -1
  648. package/src/components/basic/index.d.ts +0 -26
  649. package/src/components/basic/index.d.ts.map +0 -1
  650. package/src/components/enhanced/advanced-features.d.ts +0 -45
  651. package/src/components/enhanced/advanced-features.d.ts.map +0 -1
  652. package/src/components/enhanced/debug-panel.d.ts +0 -70
  653. package/src/components/enhanced/debug-panel.d.ts.map +0 -1
  654. package/src/components/enhanced/enhanced-controls.d.ts +0 -50
  655. package/src/components/enhanced/enhanced-controls.d.ts.map +0 -1
  656. package/src/components/enhanced/enhanced-media-player.d.ts +0 -26
  657. package/src/components/enhanced/enhanced-media-player.d.ts.map +0 -1
  658. package/src/components/enhanced/error-handling.d.ts +0 -36
  659. package/src/components/enhanced/error-handling.d.ts.map +0 -1
  660. package/src/components/enhanced/index.d.ts +0 -7
  661. package/src/components/enhanced/index.d.ts.map +0 -1
  662. package/src/components/enhanced/media-player-enhanced.d.ts +0 -21
  663. package/src/components/enhanced/media-player-enhanced.d.ts.map +0 -1
  664. package/src/components/examples/basic-video-player.d.ts +0 -10
  665. package/src/components/examples/basic-video-player.d.ts.map +0 -1
  666. package/src/components/examples/custom-controls-example.d.ts +0 -10
  667. package/src/components/examples/custom-controls-example.d.ts.map +0 -1
  668. package/src/components/examples/enhanced-controls-example.d.ts +0 -9
  669. package/src/components/examples/enhanced-controls-example.d.ts.map +0 -1
  670. package/src/components/examples/enhanced-media-player-example.d.ts +0 -9
  671. package/src/components/examples/enhanced-media-player-example.d.ts.map +0 -1
  672. package/src/components/examples/loading-states-demo.d.ts +0 -2
  673. package/src/components/examples/loading-states-demo.d.ts.map +0 -1
  674. package/src/components/examples/react-19-demo.d.ts +0 -10
  675. package/src/components/examples/react-19-demo.d.ts.map +0 -1
  676. package/src/components/examples/volume-orientation-demo.d.ts +0 -2
  677. package/src/components/examples/volume-orientation-demo.d.ts.map +0 -1
  678. package/src/components/icon-demo.d.ts +0 -2
  679. package/src/components/icon-demo.d.ts.map +0 -1
  680. package/src/components/icons/index.d.ts +0 -36
  681. package/src/components/icons/index.d.ts.map +0 -1
  682. package/src/components/icons/svg-icons/ArrowLeftIcon.d.ts +0 -4
  683. package/src/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +0 -1
  684. package/src/components/icons/svg-icons/ArrowRightIcon.d.ts +0 -4
  685. package/src/components/icons/svg-icons/ArrowRightIcon.d.ts.map +0 -1
  686. package/src/components/icons/svg-icons/AudioIcon.d.ts +0 -4
  687. package/src/components/icons/svg-icons/AudioIcon.d.ts.map +0 -1
  688. package/src/components/icons/svg-icons/BackwardIcon.d.ts +0 -4
  689. package/src/components/icons/svg-icons/BackwardIcon.d.ts.map +0 -1
  690. package/src/components/icons/svg-icons/CameraIcon.d.ts +0 -4
  691. package/src/components/icons/svg-icons/CameraIcon.d.ts.map +0 -1
  692. package/src/components/icons/svg-icons/CheckIcon.d.ts +0 -4
  693. package/src/components/icons/svg-icons/CheckIcon.d.ts.map +0 -1
  694. package/src/components/icons/svg-icons/EnablePiPIcon.d.ts +0 -4
  695. package/src/components/icons/svg-icons/EnablePiPIcon.d.ts.map +0 -1
  696. package/src/components/icons/svg-icons/ForwardIcon.d.ts +0 -4
  697. package/src/components/icons/svg-icons/ForwardIcon.d.ts.map +0 -1
  698. package/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts +0 -4
  699. package/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +0 -1
  700. package/src/components/icons/svg-icons/FullscreenExitIcon.d.ts +0 -4
  701. package/src/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +0 -1
  702. package/src/components/icons/svg-icons/LoadingIcon.d.ts +0 -4
  703. package/src/components/icons/svg-icons/LoadingIcon.d.ts.map +0 -1
  704. package/src/components/icons/svg-icons/PauseIcon.d.ts +0 -4
  705. package/src/components/icons/svg-icons/PauseIcon.d.ts.map +0 -1
  706. package/src/components/icons/svg-icons/PlayIcon.d.ts +0 -4
  707. package/src/components/icons/svg-icons/PlayIcon.d.ts.map +0 -1
  708. package/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +0 -4
  709. package/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +0 -1
  710. package/src/components/icons/svg-icons/QualityIcon.d.ts +0 -4
  711. package/src/components/icons/svg-icons/QualityIcon.d.ts.map +0 -1
  712. package/src/components/icons/svg-icons/SettingsIcon.d.ts +0 -4
  713. package/src/components/icons/svg-icons/SettingsIcon.d.ts.map +0 -1
  714. package/src/components/icons/svg-icons/SliderIcon.d.ts +0 -4
  715. package/src/components/icons/svg-icons/SliderIcon.d.ts.map +0 -1
  716. package/src/components/icons/svg-icons/SubtitleIcon.d.ts +0 -4
  717. package/src/components/icons/svg-icons/SubtitleIcon.d.ts.map +0 -1
  718. package/src/components/icons/svg-icons/SubtitleOffIcon.d.ts +0 -4
  719. package/src/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +0 -1
  720. package/src/components/icons/svg-icons/UnPiPIcon.d.ts +0 -4
  721. package/src/components/icons/svg-icons/UnPiPIcon.d.ts.map +0 -1
  722. package/src/components/icons/svg-icons/VolumeMutedIcon.d.ts +0 -4
  723. package/src/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +0 -1
  724. package/src/components/icons/svg-icons/VolumeOneIcon.d.ts +0 -4
  725. package/src/components/icons/svg-icons/VolumeOneIcon.d.ts.map +0 -1
  726. package/src/components/icons/svg-icons/VolumeThreeIcon.d.ts +0 -4
  727. package/src/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +0 -1
  728. package/src/components/icons/svg-icons/VolumeTwoIcon.d.ts +0 -4
  729. package/src/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +0 -1
  730. package/src/components/legacy.d.ts +0 -13
  731. package/src/components/legacy.d.ts.map +0 -1
  732. package/src/components/media-metadata-display.d.ts +0 -11
  733. package/src/components/media-metadata-display.d.ts.map +0 -1
  734. package/src/components/media-player-audio.d.ts +0 -9
  735. package/src/components/media-player-audio.d.ts.map +0 -1
  736. package/src/components/media-player-controls.d.ts +0 -23
  737. package/src/components/media-player-controls.d.ts.map +0 -1
  738. package/src/components/media-player-error.d.ts +0 -16
  739. package/src/components/media-player-error.d.ts.map +0 -1
  740. package/src/components/media-player-fullscreen.d.ts +0 -12
  741. package/src/components/media-player-fullscreen.d.ts.map +0 -1
  742. package/src/components/media-player-hls.d.ts +0 -23
  743. package/src/components/media-player-hls.d.ts.map +0 -1
  744. package/src/components/media-player-loading.d.ts +0 -12
  745. package/src/components/media-player-loading.d.ts.map +0 -1
  746. package/src/components/media-player-play.d.ts +0 -11
  747. package/src/components/media-player-play.d.ts.map +0 -1
  748. package/src/components/media-player-root.d.ts +0 -28
  749. package/src/components/media-player-root.d.ts.map +0 -1
  750. package/src/components/media-player-seek.d.ts +0 -15
  751. package/src/components/media-player-seek.d.ts.map +0 -1
  752. package/src/components/media-player-time.d.ts +0 -12
  753. package/src/components/media-player-time.d.ts.map +0 -1
  754. package/src/components/media-player-tooltip.d.ts +0 -13
  755. package/src/components/media-player-tooltip.d.ts.map +0 -1
  756. package/src/components/media-player-video.d.ts +0 -9
  757. package/src/components/media-player-video.d.ts.map +0 -1
  758. package/src/components/media-player-volume.d.ts +0 -13
  759. package/src/components/media-player-volume.d.ts.map +0 -1
  760. package/src/components/media-player.d.ts +0 -3
  761. package/src/components/media-player.d.ts.map +0 -1
  762. package/src/components/media-suspense.d.ts +0 -78
  763. package/src/components/media-suspense.d.ts.map +0 -1
  764. package/src/components/player-settings-form.d.ts +0 -8
  765. package/src/components/player-settings-form.d.ts.map +0 -1
  766. package/src/components/react-player-wrapper.d.ts +0 -64
  767. package/src/components/react-player-wrapper.d.ts.map +0 -1
  768. package/src/components/simple-video-player.d.ts +0 -9
  769. package/src/components/simple-video-player.d.ts.map +0 -1
  770. package/src/components/ui/button.tsx +0 -49
  771. package/src/components/ui/dropdown-menu.tsx +0 -137
  772. package/src/components/ui/enhanced-seek-bar.d.ts +0 -3
  773. package/src/components/ui/enhanced-seek-bar.d.ts.map +0 -1
  774. package/src/components/ui/fullscreen-button.d.ts +0 -3
  775. package/src/components/ui/fullscreen-button.d.ts.map +0 -1
  776. package/src/components/ui/icons.tsx +0 -174
  777. package/src/components/ui/media-resource-preloader.d.ts +0 -21
  778. package/src/components/ui/media-resource-preloader.d.ts.map +0 -1
  779. package/src/components/ui/play-button.d.ts +0 -3
  780. package/src/components/ui/play-button.d.ts.map +0 -1
  781. package/src/components/ui/seek-bar.d.ts +0 -3
  782. package/src/components/ui/seek-bar.d.ts.map +0 -1
  783. package/src/components/ui/slider.tsx +0 -55
  784. package/src/components/ui/time-display.d.ts +0 -3
  785. package/src/components/ui/time-display.d.ts.map +0 -1
  786. package/src/components/ui/tooltip.tsx +0 -131
  787. package/src/components/ui/volume-control.d.ts +0 -3
  788. package/src/components/ui/volume-control.d.ts.map +0 -1
  789. package/src/components/unified/base-media-player.d.ts +0 -18
  790. package/src/components/unified/base-media-player.d.ts.map +0 -1
  791. package/src/components/unified/media-player.d.ts +0 -37
  792. package/src/components/unified/media-player.d.ts.map +0 -1
  793. package/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts +0 -42
  794. package/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts.map +0 -1
  795. package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts +0 -44
  796. package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts.map +0 -1
  797. package/src/components/variants/minimal/MinimalControls.d.ts +0 -19
  798. package/src/components/variants/minimal/MinimalControls.d.ts.map +0 -1
  799. package/src/components/variants/minimal/MinimalLoading.d.ts +0 -10
  800. package/src/components/variants/minimal/MinimalLoading.d.ts.map +0 -1
  801. package/src/components/variants/minimal/MinimalMediaPlayer.d.ts +0 -38
  802. package/src/components/variants/minimal/MinimalMediaPlayer.d.ts.map +0 -1
  803. package/src/components/variants/minimal/MinimalOverlay.d.ts +0 -11
  804. package/src/components/variants/minimal/MinimalOverlay.d.ts.map +0 -1
  805. package/src/components/variants/minimal/MinimalPlayButton.d.ts +0 -9
  806. package/src/components/variants/minimal/MinimalPlayButton.d.ts.map +0 -1
  807. package/src/components/variants/minimal/MinimalSeekBar.d.ts +0 -7
  808. package/src/components/variants/minimal/MinimalSeekBar.d.ts.map +0 -1
  809. package/src/components/variants/minimal/MinimalVolumeControl.d.ts +0 -7
  810. package/src/components/variants/minimal/MinimalVolumeControl.d.ts.map +0 -1
  811. package/src/components/variants/minimal/SimpleMinimalPlayer.d.ts +0 -22
  812. package/src/components/variants/minimal/SimpleMinimalPlayer.d.ts.map +0 -1
  813. package/src/components/variants/minimal/components/CenterPlayButton.d.ts +0 -7
  814. package/src/components/variants/minimal/components/CenterPlayButton.d.ts.map +0 -1
  815. package/src/components/variants/minimal/components/ControlBar.d.ts +0 -43
  816. package/src/components/variants/minimal/components/ControlBar.d.ts.map +0 -1
  817. package/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts +0 -24
  818. package/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts.map +0 -1
  819. package/src/components/variants/minimal/components/PlaybackControls.d.ts +0 -9
  820. package/src/components/variants/minimal/components/PlaybackControls.d.ts.map +0 -1
  821. package/src/components/variants/minimal/components/RightControls.d.ts +0 -25
  822. package/src/components/variants/minimal/components/RightControls.d.ts.map +0 -1
  823. package/src/components/variants/minimal/components/SeekBar.d.ts +0 -11
  824. package/src/components/variants/minimal/components/SeekBar.d.ts.map +0 -1
  825. package/src/components/variants/minimal/components/SettingsDropdown.d.ts +0 -9
  826. package/src/components/variants/minimal/components/SettingsDropdown.d.ts.map +0 -1
  827. package/src/components/variants/minimal/components/SubtitleDisplay.d.ts +0 -7
  828. package/src/components/variants/minimal/components/SubtitleDisplay.d.ts.map +0 -1
  829. package/src/components/variants/minimal/components/TimeDisplay.d.ts +0 -7
  830. package/src/components/variants/minimal/components/TimeDisplay.d.ts.map +0 -1
  831. package/src/components/variants/minimal/components/VideoElement.d.ts +0 -13
  832. package/src/components/variants/minimal/components/VideoElement.d.ts.map +0 -1
  833. package/src/components/variants/minimal/components/VolumeControl.d.ts +0 -13
  834. package/src/components/variants/minimal/components/VolumeControl.d.ts.map +0 -1
  835. package/src/components/variants/minimal/index.d.ts +0 -17
  836. package/src/components/variants/minimal/index.d.ts.map +0 -1
  837. package/src/components/video-player.d.ts +0 -3
  838. package/src/components/video-player.d.ts.map +0 -1
  839. package/src/context/error-handling.d.ts +0 -72
  840. package/src/context/error-handling.d.ts.map +0 -1
  841. package/src/context/media-context.d.ts +0 -104
  842. package/src/context/media-context.d.ts.map +0 -1
  843. package/src/context/media-provider.d.ts +0 -26
  844. package/src/context/media-provider.d.ts.map +0 -1
  845. package/src/context/media-store.d.ts +0 -33
  846. package/src/context/media-store.d.ts.map +0 -1
  847. package/src/context/persistence.d.ts +0 -83
  848. package/src/context/persistence.d.ts.map +0 -1
  849. package/src/core/events/event-system.d.ts +0 -170
  850. package/src/core/events/event-system.d.ts.map +0 -1
  851. package/src/core/events/hooks.d.ts +0 -33
  852. package/src/core/events/hooks.d.ts.map +0 -1
  853. package/src/core/events/index.d.ts +0 -6
  854. package/src/core/events/index.d.ts.map +0 -1
  855. package/src/core/events/middleware.d.ts +0 -39
  856. package/src/core/events/middleware.d.ts.map +0 -1
  857. package/src/core/index.d.ts +0 -8
  858. package/src/core/index.d.ts.map +0 -1
  859. package/src/core/optimization/bundle-optimizer.d.ts +0 -44
  860. package/src/core/optimization/bundle-optimizer.d.ts.map +0 -1
  861. package/src/core/performance/cicd.d.ts +0 -8
  862. package/src/core/performance/cicd.d.ts.map +0 -1
  863. package/src/core/performance/index.d.ts +0 -10
  864. package/src/core/performance/index.d.ts.map +0 -1
  865. package/src/core/performance/media-loading-optimizer.d.ts +0 -105
  866. package/src/core/performance/media-loading-optimizer.d.ts.map +0 -1
  867. package/src/core/performance/performance-budgets.d.ts +0 -68
  868. package/src/core/performance/performance-budgets.d.ts.map +0 -1
  869. package/src/core/performance/performance-monitor.d.ts +0 -95
  870. package/src/core/performance/performance-monitor.d.ts.map +0 -1
  871. package/src/core/performance/performance-testing.d.ts +0 -69
  872. package/src/core/performance/performance-testing.d.ts.map +0 -1
  873. package/src/core/plugins/base-plugin.d.ts +0 -52
  874. package/src/core/plugins/base-plugin.d.ts.map +0 -1
  875. package/src/core/plugins/enhanced-plugin-system.d.ts +0 -160
  876. package/src/core/plugins/enhanced-plugin-system.d.ts.map +0 -1
  877. package/src/core/plugins/examples/analytics-plugin.d.ts +0 -30
  878. package/src/core/plugins/examples/analytics-plugin.d.ts.map +0 -1
  879. package/src/core/plugins/index.d.ts +0 -8
  880. package/src/core/plugins/index.d.ts.map +0 -1
  881. package/src/core/plugins/registry.d.ts +0 -31
  882. package/src/core/plugins/registry.d.ts.map +0 -1
  883. package/src/core/plugins/types.d.ts +0 -101
  884. package/src/core/plugins/types.d.ts.map +0 -1
  885. package/src/core/plugins/utils.d.ts +0 -38
  886. package/src/core/plugins/utils.d.ts.map +0 -1
  887. package/src/core/progressive-loading.d.ts +0 -88
  888. package/src/core/progressive-loading.d.ts.map +0 -1
  889. package/src/core/providers/enhanced-hls-provider.d.ts +0 -50
  890. package/src/core/providers/enhanced-hls-provider.d.ts.map +0 -1
  891. package/src/core/providers/service-provider.d.ts +0 -49
  892. package/src/core/providers/service-provider.d.ts.map +0 -1
  893. package/src/core/utils.d.ts +0 -25
  894. package/src/core/utils.d.ts.map +0 -1
  895. package/src/features/media-session/media-session-manager.d.ts +0 -132
  896. package/src/features/media-session/media-session-manager.d.ts.map +0 -1
  897. package/src/features/picture-in-picture/pip-manager.d.ts +0 -94
  898. package/src/features/picture-in-picture/pip-manager.d.ts.map +0 -1
  899. package/src/features/playlist/playlist-manager.d.ts +0 -208
  900. package/src/features/playlist/playlist-manager.d.ts.map +0 -1
  901. package/src/features/subtitles/subtitle-manager.d.ts +0 -136
  902. package/src/features/subtitles/subtitle-manager.d.ts.map +0 -1
  903. package/src/features/subtitles/subtitle-parser.d.ts +0 -60
  904. package/src/features/subtitles/subtitle-parser.d.ts.map +0 -1
  905. package/src/features/thumbnails/thumbnail-generator.d.ts +0 -136
  906. package/src/features/thumbnails/thumbnail-generator.d.ts.map +0 -1
  907. package/src/hooks/accessibility/index.d.ts +0 -5
  908. package/src/hooks/accessibility/index.d.ts.map +0 -1
  909. package/src/hooks/accessibility/use-accessibility-preferences.d.ts +0 -14
  910. package/src/hooks/accessibility/use-accessibility-preferences.d.ts.map +0 -1
  911. package/src/hooks/accessibility/use-focus-management.d.ts +0 -31
  912. package/src/hooks/accessibility/use-focus-management.d.ts.map +0 -1
  913. package/src/hooks/accessibility/use-keyboard-shortcuts.d.ts +0 -38
  914. package/src/hooks/accessibility/use-keyboard-shortcuts.d.ts.map +0 -1
  915. package/src/hooks/accessibility/use-screen-reader.d.ts +0 -22
  916. package/src/hooks/accessibility/use-screen-reader.d.ts.map +0 -1
  917. package/src/hooks/core/index.d.ts +0 -18
  918. package/src/hooks/core/index.d.ts.map +0 -1
  919. package/src/hooks/legacy.d.ts +0 -18
  920. package/src/hooks/legacy.d.ts.map +0 -1
  921. package/src/hooks/use-enhanced-media-player.d.ts +0 -88
  922. package/src/hooks/use-enhanced-media-player.d.ts.map +0 -1
  923. package/src/hooks/use-intelligent-preloading.d.ts +0 -66
  924. package/src/hooks/use-intelligent-preloading.d.ts.map +0 -1
  925. package/src/hooks/use-keyboard-controls.d.ts +0 -13
  926. package/src/hooks/use-keyboard-controls.d.ts.map +0 -1
  927. package/src/hooks/use-media-actions.d.ts +0 -62
  928. package/src/hooks/use-media-actions.d.ts.map +0 -1
  929. package/src/hooks/use-media-metadata.d.ts +0 -11
  930. package/src/hooks/use-media-metadata.d.ts.map +0 -1
  931. package/src/hooks/use-media-optimistic.d.ts +0 -36
  932. package/src/hooks/use-media-optimistic.d.ts.map +0 -1
  933. package/src/hooks/use-media-player.d.ts +0 -31
  934. package/src/hooks/use-media-player.d.ts.map +0 -1
  935. package/src/hooks/use-media-state.d.ts +0 -17
  936. package/src/hooks/use-media-state.d.ts.map +0 -1
  937. package/src/hooks/use-memory-optimization.d.ts +0 -40
  938. package/src/hooks/use-memory-optimization.d.ts.map +0 -1
  939. package/src/hooks/use-mobile.ts +0 -125
  940. package/src/hooks/use-optimistic-controls.d.ts +0 -22
  941. package/src/hooks/use-optimistic-controls.d.ts.map +0 -1
  942. package/src/hooks/use-optimized-media.d.ts +0 -46
  943. package/src/hooks/use-optimized-media.d.ts.map +0 -1
  944. package/src/hooks/use-touch-gestures.d.ts +0 -47
  945. package/src/hooks/use-touch-gestures.d.ts.map +0 -1
  946. package/src/hooks/useEnhancedSubtitles.d.ts +0 -39
  947. package/src/hooks/useEnhancedSubtitles.d.ts.map +0 -1
  948. package/src/hooks/useKeyboardShortcuts.d.ts +0 -10
  949. package/src/hooks/useKeyboardShortcuts.d.ts.map +0 -1
  950. package/src/hooks/useMediaControls.d.ts +0 -9
  951. package/src/hooks/useMediaControls.d.ts.map +0 -1
  952. package/src/hooks/useScreenshot.d.ts +0 -4
  953. package/src/hooks/useScreenshot.d.ts.map +0 -1
  954. package/src/hooks/useSubtitles.d.ts +0 -8
  955. package/src/hooks/useSubtitles.d.ts.map +0 -1
  956. package/src/hooks/useVideoPlayer.d.ts +0 -32
  957. package/src/hooks/useVideoPlayer.d.ts.map +0 -1
  958. package/src/icons/components/FullscreenIcon.d.ts +0 -3
  959. package/src/icons/components/FullscreenIcon.d.ts.map +0 -1
  960. package/src/icons/components/SettingsIcon.d.ts +0 -3
  961. package/src/icons/components/SettingsIcon.d.ts.map +0 -1
  962. package/src/icons/components/animated/LoadingIcon.d.ts +0 -3
  963. package/src/icons/components/animated/LoadingIcon.d.ts.map +0 -1
  964. package/src/icons/components/animated/PlayPauseIcon.d.ts +0 -7
  965. package/src/icons/components/animated/PlayPauseIcon.d.ts.map +0 -1
  966. package/src/icons/components/media/PauseIcon.d.ts +0 -3
  967. package/src/icons/components/media/PauseIcon.d.ts.map +0 -1
  968. package/src/icons/components/media/PlayIcon.d.ts +0 -3
  969. package/src/icons/components/media/PlayIcon.d.ts.map +0 -1
  970. package/src/icons/components/volume/VolumeIcon.d.ts +0 -3
  971. package/src/icons/components/volume/VolumeIcon.d.ts.map +0 -1
  972. package/src/icons/components/volume/VolumeOffIcon.d.ts +0 -3
  973. package/src/icons/components/volume/VolumeOffIcon.d.ts.map +0 -1
  974. package/src/icons/index.d.ts +0 -28
  975. package/src/icons/index.d.ts.map +0 -1
  976. package/src/icons/provider.d.ts +0 -13
  977. package/src/icons/provider.d.ts.map +0 -1
  978. package/src/icons/types.d.ts +0 -18
  979. package/src/icons/types.d.ts.map +0 -1
  980. package/src/index-enhanced.d.ts +0 -13
  981. package/src/index-enhanced.d.ts.map +0 -1
  982. package/src/index-legacy.d.ts +0 -81
  983. package/src/index-legacy.d.ts.map +0 -1
  984. package/src/index.d.ts +0 -38
  985. package/src/index.d.ts.map +0 -1
  986. package/src/index.minimal.d.ts +0 -2
  987. package/src/index.minimal.d.ts.map +0 -1
  988. package/src/index.minimal.ts +0 -4
  989. package/src/lib/deprecation.d.ts +0 -7
  990. package/src/lib/deprecation.d.ts.map +0 -1
  991. package/src/lib/format-time.d.ts +0 -9
  992. package/src/lib/format-time.d.ts.map +0 -1
  993. package/src/lib/index.d.ts +0 -3
  994. package/src/lib/index.d.ts.map +0 -1
  995. package/src/lib/utils.d.ts +0 -3
  996. package/src/lib/utils.d.ts.map +0 -1
  997. package/src/test/setup.d.ts +0 -2
  998. package/src/test/setup.d.ts.map +0 -1
  999. package/src/types/events.d.ts +0 -41
  1000. package/src/types/events.d.ts.map +0 -1
  1001. package/src/types/formats.d.ts +0 -45
  1002. package/src/types/formats.d.ts.map +0 -1
  1003. package/src/types/index.d.ts +0 -128
  1004. package/src/types/index.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-components-B_l3cist.js","sources":["../src/components/enhanced/media-player-enhanced.tsx","../src/components/enhanced/advanced-features.tsx","../src/components/enhanced/enhanced-controls.tsx","../src/components/enhanced/debug-panel.tsx"],"sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport {\n\tMediaActionTypes,\n\tuseMediaContext,\n\tuseMediaDispatch,\n\tuseMediaSelector\n} from \"../../context/media-context\"\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) {\n\t\t\t\t;(ref as React.MutableRefObject<T>).current = node\n\t\t\t}\n\t\t})\n\t}\n}\n\n// Enhanced media player with better performance and mobile support\nexport interface EnhancedMediaPlayerProps {\n\tchildren: React.ReactNode\n\tclassName?: string\n\tautoHide?: boolean\n\tautoHideDelay?: number\n\tshowControlsOnHover?: boolean\n\tshowControlsOnTouch?: boolean\n\tenableKeyboardControls?: boolean\n\tenableTouchGestures?: boolean\n\tonPlay?: () => void\n\tonPause?: () => void\n\tonTimeUpdate?: (time: number) => void\n\tonVolumeChange?: (volume: number) => void\n\tonFullscreenChange?: (isFullscreen: boolean) => void\n}\n\n// Custom hook for auto-hide controls\nfunction useAutoHideControls(\n\tautoHide: boolean,\n\tdelay: number,\n\tshowOnHover: boolean,\n\tshowOnTouch: boolean\n) {\n\tconst [showControls, setShowControls] = React.useState(true)\n\tconst [isHovering, setIsHovering] = React.useState(false)\n\tconst [isTouching, setIsTouching] = React.useState(false)\n\tconst timeoutRef = React.useRef<NodeJS.Timeout | null>(null)\n\n\tconst resetTimeout = React.useCallback(() => {\n\t\tif (timeoutRef.current) {\n\t\t\tclearTimeout(timeoutRef.current)\n\t\t}\n\t\tif (autoHide) {\n\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\tif (!isHovering && !isTouching) {\n\t\t\t\t\tsetShowControls(false)\n\t\t\t\t}\n\t\t\t}, delay)\n\t\t}\n\t}, [autoHide, delay, isHovering, isTouching])\n\n\tconst showControlsTemporarily = React.useCallback(() => {\n\t\tsetShowControls(true)\n\t\tresetTimeout()\n\t}, [resetTimeout])\n\n\tReact.useEffect(() => {\n\t\tif (autoHide) {\n\t\t\tresetTimeout()\n\t\t} else {\n\t\t\tsetShowControls(true)\n\t\t}\n\t\treturn () => {\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current)\n\t\t\t}\n\t\t}\n\t}, [autoHide, resetTimeout])\n\n\tconst handleMouseEnter = React.useCallback(() => {\n\t\tif (showOnHover) {\n\t\t\tsetIsHovering(true)\n\t\t\tsetShowControls(true)\n\t\t}\n\t}, [showOnHover])\n\n\tconst handleMouseLeave = React.useCallback(() => {\n\t\tif (showOnHover) {\n\t\t\tsetIsHovering(false)\n\t\t\tresetTimeout()\n\t\t}\n\t}, [showOnHover, resetTimeout])\n\n\tconst handleTouchStart = React.useCallback(() => {\n\t\tif (showOnTouch) {\n\t\t\tsetIsTouching(true)\n\t\t\tshowControlsTemporarily()\n\t\t}\n\t}, [showOnTouch, showControlsTemporarily])\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\tif (showOnTouch) {\n\t\t\tsetIsTouching(false)\n\t\t\tresetTimeout()\n\t\t}\n\t}, [showOnTouch, resetTimeout])\n\n\treturn {\n\t\tshowControls,\n\t\tshowControlsTemporarily,\n\t\thandleMouseEnter,\n\t\thandleMouseLeave,\n\t\thandleTouchStart,\n\t\thandleTouchEnd\n\t}\n}\n\n// Custom hook for touch gestures\nfunction useTouchGestures(enabled: boolean) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPlaying = useMediaSelector((state) => state.isPlaying)\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst duration = useMediaSelector((state) => state.duration)\n\tconst volume = useMediaSelector((state) => state.volume)\n\n\tconst [touchStart, setTouchStart] = React.useState<{ x: number; y: number; time: number } | null>(\n\t\tnull\n\t)\n\tconst [isDoubleTap, setIsDoubleTap] = React.useState(false)\n\n\tconst handleTouchStart = React.useCallback(\n\t\t(e: React.TouchEvent) => {\n\t\t\tif (!enabled) return\n\n\t\t\tconst touch = e.touches[0]\n\t\t\tif (!touch) return\n\n\t\t\tconst now = Date.now()\n\n\t\t\tif (touchStart && now - touchStart.time < 300) {\n\t\t\t\tsetIsDoubleTap(true)\n\t\t\t\t// Double tap to play/pause\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} else {\n\t\t\t\tsetTouchStart({\n\t\t\t\t\tx: touch.clientX,\n\t\t\t\t\ty: touch.clientY,\n\t\t\t\t\ttime: now\n\t\t\t\t})\n\t\t\t\tsetIsDoubleTap(false)\n\t\t\t}\n\t\t},\n\t\t[enabled, touchStart, isPlaying, dispatch]\n\t)\n\n\tconst handleTouchMove = React.useCallback(\n\t\t(e: React.TouchEvent) => {\n\t\t\tif (!enabled || !touchStart || isDoubleTap) return\n\n\t\t\tconst touch = e.touches[0]\n\t\t\tif (!touch) return\n\n\t\t\tconst deltaX = touch.clientX - touchStart.x\n\t\t\tconst deltaY = touch.clientY - touchStart.y\n\n\t\t\t// Horizontal swipe for seeking\n\t\t\tif (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > 50) {\n\t\t\t\tconst seekAmount = (deltaX / window.innerWidth) * 30 // 30 seconds max\n\t\t\t\tconst newTime = Math.max(0, Math.min(duration, currentTime + seekAmount))\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\tdetail: newTime\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Vertical swipe for volume (right side of screen)\n\t\t\tif (\n\t\t\t\tMath.abs(deltaY) > Math.abs(deltaX) &&\n\t\t\t\tMath.abs(deltaY) > 50 &&\n\t\t\t\ttouchStart.x > window.innerWidth / 2\n\t\t\t) {\n\t\t\t\tconst volumeChange = -(deltaY / window.innerHeight) * 1 // Full range\n\t\t\t\tconst newVolume = Math.max(0, Math.min(1, volume + volumeChange))\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\tdetail: newVolume\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\t[enabled, touchStart, isDoubleTap, duration, currentTime, volume, dispatch]\n\t)\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\tif (!enabled) return\n\t\t// Reset touch state after a delay to allow for double tap detection\n\t\tsetTimeout(() => {\n\t\t\tsetTouchStart(null)\n\t\t\tsetIsDoubleTap(false)\n\t\t}, 300)\n\t}, [enabled])\n\n\treturn {\n\t\thandleTouchStart,\n\t\thandleTouchMove,\n\t\thandleTouchEnd\n\t}\n}\n\nexport const EnhancedMediaPlayer = function EnhancedMediaPlayer({\n\tchildren,\n\tclassName,\n\tautoHide = true,\n\tautoHideDelay = 3000,\n\tshowControlsOnHover = true,\n\tshowControlsOnTouch = true,\n\tenableKeyboardControls = true,\n\tenableTouchGestures = true,\n\tonPlay,\n\tonPause,\n\tonTimeUpdate,\n\tonVolumeChange,\n\tonFullscreenChange\n}: EnhancedMediaPlayerProps) {\n\tconst context = useMediaContext()\n\tconst dispatch = useMediaDispatch()\n\n\t// State selectors with memoization\n\tconst isPlaying = useMediaSelector(React.useCallback((state) => state.isPlaying, []))\n\tconst isFullscreen = useMediaSelector(React.useCallback((state) => state.isFullscreen, []))\n\tconst currentTime = useMediaSelector(React.useCallback((state) => state.currentTime, []))\n\tconst volume = useMediaSelector(React.useCallback((state) => state.volume, []))\n\tconst error = useMediaSelector(React.useCallback((state) => state.error, []))\n\n\t// Custom hooks\n\tconst {\n\t\tshowControls,\n\t\tshowControlsTemporarily,\n\t\thandleMouseEnter,\n\t\thandleMouseLeave,\n\t\thandleTouchStart: handleControlsTouch,\n\t\thandleTouchEnd: handleControlsTouchEnd\n\t} = useAutoHideControls(autoHide, autoHideDelay, showControlsOnHover, showControlsOnTouch)\n\n\tconst {\n\t\thandleTouchStart: handleGestureStart,\n\t\thandleTouchMove: handleGestureMove,\n\t\thandleTouchEnd: handleGestureEnd\n\t} = useTouchGestures(enableTouchGestures)\n\n\t// Combine touch handlers\n\tconst handleTouchStart = React.useCallback(\n\t\t(e: React.TouchEvent) => {\n\t\t\thandleControlsTouch()\n\t\t\thandleGestureStart(e)\n\t\t},\n\t\t[handleControlsTouch, handleGestureStart]\n\t)\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\thandleControlsTouchEnd()\n\t\thandleGestureEnd()\n\t}, [handleControlsTouchEnd, handleGestureEnd])\n\n\t// Event handlers with memoization\n\tconst handleClick = React.useCallback(() => {\n\t\tshowControlsTemporarily()\n\t}, [showControlsTemporarily])\n\n\t// Keyboard controls\n\tReact.useEffect(() => {\n\t\tif (!enableKeyboardControls) return\n\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tswitch (e.code) {\n\t\t\t\tcase \"Space\":\n\t\t\t\tcase \"KeyK\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase \"KeyF\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: isFullscreen\n\t\t\t\t\t\t\t? MediaActionTypes.EXIT_FULLSCREEN\n\t\t\t\t\t\t\t: MediaActionTypes.ENTER_FULLSCREEN\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase \"KeyM\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({ type: MediaActionTypes.TOGGLE_MUTE })\n\t\t\t\t\tbreak\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: Math.max(0, currentTime - 10)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: currentTime + 10\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\t\tdetail: Math.min(1, volume + 0.1)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\t\tdetail: Math.max(0, volume - 0.1)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown)\n\t\treturn () => document.removeEventListener(\"keydown\", handleKeyDown)\n\t}, [enableKeyboardControls, dispatch, isPlaying, isFullscreen, currentTime, volume])\n\n\t// Event callbacks\n\tReact.useEffect(() => {\n\t\tif (isPlaying) onPlay?.()\n\t\telse onPause?.()\n\t}, [isPlaying, onPlay, onPause])\n\n\tReact.useEffect(() => {\n\t\tonTimeUpdate?.(currentTime)\n\t}, [currentTime, onTimeUpdate])\n\n\tReact.useEffect(() => {\n\t\tonVolumeChange?.(volume)\n\t}, [volume, onVolumeChange])\n\n\tReact.useEffect(() => {\n\t\tonFullscreenChange?.(isFullscreen)\n\t}, [isFullscreen, onFullscreenChange])\n\n\treturn (\n\t\t<div\n\t\t\tref={composeRefs(context.rootRef)}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative isolate flex flex-col overflow-hidden rounded-lg bg-black outline-none\",\n\t\t\t\t\"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n\t\t\t\t\"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n\t\t\t\tisFullscreen && \"fixed inset-0 z-50 rounded-none\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tdata-state={isFullscreen ? \"fullscreen\" : \"inline\"}\n\t\t\tdata-disabled={error ? \"\" : undefined}\n\t\t\tdata-controls-visible={showControls ? \"\" : undefined}\n\t\t\ttabIndex={0}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\tonTouchStart={handleTouchStart}\n\t\t\tonTouchMove={handleGestureMove}\n\t\t\tonTouchEnd={handleTouchEnd}\n\t\t\tonClick={handleClick}>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\nEnhancedMediaPlayer.displayName = \"EnhancedMediaPlayer\"\n","\"use client\"\n\nimport React from \"react\"\nimport { MediaActionTypes, useMediaDispatch, useMediaSelector } from \"../../context/media-context\"\nimport { formatTime } from \"../../lib/format-time\"\nimport { cn } from \"../../lib/utils\"\n\n// Types for advanced features\nexport interface Chapter {\n\tid: string\n\ttitle: string\n\tstartTime: number\n\tendTime: number\n\tthumbnail?: string\n}\n\nexport interface QualityLevel {\n\tid: string\n\tlabel: string\n\twidth: number\n\theight: number\n\tbitrate?: number\n}\n\nexport interface Subtitle {\n\tid: string\n\tlabel: string\n\tlanguage: string\n\tsrc: string\n\tdefault?: boolean\n}\n\n// Quality selector component\nexport const QualitySelector = function QualitySelector({\n\tqualities,\n\tcurrentQuality,\n\tonQualityChange,\n\tclassName\n}: {\n\tqualities: QualityLevel[]\n\tcurrentQuality: string\n\tonQualityChange: (qualityId: string) => void\n\tclassName?: string\n}) {\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst currentQualityLabel = React.useMemo(() => {\n\t\treturn qualities.find((q) => q.id === currentQuality)?.label || \"Auto\"\n\t}, [qualities, currentQuality])\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select quality\">\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{currentQualityLabel}</span>\n\t\t\t\t<svg\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-32 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t{qualities.map((quality) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={quality.id}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonQualityChange(quality.id)\n\t\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tquality.id === currentQuality && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t{quality.label}\n\t\t\t\t\t\t\t{quality.bitrate && (\n\t\t\t\t\t\t\t\t<span className=\"ml-2 text-white/60 text-xs\">\n\t\t\t\t\t\t\t\t\t({Math.round(quality.bitrate / 1000)}k)\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Subtitle selector component\nexport const SubtitleSelector = function SubtitleSelector({\n\tsubtitles,\n\tcurrentSubtitle,\n\tonSubtitleChange,\n\tclassName\n}: {\n\tsubtitles: Subtitle[]\n\tcurrentSubtitle: string | null\n\tonSubtitleChange: (subtitleId: string | null) => void\n\tclassName?: string\n}) {\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst currentSubtitleLabel = React.useMemo(() => {\n\t\tif (!currentSubtitle) return \"Off\"\n\t\treturn subtitles.find((s) => s.id === currentSubtitle)?.label || \"Off\"\n\t}, [subtitles, currentSubtitle])\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select subtitles\">\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM4 12h4v2H4v-2zm10 6H4v-2h10v2zm6 0h-4v-2h4v2zm0-4H10v-2h10v2z\" />\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{currentSubtitleLabel}</span>\n\t\t\t\t<svg\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-32 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tonSubtitleChange(null)\n\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t!currentSubtitle && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\tOff\n\t\t\t\t\t</button>\n\t\t\t\t\t{subtitles.map((subtitle) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={subtitle.id}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonSubtitleChange(subtitle.id)\n\t\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tsubtitle.id === currentSubtitle && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t{subtitle.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Playback speed selector\nexport const PlaybackSpeedSelector = function PlaybackSpeedSelector({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst playbackRate = useMediaSelector((state) => state.playbackRate)\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst speeds = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]\n\n\tconst handleSpeedChange = React.useCallback(\n\t\t(speed: number) => {\n\t\t\tdispatch({ type: MediaActionTypes.SET_PLAYBACK_RATE, detail: speed })\n\t\t\tsetIsOpen(false)\n\t\t},\n\t\t[dispatch]\n\t)\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select playback speed\">\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M13,8A4,4 0 0,0 9,12A4,4 0 0,0 13,16A4,4 0 0,0 17,12A4,4 0 0,0 13,8M13,14A2,2 0 0,1 11,12A2,2 0 0,1 13,10A2,2 0 0,1 15,12A2,2 0 0,1 13,14M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4Z\" />\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{playbackRate}x</span>\n\t\t\t\t<svg\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-20 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t{speeds.map((speed) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={speed}\n\t\t\t\t\t\t\tonClick={() => handleSpeedChange(speed)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tspeed === playbackRate && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t{speed}x\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Chapters component\nexport const ChaptersPanel = function ChaptersPanel({\n\tchapters,\n\tonChapterSelect,\n\tclassName\n}: {\n\tchapters: Chapter[]\n\tonChapterSelect: (chapter: Chapter) => void\n\tclassName?: string\n}) {\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\n\tconst currentChapter = React.useMemo(() => {\n\t\treturn chapters.find(\n\t\t\t(chapter) => currentTime >= chapter.startTime && currentTime < chapter.endTime\n\t\t)\n\t}, [chapters, currentTime])\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rounded-lg border border-white/20 bg-black/90 p-4 backdrop-blur-sm\",\n\t\t\t\tclassName\n\t\t\t)}>\n\t\t\t<h3 className=\"mb-3 font-semibold text-white\">Chapters</h3>\n\t\t\t<div className=\"max-h-64 space-y-2 overflow-y-auto\">\n\t\t\t\t{chapters.map((chapter) => (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={chapter.id}\n\t\t\t\t\t\tonClick={() => onChapterSelect(chapter)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex w-full items-center gap-3 rounded-lg p-3 text-left transition-colors\",\n\t\t\t\t\t\t\t\"hover:bg-white/10\",\n\t\t\t\t\t\t\tchapter.id === currentChapter?.id && \"border border-primary/30 bg-primary/20\"\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\t{chapter.thumbnail && (\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tsrc={chapter.thumbnail}\n\t\t\t\t\t\t\t\talt={chapter.title}\n\t\t\t\t\t\t\t\tclassName=\"h-9 w-16 rounded object-cover\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t<div className=\"truncate font-medium text-white\">{chapter.title}</div>\n\t\t\t\t\t\t\t<div className=\"text-sm text-white/60\">\n\t\t\t\t\t\t\t\t{formatTime(chapter.startTime)} - {formatTime(chapter.endTime)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</button>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Picture-in-Picture button\nexport const PictureInPictureButton = function PictureInPictureButton({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPictureInPicture = useMediaSelector((state) => state.isPictureInPicture)\n\n\tconst handleTogglePiP = React.useCallback(() => {\n\t\tdispatch({\n\t\t\ttype: isPictureInPicture ? MediaActionTypes.EXIT_PIP : MediaActionTypes.ENTER_PIP\n\t\t})\n\t}, [dispatch, isPictureInPicture])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleTogglePiP}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex h-10 w-10 items-center justify-center rounded-full text-white\",\n\t\t\t\t\"transition-colors hover:bg-white/10\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={isPictureInPicture ? \"Exit Picture-in-Picture\" : \"Enter Picture-in-Picture\"}>\n\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t<path d=\"M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h18v14z\" />\n\t\t\t</svg>\n\t\t</button>\n\t)\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { MediaActionTypes, useMediaDispatch, useMediaSelector } from \"../../context/media-context\"\nimport { formatTime } from \"../../lib/format-time\"\nimport { cn } from \"../../lib/utils\"\n\n// Enhanced play button with better animations\nexport const EnhancedPlayButton = function EnhancedPlayButton({\n\tclassName,\n\tsize = \"md\"\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPlaying = useMediaSelector((state) => state.isPlaying)\n\tconst isLoading = useMediaSelector((state) => state.isLoading)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\",\n\t\txl: \"h-16 w-16\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\",\n\t\txl: \"h-8 w-8\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tdispatch({\n\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t})\n\t}, [dispatch, isPlaying])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tdisabled={isLoading}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={isPlaying ? \"Pause\" : \"Play\"}>\n\t\t\t{isLoading ? (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"animate-spin rounded-full border-2 border-white/30 border-t-white\",\n\t\t\t\t\t\ticonSizes[size]\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className={cn(\"transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t\t{isPlaying ? (\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t\t\t<path d=\"M6 4h4v16H6V4zm8 0h4v16h-4V4z\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"ml-0.5 h-full w-full\">\n\t\t\t\t\t\t\t<path d=\"M8 5v14l11-7z\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</button>\n\t)\n}\n\n// Enhanced seek bar with preview and better touch support\nexport const EnhancedSeekBar = function EnhancedSeekBar({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst duration = useMediaSelector((state) => state.duration)\n\tconst buffered = useMediaSelector((state) => state.buffered)\n\tconst previewTime = useMediaSelector((state) => state.previewTime)\n\n\tconst [isDragging, setIsDragging] = React.useState(false)\n\tconst [hoverTime, setHoverTime] = React.useState<number | null>(null)\n\tconst progressRef = React.useRef<HTMLDivElement>(null)\n\n\tconst progress = duration > 0 ? (currentTime / duration) * 100 : 0\n\tconst previewProgress =\n\t\tduration > 0 && previewTime !== null ? (previewTime / duration) * 100 : null\n\n\t// Calculate buffered ranges\n\tconst bufferedRanges = React.useMemo(() => {\n\t\tif (!buffered || duration === 0) return []\n\t\tconst ranges = []\n\t\tfor (let i = 0; i < buffered.length; i++) {\n\t\t\tranges.push({\n\t\t\t\tstart: (buffered.start(i) / duration) * 100,\n\t\t\t\tend: (buffered.end(i) / duration) * 100\n\t\t\t})\n\t\t}\n\t\treturn ranges\n\t}, [buffered, duration])\n\n\tconst getTimeFromPosition = React.useCallback(\n\t\t(clientX: number) => {\n\t\t\tif (!progressRef.current) return 0\n\t\t\tconst rect = progressRef.current.getBoundingClientRect()\n\t\t\tconst position = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n\t\t\treturn position * duration\n\t\t},\n\t\t[duration]\n\t)\n\n\tconst handleMouseMove = React.useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\tif (!isDragging) {\n\t\t\t\tconst time = getTimeFromPosition(e.clientX)\n\t\t\t\tsetHoverTime(time)\n\t\t\t\tdispatch({ type: MediaActionTypes.PREVIEW_TIME, detail: time })\n\t\t\t}\n\t\t},\n\t\t[isDragging, getTimeFromPosition, dispatch]\n\t)\n\n\tconst handleMouseLeave = React.useCallback(() => {\n\t\tif (!isDragging) {\n\t\t\tsetHoverTime(null)\n\t\t\tdispatch({ type: MediaActionTypes.CLEAR_PREVIEW })\n\t\t}\n\t}, [isDragging, dispatch])\n\n\tconst handleMouseDown = React.useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\tsetIsDragging(true)\n\t\t\tconst time = getTimeFromPosition(e.clientX)\n\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t},\n\t\t[getTimeFromPosition, dispatch]\n\t)\n\n\tconst handleTouchStart = React.useCallback(\n\t\t(e: React.TouchEvent) => {\n\t\t\tsetIsDragging(true)\n\t\t\tconst time = getTimeFromPosition(e.touches[0]?.clientX || 0)\n\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t},\n\t\t[getTimeFromPosition, dispatch]\n\t)\n\n\tReact.useEffect(() => {\n\t\tconst handleMouseMove = (e: MouseEvent) => {\n\t\t\tif (isDragging) {\n\t\t\t\tconst time = getTimeFromPosition(e.clientX)\n\t\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t\t}\n\t\t}\n\n\t\tconst handleMouseUp = () => {\n\t\t\tsetIsDragging(false)\n\t\t\tsetHoverTime(null)\n\t\t\tdispatch({ type: MediaActionTypes.CLEAR_PREVIEW })\n\t\t}\n\n\t\tconst handleTouchMove = (e: TouchEvent) => {\n\t\t\tif (isDragging) {\n\t\t\t\tconst time = getTimeFromPosition(e.touches[0]?.clientX || 0)\n\t\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t\t}\n\t\t}\n\n\t\tif (isDragging) {\n\t\t\tdocument.addEventListener(\"mousemove\", handleMouseMove)\n\t\t\tdocument.addEventListener(\"mouseup\", handleMouseUp)\n\t\t\tdocument.addEventListener(\"touchmove\", handleTouchMove)\n\t\t\tdocument.addEventListener(\"touchend\", handleMouseUp)\n\t\t}\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousemove\", handleMouseMove)\n\t\t\tdocument.removeEventListener(\"mouseup\", handleMouseUp)\n\t\t\tdocument.removeEventListener(\"touchmove\", handleTouchMove)\n\t\t\tdocument.removeEventListener(\"touchend\", handleMouseUp)\n\t\t}\n\t}, [isDragging, getTimeFromPosition, dispatch])\n\n\treturn (\n\t\t<div className={cn(\"group relative flex items-center\", className)}>\n\t\t\t{/* Time preview tooltip */}\n\t\t\t{(hoverTime !== null || previewTime !== null) && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"pointer-events-none absolute bottom-full mb-2 rounded bg-black/80 px-2 py-1 text-white text-xs\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: `${previewProgress || ((hoverTime || 0) / duration) * 100}%`,\n\t\t\t\t\t\ttransform: \"translateX(-50%)\"\n\t\t\t\t\t}}>\n\t\t\t\t\t{formatTime(hoverTime || previewTime || 0)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<div\n\t\t\t\tref={progressRef}\n\t\t\t\tclassName=\"relative h-2 w-full cursor-pointer rounded-full bg-white/20 transition-all duration-200 group-hover:h-3\"\n\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\tonTouchStart={handleTouchStart}>\n\t\t\t\t{/* Buffered ranges */}\n\t\t\t\t{bufferedRanges.map((range, index) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tclassName=\"absolute top-0 h-full rounded-full bg-white/30\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${range.start}%`,\n\t\t\t\t\t\t\twidth: `${range.end - range.start}%`\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\n\t\t\t\t{/* Progress bar */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute top-0 h-full rounded-full bg-primary transition-all duration-100\"\n\t\t\t\t\tstyle={{ width: `${progress}%` }}\n\t\t\t\t/>\n\n\t\t\t\t{/* Preview indicator */}\n\t\t\t\t{previewProgress !== null && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute top-0 h-full w-1 rounded-full bg-white/80\"\n\t\t\t\t\t\tstyle={{ left: `${previewProgress}%` }}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* Thumb */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"-translate-y-1/2 absolute top-1/2 h-4 w-4 rounded-full border-2 border-white bg-primary opacity-0 shadow-lg transition-all duration-200 group-hover:opacity-100\"\n\t\t\t\t\tstyle={{ left: `${progress}%`, transform: \"translateX(-50%) translateY(-50%)\" }}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Enhanced volume control with better UX\nexport const EnhancedVolumeControl = function EnhancedVolumeControl({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst volume = useMediaSelector((state) => state.volume)\n\tconst isMuted = useMediaSelector((state) => state.isMuted)\n\n\tconst [showSlider, setShowSlider] = React.useState(false)\n\n\tconst handleToggleMute = React.useCallback(() => {\n\t\tdispatch({ type: MediaActionTypes.TOGGLE_MUTE })\n\t}, [dispatch])\n\n\tconst handleVolumeChange = React.useCallback(\n\t\t(newVolume: number) => {\n\t\t\tdispatch({ type: MediaActionTypes.SET_VOLUME, detail: newVolume })\n\t\t},\n\t\t[dispatch]\n\t)\n\n\tconst VolumeIcon = React.useMemo(() => {\n\t\tif (isMuted || volume === 0) {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z\" />\n\t\t\t\t</svg>\n\t\t\t)\n\t\t} else if (volume < 0.5) {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z\" />\n\t\t\t\t</svg>\n\t\t\t)\n\t\t} else {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z\" />\n\t\t\t\t</svg>\n\t\t\t)\n\t\t}\n\t}, [isMuted, volume])\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative flex items-center\", className)}\n\t\t\tonMouseEnter={() => setShowSlider(true)}\n\t\t\tonMouseLeave={() => setShowSlider(false)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleToggleMute}\n\t\t\t\tclassName=\"flex h-10 w-10 items-center justify-center rounded-full text-white transition-colors hover:bg-white/10\"\n\t\t\t\taria-label={isMuted ? \"Unmute\" : \"Mute\"}>\n\t\t\t\t{VolumeIcon}\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\"absolute left-full ml-2 flex items-center transition-all duration-200\",\n\t\t\t\t\tshowSlider ? \"translate-x-0 opacity-100\" : \"-translate-x-2 pointer-events-none 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={(e) => handleVolumeChange(parseFloat(e.target.value))}\n\t\t\t\t\tclassName=\"slider h-1 w-20 cursor-pointer appearance-none rounded-lg bg-white/20\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Enhanced backward skip button\nexport const EnhancedBackwardButton = function EnhancedBackwardButton({\n\tclassName,\n\tsize = \"md\",\n\tskipTime = 10\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tconst newTime = Math.max(0, currentTime - skipTime)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: newTime })\n\t}, [dispatch, currentTime, skipTime])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={`Backward ${skipTime} seconds`}\n\t\t\ttitle={`Backward ${skipTime}s`}>\n\t\t\t<div className={cn(\"flex items-center transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t<path d=\"M7 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zM15.5 7.5c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v9c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-9z\" />\n\t\t\t\t\t<path d=\"M5.5 12l7-4.5v9l-7-4.5z\" opacity=\"0.8\" />\n\t\t\t\t</svg>\n\t\t\t\t{skipTime && <span className=\"-bottom-1 absolute font-bold text-[10px]\">{skipTime}</span>}\n\t\t\t</div>\n\t\t</button>\n\t)\n}\n\n// Enhanced forward skip button\nexport const EnhancedForwardButton = function EnhancedForwardButton({\n\tclassName,\n\tsize = \"md\",\n\tskipTime = 10\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst duration = useMediaSelector((state) => state.duration)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tconst newTime = Math.min(duration, currentTime + skipTime)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: newTime })\n\t}, [dispatch, currentTime, duration, skipTime])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={`Forward ${skipTime} seconds`}\n\t\t\ttitle={`Forward ${skipTime}s`}>\n\t\t\t<div className={cn(\"flex items-center transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t<path d=\"M17 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zM8.5 7.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v9c0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5v-9z\" />\n\t\t\t\t\t<path d=\"M18.5 12l-7-4.5v9l7-4.5z\" opacity=\"0.8\" />\n\t\t\t\t</svg>\n\t\t\t\t{skipTime && <span className=\"-bottom-1 absolute font-bold text-[10px]\">{skipTime}</span>}\n\t\t\t</div>\n\t\t</button>\n\t)\n}\n\n// Enhanced time display\nexport const EnhancedTimeDisplay = function EnhancedTimeDisplay({\n\tvariant = \"current\",\n\tclassName\n}: {\n\tvariant?: \"current\" | \"duration\" | \"remaining\"\n\tclassName?: string\n}) {\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst duration = useMediaSelector((state) => state.duration)\n\n\tconst displayTime = React.useMemo(() => {\n\t\tswitch (variant) {\n\t\t\tcase \"current\":\n\t\t\t\treturn formatTime(currentTime)\n\t\t\tcase \"duration\":\n\t\t\t\treturn formatTime(duration)\n\t\t\tcase \"remaining\":\n\t\t\t\treturn `-${formatTime(duration - currentTime)}`\n\t\t\tdefault:\n\t\t\t\treturn formatTime(currentTime)\n\t\t}\n\t}, [variant, currentTime, duration])\n\n\treturn (\n\t\t<div className={cn(\"font-mono text-sm text-white tabular-nums\", className)}>{displayTime}</div>\n\t)\n}\n\n// Performance indicator component\nexport const PerformanceIndicator = function PerformanceIndicator({\n\tmetrics,\n\tclassName\n}: {\n\tmetrics?: {\n\t\tfps?: number\n\t\tbufferHealth?: number\n\t\tquality?: number\n\t\tbandwidth?: number\n\t}\n\tclassName?: string\n}) {\n\tif (!metrics || process.env.NODE_ENV !== \"development\") {\n\t\treturn null\n\t}\n\n\tconst getPerformanceColor = (fps: number) => {\n\t\tif (fps >= 50) return \"text-green-400\"\n\t\tif (fps >= 30) return \"text-yellow-400\"\n\t\treturn \"text-red-400\"\n\t}\n\n\tconst getBufferColor = (health: number) => {\n\t\tif (health >= 5) return \"text-green-400\"\n\t\tif (health >= 2) return \"text-yellow-400\"\n\t\treturn \"text-red-400\"\n\t}\n\n\treturn (\n\t\t<div className={cn(\"flex items-center gap-3 font-mono text-xs\", className)}>\n\t\t\t{metrics.fps !== undefined && (\n\t\t\t\t<div className={cn(\"flex items-center gap-1\", getPerformanceColor(metrics.fps))}>\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.fps} FPS</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{metrics.bufferHealth !== undefined && (\n\t\t\t\t<div className={cn(\"flex items-center gap-1\", getBufferColor(metrics.bufferHealth))}>\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.bufferHealth.toFixed(1)}s</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{metrics.quality !== undefined && (\n\t\t\t\t<div className=\"flex items-center gap-1 text-blue-400\">\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.quality}p</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Enhanced control bar that combines all controls\nexport const EnhancedControlBar = function EnhancedControlBar({\n\tclassName,\n\tshowSkipButtons = true,\n\tshowVolumeControl = true,\n\tshowTimeDisplay = true,\n\tplayButtonSize = \"xl\",\n\tskipButtonSize = \"md\",\n\tskipTime = 10,\n\tshowPerformanceIndicators = process.env.NODE_ENV === \"development\",\n\tperformanceMetrics\n}: {\n\tclassName?: string\n\tshowSkipButtons?: boolean\n\tshowVolumeControl?: boolean\n\tshowTimeDisplay?: boolean\n\tplayButtonSize?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n\tskipButtonSize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n\tshowPerformanceIndicators?: boolean\n\tperformanceMetrics?: {\n\t\tfps?: number\n\t\tbufferHealth?: number\n\t\tquality?: number\n\t\tbandwidth?: number\n\t}\n}) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex flex-col gap-4 bg-gradient-to-t from-black/80 to-transparent p-4\",\n\t\t\t\tclassName\n\t\t\t)}>\n\t\t\t{/* Seek Bar */}\n\t\t\t<EnhancedSeekBar className=\"w-full\" />\n\n\t\t\t{/* Control Buttons */}\n\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t{/* Left side - Media controls */}\n\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t{showSkipButtons && (\n\t\t\t\t\t\t<EnhancedBackwardButton\n\t\t\t\t\t\t\tsize={skipButtonSize}\n\t\t\t\t\t\t\tskipTime={skipTime}\n\t\t\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<EnhancedPlayButton size={playButtonSize} className=\"shrink-0\" />\n\n\t\t\t\t\t{showSkipButtons && (\n\t\t\t\t\t\t<EnhancedForwardButton size={skipButtonSize} skipTime={skipTime} className=\"shrink-0\" />\n\t\t\t\t\t)}\n\n\t\t\t\t\t{showVolumeControl && <EnhancedVolumeControl className=\"shrink-0\" />}\n\n\t\t\t\t\t{showTimeDisplay && (\n\t\t\t\t\t\t<div className=\"flex items-center gap-1 font-mono text-sm\">\n\t\t\t\t\t\t\t<EnhancedTimeDisplay variant=\"current\" />\n\t\t\t\t\t\t\t<span className=\"text-white/60\">/</span>\n\t\t\t\t\t\t\t<EnhancedTimeDisplay variant=\"duration\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Right side - Performance indicators and additional controls */}\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t{showPerformanceIndicators && (\n\t\t\t\t\t\t<PerformanceIndicator metrics={performanceMetrics} className=\"text-white/80\" />\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Future: Settings, Fullscreen, etc. */}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","/**\n * Debug Panel Component for Performance Monitoring\n * Development-only component for displaying performance metrics\n */\n\nimport React, { useMemo } from \"react\"\nimport { cn } from \"../../lib/utils\"\n\ninterface PerformanceMetrics {\n\tfps: number\n\tmemoryUsage: number\n\tbufferHealth: number\n\tnetworkBandwidth: number\n\tdroppedFrames: number\n\tdecodedFrames: number\n\tpresentationTime: number\n}\n\ninterface PreloadingStats {\n\tpreloadedItems: number\n\tengagementScore: number\n\tqueueLength: number\n\thitRate: number\n\ttotalSaved: number\n}\n\ninterface DebugPanelProps {\n\t/** Performance metrics to display */\n\tperformanceMetrics?: Partial<PerformanceMetrics>\n\t/** Preloading statistics */\n\tpreloadingStats?: PreloadingStats\n\t/** Current playback state */\n\tplaybackState?: {\n\t\tcurrentTime: number\n\t\tduration: number\n\t\tvolume: number\n\t\tisPlaying: boolean\n\t\tquality: number\n\t\tisBuffering: boolean\n\t\terror?: string\n\t}\n\t/** HLS-specific metrics */\n\thlsMetrics?: {\n\t\tcurrentLevel: number\n\t\tavailableLevels: number\n\t\tbandwidthEstimate: number\n\t\tdroppedFrames: number\n\t}\n\t/** Plugin information */\n\tpluginInfo?: {\n\t\tloadedPlugins: string[]\n\t\tactivePlugins: string[]\n\t\tpluginCount: number\n\t}\n\t/** Additional debug information */\n\tdebugInfo?: Record<string, any>\n\t/** Custom className */\n\tclassName?: string\n\t/** Panel position */\n\tposition?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\"\n\t/** Whether the panel is collapsed by default */\n\tdefaultCollapsed?: boolean\n\t/** Custom title */\n\ttitle?: string\n}\n\n/**\n * Debug Panel Component\n */\nexport const DebugPanel: React.FC<DebugPanelProps> = ({\n\tperformanceMetrics = {},\n\tpreloadingStats = {} as PreloadingStats,\n\tplaybackState = {} as any,\n\thlsMetrics = {},\n\tpluginInfo = {},\n\tdebugInfo = {},\n\tclassName,\n\tposition = \"top-right\",\n\tdefaultCollapsed = false,\n\ttitle = \"BaroiPlayer Debug Panel\"\n}) => {\n\tconst [isCollapsed, setIsCollapsed] = React.useState(defaultCollapsed)\n\tconst [activeTab, setActiveTab] = React.useState<\"performance\" | \"hls\" | \"plugins\" | \"debug\">(\n\t\t\"performance\"\n\t)\n\n\t// Position classes\n\tconst positionClasses = useMemo(() => {\n\t\tswitch (position) {\n\t\t\tcase \"top-left\":\n\t\t\t\treturn \"top-4 left-4\"\n\t\t\tcase \"top-right\":\n\t\t\t\treturn \"top-4 right-4\"\n\t\t\tcase \"bottom-left\":\n\t\t\t\treturn \"bottom-4 left-4\"\n\t\t\tcase \"bottom-right\":\n\t\t\t\treturn \"bottom-4 right-4\"\n\t\t\tdefault:\n\t\t\t\treturn \"top-4 right-4\"\n\t\t}\n\t}, [position])\n\n\t// Format bytes\n\tconst formatBytes = (bytes: number): string => {\n\t\tif (bytes === 0) return \"0 B\"\n\t\tconst k = 1024\n\t\tconst sizes = [\"B\", \"KB\", \"MB\", \"GB\"]\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k))\n\t\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + \" \" + sizes[i]\n\t}\n\n\t// Format time\n\tconst formatTime = (seconds: number): string => {\n\t\tconst mins = Math.floor(seconds / 60)\n\t\tconst secs = Math.floor(seconds % 60)\n\t\treturn `${mins}:${secs.toString().padStart(2, \"0\")}`\n\t}\n\n\t// Render performance metrics\n\tconst renderPerformanceMetrics = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">FPS:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.fps || 0}</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Memory:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{((performanceMetrics.memoryUsage || 0) / 1024 / 1024).toFixed(1)} MB\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Buffer:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{(performanceMetrics.bufferHealth || 0).toFixed(2)}s\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Bandwidth:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{formatBytes(performanceMetrics.networkBandwidth || 0)}/s\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Dropped:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.droppedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-cyan-400\">Decoded:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.decodedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render playback state\n\tconst renderPlaybackState = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Status:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{playbackState.isPlaying ? (\n\t\t\t\t\t\t\t<span className=\"text-green-300\">Playing</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"text-red-300\">Paused</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Time:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{formatTime(playbackState.currentTime || 0)} / {formatTime(playbackState.duration || 0)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Volume:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{Math.round((playbackState.volume || 0) * 100)}%</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Quality:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{playbackState.quality || 0}p</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Buffering:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{playbackState.isBuffering ? (\n\t\t\t\t\t\t\t<span className=\"text-yellow-300\">Yes</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"text-green-300\">No</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t{playbackState.error && (\n\t\t\t\t\t<div className=\"col-span-2\">\n\t\t\t\t\t\t<span className=\"text-red-400\">Error:</span>\n\t\t\t\t\t\t<span className=\"ml-2 break-all font-mono text-red-300 text-xs\">\n\t\t\t\t\t\t\t{playbackState.error}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render preloading stats\n\tconst renderPreloadingStats = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Preloaded:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{preloadingStats.preloadedItems || 0} items</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Engagement:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{(preloadingStats.engagementScore || 0).toFixed(1)}%\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Queue:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{preloadingStats.queueLength || 0} items</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Hit Rate:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{(preloadingStats.hitRate || 0).toFixed(1)}%</span>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"col-span-2\">\n\t\t\t\t\t<span className=\"text-cyan-400\">Saved:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{formatBytes(preloadingStats.totalSaved || 0)}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render HLS metrics\n\tconst renderHLSMetrics = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Level:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{hlsMetrics.currentLevel || 0} / {hlsMetrics.availableLevels || 0}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Bandwidth:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{formatBytes(hlsMetrics.bandwidthEstimate || 0)}/s</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Dropped:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{hlsMetrics.droppedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render plugin info\n\tconst renderPluginInfo = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Total:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{pluginInfo.pluginCount || 0} plugins</span>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"mt-2\">\n\t\t\t\t\t<span className=\"text-blue-400\">Active:</span>\n\t\t\t\t\t<div className=\"ml-2 space-y-1 font-mono text-xs\">\n\t\t\t\t\t\t{pluginInfo.activePlugins?.map((plugin, index) => (\n\t\t\t\t\t\t\t<div key={index} className=\"text-green-300\">\n\t\t\t\t\t\t\t\t• {plugin}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)) || <div className=\"text-gray-400\">None</div>}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{pluginInfo.loadedPlugins &&\n\t\t\t\t\tpluginInfo.loadedPlugins.length > (pluginInfo.activePlugins?.length || 0) && (\n\t\t\t\t\t\t<div className=\"mt-2\">\n\t\t\t\t\t\t\t<span className=\"text-yellow-400\">Loaded (inactive):</span>\n\t\t\t\t\t\t\t<div className=\"ml-2 space-y-1 font-mono text-xs\">\n\t\t\t\t\t\t\t\t{pluginInfo.loadedPlugins\n\t\t\t\t\t\t\t\t\t.filter((plugin) => !pluginInfo.activePlugins?.includes(plugin))\n\t\t\t\t\t\t\t\t\t.map((plugin, index) => (\n\t\t\t\t\t\t\t\t\t\t<div key={index} className=\"text-yellow-300\">\n\t\t\t\t\t\t\t\t\t\t\t• {plugin}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render debug info\n\tconst renderDebugInfo = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"space-y-1 font-mono text-xs\">\n\t\t\t\t{Object.entries(debugInfo).map(([key, value]) => (\n\t\t\t\t\t<div key={key}>\n\t\t\t\t\t\t<span className=\"text-yellow-400\">{key}:</span>\n\t\t\t\t\t\t<span className=\"ml-2 text-gray-300\">\n\t\t\t\t\t\t\t{typeof value === \"object\" ? JSON.stringify(value, null, 2) : String(value)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render tabs\n\tconst renderTabs = () => (\n\t\t<div className=\"flex space-x-1 border-gray-600 border-b\">\n\t\t\t{[\n\t\t\t\t{ id: \"performance\", label: \"Performance\" },\n\t\t\t\t{ id: \"hls\", label: \"HLS\" },\n\t\t\t\t{ id: \"plugins\", label: \"Plugins\" },\n\t\t\t\t{ id: \"debug\", label: \"Debug\" }\n\t\t\t].map((tab) => (\n\t\t\t\t<button\n\t\t\t\t\tkey={tab.id}\n\t\t\t\t\tonClick={() => setActiveTab(tab.id as any)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"px-2 py-1 font-medium text-xs transition-colors\",\n\t\t\t\t\t\tactiveTab === tab.id\n\t\t\t\t\t\t\t? \"border-blue-400 border-b text-blue-400\"\n\t\t\t\t\t\t\t: \"text-gray-400 hover:text-white\"\n\t\t\t\t\t)}>\n\t\t\t\t\t{tab.label}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</div>\n\t)\n\n\t// Render active tab content\n\tconst renderTabContent = () => {\n\t\tswitch (activeTab) {\n\t\t\tcase \"performance\":\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"space-y-3\">\n\t\t\t\t\t\t{renderPerformanceMetrics()}\n\t\t\t\t\t\t<hr className=\"border-gray-600\" />\n\t\t\t\t\t\t{renderPlaybackState()}\n\t\t\t\t\t\t<hr className=\"border-gray-600\" />\n\t\t\t\t\t\t{renderPreloadingStats()}\n\t\t\t\t\t</div>\n\t\t\t\t)\n\t\t\tcase \"hls\":\n\t\t\t\treturn renderHLSMetrics()\n\t\t\tcase \"plugins\":\n\t\t\t\treturn renderPluginInfo()\n\t\t\tcase \"debug\":\n\t\t\t\treturn renderDebugInfo()\n\t\t\tdefault:\n\t\t\t\treturn renderPerformanceMetrics()\n\t\t}\n\t}\n\n\t// Only render in development\n\tif (process.env.NODE_ENV !== \"development\") {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"fixed z-50 min-w-80 max-w-96 rounded-lg border border-gray-700 bg-black/90 p-3 font-mono text-white text-xs backdrop-blur-sm\",\n\t\t\t\tpositionClasses,\n\t\t\t\tclassName\n\t\t\t)}>\n\t\t\t{/* Header */}\n\t\t\t<div className=\"mb-3 flex items-center justify-between\">\n\t\t\t\t<h3 className=\"font-bold text-blue-400 text-sm\">{title}</h3>\n\t\t\t\t<div className=\"flex items-center space-x-2\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsCollapsed(!isCollapsed)}\n\t\t\t\t\t\tclassName=\"text-gray-400 transition-colors hover:text-white\"\n\t\t\t\t\t\taria-label={isCollapsed ? \"Expand\" : \"Collapse\"}>\n\t\t\t\t\t\t{isCollapsed ? (\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M3 4.5L6 7.5L9 4.5\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M3 7.5L6 4.5L9 7.5\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Collapsed content */}\n\t\t\t{isCollapsed ? (\n\t\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span className=\"text-green-400\">FPS:</span>\n\t\t\t\t\t\t<span className=\"ml-1 font-mono\">{performanceMetrics.fps || 0}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span className=\"text-blue-400\">Memory:</span>\n\t\t\t\t\t\t<span className=\"ml-1 font-mono\">\n\t\t\t\t\t\t\t{((performanceMetrics.memoryUsage || 0) / 1024 / 1024).toFixed(1)}MB\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{/* Tabs */}\n\t\t\t\t\t{renderTabs()}\n\n\t\t\t\t\t{/* Tab Content */}\n\t\t\t\t\t<div className=\"mt-3 max-h-64 overflow-y-auto\">{renderTabContent()}</div>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n/**\n * Performance Debug Panel - simplified version focused on performance metrics\n */\nexport const PerformanceDebugPanel: React.FC<\n\tOmit<DebugPanelProps, \"position\" | \"defaultCollapsed\" | \"title\">\n> = (props) => {\n\treturn (\n\t\t<DebugPanel\n\t\t\t{...props}\n\t\t\tposition=\"top-right\"\n\t\t\tdefaultCollapsed={false}\n\t\t\ttitle=\"Performance Monitor\"\n\t\t/>\n\t)\n}\n\nexport default DebugPanel\n"],"names":["composeRefs","refs","node","ref","useAutoHideControls","autoHide","delay","showOnHover","showOnTouch","showControls","setShowControls","React","isHovering","setIsHovering","isTouching","setIsTouching","timeoutRef","resetTimeout","showControlsTemporarily","handleMouseEnter","handleMouseLeave","handleTouchStart","handleTouchEnd","useTouchGestures","enabled","dispatch","useMediaDispatch","isPlaying","useMediaSelector","state","currentTime","duration","volume","touchStart","setTouchStart","isDoubleTap","setIsDoubleTap","e","touch","now","MediaActionTypes","handleTouchMove","deltaX","deltaY","seekAmount","newTime","volumeChange","newVolume","EnhancedMediaPlayer","children","className","autoHideDelay","showControlsOnHover","showControlsOnTouch","enableKeyboardControls","enableTouchGestures","onPlay","onPause","onTimeUpdate","onVolumeChange","onFullscreenChange","context","useMediaContext","isFullscreen","error","handleControlsTouch","handleControlsTouchEnd","handleGestureStart","handleGestureMove","handleGestureEnd","handleClick","handleKeyDown","jsx","cn","QualitySelector","qualities","currentQuality","onQualityChange","isOpen","setIsOpen","currentQualityLabel","q","jsxs","quality","SubtitleSelector","subtitles","currentSubtitle","onSubtitleChange","currentSubtitleLabel","s","subtitle","PlaybackSpeedSelector","playbackRate","speeds","handleSpeedChange","speed","ChaptersPanel","chapters","onChapterSelect","currentChapter","chapter","formatTime","PictureInPictureButton","isPictureInPicture","handleTogglePiP","EnhancedPlayButton","size","isLoading","sizeClasses","iconSizes","EnhancedSeekBar","buffered","previewTime","isDragging","setIsDragging","hoverTime","setHoverTime","progressRef","progress","previewProgress","bufferedRanges","ranges","i","getTimeFromPosition","clientX","rect","handleMouseMove","time","handleMouseDown","handleMouseUp","range","index","EnhancedVolumeControl","isMuted","showSlider","setShowSlider","handleToggleMute","handleVolumeChange","VolumeIcon","EnhancedBackwardButton","skipTime","EnhancedForwardButton","EnhancedTimeDisplay","variant","displayTime","PerformanceIndicator","metrics","getPerformanceColor","fps","getBufferColor","health","EnhancedControlBar","showSkipButtons","showVolumeControl","showTimeDisplay","playButtonSize","skipButtonSize","showPerformanceIndicators","performanceMetrics","DebugPanel","preloadingStats","playbackState","hlsMetrics","pluginInfo","debugInfo","position","defaultCollapsed","title","isCollapsed","setIsCollapsed","activeTab","setActiveTab","positionClasses","useMemo","formatBytes","bytes","k","sizes","seconds","mins","secs","renderPerformanceMetrics","renderPlaybackState","renderPreloadingStats","renderHLSMetrics","renderPluginInfo","plugin","renderDebugInfo","key","value","renderTabs","tab","renderTabContent","Fragment"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";const e=require("./context-eNS62_ac.cjs"),o=require("react"),x=require("./utils-CFOue_9K.cjs");function Y(...u){return i=>{u.forEach(s=>{typeof s=="function"?s(i):s&&(s.current=i)})}}function W(u,i,s,n){const[t,a]=o.useState(!0),[r,c]=o.useState(!1),[l,p]=o.useState(!1),d=o.useRef(null),v=o.useCallback(()=>{d.current&&clearTimeout(d.current),u&&(d.current=setTimeout(()=>{!r&&!l&&a(!1)},i))},[u,i,r,l]),N=o.useCallback(()=>{a(!0),v()},[v]);o.useEffect(()=>(u?v():a(!0),()=>{d.current&&clearTimeout(d.current)}),[u,v]);const f=o.useCallback(()=>{s&&(c(!0),a(!0))},[s]),R=o.useCallback(()=>{s&&(c(!1),v())},[s,v]),m=o.useCallback(()=>{n&&(p(!0),N())},[n,N]),b=o.useCallback(()=>{n&&(p(!1),v())},[n,v]);return{showControls:t,showControlsTemporarily:N,handleMouseEnter:f,handleMouseLeave:R,handleTouchStart:m,handleTouchEnd:b}}function Q(u){const i=e.useMediaDispatch(),s=e.useMediaSelector(f=>f.isPlaying),n=e.useMediaSelector(f=>f.currentTime),t=e.useMediaSelector(f=>f.duration),a=e.useMediaSelector(f=>f.volume),[r,c]=o.useState(null),[l,p]=o.useState(!1),d=o.useCallback(f=>{if(!u)return;const R=f.touches[0];if(!R)return;const m=Date.now();r&&m-r.time<300?(p(!0),i({type:s?e.MediaActionTypes.PAUSE:e.MediaActionTypes.PLAY})):(c({x:R.clientX,y:R.clientY,time:m}),p(!1))},[u,r,s,i]),v=o.useCallback(f=>{if(!u||!r||l)return;const R=f.touches[0];if(!R)return;const m=R.clientX-r.x,b=R.clientY-r.y;if(Math.abs(m)>Math.abs(b)&&Math.abs(m)>50){const g=m/window.innerWidth*30,M=Math.max(0,Math.min(t,n+g));i({type:e.MediaActionTypes.SEEK,detail:M})}if(Math.abs(b)>Math.abs(m)&&Math.abs(b)>50&&r.x>window.innerWidth/2){const g=-(b/window.innerHeight)*1,M=Math.max(0,Math.min(1,a+g));i({type:e.MediaActionTypes.SET_VOLUME,detail:M})}},[u,r,l,t,n,a,i]),N=o.useCallback(()=>{u&&setTimeout(()=>{c(null),p(!1)},300)},[u]);return{handleTouchStart:d,handleTouchMove:v,handleTouchEnd:N}}const D=function({children:i,className:s,autoHide:n=!0,autoHideDelay:t=3e3,showControlsOnHover:a=!0,showControlsOnTouch:r=!0,enableKeyboardControls:c=!0,enableTouchGestures:l=!0,onPlay:p,onPause:d,onTimeUpdate:v,onVolumeChange:N,onFullscreenChange:f}){const R=e.useMediaContext(),m=e.useMediaDispatch(),b=e.useMediaSelector(o.useCallback(y=>y.isPlaying,[])),g=e.useMediaSelector(o.useCallback(y=>y.isFullscreen,[])),M=e.useMediaSelector(o.useCallback(y=>y.currentTime,[])),C=e.useMediaSelector(o.useCallback(y=>y.volume,[])),h=e.useMediaSelector(o.useCallback(y=>y.error,[])),{showControls:j,showControlsTemporarily:S,handleMouseEnter:k,handleMouseLeave:P,handleTouchStart:E,handleTouchEnd:w}=W(n,t,a,r),{handleTouchStart:A,handleTouchMove:L,handleTouchEnd:z}=Q(l),$=o.useCallback(y=>{E(),A(y)},[E,A]),X=o.useCallback(()=>{w(),z()},[w,z]),G=o.useCallback(()=>{S()},[S]);return o.useEffect(()=>{if(!c)return;const y=T=>{if(!(T.target instanceof HTMLInputElement||T.target instanceof HTMLTextAreaElement))switch(T.code){case"Space":case"KeyK":T.preventDefault(),m({type:b?e.MediaActionTypes.PAUSE:e.MediaActionTypes.PLAY});break;case"KeyF":T.preventDefault(),m({type:g?e.MediaActionTypes.EXIT_FULLSCREEN:e.MediaActionTypes.ENTER_FULLSCREEN});break;case"KeyM":T.preventDefault(),m({type:e.MediaActionTypes.TOGGLE_MUTE});break;case"ArrowLeft":T.preventDefault(),m({type:e.MediaActionTypes.SEEK,detail:Math.max(0,M-10)});break;case"ArrowRight":T.preventDefault(),m({type:e.MediaActionTypes.SEEK,detail:M+10});break;case"ArrowUp":T.preventDefault(),m({type:e.MediaActionTypes.SET_VOLUME,detail:Math.min(1,C+.1)});break;case"ArrowDown":T.preventDefault(),m({type:e.MediaActionTypes.SET_VOLUME,detail:Math.max(0,C-.1)});break}};return document.addEventListener("keydown",y),()=>document.removeEventListener("keydown",y)},[c,m,b,g,M,C]),o.useEffect(()=>{b?p?.():d?.()},[b,p,d]),o.useEffect(()=>{v?.(M)},[M,v]),o.useEffect(()=>{N?.(C)},[C,N]),o.useEffect(()=>{f?.(g)},[g,f]),e.jsxRuntimeExports.jsx("div",{ref:Y(R.rootRef),className:x.cn("relative isolate flex flex-col overflow-hidden rounded-lg bg-black outline-none","focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2","data-[disabled]:pointer-events-none data-[disabled]:opacity-50",g&&"fixed inset-0 z-50 rounded-none",s),"data-state":g?"fullscreen":"inline","data-disabled":h?"":void 0,"data-controls-visible":j?"":void 0,tabIndex:0,onMouseEnter:k,onMouseLeave:P,onTouchStart:$,onTouchMove:L,onTouchEnd:X,onClick:G,children:i})};D.displayName="EnhancedMediaPlayer";const F=function({qualities:i,currentQuality:s,onQualityChange:n,className:t}){const[a,r]=o.useState(!1),c=o.useMemo(()=>i.find(l=>l.id===s)?.label||"Auto",[i,s]);return e.jsxRuntimeExports.jsxs("div",{className:x.cn("relative",t),children:[e.jsxRuntimeExports.jsxs("button",{type:"button",onClick:()=>r(!a),className:"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70","aria-label":"Select quality",children:[e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-4 w-4",children:e.jsxRuntimeExports.jsx("path",{d:"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"})}),e.jsxRuntimeExports.jsx("span",{className:"text-sm",children:c}),e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:x.cn("h-4 w-4 transition-transform",a&&"rotate-180"),children:e.jsxRuntimeExports.jsx("path",{d:"M7 10l5 5 5-5z"})})]}),a&&e.jsxRuntimeExports.jsx("div",{className:"absolute right-0 bottom-full mb-2 min-w-32 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm",children:i.map(l=>e.jsxRuntimeExports.jsxs("button",{onClick:()=>{n(l.id),r(!1)},className:x.cn("w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10",l.id===s&&"bg-primary/20 text-primary"),children:[l.label,l.bitrate&&e.jsxRuntimeExports.jsxs("span",{className:"ml-2 text-white/60 text-xs",children:["(",Math.round(l.bitrate/1e3),"k)"]})]},l.id))})]})},V=function({subtitles:i,currentSubtitle:s,onSubtitleChange:n,className:t}){const[a,r]=o.useState(!1),c=o.useMemo(()=>s&&i.find(l=>l.id===s)?.label||"Off",[i,s]);return e.jsxRuntimeExports.jsxs("div",{className:x.cn("relative",t),children:[e.jsxRuntimeExports.jsxs("button",{type:"button",onClick:()=>r(!a),className:"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70","aria-label":"Select subtitles",children:[e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-4 w-4",children:e.jsxRuntimeExports.jsx("path",{d:"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM4 12h4v2H4v-2zm10 6H4v-2h10v2zm6 0h-4v-2h4v2zm0-4H10v-2h10v2z"})}),e.jsxRuntimeExports.jsx("span",{className:"text-sm",children:c}),e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:x.cn("h-4 w-4 transition-transform",a&&"rotate-180"),children:e.jsxRuntimeExports.jsx("path",{d:"M7 10l5 5 5-5z"})})]}),a&&e.jsxRuntimeExports.jsxs("div",{className:"absolute right-0 bottom-full mb-2 min-w-32 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm",children:[e.jsxRuntimeExports.jsx("button",{onClick:()=>{n(null),r(!1)},className:x.cn("w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10",!s&&"bg-primary/20 text-primary"),children:"Off"}),i.map(l=>e.jsxRuntimeExports.jsx("button",{onClick:()=>{n(l.id),r(!1)},className:x.cn("w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10",l.id===s&&"bg-primary/20 text-primary"),children:l.label},l.id))]})]})},I=function({className:i}){const s=e.useMediaDispatch(),n=e.useMediaSelector(l=>l.playbackRate),[t,a]=o.useState(!1),r=[.25,.5,.75,1,1.25,1.5,1.75,2],c=o.useCallback(l=>{s({type:e.MediaActionTypes.SET_PLAYBACK_RATE,detail:l}),a(!1)},[s]);return e.jsxRuntimeExports.jsxs("div",{className:x.cn("relative",i),children:[e.jsxRuntimeExports.jsxs("button",{type:"button",onClick:()=>a(!t),className:"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70","aria-label":"Select playback speed",children:[e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-4 w-4",children:e.jsxRuntimeExports.jsx("path",{d:"M13,8A4,4 0 0,0 9,12A4,4 0 0,0 13,16A4,4 0 0,0 17,12A4,4 0 0,0 13,8M13,14A2,2 0 0,1 11,12A2,2 0 0,1 13,10A2,2 0 0,1 15,12A2,2 0 0,1 13,14M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4Z"})}),e.jsxRuntimeExports.jsxs("span",{className:"text-sm",children:[n,"x"]}),e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:x.cn("h-4 w-4 transition-transform",t&&"rotate-180"),children:e.jsxRuntimeExports.jsx("path",{d:"M7 10l5 5 5-5z"})})]}),t&&e.jsxRuntimeExports.jsx("div",{className:"absolute right-0 bottom-full mb-2 min-w-20 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm",children:r.map(l=>e.jsxRuntimeExports.jsxs("button",{onClick:()=>c(l),className:x.cn("w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10",l===n&&"bg-primary/20 text-primary"),children:[l,"x"]},l))})]})},_=function({chapters:i,onChapterSelect:s,className:n}){const t=e.useMediaSelector(r=>r.currentTime),a=o.useMemo(()=>i.find(r=>t>=r.startTime&&t<r.endTime),[i,t]);return e.jsxRuntimeExports.jsxs("div",{className:x.cn("rounded-lg border border-white/20 bg-black/90 p-4 backdrop-blur-sm",n),children:[e.jsxRuntimeExports.jsx("h3",{className:"mb-3 font-semibold text-white",children:"Chapters"}),e.jsxRuntimeExports.jsx("div",{className:"max-h-64 space-y-2 overflow-y-auto",children:i.map(r=>e.jsxRuntimeExports.jsxs("button",{onClick:()=>s(r),className:x.cn("flex w-full items-center gap-3 rounded-lg p-3 text-left transition-colors","hover:bg-white/10",r.id===a?.id&&"border border-primary/30 bg-primary/20"),children:[r.thumbnail&&e.jsxRuntimeExports.jsx("img",{src:r.thumbnail,alt:r.title,className:"h-9 w-16 rounded object-cover"}),e.jsxRuntimeExports.jsxs("div",{className:"min-w-0 flex-1",children:[e.jsxRuntimeExports.jsx("div",{className:"truncate font-medium text-white",children:r.title}),e.jsxRuntimeExports.jsxs("div",{className:"text-sm text-white/60",children:[x.formatTime(r.startTime)," - ",x.formatTime(r.endTime)]})]})]},r.id))})]})},H=function({className:i}){const s=e.useMediaDispatch(),n=e.useMediaSelector(a=>a.isPictureInPicture),t=o.useCallback(()=>{s({type:n?e.MediaActionTypes.EXIT_PIP:e.MediaActionTypes.ENTER_PIP})},[s,n]);return e.jsxRuntimeExports.jsx("button",{type:"button",onClick:t,className:x.cn("flex h-10 w-10 items-center justify-center rounded-full text-white","transition-colors hover:bg-white/10",i),"aria-label":n?"Exit Picture-in-Picture":"Enter Picture-in-Picture",children:e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-5 w-5",children:e.jsxRuntimeExports.jsx("path",{d:"M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h18v14z"})})})},q=Object.freeze(Object.defineProperty({__proto__:null,ChaptersPanel:_,PictureInPictureButton:H,PlaybackSpeedSelector:I,QualitySelector:F,SubtitleSelector:V},Symbol.toStringTag,{value:"Module"})),O=function({className:i,size:s="md"}){const n=e.useMediaDispatch(),t=e.useMediaSelector(p=>p.isPlaying),a=e.useMediaSelector(p=>p.isLoading),r={sm:"h-8 w-8",md:"h-10 w-10",lg:"h-12 w-12",xl:"h-16 w-16"},c={sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6",xl:"h-8 w-8"},l=o.useCallback(()=>{n({type:t?e.MediaActionTypes.PAUSE:e.MediaActionTypes.PLAY})},[n,t]);return e.jsxRuntimeExports.jsx("button",{type:"button",onClick:l,disabled:a,className:x.cn("group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm","border border-white/20 text-white transition-all duration-200","hover:scale-105 hover:bg-white/20 active:scale-95","focus:outline-none focus:ring-2 focus:ring-white/50","disabled:cursor-not-allowed disabled:opacity-50",r[s],i),"aria-label":t?"Pause":"Play",children:a?e.jsxRuntimeExports.jsx("div",{className:x.cn("animate-spin rounded-full border-2 border-white/30 border-t-white",c[s])}):e.jsxRuntimeExports.jsx("div",{className:x.cn("transition-transform duration-200",c[s]),children:t?e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-full w-full",children:e.jsxRuntimeExports.jsx("path",{d:"M6 4h4v16H6V4zm8 0h4v16h-4V4z"})}):e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"ml-0.5 h-full w-full",children:e.jsxRuntimeExports.jsx("path",{d:"M8 5v14l11-7z"})})})})},K=function({className:i}){const s=e.useMediaDispatch(),n=e.useMediaSelector(h=>h.currentTime),t=e.useMediaSelector(h=>h.duration),a=e.useMediaSelector(h=>h.buffered),r=e.useMediaSelector(h=>h.previewTime),[c,l]=o.useState(!1),[p,d]=o.useState(null),v=o.useRef(null),N=t>0?n/t*100:0,f=t>0&&r!==null?r/t*100:null,R=o.useMemo(()=>{if(!a||t===0)return[];const h=[];for(let j=0;j<a.length;j++)h.push({start:a.start(j)/t*100,end:a.end(j)/t*100});return h},[a,t]),m=o.useCallback(h=>{if(!v.current)return 0;const j=v.current.getBoundingClientRect();return Math.max(0,Math.min(1,(h-j.left)/j.width))*t},[t]),b=o.useCallback(h=>{if(!c){const j=m(h.clientX);d(j),s({type:e.MediaActionTypes.PREVIEW_TIME,detail:j})}},[c,m,s]),g=o.useCallback(()=>{c||(d(null),s({type:e.MediaActionTypes.CLEAR_PREVIEW}))},[c,s]),M=o.useCallback(h=>{l(!0);const j=m(h.clientX);s({type:e.MediaActionTypes.SEEK,detail:j})},[m,s]),C=o.useCallback(h=>{l(!0);const j=m(h.touches[0]?.clientX||0);s({type:e.MediaActionTypes.SEEK,detail:j})},[m,s]);return o.useEffect(()=>{const h=k=>{if(c){const P=m(k.clientX);s({type:e.MediaActionTypes.SEEK,detail:P})}},j=()=>{l(!1),d(null),s({type:e.MediaActionTypes.CLEAR_PREVIEW})},S=k=>{if(c){const P=m(k.touches[0]?.clientX||0);s({type:e.MediaActionTypes.SEEK,detail:P})}};return c&&(document.addEventListener("mousemove",h),document.addEventListener("mouseup",j),document.addEventListener("touchmove",S),document.addEventListener("touchend",j)),()=>{document.removeEventListener("mousemove",h),document.removeEventListener("mouseup",j),document.removeEventListener("touchmove",S),document.removeEventListener("touchend",j)}},[c,m,s]),e.jsxRuntimeExports.jsxs("div",{className:x.cn("group relative flex items-center",i),children:[(p!==null||r!==null)&&e.jsxRuntimeExports.jsx("div",{className:"pointer-events-none absolute bottom-full mb-2 rounded bg-black/80 px-2 py-1 text-white text-xs",style:{left:`${f||(p||0)/t*100}%`,transform:"translateX(-50%)"},children:x.formatTime(p||r||0)}),e.jsxRuntimeExports.jsxs("div",{ref:v,className:"relative h-2 w-full cursor-pointer rounded-full bg-white/20 transition-all duration-200 group-hover:h-3",onMouseMove:b,onMouseLeave:g,onMouseDown:M,onTouchStart:C,children:[R.map((h,j)=>e.jsxRuntimeExports.jsx("div",{className:"absolute top-0 h-full rounded-full bg-white/30",style:{left:`${h.start}%`,width:`${h.end-h.start}%`}},j)),e.jsxRuntimeExports.jsx("div",{className:"absolute top-0 h-full rounded-full bg-primary transition-all duration-100",style:{width:`${N}%`}}),f!==null&&e.jsxRuntimeExports.jsx("div",{className:"absolute top-0 h-full w-1 rounded-full bg-white/80",style:{left:`${f}%`}}),e.jsxRuntimeExports.jsx("div",{className:"-translate-y-1/2 absolute top-1/2 h-4 w-4 rounded-full border-2 border-white bg-primary opacity-0 shadow-lg transition-all duration-200 group-hover:opacity-100",style:{left:`${N}%`,transform:"translateX(-50%) translateY(-50%)"}})]})]})},U=function({className:i}){const s=e.useMediaDispatch(),n=e.useMediaSelector(d=>d.volume),t=e.useMediaSelector(d=>d.isMuted),[a,r]=o.useState(!1),c=o.useCallback(()=>{s({type:e.MediaActionTypes.TOGGLE_MUTE})},[s]),l=o.useCallback(d=>{s({type:e.MediaActionTypes.SET_VOLUME,detail:d})},[s]),p=o.useMemo(()=>t||n===0?e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-5 w-5",children:e.jsxRuntimeExports.jsx("path",{d:"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z"})}):n<.5?e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-5 w-5",children:e.jsxRuntimeExports.jsx("path",{d:"M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z"})}):e.jsxRuntimeExports.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-5 w-5",children:e.jsxRuntimeExports.jsx("path",{d:"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"})}),[t,n]);return e.jsxRuntimeExports.jsxs("div",{className:x.cn("relative flex items-center",i),onMouseEnter:()=>r(!0),onMouseLeave:()=>r(!1),children:[e.jsxRuntimeExports.jsx("button",{type:"button",onClick:c,className:"flex h-10 w-10 items-center justify-center rounded-full text-white transition-colors hover:bg-white/10","aria-label":t?"Unmute":"Mute",children:p}),e.jsxRuntimeExports.jsx("div",{className:x.cn("absolute left-full ml-2 flex items-center transition-all duration-200",a?"translate-x-0 opacity-100":"-translate-x-2 pointer-events-none opacity-0"),children:e.jsxRuntimeExports.jsx("input",{type:"range",min:"0",max:"1",step:"0.01",value:t?0:n,onChange:d=>l(parseFloat(d.target.value)),className:"slider h-1 w-20 cursor-pointer appearance-none rounded-lg bg-white/20"})})]})},J=function({className:i,size:s="md",skipTime:n=10}){const t=e.useMediaDispatch(),a=e.useMediaSelector(p=>p.currentTime),r={sm:"h-8 w-8",md:"h-10 w-10",lg:"h-12 w-12"},c={sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"},l=o.useCallback(()=>{const p=Math.max(0,a-n);t({type:e.MediaActionTypes.SEEK,detail:p})},[t,a,n]);return e.jsxRuntimeExports.jsx("button",{type:"button",onClick:l,className:x.cn("group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm","border border-white/20 text-white transition-all duration-200","hover:scale-105 hover:bg-white/20 active:scale-95","focus:outline-none focus:ring-2 focus:ring-white/50",r[s],i),"aria-label":`Backward ${n} seconds`,title:`Backward ${n}s`,children:e.jsxRuntimeExports.jsxs("div",{className:x.cn("flex items-center transition-transform duration-200",c[s]),children:[e.jsxRuntimeExports.jsxs("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-full w-full",children:[e.jsxRuntimeExports.jsx("path",{d:"M7 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zM15.5 7.5c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v9c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-9z"}),e.jsxRuntimeExports.jsx("path",{d:"M5.5 12l7-4.5v9l-7-4.5z",opacity:"0.8"})]}),n&&e.jsxRuntimeExports.jsx("span",{className:"-bottom-1 absolute font-bold text-[10px]",children:n})]})})},Z=function({className:i,size:s="md",skipTime:n=10}){const t=e.useMediaDispatch(),a=e.useMediaSelector(d=>d.currentTime),r=e.useMediaSelector(d=>d.duration),c={sm:"h-8 w-8",md:"h-10 w-10",lg:"h-12 w-12"},l={sm:"h-4 w-4",md:"h-5 w-5",lg:"h-6 w-6"},p=o.useCallback(()=>{const d=Math.min(r,a+n);t({type:e.MediaActionTypes.SEEK,detail:d})},[t,a,r,n]);return e.jsxRuntimeExports.jsx("button",{type:"button",onClick:p,className:x.cn("group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm","border border-white/20 text-white transition-all duration-200","hover:scale-105 hover:bg-white/20 active:scale-95","focus:outline-none focus:ring-2 focus:ring-white/50",c[s],i),"aria-label":`Forward ${n} seconds`,title:`Forward ${n}s`,children:e.jsxRuntimeExports.jsxs("div",{className:x.cn("flex items-center transition-transform duration-200",l[s]),children:[e.jsxRuntimeExports.jsxs("svg",{viewBox:"0 0 24 24",fill:"currentColor",className:"h-full w-full",children:[e.jsxRuntimeExports.jsx("path",{d:"M17 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zM8.5 7.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v9c0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5v-9z"}),e.jsxRuntimeExports.jsx("path",{d:"M18.5 12l-7-4.5v9l7-4.5z",opacity:"0.8"})]}),n&&e.jsxRuntimeExports.jsx("span",{className:"-bottom-1 absolute font-bold text-[10px]",children:n})]})})},B=function({variant:i="current",className:s}){const n=e.useMediaSelector(r=>r.currentTime),t=e.useMediaSelector(r=>r.duration),a=o.useMemo(()=>{switch(i){case"current":return x.formatTime(n);case"duration":return x.formatTime(t);case"remaining":return`-${x.formatTime(t-n)}`;default:return x.formatTime(n)}},[i,n,t]);return e.jsxRuntimeExports.jsx("div",{className:x.cn("font-mono text-sm text-white tabular-nums",s),children:a})},ee=function({metrics:i,className:s}){if(!i||process.env.NODE_ENV!=="development")return null;const n=a=>a>=50?"text-green-400":a>=30?"text-yellow-400":"text-red-400",t=a=>a>=5?"text-green-400":a>=2?"text-yellow-400":"text-red-400";return e.jsxRuntimeExports.jsxs("div",{className:x.cn("flex items-center gap-3 font-mono text-xs",s),children:[i.fps!==void 0&&e.jsxRuntimeExports.jsxs("div",{className:x.cn("flex items-center gap-1",n(i.fps)),children:[e.jsxRuntimeExports.jsx("div",{className:"h-2 w-2 rounded-full bg-current"}),e.jsxRuntimeExports.jsxs("span",{children:[i.fps," FPS"]})]}),i.bufferHealth!==void 0&&e.jsxRuntimeExports.jsxs("div",{className:x.cn("flex items-center gap-1",t(i.bufferHealth)),children:[e.jsxRuntimeExports.jsx("div",{className:"h-2 w-2 rounded-full bg-current"}),e.jsxRuntimeExports.jsxs("span",{children:[i.bufferHealth.toFixed(1),"s"]})]}),i.quality!==void 0&&e.jsxRuntimeExports.jsxs("div",{className:"flex items-center gap-1 text-blue-400",children:[e.jsxRuntimeExports.jsx("div",{className:"h-2 w-2 rounded-full bg-current"}),e.jsxRuntimeExports.jsxs("span",{children:[i.quality,"p"]})]})]})},se=function({className:i,showSkipButtons:s=!0,showVolumeControl:n=!0,showTimeDisplay:t=!0,playButtonSize:a="xl",skipButtonSize:r="md",skipTime:c=10,showPerformanceIndicators:l=process.env.NODE_ENV==="development",performanceMetrics:p}){return e.jsxRuntimeExports.jsxs("div",{className:x.cn("flex flex-col gap-4 bg-gradient-to-t from-black/80 to-transparent p-4",i),children:[e.jsxRuntimeExports.jsx(K,{className:"w-full"}),e.jsxRuntimeExports.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxRuntimeExports.jsxs("div",{className:"flex items-center gap-3",children:[s&&e.jsxRuntimeExports.jsx(J,{size:r,skipTime:c,className:"shrink-0"}),e.jsxRuntimeExports.jsx(O,{size:a,className:"shrink-0"}),s&&e.jsxRuntimeExports.jsx(Z,{size:r,skipTime:c,className:"shrink-0"}),n&&e.jsxRuntimeExports.jsx(U,{className:"shrink-0"}),t&&e.jsxRuntimeExports.jsxs("div",{className:"flex items-center gap-1 font-mono text-sm",children:[e.jsxRuntimeExports.jsx(B,{variant:"current"}),e.jsxRuntimeExports.jsx("span",{className:"text-white/60",children:"/"}),e.jsxRuntimeExports.jsx(B,{variant:"duration"})]})]}),e.jsxRuntimeExports.jsx("div",{className:"flex items-center gap-2",children:l&&e.jsxRuntimeExports.jsx(ee,{metrics:p,className:"text-white/80"})})]})]})},te=({performanceMetrics:u={},preloadingStats:i={},playbackState:s={},hlsMetrics:n={},pluginInfo:t={},debugInfo:a={},className:r,position:c="top-right",defaultCollapsed:l=!1,title:p="BaroiPlayer Debug Panel"})=>{const[d,v]=o.useState(l),[N,f]=o.useState("performance"),R=o.useMemo(()=>{switch(c){case"top-left":return"top-4 left-4";case"top-right":return"top-4 right-4";case"bottom-left":return"bottom-4 left-4";case"bottom-right":return"bottom-4 right-4";default:return"top-4 right-4"}},[c]),m=E=>{if(E===0)return"0 B";const w=1024,A=["B","KB","MB","GB"],L=Math.floor(Math.log(E)/Math.log(w));return parseFloat((E/Math.pow(w,L)).toFixed(2))+" "+A[L]},b=E=>{const w=Math.floor(E/60),A=Math.floor(E%60);return`${w}:${A.toString().padStart(2,"0")}`},g=()=>e.jsxRuntimeExports.jsx("div",{className:"space-y-2",children:e.jsxRuntimeExports.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-green-400",children:"FPS:"}),e.jsxRuntimeExports.jsx("span",{className:"ml-2 font-mono",children:u.fps||0})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-blue-400",children:"Memory:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[((u.memoryUsage||0)/1024/1024).toFixed(1)," MB"]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-yellow-400",children:"Buffer:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[(u.bufferHealth||0).toFixed(2),"s"]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-purple-400",children:"Bandwidth:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[m(u.networkBandwidth||0),"/s"]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-red-400",children:"Dropped:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[u.droppedFrames||0," frames"]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-cyan-400",children:"Decoded:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[u.decodedFrames||0," frames"]})]})]})}),M=()=>e.jsxRuntimeExports.jsx("div",{className:"space-y-2",children:e.jsxRuntimeExports.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-green-400",children:"Status:"}),e.jsxRuntimeExports.jsx("span",{className:"ml-2 font-mono",children:s.isPlaying?e.jsxRuntimeExports.jsx("span",{className:"text-green-300",children:"Playing"}):e.jsxRuntimeExports.jsx("span",{className:"text-red-300",children:"Paused"})})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-blue-400",children:"Time:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[b(s.currentTime||0)," / ",b(s.duration||0)]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-yellow-400",children:"Volume:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[Math.round((s.volume||0)*100),"%"]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-purple-400",children:"Quality:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[s.quality||0,"p"]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-red-400",children:"Buffering:"}),e.jsxRuntimeExports.jsx("span",{className:"ml-2 font-mono",children:s.isBuffering?e.jsxRuntimeExports.jsx("span",{className:"text-yellow-300",children:"Yes"}):e.jsxRuntimeExports.jsx("span",{className:"text-green-300",children:"No"})})]}),s.error&&e.jsxRuntimeExports.jsxs("div",{className:"col-span-2",children:[e.jsxRuntimeExports.jsx("span",{className:"text-red-400",children:"Error:"}),e.jsxRuntimeExports.jsx("span",{className:"ml-2 break-all font-mono text-red-300 text-xs",children:s.error})]})]})}),C=()=>e.jsxRuntimeExports.jsx("div",{className:"space-y-2",children:e.jsxRuntimeExports.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-green-400",children:"Preloaded:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[i.preloadedItems||0," items"]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-blue-400",children:"Engagement:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[(i.engagementScore||0).toFixed(1),"%"]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-yellow-400",children:"Queue:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[i.queueLength||0," items"]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-purple-400",children:"Hit Rate:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[(i.hitRate||0).toFixed(1),"%"]})]}),e.jsxRuntimeExports.jsxs("div",{className:"col-span-2",children:[e.jsxRuntimeExports.jsx("span",{className:"text-cyan-400",children:"Saved:"}),e.jsxRuntimeExports.jsx("span",{className:"ml-2 font-mono",children:m(i.totalSaved||0)})]})]})}),h=()=>e.jsxRuntimeExports.jsx("div",{className:"space-y-2",children:e.jsxRuntimeExports.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-green-400",children:"Level:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[n.currentLevel||0," / ",n.availableLevels||0]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-blue-400",children:"Bandwidth:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[m(n.bandwidthEstimate||0),"/s"]})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-red-400",children:"Dropped:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[n.droppedFrames||0," frames"]})]})]})}),j=()=>e.jsxRuntimeExports.jsx("div",{className:"space-y-2",children:e.jsxRuntimeExports.jsxs("div",{className:"text-xs",children:[e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-green-400",children:"Total:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-2 font-mono",children:[t.pluginCount||0," plugins"]})]}),e.jsxRuntimeExports.jsxs("div",{className:"mt-2",children:[e.jsxRuntimeExports.jsx("span",{className:"text-blue-400",children:"Active:"}),e.jsxRuntimeExports.jsx("div",{className:"ml-2 space-y-1 font-mono text-xs",children:t.activePlugins?.map((E,w)=>e.jsxRuntimeExports.jsxs("div",{className:"text-green-300",children:["• ",E]},w))||e.jsxRuntimeExports.jsx("div",{className:"text-gray-400",children:"None"})})]}),t.loadedPlugins&&t.loadedPlugins.length>(t.activePlugins?.length||0)&&e.jsxRuntimeExports.jsxs("div",{className:"mt-2",children:[e.jsxRuntimeExports.jsx("span",{className:"text-yellow-400",children:"Loaded (inactive):"}),e.jsxRuntimeExports.jsx("div",{className:"ml-2 space-y-1 font-mono text-xs",children:t.loadedPlugins.filter(E=>!t.activePlugins?.includes(E)).map((E,w)=>e.jsxRuntimeExports.jsxs("div",{className:"text-yellow-300",children:["• ",E]},w))})]})]})}),S=()=>e.jsxRuntimeExports.jsx("div",{className:"space-y-2",children:e.jsxRuntimeExports.jsx("div",{className:"space-y-1 font-mono text-xs",children:Object.entries(a).map(([E,w])=>e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsxs("span",{className:"text-yellow-400",children:[E,":"]}),e.jsxRuntimeExports.jsx("span",{className:"ml-2 text-gray-300",children:typeof w=="object"?JSON.stringify(w,null,2):String(w)})]},E))})}),k=()=>e.jsxRuntimeExports.jsx("div",{className:"flex space-x-1 border-gray-600 border-b",children:[{id:"performance",label:"Performance"},{id:"hls",label:"HLS"},{id:"plugins",label:"Plugins"},{id:"debug",label:"Debug"}].map(E=>e.jsxRuntimeExports.jsx("button",{onClick:()=>f(E.id),className:x.cn("px-2 py-1 font-medium text-xs transition-colors",N===E.id?"border-blue-400 border-b text-blue-400":"text-gray-400 hover:text-white"),children:E.label},E.id))}),P=()=>{switch(N){case"performance":return e.jsxRuntimeExports.jsxs("div",{className:"space-y-3",children:[g(),e.jsxRuntimeExports.jsx("hr",{className:"border-gray-600"}),M(),e.jsxRuntimeExports.jsx("hr",{className:"border-gray-600"}),C()]});case"hls":return h();case"plugins":return j();case"debug":return S();default:return g()}};return process.env.NODE_ENV!=="development"?null:e.jsxRuntimeExports.jsxs("div",{className:x.cn("fixed z-50 min-w-80 max-w-96 rounded-lg border border-gray-700 bg-black/90 p-3 font-mono text-white text-xs backdrop-blur-sm",R,r),children:[e.jsxRuntimeExports.jsxs("div",{className:"mb-3 flex items-center justify-between",children:[e.jsxRuntimeExports.jsx("h3",{className:"font-bold text-blue-400 text-sm",children:p}),e.jsxRuntimeExports.jsx("div",{className:"flex items-center space-x-2",children:e.jsxRuntimeExports.jsx("button",{onClick:()=>v(!d),className:"text-gray-400 transition-colors hover:text-white","aria-label":d?"Expand":"Collapse",children:d?e.jsxRuntimeExports.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:e.jsxRuntimeExports.jsx("path",{d:"M3 4.5L6 7.5L9 4.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}):e.jsxRuntimeExports.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none",children:e.jsxRuntimeExports.jsx("path",{d:"M3 7.5L6 4.5L9 7.5",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})})})})]}),d?e.jsxRuntimeExports.jsxs("div",{className:"grid grid-cols-2 gap-2 text-xs",children:[e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-green-400",children:"FPS:"}),e.jsxRuntimeExports.jsx("span",{className:"ml-1 font-mono",children:u.fps||0})]}),e.jsxRuntimeExports.jsxs("div",{children:[e.jsxRuntimeExports.jsx("span",{className:"text-blue-400",children:"Memory:"}),e.jsxRuntimeExports.jsxs("span",{className:"ml-1 font-mono",children:[((u.memoryUsage||0)/1024/1024).toFixed(1),"MB"]})]})]}):e.jsxRuntimeExports.jsxs(e.jsxRuntimeExports.Fragment,{children:[k(),e.jsxRuntimeExports.jsx("div",{className:"mt-3 max-h-64 overflow-y-auto",children:P()})]})]})};exports.ChaptersPanel=_;exports.DebugPanel=te;exports.EnhancedControlBar=se;exports.EnhancedMediaPlayer=D;exports.EnhancedPlayButton=O;exports.EnhancedSeekBar=K;exports.EnhancedTimeDisplay=B;exports.EnhancedVolumeControl=U;exports.PictureInPictureButton=H;exports.PlaybackSpeedSelector=I;exports.QualitySelector=F;exports.SubtitleSelector=V;exports.advancedFeatures=q;
2
+ //# sourceMappingURL=enhanced-components-BspFs9OO.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhanced-components-BspFs9OO.cjs","sources":["../src/components/enhanced/media-player-enhanced.tsx","../src/components/enhanced/advanced-features.tsx","../src/components/enhanced/enhanced-controls.tsx","../src/components/enhanced/debug-panel.tsx"],"sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport {\n\tMediaActionTypes,\n\tuseMediaContext,\n\tuseMediaDispatch,\n\tuseMediaSelector\n} from \"../../context/media-context\"\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) {\n\t\t\t\t;(ref as React.MutableRefObject<T>).current = node\n\t\t\t}\n\t\t})\n\t}\n}\n\n// Enhanced media player with better performance and mobile support\nexport interface EnhancedMediaPlayerProps {\n\tchildren: React.ReactNode\n\tclassName?: string\n\tautoHide?: boolean\n\tautoHideDelay?: number\n\tshowControlsOnHover?: boolean\n\tshowControlsOnTouch?: boolean\n\tenableKeyboardControls?: boolean\n\tenableTouchGestures?: boolean\n\tonPlay?: () => void\n\tonPause?: () => void\n\tonTimeUpdate?: (time: number) => void\n\tonVolumeChange?: (volume: number) => void\n\tonFullscreenChange?: (isFullscreen: boolean) => void\n}\n\n// Custom hook for auto-hide controls\nfunction useAutoHideControls(\n\tautoHide: boolean,\n\tdelay: number,\n\tshowOnHover: boolean,\n\tshowOnTouch: boolean\n) {\n\tconst [showControls, setShowControls] = React.useState(true)\n\tconst [isHovering, setIsHovering] = React.useState(false)\n\tconst [isTouching, setIsTouching] = React.useState(false)\n\tconst timeoutRef = React.useRef<NodeJS.Timeout | null>(null)\n\n\tconst resetTimeout = React.useCallback(() => {\n\t\tif (timeoutRef.current) {\n\t\t\tclearTimeout(timeoutRef.current)\n\t\t}\n\t\tif (autoHide) {\n\t\t\ttimeoutRef.current = setTimeout(() => {\n\t\t\t\tif (!isHovering && !isTouching) {\n\t\t\t\t\tsetShowControls(false)\n\t\t\t\t}\n\t\t\t}, delay)\n\t\t}\n\t}, [autoHide, delay, isHovering, isTouching])\n\n\tconst showControlsTemporarily = React.useCallback(() => {\n\t\tsetShowControls(true)\n\t\tresetTimeout()\n\t}, [resetTimeout])\n\n\tReact.useEffect(() => {\n\t\tif (autoHide) {\n\t\t\tresetTimeout()\n\t\t} else {\n\t\t\tsetShowControls(true)\n\t\t}\n\t\treturn () => {\n\t\t\tif (timeoutRef.current) {\n\t\t\t\tclearTimeout(timeoutRef.current)\n\t\t\t}\n\t\t}\n\t}, [autoHide, resetTimeout])\n\n\tconst handleMouseEnter = React.useCallback(() => {\n\t\tif (showOnHover) {\n\t\t\tsetIsHovering(true)\n\t\t\tsetShowControls(true)\n\t\t}\n\t}, [showOnHover])\n\n\tconst handleMouseLeave = React.useCallback(() => {\n\t\tif (showOnHover) {\n\t\t\tsetIsHovering(false)\n\t\t\tresetTimeout()\n\t\t}\n\t}, [showOnHover, resetTimeout])\n\n\tconst handleTouchStart = React.useCallback(() => {\n\t\tif (showOnTouch) {\n\t\t\tsetIsTouching(true)\n\t\t\tshowControlsTemporarily()\n\t\t}\n\t}, [showOnTouch, showControlsTemporarily])\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\tif (showOnTouch) {\n\t\t\tsetIsTouching(false)\n\t\t\tresetTimeout()\n\t\t}\n\t}, [showOnTouch, resetTimeout])\n\n\treturn {\n\t\tshowControls,\n\t\tshowControlsTemporarily,\n\t\thandleMouseEnter,\n\t\thandleMouseLeave,\n\t\thandleTouchStart,\n\t\thandleTouchEnd\n\t}\n}\n\n// Custom hook for touch gestures\nfunction useTouchGestures(enabled: boolean) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPlaying = useMediaSelector((state) => state.isPlaying)\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst duration = useMediaSelector((state) => state.duration)\n\tconst volume = useMediaSelector((state) => state.volume)\n\n\tconst [touchStart, setTouchStart] = React.useState<{ x: number; y: number; time: number } | null>(\n\t\tnull\n\t)\n\tconst [isDoubleTap, setIsDoubleTap] = React.useState(false)\n\n\tconst handleTouchStart = React.useCallback(\n\t\t(e: React.TouchEvent) => {\n\t\t\tif (!enabled) return\n\n\t\t\tconst touch = e.touches[0]\n\t\t\tif (!touch) return\n\n\t\t\tconst now = Date.now()\n\n\t\t\tif (touchStart && now - touchStart.time < 300) {\n\t\t\t\tsetIsDoubleTap(true)\n\t\t\t\t// Double tap to play/pause\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} else {\n\t\t\t\tsetTouchStart({\n\t\t\t\t\tx: touch.clientX,\n\t\t\t\t\ty: touch.clientY,\n\t\t\t\t\ttime: now\n\t\t\t\t})\n\t\t\t\tsetIsDoubleTap(false)\n\t\t\t}\n\t\t},\n\t\t[enabled, touchStart, isPlaying, dispatch]\n\t)\n\n\tconst handleTouchMove = React.useCallback(\n\t\t(e: React.TouchEvent) => {\n\t\t\tif (!enabled || !touchStart || isDoubleTap) return\n\n\t\t\tconst touch = e.touches[0]\n\t\t\tif (!touch) return\n\n\t\t\tconst deltaX = touch.clientX - touchStart.x\n\t\t\tconst deltaY = touch.clientY - touchStart.y\n\n\t\t\t// Horizontal swipe for seeking\n\t\t\tif (Math.abs(deltaX) > Math.abs(deltaY) && Math.abs(deltaX) > 50) {\n\t\t\t\tconst seekAmount = (deltaX / window.innerWidth) * 30 // 30 seconds max\n\t\t\t\tconst newTime = Math.max(0, Math.min(duration, currentTime + seekAmount))\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\tdetail: newTime\n\t\t\t\t})\n\t\t\t}\n\n\t\t\t// Vertical swipe for volume (right side of screen)\n\t\t\tif (\n\t\t\t\tMath.abs(deltaY) > Math.abs(deltaX) &&\n\t\t\t\tMath.abs(deltaY) > 50 &&\n\t\t\t\ttouchStart.x > window.innerWidth / 2\n\t\t\t) {\n\t\t\t\tconst volumeChange = -(deltaY / window.innerHeight) * 1 // Full range\n\t\t\t\tconst newVolume = Math.max(0, Math.min(1, volume + volumeChange))\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\tdetail: newVolume\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\t[enabled, touchStart, isDoubleTap, duration, currentTime, volume, dispatch]\n\t)\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\tif (!enabled) return\n\t\t// Reset touch state after a delay to allow for double tap detection\n\t\tsetTimeout(() => {\n\t\t\tsetTouchStart(null)\n\t\t\tsetIsDoubleTap(false)\n\t\t}, 300)\n\t}, [enabled])\n\n\treturn {\n\t\thandleTouchStart,\n\t\thandleTouchMove,\n\t\thandleTouchEnd\n\t}\n}\n\nexport const EnhancedMediaPlayer = function EnhancedMediaPlayer({\n\tchildren,\n\tclassName,\n\tautoHide = true,\n\tautoHideDelay = 3000,\n\tshowControlsOnHover = true,\n\tshowControlsOnTouch = true,\n\tenableKeyboardControls = true,\n\tenableTouchGestures = true,\n\tonPlay,\n\tonPause,\n\tonTimeUpdate,\n\tonVolumeChange,\n\tonFullscreenChange\n}: EnhancedMediaPlayerProps) {\n\tconst context = useMediaContext()\n\tconst dispatch = useMediaDispatch()\n\n\t// State selectors with memoization\n\tconst isPlaying = useMediaSelector(React.useCallback((state) => state.isPlaying, []))\n\tconst isFullscreen = useMediaSelector(React.useCallback((state) => state.isFullscreen, []))\n\tconst currentTime = useMediaSelector(React.useCallback((state) => state.currentTime, []))\n\tconst volume = useMediaSelector(React.useCallback((state) => state.volume, []))\n\tconst error = useMediaSelector(React.useCallback((state) => state.error, []))\n\n\t// Custom hooks\n\tconst {\n\t\tshowControls,\n\t\tshowControlsTemporarily,\n\t\thandleMouseEnter,\n\t\thandleMouseLeave,\n\t\thandleTouchStart: handleControlsTouch,\n\t\thandleTouchEnd: handleControlsTouchEnd\n\t} = useAutoHideControls(autoHide, autoHideDelay, showControlsOnHover, showControlsOnTouch)\n\n\tconst {\n\t\thandleTouchStart: handleGestureStart,\n\t\thandleTouchMove: handleGestureMove,\n\t\thandleTouchEnd: handleGestureEnd\n\t} = useTouchGestures(enableTouchGestures)\n\n\t// Combine touch handlers\n\tconst handleTouchStart = React.useCallback(\n\t\t(e: React.TouchEvent) => {\n\t\t\thandleControlsTouch()\n\t\t\thandleGestureStart(e)\n\t\t},\n\t\t[handleControlsTouch, handleGestureStart]\n\t)\n\n\tconst handleTouchEnd = React.useCallback(() => {\n\t\thandleControlsTouchEnd()\n\t\thandleGestureEnd()\n\t}, [handleControlsTouchEnd, handleGestureEnd])\n\n\t// Event handlers with memoization\n\tconst handleClick = React.useCallback(() => {\n\t\tshowControlsTemporarily()\n\t}, [showControlsTemporarily])\n\n\t// Keyboard controls\n\tReact.useEffect(() => {\n\t\tif (!enableKeyboardControls) return\n\n\t\tconst handleKeyDown = (e: KeyboardEvent) => {\n\t\t\tif (e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tswitch (e.code) {\n\t\t\t\tcase \"Space\":\n\t\t\t\tcase \"KeyK\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase \"KeyF\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: isFullscreen\n\t\t\t\t\t\t\t? MediaActionTypes.EXIT_FULLSCREEN\n\t\t\t\t\t\t\t: MediaActionTypes.ENTER_FULLSCREEN\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase \"KeyM\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({ type: MediaActionTypes.TOGGLE_MUTE })\n\t\t\t\t\tbreak\n\t\t\t\tcase \"ArrowLeft\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: Math.max(0, currentTime - 10)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase \"ArrowRight\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: currentTime + 10\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase \"ArrowUp\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\t\tdetail: Math.min(1, volume + 0.1)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t\tcase \"ArrowDown\":\n\t\t\t\t\te.preventDefault()\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\t\tdetail: Math.max(0, volume - 0.1)\n\t\t\t\t\t})\n\t\t\t\t\tbreak\n\t\t\t}\n\t\t}\n\n\t\tdocument.addEventListener(\"keydown\", handleKeyDown)\n\t\treturn () => document.removeEventListener(\"keydown\", handleKeyDown)\n\t}, [enableKeyboardControls, dispatch, isPlaying, isFullscreen, currentTime, volume])\n\n\t// Event callbacks\n\tReact.useEffect(() => {\n\t\tif (isPlaying) onPlay?.()\n\t\telse onPause?.()\n\t}, [isPlaying, onPlay, onPause])\n\n\tReact.useEffect(() => {\n\t\tonTimeUpdate?.(currentTime)\n\t}, [currentTime, onTimeUpdate])\n\n\tReact.useEffect(() => {\n\t\tonVolumeChange?.(volume)\n\t}, [volume, onVolumeChange])\n\n\tReact.useEffect(() => {\n\t\tonFullscreenChange?.(isFullscreen)\n\t}, [isFullscreen, onFullscreenChange])\n\n\treturn (\n\t\t<div\n\t\t\tref={composeRefs(context.rootRef)}\n\t\t\tclassName={cn(\n\t\t\t\t\"relative isolate flex flex-col overflow-hidden rounded-lg bg-black outline-none\",\n\t\t\t\t\"focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2\",\n\t\t\t\t\"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n\t\t\t\tisFullscreen && \"fixed inset-0 z-50 rounded-none\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tdata-state={isFullscreen ? \"fullscreen\" : \"inline\"}\n\t\t\tdata-disabled={error ? \"\" : undefined}\n\t\t\tdata-controls-visible={showControls ? \"\" : undefined}\n\t\t\ttabIndex={0}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\tonTouchStart={handleTouchStart}\n\t\t\tonTouchMove={handleGestureMove}\n\t\t\tonTouchEnd={handleTouchEnd}\n\t\t\tonClick={handleClick}>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\nEnhancedMediaPlayer.displayName = \"EnhancedMediaPlayer\"\n","\"use client\"\n\nimport React from \"react\"\nimport { MediaActionTypes, useMediaDispatch, useMediaSelector } from \"../../context/media-context\"\nimport { formatTime } from \"../../lib/format-time\"\nimport { cn } from \"../../lib/utils\"\n\n// Types for advanced features\nexport interface Chapter {\n\tid: string\n\ttitle: string\n\tstartTime: number\n\tendTime: number\n\tthumbnail?: string\n}\n\nexport interface QualityLevel {\n\tid: string\n\tlabel: string\n\twidth: number\n\theight: number\n\tbitrate?: number\n}\n\nexport interface Subtitle {\n\tid: string\n\tlabel: string\n\tlanguage: string\n\tsrc: string\n\tdefault?: boolean\n}\n\n// Quality selector component\nexport const QualitySelector = function QualitySelector({\n\tqualities,\n\tcurrentQuality,\n\tonQualityChange,\n\tclassName\n}: {\n\tqualities: QualityLevel[]\n\tcurrentQuality: string\n\tonQualityChange: (qualityId: string) => void\n\tclassName?: string\n}) {\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst currentQualityLabel = React.useMemo(() => {\n\t\treturn qualities.find((q) => q.id === currentQuality)?.label || \"Auto\"\n\t}, [qualities, currentQuality])\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select quality\">\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z\" />\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{currentQualityLabel}</span>\n\t\t\t\t<svg\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-32 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t{qualities.map((quality) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={quality.id}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonQualityChange(quality.id)\n\t\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tquality.id === currentQuality && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t{quality.label}\n\t\t\t\t\t\t\t{quality.bitrate && (\n\t\t\t\t\t\t\t\t<span className=\"ml-2 text-white/60 text-xs\">\n\t\t\t\t\t\t\t\t\t({Math.round(quality.bitrate / 1000)}k)\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Subtitle selector component\nexport const SubtitleSelector = function SubtitleSelector({\n\tsubtitles,\n\tcurrentSubtitle,\n\tonSubtitleChange,\n\tclassName\n}: {\n\tsubtitles: Subtitle[]\n\tcurrentSubtitle: string | null\n\tonSubtitleChange: (subtitleId: string | null) => void\n\tclassName?: string\n}) {\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst currentSubtitleLabel = React.useMemo(() => {\n\t\tif (!currentSubtitle) return \"Off\"\n\t\treturn subtitles.find((s) => s.id === currentSubtitle)?.label || \"Off\"\n\t}, [subtitles, currentSubtitle])\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select subtitles\">\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M20 4H4c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zM4 12h4v2H4v-2zm10 6H4v-2h10v2zm6 0h-4v-2h4v2zm0-4H10v-2h10v2z\" />\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{currentSubtitleLabel}</span>\n\t\t\t\t<svg\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-32 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\tonSubtitleChange(null)\n\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t!currentSubtitle && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\tOff\n\t\t\t\t\t</button>\n\t\t\t\t\t{subtitles.map((subtitle) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={subtitle.id}\n\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\tonSubtitleChange(subtitle.id)\n\t\t\t\t\t\t\t\tsetIsOpen(false)\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tsubtitle.id === currentSubtitle && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t{subtitle.label}\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Playback speed selector\nexport const PlaybackSpeedSelector = function PlaybackSpeedSelector({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst playbackRate = useMediaSelector((state) => state.playbackRate)\n\tconst [isOpen, setIsOpen] = React.useState(false)\n\n\tconst speeds = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]\n\n\tconst handleSpeedChange = React.useCallback(\n\t\t(speed: number) => {\n\t\t\tdispatch({ type: MediaActionTypes.SET_PLAYBACK_RATE, detail: speed })\n\t\t\tsetIsOpen(false)\n\t\t},\n\t\t[dispatch]\n\t)\n\n\treturn (\n\t\t<div className={cn(\"relative\", className)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={() => setIsOpen(!isOpen)}\n\t\t\t\tclassName=\"flex items-center gap-2 rounded-lg bg-black/50 px-3 py-2 text-white transition-colors hover:bg-black/70\"\n\t\t\t\taria-label=\"Select playback speed\">\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-4 w-4\">\n\t\t\t\t\t<path d=\"M13,8A4,4 0 0,0 9,12A4,4 0 0,0 13,16A4,4 0 0,0 17,12A4,4 0 0,0 13,8M13,14A2,2 0 0,1 11,12A2,2 0 0,1 13,10A2,2 0 0,1 15,12A2,2 0 0,1 13,14M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12A10,10 0 0,0 12,2M12,4A8,8 0 0,1 20,12A8,8 0 0,1 12,20A8,8 0 0,1 4,12A8,8 0 0,1 12,4Z\" />\n\t\t\t\t</svg>\n\t\t\t\t<span className=\"text-sm\">{playbackRate}x</span>\n\t\t\t\t<svg\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\tclassName={cn(\"h-4 w-4 transition-transform\", isOpen && \"rotate-180\")}>\n\t\t\t\t\t<path d=\"M7 10l5 5 5-5z\" />\n\t\t\t\t</svg>\n\t\t\t</button>\n\n\t\t\t{isOpen && (\n\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 min-w-20 rounded-lg border border-white/20 bg-black/90 py-2 backdrop-blur-sm\">\n\t\t\t\t\t{speeds.map((speed) => (\n\t\t\t\t\t\t<button\n\t\t\t\t\t\t\tkey={speed}\n\t\t\t\t\t\t\tonClick={() => handleSpeedChange(speed)}\n\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\"w-full px-4 py-2 text-left text-sm text-white transition-colors hover:bg-white/10\",\n\t\t\t\t\t\t\t\tspeed === playbackRate && \"bg-primary/20 text-primary\"\n\t\t\t\t\t\t\t)}>\n\t\t\t\t\t\t\t{speed}x\n\t\t\t\t\t\t</button>\n\t\t\t\t\t))}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Chapters component\nexport const ChaptersPanel = function ChaptersPanel({\n\tchapters,\n\tonChapterSelect,\n\tclassName\n}: {\n\tchapters: Chapter[]\n\tonChapterSelect: (chapter: Chapter) => void\n\tclassName?: string\n}) {\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\n\tconst currentChapter = React.useMemo(() => {\n\t\treturn chapters.find(\n\t\t\t(chapter) => currentTime >= chapter.startTime && currentTime < chapter.endTime\n\t\t)\n\t}, [chapters, currentTime])\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"rounded-lg border border-white/20 bg-black/90 p-4 backdrop-blur-sm\",\n\t\t\t\tclassName\n\t\t\t)}>\n\t\t\t<h3 className=\"mb-3 font-semibold text-white\">Chapters</h3>\n\t\t\t<div className=\"max-h-64 space-y-2 overflow-y-auto\">\n\t\t\t\t{chapters.map((chapter) => (\n\t\t\t\t\t<button\n\t\t\t\t\t\tkey={chapter.id}\n\t\t\t\t\t\tonClick={() => onChapterSelect(chapter)}\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"flex w-full items-center gap-3 rounded-lg p-3 text-left transition-colors\",\n\t\t\t\t\t\t\t\"hover:bg-white/10\",\n\t\t\t\t\t\t\tchapter.id === currentChapter?.id && \"border border-primary/30 bg-primary/20\"\n\t\t\t\t\t\t)}>\n\t\t\t\t\t\t{chapter.thumbnail && (\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tsrc={chapter.thumbnail}\n\t\t\t\t\t\t\t\talt={chapter.title}\n\t\t\t\t\t\t\t\tclassName=\"h-9 w-16 rounded object-cover\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t<div className=\"min-w-0 flex-1\">\n\t\t\t\t\t\t\t<div className=\"truncate font-medium text-white\">{chapter.title}</div>\n\t\t\t\t\t\t\t<div className=\"text-sm text-white/60\">\n\t\t\t\t\t\t\t\t{formatTime(chapter.startTime)} - {formatTime(chapter.endTime)}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</button>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Picture-in-Picture button\nexport const PictureInPictureButton = function PictureInPictureButton({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPictureInPicture = useMediaSelector((state) => state.isPictureInPicture)\n\n\tconst handleTogglePiP = React.useCallback(() => {\n\t\tdispatch({\n\t\t\ttype: isPictureInPicture ? MediaActionTypes.EXIT_PIP : MediaActionTypes.ENTER_PIP\n\t\t})\n\t}, [dispatch, isPictureInPicture])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleTogglePiP}\n\t\t\tclassName={cn(\n\t\t\t\t\"flex h-10 w-10 items-center justify-center rounded-full text-white\",\n\t\t\t\t\"transition-colors hover:bg-white/10\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={isPictureInPicture ? \"Exit Picture-in-Picture\" : \"Enter Picture-in-Picture\"}>\n\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t<path d=\"M19 7h-8v6h8V7zm2-4H3c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H3V5h18v14z\" />\n\t\t\t</svg>\n\t\t</button>\n\t)\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { MediaActionTypes, useMediaDispatch, useMediaSelector } from \"../../context/media-context\"\nimport { formatTime } from \"../../lib/format-time\"\nimport { cn } from \"../../lib/utils\"\n\n// Enhanced play button with better animations\nexport const EnhancedPlayButton = function EnhancedPlayButton({\n\tclassName,\n\tsize = \"md\"\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst isPlaying = useMediaSelector((state) => state.isPlaying)\n\tconst isLoading = useMediaSelector((state) => state.isLoading)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\",\n\t\txl: \"h-16 w-16\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\",\n\t\txl: \"h-8 w-8\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tdispatch({\n\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t})\n\t}, [dispatch, isPlaying])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tdisabled={isLoading}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\t\"disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={isPlaying ? \"Pause\" : \"Play\"}>\n\t\t\t{isLoading ? (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"animate-spin rounded-full border-2 border-white/30 border-t-white\",\n\t\t\t\t\t\ticonSizes[size]\n\t\t\t\t\t)}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<div className={cn(\"transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t\t{isPlaying ? (\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t\t\t<path d=\"M6 4h4v16H6V4zm8 0h4v16h-4V4z\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"ml-0.5 h-full w-full\">\n\t\t\t\t\t\t\t<path d=\"M8 5v14l11-7z\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</button>\n\t)\n}\n\n// Enhanced seek bar with preview and better touch support\nexport const EnhancedSeekBar = function EnhancedSeekBar({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst duration = useMediaSelector((state) => state.duration)\n\tconst buffered = useMediaSelector((state) => state.buffered)\n\tconst previewTime = useMediaSelector((state) => state.previewTime)\n\n\tconst [isDragging, setIsDragging] = React.useState(false)\n\tconst [hoverTime, setHoverTime] = React.useState<number | null>(null)\n\tconst progressRef = React.useRef<HTMLDivElement>(null)\n\n\tconst progress = duration > 0 ? (currentTime / duration) * 100 : 0\n\tconst previewProgress =\n\t\tduration > 0 && previewTime !== null ? (previewTime / duration) * 100 : null\n\n\t// Calculate buffered ranges\n\tconst bufferedRanges = React.useMemo(() => {\n\t\tif (!buffered || duration === 0) return []\n\t\tconst ranges = []\n\t\tfor (let i = 0; i < buffered.length; i++) {\n\t\t\tranges.push({\n\t\t\t\tstart: (buffered.start(i) / duration) * 100,\n\t\t\t\tend: (buffered.end(i) / duration) * 100\n\t\t\t})\n\t\t}\n\t\treturn ranges\n\t}, [buffered, duration])\n\n\tconst getTimeFromPosition = React.useCallback(\n\t\t(clientX: number) => {\n\t\t\tif (!progressRef.current) return 0\n\t\t\tconst rect = progressRef.current.getBoundingClientRect()\n\t\t\tconst position = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n\t\t\treturn position * duration\n\t\t},\n\t\t[duration]\n\t)\n\n\tconst handleMouseMove = React.useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\tif (!isDragging) {\n\t\t\t\tconst time = getTimeFromPosition(e.clientX)\n\t\t\t\tsetHoverTime(time)\n\t\t\t\tdispatch({ type: MediaActionTypes.PREVIEW_TIME, detail: time })\n\t\t\t}\n\t\t},\n\t\t[isDragging, getTimeFromPosition, dispatch]\n\t)\n\n\tconst handleMouseLeave = React.useCallback(() => {\n\t\tif (!isDragging) {\n\t\t\tsetHoverTime(null)\n\t\t\tdispatch({ type: MediaActionTypes.CLEAR_PREVIEW })\n\t\t}\n\t}, [isDragging, dispatch])\n\n\tconst handleMouseDown = React.useCallback(\n\t\t(e: React.MouseEvent) => {\n\t\t\tsetIsDragging(true)\n\t\t\tconst time = getTimeFromPosition(e.clientX)\n\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t},\n\t\t[getTimeFromPosition, dispatch]\n\t)\n\n\tconst handleTouchStart = React.useCallback(\n\t\t(e: React.TouchEvent) => {\n\t\t\tsetIsDragging(true)\n\t\t\tconst time = getTimeFromPosition(e.touches[0]?.clientX || 0)\n\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t},\n\t\t[getTimeFromPosition, dispatch]\n\t)\n\n\tReact.useEffect(() => {\n\t\tconst handleMouseMove = (e: MouseEvent) => {\n\t\t\tif (isDragging) {\n\t\t\t\tconst time = getTimeFromPosition(e.clientX)\n\t\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t\t}\n\t\t}\n\n\t\tconst handleMouseUp = () => {\n\t\t\tsetIsDragging(false)\n\t\t\tsetHoverTime(null)\n\t\t\tdispatch({ type: MediaActionTypes.CLEAR_PREVIEW })\n\t\t}\n\n\t\tconst handleTouchMove = (e: TouchEvent) => {\n\t\t\tif (isDragging) {\n\t\t\t\tconst time = getTimeFromPosition(e.touches[0]?.clientX || 0)\n\t\t\t\tdispatch({ type: MediaActionTypes.SEEK, detail: time })\n\t\t\t}\n\t\t}\n\n\t\tif (isDragging) {\n\t\t\tdocument.addEventListener(\"mousemove\", handleMouseMove)\n\t\t\tdocument.addEventListener(\"mouseup\", handleMouseUp)\n\t\t\tdocument.addEventListener(\"touchmove\", handleTouchMove)\n\t\t\tdocument.addEventListener(\"touchend\", handleMouseUp)\n\t\t}\n\n\t\treturn () => {\n\t\t\tdocument.removeEventListener(\"mousemove\", handleMouseMove)\n\t\t\tdocument.removeEventListener(\"mouseup\", handleMouseUp)\n\t\t\tdocument.removeEventListener(\"touchmove\", handleTouchMove)\n\t\t\tdocument.removeEventListener(\"touchend\", handleMouseUp)\n\t\t}\n\t}, [isDragging, getTimeFromPosition, dispatch])\n\n\treturn (\n\t\t<div className={cn(\"group relative flex items-center\", className)}>\n\t\t\t{/* Time preview tooltip */}\n\t\t\t{(hoverTime !== null || previewTime !== null) && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"pointer-events-none absolute bottom-full mb-2 rounded bg-black/80 px-2 py-1 text-white text-xs\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tleft: `${previewProgress || ((hoverTime || 0) / duration) * 100}%`,\n\t\t\t\t\t\ttransform: \"translateX(-50%)\"\n\t\t\t\t\t}}>\n\t\t\t\t\t{formatTime(hoverTime || previewTime || 0)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<div\n\t\t\t\tref={progressRef}\n\t\t\t\tclassName=\"relative h-2 w-full cursor-pointer rounded-full bg-white/20 transition-all duration-200 group-hover:h-3\"\n\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t\tonMouseDown={handleMouseDown}\n\t\t\t\tonTouchStart={handleTouchStart}>\n\t\t\t\t{/* Buffered ranges */}\n\t\t\t\t{bufferedRanges.map((range, index) => (\n\t\t\t\t\t<div\n\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\tclassName=\"absolute top-0 h-full rounded-full bg-white/30\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: `${range.start}%`,\n\t\t\t\t\t\t\twidth: `${range.end - range.start}%`\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\n\t\t\t\t{/* Progress bar */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute top-0 h-full rounded-full bg-primary transition-all duration-100\"\n\t\t\t\t\tstyle={{ width: `${progress}%` }}\n\t\t\t\t/>\n\n\t\t\t\t{/* Preview indicator */}\n\t\t\t\t{previewProgress !== null && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"absolute top-0 h-full w-1 rounded-full bg-white/80\"\n\t\t\t\t\t\tstyle={{ left: `${previewProgress}%` }}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\n\t\t\t\t{/* Thumb */}\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"-translate-y-1/2 absolute top-1/2 h-4 w-4 rounded-full border-2 border-white bg-primary opacity-0 shadow-lg transition-all duration-200 group-hover:opacity-100\"\n\t\t\t\t\tstyle={{ left: `${progress}%`, transform: \"translateX(-50%) translateY(-50%)\" }}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Enhanced volume control with better UX\nexport const EnhancedVolumeControl = function EnhancedVolumeControl({\n\tclassName\n}: {\n\tclassName?: string\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst volume = useMediaSelector((state) => state.volume)\n\tconst isMuted = useMediaSelector((state) => state.isMuted)\n\n\tconst [showSlider, setShowSlider] = React.useState(false)\n\n\tconst handleToggleMute = React.useCallback(() => {\n\t\tdispatch({ type: MediaActionTypes.TOGGLE_MUTE })\n\t}, [dispatch])\n\n\tconst handleVolumeChange = React.useCallback(\n\t\t(newVolume: number) => {\n\t\t\tdispatch({ type: MediaActionTypes.SET_VOLUME, detail: newVolume })\n\t\t},\n\t\t[dispatch]\n\t)\n\n\tconst VolumeIcon = React.useMemo(() => {\n\t\tif (isMuted || volume === 0) {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4L9.91 6.09 12 8.18V4z\" />\n\t\t\t\t</svg>\n\t\t\t)\n\t\t} else if (volume < 0.5) {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z\" />\n\t\t\t\t</svg>\n\t\t\t)\n\t\t} else {\n\t\t\treturn (\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-5 w-5\">\n\t\t\t\t\t<path d=\"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z\" />\n\t\t\t\t</svg>\n\t\t\t)\n\t\t}\n\t}, [isMuted, volume])\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\"relative flex items-center\", className)}\n\t\t\tonMouseEnter={() => setShowSlider(true)}\n\t\t\tonMouseLeave={() => setShowSlider(false)}>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\tonClick={handleToggleMute}\n\t\t\t\tclassName=\"flex h-10 w-10 items-center justify-center rounded-full text-white transition-colors hover:bg-white/10\"\n\t\t\t\taria-label={isMuted ? \"Unmute\" : \"Mute\"}>\n\t\t\t\t{VolumeIcon}\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\"absolute left-full ml-2 flex items-center transition-all duration-200\",\n\t\t\t\t\tshowSlider ? \"translate-x-0 opacity-100\" : \"-translate-x-2 pointer-events-none 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={(e) => handleVolumeChange(parseFloat(e.target.value))}\n\t\t\t\t\tclassName=\"slider h-1 w-20 cursor-pointer appearance-none rounded-lg bg-white/20\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n\n// Enhanced backward skip button\nexport const EnhancedBackwardButton = function EnhancedBackwardButton({\n\tclassName,\n\tsize = \"md\",\n\tskipTime = 10\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tconst newTime = Math.max(0, currentTime - skipTime)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: newTime })\n\t}, [dispatch, currentTime, skipTime])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={`Backward ${skipTime} seconds`}\n\t\t\ttitle={`Backward ${skipTime}s`}>\n\t\t\t<div className={cn(\"flex items-center transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t<path d=\"M7 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zM15.5 7.5c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v9c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5v-9z\" />\n\t\t\t\t\t<path d=\"M5.5 12l7-4.5v9l-7-4.5z\" opacity=\"0.8\" />\n\t\t\t\t</svg>\n\t\t\t\t{skipTime && <span className=\"-bottom-1 absolute font-bold text-[10px]\">{skipTime}</span>}\n\t\t\t</div>\n\t\t</button>\n\t)\n}\n\n// Enhanced forward skip button\nexport const EnhancedForwardButton = function EnhancedForwardButton({\n\tclassName,\n\tsize = \"md\",\n\tskipTime = 10\n}: {\n\tclassName?: string\n\tsize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n}) {\n\tconst dispatch = useMediaDispatch()\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst duration = useMediaSelector((state) => state.duration)\n\n\tconst sizeClasses = {\n\t\tsm: \"h-8 w-8\",\n\t\tmd: \"h-10 w-10\",\n\t\tlg: \"h-12 w-12\"\n\t}\n\n\tconst iconSizes = {\n\t\tsm: \"h-4 w-4\",\n\t\tmd: \"h-5 w-5\",\n\t\tlg: \"h-6 w-6\"\n\t}\n\n\tconst handleClick = React.useCallback(() => {\n\t\tconst newTime = Math.min(duration, currentTime + skipTime)\n\t\tdispatch({ type: MediaActionTypes.SEEK, detail: newTime })\n\t}, [dispatch, currentTime, duration, skipTime])\n\n\treturn (\n\t\t<button\n\t\t\ttype=\"button\"\n\t\t\tonClick={handleClick}\n\t\t\tclassName={cn(\n\t\t\t\t\"group relative flex items-center justify-center rounded-full bg-white/10 backdrop-blur-sm\",\n\t\t\t\t\"border border-white/20 text-white transition-all duration-200\",\n\t\t\t\t\"hover:scale-105 hover:bg-white/20 active:scale-95\",\n\t\t\t\t\"focus:outline-none focus:ring-2 focus:ring-white/50\",\n\t\t\t\tsizeClasses[size],\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\taria-label={`Forward ${skipTime} seconds`}\n\t\t\ttitle={`Forward ${skipTime}s`}>\n\t\t\t<div className={cn(\"flex items-center transition-transform duration-200\", iconSizes[size])}>\n\t\t\t\t<svg viewBox=\"0 0 24 24\" fill=\"currentColor\" className=\"h-full w-full\">\n\t\t\t\t\t<path d=\"M17 6c.55 0 1 .45 1 1v10c0 .55-.45 1-1 1s-1-.45-1-1V7c0-.55.45-1 1-1zM8.5 7.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v9c0 .83-.67 1.5-1.5 1.5s-1.5-.67-1.5-1.5v-9z\" />\n\t\t\t\t\t<path d=\"M18.5 12l-7-4.5v9l7-4.5z\" opacity=\"0.8\" />\n\t\t\t\t</svg>\n\t\t\t\t{skipTime && <span className=\"-bottom-1 absolute font-bold text-[10px]\">{skipTime}</span>}\n\t\t\t</div>\n\t\t</button>\n\t)\n}\n\n// Enhanced time display\nexport const EnhancedTimeDisplay = function EnhancedTimeDisplay({\n\tvariant = \"current\",\n\tclassName\n}: {\n\tvariant?: \"current\" | \"duration\" | \"remaining\"\n\tclassName?: string\n}) {\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst duration = useMediaSelector((state) => state.duration)\n\n\tconst displayTime = React.useMemo(() => {\n\t\tswitch (variant) {\n\t\t\tcase \"current\":\n\t\t\t\treturn formatTime(currentTime)\n\t\t\tcase \"duration\":\n\t\t\t\treturn formatTime(duration)\n\t\t\tcase \"remaining\":\n\t\t\t\treturn `-${formatTime(duration - currentTime)}`\n\t\t\tdefault:\n\t\t\t\treturn formatTime(currentTime)\n\t\t}\n\t}, [variant, currentTime, duration])\n\n\treturn (\n\t\t<div className={cn(\"font-mono text-sm text-white tabular-nums\", className)}>{displayTime}</div>\n\t)\n}\n\n// Performance indicator component\nexport const PerformanceIndicator = function PerformanceIndicator({\n\tmetrics,\n\tclassName\n}: {\n\tmetrics?: {\n\t\tfps?: number\n\t\tbufferHealth?: number\n\t\tquality?: number\n\t\tbandwidth?: number\n\t}\n\tclassName?: string\n}) {\n\tif (!metrics || process.env.NODE_ENV !== \"development\") {\n\t\treturn null\n\t}\n\n\tconst getPerformanceColor = (fps: number) => {\n\t\tif (fps >= 50) return \"text-green-400\"\n\t\tif (fps >= 30) return \"text-yellow-400\"\n\t\treturn \"text-red-400\"\n\t}\n\n\tconst getBufferColor = (health: number) => {\n\t\tif (health >= 5) return \"text-green-400\"\n\t\tif (health >= 2) return \"text-yellow-400\"\n\t\treturn \"text-red-400\"\n\t}\n\n\treturn (\n\t\t<div className={cn(\"flex items-center gap-3 font-mono text-xs\", className)}>\n\t\t\t{metrics.fps !== undefined && (\n\t\t\t\t<div className={cn(\"flex items-center gap-1\", getPerformanceColor(metrics.fps))}>\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.fps} FPS</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{metrics.bufferHealth !== undefined && (\n\t\t\t\t<div className={cn(\"flex items-center gap-1\", getBufferColor(metrics.bufferHealth))}>\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.bufferHealth.toFixed(1)}s</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t\t{metrics.quality !== undefined && (\n\t\t\t\t<div className=\"flex items-center gap-1 text-blue-400\">\n\t\t\t\t\t<div className=\"h-2 w-2 rounded-full bg-current\" />\n\t\t\t\t\t<span>{metrics.quality}p</span>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n// Enhanced control bar that combines all controls\nexport const EnhancedControlBar = function EnhancedControlBar({\n\tclassName,\n\tshowSkipButtons = true,\n\tshowVolumeControl = true,\n\tshowTimeDisplay = true,\n\tplayButtonSize = \"xl\",\n\tskipButtonSize = \"md\",\n\tskipTime = 10,\n\tshowPerformanceIndicators = process.env.NODE_ENV === \"development\",\n\tperformanceMetrics\n}: {\n\tclassName?: string\n\tshowSkipButtons?: boolean\n\tshowVolumeControl?: boolean\n\tshowTimeDisplay?: boolean\n\tplayButtonSize?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n\tskipButtonSize?: \"sm\" | \"md\" | \"lg\"\n\tskipTime?: number\n\tshowPerformanceIndicators?: boolean\n\tperformanceMetrics?: {\n\t\tfps?: number\n\t\tbufferHealth?: number\n\t\tquality?: number\n\t\tbandwidth?: number\n\t}\n}) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"flex flex-col gap-4 bg-gradient-to-t from-black/80 to-transparent p-4\",\n\t\t\t\tclassName\n\t\t\t)}>\n\t\t\t{/* Seek Bar */}\n\t\t\t<EnhancedSeekBar className=\"w-full\" />\n\n\t\t\t{/* Control Buttons */}\n\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t{/* Left side - Media controls */}\n\t\t\t\t<div className=\"flex items-center gap-3\">\n\t\t\t\t\t{showSkipButtons && (\n\t\t\t\t\t\t<EnhancedBackwardButton\n\t\t\t\t\t\t\tsize={skipButtonSize}\n\t\t\t\t\t\t\tskipTime={skipTime}\n\t\t\t\t\t\t\tclassName=\"shrink-0\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<EnhancedPlayButton size={playButtonSize} className=\"shrink-0\" />\n\n\t\t\t\t\t{showSkipButtons && (\n\t\t\t\t\t\t<EnhancedForwardButton size={skipButtonSize} skipTime={skipTime} className=\"shrink-0\" />\n\t\t\t\t\t)}\n\n\t\t\t\t\t{showVolumeControl && <EnhancedVolumeControl className=\"shrink-0\" />}\n\n\t\t\t\t\t{showTimeDisplay && (\n\t\t\t\t\t\t<div className=\"flex items-center gap-1 font-mono text-sm\">\n\t\t\t\t\t\t\t<EnhancedTimeDisplay variant=\"current\" />\n\t\t\t\t\t\t\t<span className=\"text-white/60\">/</span>\n\t\t\t\t\t\t\t<EnhancedTimeDisplay variant=\"duration\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\n\t\t\t\t{/* Right side - Performance indicators and additional controls */}\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t{showPerformanceIndicators && (\n\t\t\t\t\t\t<PerformanceIndicator metrics={performanceMetrics} className=\"text-white/80\" />\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Future: Settings, Fullscreen, etc. */}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n}\n","/**\n * Debug Panel Component for Performance Monitoring\n * Development-only component for displaying performance metrics\n */\n\nimport React, { useMemo } from \"react\"\nimport { cn } from \"../../lib/utils\"\n\ninterface PerformanceMetrics {\n\tfps: number\n\tmemoryUsage: number\n\tbufferHealth: number\n\tnetworkBandwidth: number\n\tdroppedFrames: number\n\tdecodedFrames: number\n\tpresentationTime: number\n}\n\ninterface PreloadingStats {\n\tpreloadedItems: number\n\tengagementScore: number\n\tqueueLength: number\n\thitRate: number\n\ttotalSaved: number\n}\n\ninterface DebugPanelProps {\n\t/** Performance metrics to display */\n\tperformanceMetrics?: Partial<PerformanceMetrics>\n\t/** Preloading statistics */\n\tpreloadingStats?: PreloadingStats\n\t/** Current playback state */\n\tplaybackState?: {\n\t\tcurrentTime: number\n\t\tduration: number\n\t\tvolume: number\n\t\tisPlaying: boolean\n\t\tquality: number\n\t\tisBuffering: boolean\n\t\terror?: string\n\t}\n\t/** HLS-specific metrics */\n\thlsMetrics?: {\n\t\tcurrentLevel: number\n\t\tavailableLevels: number\n\t\tbandwidthEstimate: number\n\t\tdroppedFrames: number\n\t}\n\t/** Plugin information */\n\tpluginInfo?: {\n\t\tloadedPlugins: string[]\n\t\tactivePlugins: string[]\n\t\tpluginCount: number\n\t}\n\t/** Additional debug information */\n\tdebugInfo?: Record<string, any>\n\t/** Custom className */\n\tclassName?: string\n\t/** Panel position */\n\tposition?: \"top-right\" | \"top-left\" | \"bottom-right\" | \"bottom-left\"\n\t/** Whether the panel is collapsed by default */\n\tdefaultCollapsed?: boolean\n\t/** Custom title */\n\ttitle?: string\n}\n\n/**\n * Debug Panel Component\n */\nexport const DebugPanel: React.FC<DebugPanelProps> = ({\n\tperformanceMetrics = {},\n\tpreloadingStats = {} as PreloadingStats,\n\tplaybackState = {} as any,\n\thlsMetrics = {},\n\tpluginInfo = {},\n\tdebugInfo = {},\n\tclassName,\n\tposition = \"top-right\",\n\tdefaultCollapsed = false,\n\ttitle = \"BaroiPlayer Debug Panel\"\n}) => {\n\tconst [isCollapsed, setIsCollapsed] = React.useState(defaultCollapsed)\n\tconst [activeTab, setActiveTab] = React.useState<\"performance\" | \"hls\" | \"plugins\" | \"debug\">(\n\t\t\"performance\"\n\t)\n\n\t// Position classes\n\tconst positionClasses = useMemo(() => {\n\t\tswitch (position) {\n\t\t\tcase \"top-left\":\n\t\t\t\treturn \"top-4 left-4\"\n\t\t\tcase \"top-right\":\n\t\t\t\treturn \"top-4 right-4\"\n\t\t\tcase \"bottom-left\":\n\t\t\t\treturn \"bottom-4 left-4\"\n\t\t\tcase \"bottom-right\":\n\t\t\t\treturn \"bottom-4 right-4\"\n\t\t\tdefault:\n\t\t\t\treturn \"top-4 right-4\"\n\t\t}\n\t}, [position])\n\n\t// Format bytes\n\tconst formatBytes = (bytes: number): string => {\n\t\tif (bytes === 0) return \"0 B\"\n\t\tconst k = 1024\n\t\tconst sizes = [\"B\", \"KB\", \"MB\", \"GB\"]\n\t\tconst i = Math.floor(Math.log(bytes) / Math.log(k))\n\t\treturn parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + \" \" + sizes[i]\n\t}\n\n\t// Format time\n\tconst formatTime = (seconds: number): string => {\n\t\tconst mins = Math.floor(seconds / 60)\n\t\tconst secs = Math.floor(seconds % 60)\n\t\treturn `${mins}:${secs.toString().padStart(2, \"0\")}`\n\t}\n\n\t// Render performance metrics\n\tconst renderPerformanceMetrics = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">FPS:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.fps || 0}</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Memory:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{((performanceMetrics.memoryUsage || 0) / 1024 / 1024).toFixed(1)} MB\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Buffer:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{(performanceMetrics.bufferHealth || 0).toFixed(2)}s\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Bandwidth:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{formatBytes(performanceMetrics.networkBandwidth || 0)}/s\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Dropped:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.droppedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-cyan-400\">Decoded:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{performanceMetrics.decodedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render playback state\n\tconst renderPlaybackState = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Status:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{playbackState.isPlaying ? (\n\t\t\t\t\t\t\t<span className=\"text-green-300\">Playing</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"text-red-300\">Paused</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Time:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{formatTime(playbackState.currentTime || 0)} / {formatTime(playbackState.duration || 0)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Volume:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{Math.round((playbackState.volume || 0) * 100)}%</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Quality:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{playbackState.quality || 0}p</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Buffering:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{playbackState.isBuffering ? (\n\t\t\t\t\t\t\t<span className=\"text-yellow-300\">Yes</span>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<span className=\"text-green-300\">No</span>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t{playbackState.error && (\n\t\t\t\t\t<div className=\"col-span-2\">\n\t\t\t\t\t\t<span className=\"text-red-400\">Error:</span>\n\t\t\t\t\t\t<span className=\"ml-2 break-all font-mono text-red-300 text-xs\">\n\t\t\t\t\t\t\t{playbackState.error}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render preloading stats\n\tconst renderPreloadingStats = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Preloaded:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{preloadingStats.preloadedItems || 0} items</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Engagement:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{(preloadingStats.engagementScore || 0).toFixed(1)}%\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-yellow-400\">Queue:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{preloadingStats.queueLength || 0} items</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-purple-400\">Hit Rate:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{(preloadingStats.hitRate || 0).toFixed(1)}%</span>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"col-span-2\">\n\t\t\t\t\t<span className=\"text-cyan-400\">Saved:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{formatBytes(preloadingStats.totalSaved || 0)}</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render HLS metrics\n\tconst renderHLSMetrics = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Level:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">\n\t\t\t\t\t\t{hlsMetrics.currentLevel || 0} / {hlsMetrics.availableLevels || 0}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-blue-400\">Bandwidth:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{formatBytes(hlsMetrics.bandwidthEstimate || 0)}/s</span>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-red-400\">Dropped:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{hlsMetrics.droppedFrames || 0} frames</span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render plugin info\n\tconst renderPluginInfo = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"text-xs\">\n\t\t\t\t<div>\n\t\t\t\t\t<span className=\"text-green-400\">Total:</span>\n\t\t\t\t\t<span className=\"ml-2 font-mono\">{pluginInfo.pluginCount || 0} plugins</span>\n\t\t\t\t</div>\n\t\t\t\t<div className=\"mt-2\">\n\t\t\t\t\t<span className=\"text-blue-400\">Active:</span>\n\t\t\t\t\t<div className=\"ml-2 space-y-1 font-mono text-xs\">\n\t\t\t\t\t\t{pluginInfo.activePlugins?.map((plugin, index) => (\n\t\t\t\t\t\t\t<div key={index} className=\"text-green-300\">\n\t\t\t\t\t\t\t\t• {plugin}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t)) || <div className=\"text-gray-400\">None</div>}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t{pluginInfo.loadedPlugins &&\n\t\t\t\t\tpluginInfo.loadedPlugins.length > (pluginInfo.activePlugins?.length || 0) && (\n\t\t\t\t\t\t<div className=\"mt-2\">\n\t\t\t\t\t\t\t<span className=\"text-yellow-400\">Loaded (inactive):</span>\n\t\t\t\t\t\t\t<div className=\"ml-2 space-y-1 font-mono text-xs\">\n\t\t\t\t\t\t\t\t{pluginInfo.loadedPlugins\n\t\t\t\t\t\t\t\t\t.filter((plugin) => !pluginInfo.activePlugins?.includes(plugin))\n\t\t\t\t\t\t\t\t\t.map((plugin, index) => (\n\t\t\t\t\t\t\t\t\t\t<div key={index} className=\"text-yellow-300\">\n\t\t\t\t\t\t\t\t\t\t\t• {plugin}\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render debug info\n\tconst renderDebugInfo = () => (\n\t\t<div className=\"space-y-2\">\n\t\t\t<div className=\"space-y-1 font-mono text-xs\">\n\t\t\t\t{Object.entries(debugInfo).map(([key, value]) => (\n\t\t\t\t\t<div key={key}>\n\t\t\t\t\t\t<span className=\"text-yellow-400\">{key}:</span>\n\t\t\t\t\t\t<span className=\"ml-2 text-gray-300\">\n\t\t\t\t\t\t\t{typeof value === \"object\" ? JSON.stringify(value, null, 2) : String(value)}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t))}\n\t\t\t</div>\n\t\t</div>\n\t)\n\n\t// Render tabs\n\tconst renderTabs = () => (\n\t\t<div className=\"flex space-x-1 border-gray-600 border-b\">\n\t\t\t{[\n\t\t\t\t{ id: \"performance\", label: \"Performance\" },\n\t\t\t\t{ id: \"hls\", label: \"HLS\" },\n\t\t\t\t{ id: \"plugins\", label: \"Plugins\" },\n\t\t\t\t{ id: \"debug\", label: \"Debug\" }\n\t\t\t].map((tab) => (\n\t\t\t\t<button\n\t\t\t\t\tkey={tab.id}\n\t\t\t\t\tonClick={() => setActiveTab(tab.id as any)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"px-2 py-1 font-medium text-xs transition-colors\",\n\t\t\t\t\t\tactiveTab === tab.id\n\t\t\t\t\t\t\t? \"border-blue-400 border-b text-blue-400\"\n\t\t\t\t\t\t\t: \"text-gray-400 hover:text-white\"\n\t\t\t\t\t)}>\n\t\t\t\t\t{tab.label}\n\t\t\t\t</button>\n\t\t\t))}\n\t\t</div>\n\t)\n\n\t// Render active tab content\n\tconst renderTabContent = () => {\n\t\tswitch (activeTab) {\n\t\t\tcase \"performance\":\n\t\t\t\treturn (\n\t\t\t\t\t<div className=\"space-y-3\">\n\t\t\t\t\t\t{renderPerformanceMetrics()}\n\t\t\t\t\t\t<hr className=\"border-gray-600\" />\n\t\t\t\t\t\t{renderPlaybackState()}\n\t\t\t\t\t\t<hr className=\"border-gray-600\" />\n\t\t\t\t\t\t{renderPreloadingStats()}\n\t\t\t\t\t</div>\n\t\t\t\t)\n\t\t\tcase \"hls\":\n\t\t\t\treturn renderHLSMetrics()\n\t\t\tcase \"plugins\":\n\t\t\t\treturn renderPluginInfo()\n\t\t\tcase \"debug\":\n\t\t\t\treturn renderDebugInfo()\n\t\t\tdefault:\n\t\t\t\treturn renderPerformanceMetrics()\n\t\t}\n\t}\n\n\t// Only render in development\n\tif (process.env.NODE_ENV !== \"development\") {\n\t\treturn null\n\t}\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"fixed z-50 min-w-80 max-w-96 rounded-lg border border-gray-700 bg-black/90 p-3 font-mono text-white text-xs backdrop-blur-sm\",\n\t\t\t\tpositionClasses,\n\t\t\t\tclassName\n\t\t\t)}>\n\t\t\t{/* Header */}\n\t\t\t<div className=\"mb-3 flex items-center justify-between\">\n\t\t\t\t<h3 className=\"font-bold text-blue-400 text-sm\">{title}</h3>\n\t\t\t\t<div className=\"flex items-center space-x-2\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tonClick={() => setIsCollapsed(!isCollapsed)}\n\t\t\t\t\t\tclassName=\"text-gray-400 transition-colors hover:text-white\"\n\t\t\t\t\t\taria-label={isCollapsed ? \"Expand\" : \"Collapse\"}>\n\t\t\t\t\t\t{isCollapsed ? (\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M3 4.5L6 7.5L9 4.5\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M3 7.5L6 4.5L9 7.5\"\n\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\tstrokeWidth=\"1.5\"\n\t\t\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\t\t\tstrokeLinejoin=\"round\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</div>\n\n\t\t\t{/* Collapsed content */}\n\t\t\t{isCollapsed ? (\n\t\t\t\t<div className=\"grid grid-cols-2 gap-2 text-xs\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span className=\"text-green-400\">FPS:</span>\n\t\t\t\t\t\t<span className=\"ml-1 font-mono\">{performanceMetrics.fps || 0}</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<span className=\"text-blue-400\">Memory:</span>\n\t\t\t\t\t\t<span className=\"ml-1 font-mono\">\n\t\t\t\t\t\t\t{((performanceMetrics.memoryUsage || 0) / 1024 / 1024).toFixed(1)}MB\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t) : (\n\t\t\t\t<>\n\t\t\t\t\t{/* Tabs */}\n\t\t\t\t\t{renderTabs()}\n\n\t\t\t\t\t{/* Tab Content */}\n\t\t\t\t\t<div className=\"mt-3 max-h-64 overflow-y-auto\">{renderTabContent()}</div>\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n\n/**\n * Performance Debug Panel - simplified version focused on performance metrics\n */\nexport const PerformanceDebugPanel: React.FC<\n\tOmit<DebugPanelProps, \"position\" | \"defaultCollapsed\" | \"title\">\n> = (props) => {\n\treturn (\n\t\t<DebugPanel\n\t\t\t{...props}\n\t\t\tposition=\"top-right\"\n\t\t\tdefaultCollapsed={false}\n\t\t\ttitle=\"Performance Monitor\"\n\t\t/>\n\t)\n}\n\nexport default DebugPanel\n"],"names":["composeRefs","refs","node","ref","useAutoHideControls","autoHide","delay","showOnHover","showOnTouch","showControls","setShowControls","React","isHovering","setIsHovering","isTouching","setIsTouching","timeoutRef","resetTimeout","showControlsTemporarily","handleMouseEnter","handleMouseLeave","handleTouchStart","handleTouchEnd","useTouchGestures","enabled","dispatch","useMediaDispatch","isPlaying","useMediaSelector","state","currentTime","duration","volume","touchStart","setTouchStart","isDoubleTap","setIsDoubleTap","e","touch","now","MediaActionTypes","handleTouchMove","deltaX","deltaY","seekAmount","newTime","volumeChange","newVolume","EnhancedMediaPlayer","children","className","autoHideDelay","showControlsOnHover","showControlsOnTouch","enableKeyboardControls","enableTouchGestures","onPlay","onPause","onTimeUpdate","onVolumeChange","onFullscreenChange","context","useMediaContext","isFullscreen","error","handleControlsTouch","handleControlsTouchEnd","handleGestureStart","handleGestureMove","handleGestureEnd","handleClick","handleKeyDown","jsx","cn","QualitySelector","qualities","currentQuality","onQualityChange","isOpen","setIsOpen","currentQualityLabel","q","jsxs","quality","SubtitleSelector","subtitles","currentSubtitle","onSubtitleChange","currentSubtitleLabel","s","subtitle","PlaybackSpeedSelector","playbackRate","speeds","handleSpeedChange","speed","ChaptersPanel","chapters","onChapterSelect","currentChapter","chapter","formatTime","PictureInPictureButton","isPictureInPicture","handleTogglePiP","EnhancedPlayButton","size","isLoading","sizeClasses","iconSizes","EnhancedSeekBar","buffered","previewTime","isDragging","setIsDragging","hoverTime","setHoverTime","progressRef","progress","previewProgress","bufferedRanges","ranges","i","getTimeFromPosition","clientX","rect","handleMouseMove","time","handleMouseDown","handleMouseUp","range","index","EnhancedVolumeControl","isMuted","showSlider","setShowSlider","handleToggleMute","handleVolumeChange","VolumeIcon","EnhancedBackwardButton","skipTime","EnhancedForwardButton","EnhancedTimeDisplay","variant","displayTime","PerformanceIndicator","metrics","getPerformanceColor","fps","getBufferColor","health","EnhancedControlBar","showSkipButtons","showVolumeControl","showTimeDisplay","playButtonSize","skipButtonSize","showPerformanceIndicators","performanceMetrics","DebugPanel","preloadingStats","playbackState","hlsMetrics","pluginInfo","debugInfo","position","defaultCollapsed","title","isCollapsed","setIsCollapsed","activeTab","setActiveTab","positionClasses","useMemo","formatBytes","bytes","k","sizes","seconds","mins","secs","renderPerformanceMetrics","renderPlaybackState","renderPreloadingStats","renderHLSMetrics","renderPluginInfo","plugin","renderDebugInfo","key","value","renderTabs","tab","renderTabContent","Fragment"],"mappings":"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"}