@therealtinhtute/baroiplayer 1.0.5 → 1.0.7

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 (611) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/package.json +1 -1
  3. package/dist/src/components/media-player-error.tsx +2 -2
  4. package/dist/src/components/media-player-fullscreen.tsx +2 -2
  5. package/dist/src/components/media-player-play.tsx +2 -2
  6. package/dist/src/components/media-player-seek.tsx +1 -1
  7. package/dist/src/components/media-player-tooltip.tsx +1 -1
  8. package/dist/src/components/media-player-volume.tsx +3 -3
  9. package/dist/src/components/react-player-wrapper.tsx +5 -5
  10. package/dist/src/hooks/use-touch-gestures.ts +1 -1
  11. package/package.json +1 -1
  12. package/src/components/media-player-error.tsx +2 -2
  13. package/src/components/media-player-fullscreen.tsx +2 -2
  14. package/src/components/media-player-play.tsx +2 -2
  15. package/src/components/media-player-seek.tsx +1 -1
  16. package/src/components/media-player-tooltip.tsx +1 -1
  17. package/src/components/media-player-volume.tsx +3 -3
  18. package/src/components/react-player-wrapper.tsx +5 -5
  19. package/src/hooks/use-touch-gestures.ts +1 -1
  20. package/dist/context/media.js +0 -2
  21. package/dist/context/media.js.map +0 -1
  22. package/dist/context/media.mjs +0 -15
  23. package/dist/context/media.mjs.map +0 -1
  24. package/dist/context/store.js +0 -2
  25. package/dist/context/store.js.map +0 -1
  26. package/dist/context/store.mjs +0 -5
  27. package/dist/context/store.mjs.map +0 -1
  28. package/dist/context-Af84FynT.js +0 -1179
  29. package/dist/context-Af84FynT.js.map +0 -1
  30. package/dist/context-CwZnPdz0.cjs +0 -23
  31. package/dist/context-CwZnPdz0.cjs.map +0 -1
  32. package/dist/core-events-B5W_j8yU.js +0 -480
  33. package/dist/core-events-B5W_j8yU.js.map +0 -1
  34. package/dist/core-events-CN0-Vhhq.cjs +0 -2
  35. package/dist/core-events-CN0-Vhhq.cjs.map +0 -1
  36. package/dist/core-plugins-Bq9KLany.js +0 -696
  37. package/dist/core-plugins-Bq9KLany.js.map +0 -1
  38. package/dist/core-plugins-CPDSHMiQ.cjs +0 -2
  39. package/dist/core-plugins-CPDSHMiQ.cjs.map +0 -1
  40. package/dist/core.js +0 -37
  41. package/dist/core.js.map +0 -1
  42. package/dist/core.mjs +0 -1217
  43. package/dist/core.mjs.map +0 -1
  44. package/dist/enhanced-components-CXnYiOt6.cjs +0 -2
  45. package/dist/enhanced-components-CXnYiOt6.cjs.map +0 -1
  46. package/dist/enhanced-components-Da0TSvKe.js +0 -1073
  47. package/dist/enhanced-components-Da0TSvKe.js.map +0 -1
  48. package/dist/hooks-BCMilGRf.cjs +0 -4
  49. package/dist/hooks-BCMilGRf.cjs.map +0 -1
  50. package/dist/hooks-BPtHV1ZT.js +0 -2042
  51. package/dist/hooks-BPtHV1ZT.js.map +0 -1
  52. package/dist/index.js.map +0 -1
  53. package/dist/index.mjs.map +0 -1
  54. package/dist/minimal-components-BHJMuaL7.cjs +0 -2
  55. package/dist/minimal-components-BHJMuaL7.cjs.map +0 -1
  56. package/dist/minimal-components-BmqRefl1.js +0 -2002
  57. package/dist/minimal-components-BmqRefl1.js.map +0 -1
  58. package/dist/mona-loading.gif +0 -0
  59. package/dist/performance-monitor--rzKTlbj.js +0 -302
  60. package/dist/performance-monitor--rzKTlbj.js.map +0 -1
  61. package/dist/performance-monitor-cjIvZE2D.cjs +0 -2
  62. package/dist/performance-monitor-cjIvZE2D.cjs.map +0 -1
  63. package/dist/src/adapters/videojs-adapter.d.ts.map +0 -1
  64. package/dist/src/adapters/videojs-adapter.js +0 -350
  65. package/dist/src/assets/mona-loading.gif +0 -0
  66. package/dist/src/components/AnimateLoading.d.ts.map +0 -1
  67. package/dist/src/components/AnimateLoading.js +0 -41
  68. package/dist/src/components/LoadingState.d.ts.map +0 -1
  69. package/dist/src/components/LoadingState.js +0 -111
  70. package/dist/src/components/accessibility/keyboard-help-overlay.d.ts.map +0 -1
  71. package/dist/src/components/accessibility/keyboard-help-overlay.js +0 -90
  72. package/dist/src/components/audio-player.d.ts.map +0 -1
  73. package/dist/src/components/audio-player.js +0 -31
  74. package/dist/src/components/basic/index.d.ts.map +0 -1
  75. package/dist/src/components/basic/index.js +0 -29
  76. package/dist/src/components/enhanced/advanced-features.d.ts.map +0 -1
  77. package/dist/src/components/enhanced/advanced-features.js +0 -64
  78. package/dist/src/components/enhanced/debug-panel.d.ts.map +0 -1
  79. package/dist/src/components/enhanced/debug-panel.js +0 -94
  80. package/dist/src/components/enhanced/enhanced-controls.d.ts.map +0 -1
  81. package/dist/src/components/enhanced/enhanced-controls.js +0 -233
  82. package/dist/src/components/enhanced/enhanced-media-player.d.ts.map +0 -1
  83. package/dist/src/components/enhanced/enhanced-media-player.js +0 -316
  84. package/dist/src/components/enhanced/error-handling.d.ts.map +0 -1
  85. package/dist/src/components/enhanced/error-handling.js +0 -153
  86. package/dist/src/components/enhanced/index.d.ts.map +0 -1
  87. package/dist/src/components/enhanced/index.js +0 -10
  88. package/dist/src/components/enhanced/media-player-enhanced.d.ts.map +0 -1
  89. package/dist/src/components/enhanced/media-player-enhanced.js +0 -250
  90. package/dist/src/components/examples/basic-video-player.d.ts.map +0 -1
  91. package/dist/src/components/examples/basic-video-player.js +0 -16
  92. package/dist/src/components/examples/custom-controls-example.d.ts.map +0 -1
  93. package/dist/src/components/examples/custom-controls-example.js +0 -12
  94. package/dist/src/components/examples/enhanced-controls-example.d.ts.map +0 -1
  95. package/dist/src/components/examples/enhanced-controls-example.js +0 -18
  96. package/dist/src/components/examples/enhanced-media-player-example.d.ts.map +0 -1
  97. package/dist/src/components/examples/enhanced-media-player-example.js +0 -13
  98. package/dist/src/components/examples/loading-states-demo.d.ts.map +0 -1
  99. package/dist/src/components/examples/loading-states-demo.js +0 -41
  100. package/dist/src/components/examples/react-19-demo.d.ts.map +0 -1
  101. package/dist/src/components/examples/react-19-demo.js +0 -104
  102. package/dist/src/components/examples/volume-orientation-demo.d.ts.map +0 -1
  103. package/dist/src/components/examples/volume-orientation-demo.js +0 -31
  104. package/dist/src/components/icon-demo.d.ts.map +0 -1
  105. package/dist/src/components/icon-demo.js +0 -16
  106. package/dist/src/components/icons/index.d.ts.map +0 -1
  107. package/dist/src/components/icons/index.js +0 -59
  108. package/dist/src/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +0 -1
  109. package/dist/src/components/icons/svg-icons/ArrowLeftIcon.js +0 -3
  110. package/dist/src/components/icons/svg-icons/ArrowRightIcon.d.ts.map +0 -1
  111. package/dist/src/components/icons/svg-icons/ArrowRightIcon.js +0 -3
  112. package/dist/src/components/icons/svg-icons/AudioIcon.d.ts.map +0 -1
  113. package/dist/src/components/icons/svg-icons/AudioIcon.js +0 -4
  114. package/dist/src/components/icons/svg-icons/BackwardIcon.d.ts.map +0 -1
  115. package/dist/src/components/icons/svg-icons/BackwardIcon.js +0 -3
  116. package/dist/src/components/icons/svg-icons/CameraIcon.d.ts.map +0 -1
  117. package/dist/src/components/icons/svg-icons/CameraIcon.js +0 -4
  118. package/dist/src/components/icons/svg-icons/CheckIcon.d.ts.map +0 -1
  119. package/dist/src/components/icons/svg-icons/CheckIcon.js +0 -4
  120. package/dist/src/components/icons/svg-icons/EnablePiPIcon.d.ts.map +0 -1
  121. package/dist/src/components/icons/svg-icons/EnablePiPIcon.js +0 -5
  122. package/dist/src/components/icons/svg-icons/ForwardIcon.d.ts.map +0 -1
  123. package/dist/src/components/icons/svg-icons/ForwardIcon.js +0 -3
  124. package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +0 -1
  125. package/dist/src/components/icons/svg-icons/FullscreenEnterIcon.js +0 -3
  126. package/dist/src/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +0 -1
  127. package/dist/src/components/icons/svg-icons/FullscreenExitIcon.js +0 -3
  128. package/dist/src/components/icons/svg-icons/LoadingIcon.d.ts.map +0 -1
  129. package/dist/src/components/icons/svg-icons/LoadingIcon.js +0 -3
  130. package/dist/src/components/icons/svg-icons/PauseIcon.d.ts.map +0 -1
  131. package/dist/src/components/icons/svg-icons/PauseIcon.js +0 -3
  132. package/dist/src/components/icons/svg-icons/PlayIcon.d.ts.map +0 -1
  133. package/dist/src/components/icons/svg-icons/PlayIcon.js +0 -3
  134. package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +0 -1
  135. package/dist/src/components/icons/svg-icons/PlaybackSpeedIcon.js +0 -3
  136. package/dist/src/components/icons/svg-icons/QualityIcon.d.ts.map +0 -1
  137. package/dist/src/components/icons/svg-icons/QualityIcon.js +0 -3
  138. package/dist/src/components/icons/svg-icons/SettingsIcon.d.ts.map +0 -1
  139. package/dist/src/components/icons/svg-icons/SettingsIcon.js +0 -3
  140. package/dist/src/components/icons/svg-icons/SliderIcon.d.ts.map +0 -1
  141. package/dist/src/components/icons/svg-icons/SliderIcon.js +0 -3
  142. package/dist/src/components/icons/svg-icons/SubtitleIcon.d.ts.map +0 -1
  143. package/dist/src/components/icons/svg-icons/SubtitleIcon.js +0 -3
  144. package/dist/src/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +0 -1
  145. package/dist/src/components/icons/svg-icons/SubtitleOffIcon.js +0 -3
  146. package/dist/src/components/icons/svg-icons/UnPiPIcon.d.ts.map +0 -1
  147. package/dist/src/components/icons/svg-icons/UnPiPIcon.js +0 -5
  148. package/dist/src/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +0 -1
  149. package/dist/src/components/icons/svg-icons/VolumeMutedIcon.js +0 -3
  150. package/dist/src/components/icons/svg-icons/VolumeOneIcon.d.ts.map +0 -1
  151. package/dist/src/components/icons/svg-icons/VolumeOneIcon.js +0 -3
  152. package/dist/src/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +0 -1
  153. package/dist/src/components/icons/svg-icons/VolumeThreeIcon.js +0 -3
  154. package/dist/src/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +0 -1
  155. package/dist/src/components/icons/svg-icons/VolumeTwoIcon.js +0 -3
  156. package/dist/src/components/legacy.d.ts.map +0 -1
  157. package/dist/src/components/legacy.js +0 -52
  158. package/dist/src/components/media-metadata-display.d.ts.map +0 -1
  159. package/dist/src/components/media-metadata-display.js +0 -20
  160. package/dist/src/components/media-player-audio.d.ts.map +0 -1
  161. package/dist/src/components/media-player-audio.js +0 -18
  162. package/dist/src/components/media-player-controls.d.ts.map +0 -1
  163. package/dist/src/components/media-player-controls.js +0 -150
  164. package/dist/src/components/media-player-error.d.ts.map +0 -1
  165. package/dist/src/components/media-player-error.js +0 -85
  166. package/dist/src/components/media-player-fullscreen.d.ts.map +0 -1
  167. package/dist/src/components/media-player-fullscreen.js +0 -68
  168. package/dist/src/components/media-player-hls.d.ts.map +0 -1
  169. package/dist/src/components/media-player-hls.js +0 -20
  170. package/dist/src/components/media-player-loading.d.ts.map +0 -1
  171. package/dist/src/components/media-player-loading.js +0 -53
  172. package/dist/src/components/media-player-play.d.ts.map +0 -1
  173. package/dist/src/components/media-player-play.js +0 -44
  174. package/dist/src/components/media-player-root.d.ts.map +0 -1
  175. package/dist/src/components/media-player-root.js +0 -243
  176. package/dist/src/components/media-player-seek.d.ts.map +0 -1
  177. package/dist/src/components/media-player-seek.js +0 -92
  178. package/dist/src/components/media-player-time.d.ts.map +0 -1
  179. package/dist/src/components/media-player-time.js +0 -57
  180. package/dist/src/components/media-player-tooltip.d.ts.map +0 -1
  181. package/dist/src/components/media-player-tooltip.js +0 -14
  182. package/dist/src/components/media-player-video.d.ts.map +0 -1
  183. package/dist/src/components/media-player-video.js +0 -18
  184. package/dist/src/components/media-player-volume.d.ts.map +0 -1
  185. package/dist/src/components/media-player-volume.js +0 -88
  186. package/dist/src/components/media-player.d.ts.map +0 -1
  187. package/dist/src/components/media-player.js +0 -67
  188. package/dist/src/components/media-suspense.d.ts.map +0 -1
  189. package/dist/src/components/media-suspense.js +0 -173
  190. package/dist/src/components/player-settings-form.d.ts.map +0 -1
  191. package/dist/src/components/player-settings-form.js +0 -46
  192. package/dist/src/components/react-player-wrapper.d.ts.map +0 -1
  193. package/dist/src/components/react-player-wrapper.js +0 -163
  194. package/dist/src/components/simple-video-player.d.ts.map +0 -1
  195. package/dist/src/components/simple-video-player.js +0 -41
  196. package/dist/src/components/ui/enhanced-seek-bar.d.ts.map +0 -1
  197. package/dist/src/components/ui/enhanced-seek-bar.js +0 -112
  198. package/dist/src/components/ui/fullscreen-button.d.ts.map +0 -1
  199. package/dist/src/components/ui/fullscreen-button.js +0 -21
  200. package/dist/src/components/ui/media-resource-preloader.d.ts.map +0 -1
  201. package/dist/src/components/ui/media-resource-preloader.js +0 -295
  202. package/dist/src/components/ui/play-button.d.ts.map +0 -1
  203. package/dist/src/components/ui/play-button.js +0 -26
  204. package/dist/src/components/ui/seek-bar.d.ts.map +0 -1
  205. package/dist/src/components/ui/seek-bar.js +0 -54
  206. package/dist/src/components/ui/time-display.d.ts.map +0 -1
  207. package/dist/src/components/ui/time-display.js +0 -18
  208. package/dist/src/components/ui/volume-control.d.ts.map +0 -1
  209. package/dist/src/components/ui/volume-control.js +0 -71
  210. package/dist/src/components/unified/base-media-player.d.ts.map +0 -1
  211. package/dist/src/components/unified/base-media-player.js +0 -104
  212. package/dist/src/components/unified/media-player.d.ts.map +0 -1
  213. package/dist/src/components/unified/media-player.js +0 -41
  214. package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.d.ts.map +0 -1
  215. package/dist/src/components/variants/minimal/AccessibleMinimalPlayer.js +0 -322
  216. package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.d.ts.map +0 -1
  217. package/dist/src/components/variants/minimal/EnhancedMinimalMediaPlayer.js +0 -280
  218. package/dist/src/components/variants/minimal/MinimalControls.d.ts.map +0 -1
  219. package/dist/src/components/variants/minimal/MinimalControls.js +0 -19
  220. package/dist/src/components/variants/minimal/MinimalLoading.d.ts.map +0 -1
  221. package/dist/src/components/variants/minimal/MinimalLoading.js +0 -6
  222. package/dist/src/components/variants/minimal/MinimalMediaPlayer.d.ts.map +0 -1
  223. package/dist/src/components/variants/minimal/MinimalMediaPlayer.js +0 -135
  224. package/dist/src/components/variants/minimal/MinimalOverlay.d.ts.map +0 -1
  225. package/dist/src/components/variants/minimal/MinimalOverlay.js +0 -15
  226. package/dist/src/components/variants/minimal/MinimalPlayButton.d.ts.map +0 -1
  227. package/dist/src/components/variants/minimal/MinimalPlayButton.js +0 -29
  228. package/dist/src/components/variants/minimal/MinimalSeekBar.d.ts.map +0 -1
  229. package/dist/src/components/variants/minimal/MinimalSeekBar.js +0 -73
  230. package/dist/src/components/variants/minimal/MinimalVolumeControl.d.ts.map +0 -1
  231. package/dist/src/components/variants/minimal/MinimalVolumeControl.js +0 -29
  232. package/dist/src/components/variants/minimal/SimpleMinimalPlayer.d.ts.map +0 -1
  233. package/dist/src/components/variants/minimal/SimpleMinimalPlayer.js +0 -51
  234. package/dist/src/components/variants/minimal/components/CenterPlayButton.d.ts.map +0 -1
  235. package/dist/src/components/variants/minimal/components/CenterPlayButton.js +0 -8
  236. package/dist/src/components/variants/minimal/components/ControlBar.d.ts.map +0 -1
  237. package/dist/src/components/variants/minimal/components/ControlBar.js +0 -10
  238. package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.d.ts.map +0 -1
  239. package/dist/src/components/variants/minimal/components/EnhancedSettingsMenu.js +0 -68
  240. package/dist/src/components/variants/minimal/components/PlaybackControls.d.ts.map +0 -1
  241. package/dist/src/components/variants/minimal/components/PlaybackControls.js +0 -9
  242. package/dist/src/components/variants/minimal/components/RightControls.d.ts.map +0 -1
  243. package/dist/src/components/variants/minimal/components/RightControls.js +0 -40
  244. package/dist/src/components/variants/minimal/components/SeekBar.d.ts.map +0 -1
  245. package/dist/src/components/variants/minimal/components/SeekBar.js +0 -43
  246. package/dist/src/components/variants/minimal/components/SettingsDropdown.d.ts.map +0 -1
  247. package/dist/src/components/variants/minimal/components/SettingsDropdown.js +0 -18
  248. package/dist/src/components/variants/minimal/components/SubtitleDisplay.d.ts.map +0 -1
  249. package/dist/src/components/variants/minimal/components/SubtitleDisplay.js +0 -6
  250. package/dist/src/components/variants/minimal/components/TimeDisplay.d.ts.map +0 -1
  251. package/dist/src/components/variants/minimal/components/TimeDisplay.js +0 -5
  252. package/dist/src/components/variants/minimal/components/VideoElement.d.ts.map +0 -1
  253. package/dist/src/components/variants/minimal/components/VideoElement.js +0 -4
  254. package/dist/src/components/variants/minimal/components/VolumeControl.d.ts.map +0 -1
  255. package/dist/src/components/variants/minimal/components/VolumeControl.js +0 -99
  256. package/dist/src/components/variants/minimal/index.d.ts.map +0 -1
  257. package/dist/src/components/variants/minimal/index.js +0 -8
  258. package/dist/src/components/video-player.d.ts.map +0 -1
  259. package/dist/src/components/video-player.js +0 -38
  260. package/dist/src/context/error-handling.d.ts.map +0 -1
  261. package/dist/src/context/error-handling.js +0 -300
  262. package/dist/src/context/media-context.d.ts.map +0 -1
  263. package/dist/src/context/media-context.js +0 -121
  264. package/dist/src/context/media-provider.d.ts.map +0 -1
  265. package/dist/src/context/media-provider.js +0 -164
  266. package/dist/src/context/media-store.d.ts.map +0 -1
  267. package/dist/src/context/media-store.js +0 -273
  268. package/dist/src/context/persistence.d.ts.map +0 -1
  269. package/dist/src/context/persistence.js +0 -356
  270. package/dist/src/core/events/event-system.d.ts.map +0 -1
  271. package/dist/src/core/events/event-system.js +0 -288
  272. package/dist/src/core/events/hooks.d.ts.map +0 -1
  273. package/dist/src/core/events/hooks.js +0 -198
  274. package/dist/src/core/events/index.d.ts.map +0 -1
  275. package/dist/src/core/events/index.js +0 -7
  276. package/dist/src/core/events/middleware.d.ts.map +0 -1
  277. package/dist/src/core/events/middleware.js +0 -219
  278. package/dist/src/core/index.d.ts.map +0 -1
  279. package/dist/src/core/index.js +0 -15
  280. package/dist/src/core/optimization/bundle-optimizer.d.ts.map +0 -1
  281. package/dist/src/core/optimization/bundle-optimizer.js +0 -217
  282. package/dist/src/core/performance/cicd.d.ts.map +0 -1
  283. package/dist/src/core/performance/cicd.js +0 -83
  284. package/dist/src/core/performance/index.d.ts.map +0 -1
  285. package/dist/src/core/performance/index.js +0 -14
  286. package/dist/src/core/performance/media-loading-optimizer.d.ts.map +0 -1
  287. package/dist/src/core/performance/media-loading-optimizer.js +0 -404
  288. package/dist/src/core/performance/performance-budgets.d.ts.map +0 -1
  289. package/dist/src/core/performance/performance-budgets.js +0 -326
  290. package/dist/src/core/performance/performance-monitor.d.ts.map +0 -1
  291. package/dist/src/core/performance/performance-monitor.js +0 -297
  292. package/dist/src/core/performance/performance-testing.d.ts.map +0 -1
  293. package/dist/src/core/performance/performance-testing.js +0 -314
  294. package/dist/src/core/plugins/base-plugin.d.ts.map +0 -1
  295. package/dist/src/core/plugins/base-plugin.js +0 -151
  296. package/dist/src/core/plugins/enhanced-plugin-system.d.ts.map +0 -1
  297. package/dist/src/core/plugins/enhanced-plugin-system.js +0 -305
  298. package/dist/src/core/plugins/examples/analytics-plugin.d.ts.map +0 -1
  299. package/dist/src/core/plugins/examples/analytics-plugin.js +0 -191
  300. package/dist/src/core/plugins/index.d.ts.map +0 -1
  301. package/dist/src/core/plugins/index.js +0 -9
  302. package/dist/src/core/plugins/registry.d.ts.map +0 -1
  303. package/dist/src/core/plugins/registry.js +0 -261
  304. package/dist/src/core/plugins/types.d.ts.map +0 -1
  305. package/dist/src/core/plugins/types.js +0 -31
  306. package/dist/src/core/plugins/utils.d.ts.map +0 -1
  307. package/dist/src/core/plugins/utils.js +0 -274
  308. package/dist/src/core/progressive-loading.d.ts.map +0 -1
  309. package/dist/src/core/progressive-loading.js +0 -239
  310. package/dist/src/core/providers/enhanced-hls-provider.d.ts.map +0 -1
  311. package/dist/src/core/providers/enhanced-hls-provider.js +0 -273
  312. package/dist/src/core/providers/service-provider.d.ts.map +0 -1
  313. package/dist/src/core/providers/service-provider.js +0 -105
  314. package/dist/src/core/utils.d.ts.map +0 -1
  315. package/dist/src/core/utils.js +0 -21
  316. package/dist/src/features/media-session/media-session-manager.d.ts.map +0 -1
  317. package/dist/src/features/media-session/media-session-manager.js +0 -331
  318. package/dist/src/features/picture-in-picture/pip-manager.d.ts.map +0 -1
  319. package/dist/src/features/picture-in-picture/pip-manager.js +0 -353
  320. package/dist/src/features/playlist/playlist-manager.d.ts.map +0 -1
  321. package/dist/src/features/playlist/playlist-manager.js +0 -475
  322. package/dist/src/features/subtitles/subtitle-manager.d.ts.map +0 -1
  323. package/dist/src/features/subtitles/subtitle-manager.js +0 -335
  324. package/dist/src/features/subtitles/subtitle-parser.d.ts.map +0 -1
  325. package/dist/src/features/subtitles/subtitle-parser.js +0 -217
  326. package/dist/src/features/thumbnails/thumbnail-generator.d.ts.map +0 -1
  327. package/dist/src/features/thumbnails/thumbnail-generator.js +0 -388
  328. package/dist/src/hooks/accessibility/index.d.ts.map +0 -1
  329. package/dist/src/hooks/accessibility/index.js +0 -4
  330. package/dist/src/hooks/accessibility/use-accessibility-preferences.d.ts.map +0 -1
  331. package/dist/src/hooks/accessibility/use-accessibility-preferences.js +0 -156
  332. package/dist/src/hooks/accessibility/use-focus-management.d.ts.map +0 -1
  333. package/dist/src/hooks/accessibility/use-focus-management.js +0 -142
  334. package/dist/src/hooks/accessibility/use-keyboard-shortcuts.d.ts.map +0 -1
  335. package/dist/src/hooks/accessibility/use-keyboard-shortcuts.js +0 -101
  336. package/dist/src/hooks/accessibility/use-screen-reader.d.ts.map +0 -1
  337. package/dist/src/hooks/accessibility/use-screen-reader.js +0 -148
  338. package/dist/src/hooks/core/index.d.ts.map +0 -1
  339. package/dist/src/hooks/core/index.js +0 -19
  340. package/dist/src/hooks/legacy.d.ts.map +0 -1
  341. package/dist/src/hooks/legacy.js +0 -17
  342. package/dist/src/hooks/use-enhanced-media-player.d.ts.map +0 -1
  343. package/dist/src/hooks/use-enhanced-media-player.js +0 -395
  344. package/dist/src/hooks/use-intelligent-preloading.d.ts.map +0 -1
  345. package/dist/src/hooks/use-intelligent-preloading.js +0 -258
  346. package/dist/src/hooks/use-keyboard-controls.d.ts.map +0 -1
  347. package/dist/src/hooks/use-keyboard-controls.js +0 -83
  348. package/dist/src/hooks/use-media-actions.d.ts.map +0 -1
  349. package/dist/src/hooks/use-media-actions.js +0 -121
  350. package/dist/src/hooks/use-media-metadata.d.ts.map +0 -1
  351. package/dist/src/hooks/use-media-metadata.js +0 -74
  352. package/dist/src/hooks/use-media-optimistic.d.ts.map +0 -1
  353. package/dist/src/hooks/use-media-optimistic.js +0 -205
  354. package/dist/src/hooks/use-media-player.d.ts.map +0 -1
  355. package/dist/src/hooks/use-media-player.js +0 -251
  356. package/dist/src/hooks/use-media-state.d.ts.map +0 -1
  357. package/dist/src/hooks/use-media-state.js +0 -162
  358. package/dist/src/hooks/use-memory-optimization.d.ts.map +0 -1
  359. package/dist/src/hooks/use-memory-optimization.js +0 -288
  360. package/dist/src/hooks/use-optimistic-controls.d.ts.map +0 -1
  361. package/dist/src/hooks/use-optimistic-controls.js +0 -60
  362. package/dist/src/hooks/use-optimized-media.d.ts.map +0 -1
  363. package/dist/src/hooks/use-optimized-media.js +0 -211
  364. package/dist/src/hooks/use-touch-gestures.d.ts.map +0 -1
  365. package/dist/src/hooks/use-touch-gestures.js +0 -289
  366. package/dist/src/hooks/useEnhancedSubtitles.d.ts.map +0 -1
  367. package/dist/src/hooks/useEnhancedSubtitles.js +0 -205
  368. package/dist/src/hooks/useKeyboardShortcuts.d.ts.map +0 -1
  369. package/dist/src/hooks/useKeyboardShortcuts.js +0 -59
  370. package/dist/src/hooks/useMediaControls.d.ts.map +0 -1
  371. package/dist/src/hooks/useMediaControls.js +0 -44
  372. package/dist/src/hooks/useScreenshot.d.ts.map +0 -1
  373. package/dist/src/hooks/useScreenshot.js +0 -56
  374. package/dist/src/hooks/useSubtitles.d.ts.map +0 -1
  375. package/dist/src/hooks/useSubtitles.js +0 -73
  376. package/dist/src/hooks/useVideoPlayer.d.ts.map +0 -1
  377. package/dist/src/hooks/useVideoPlayer.js +0 -184
  378. package/dist/src/icons/components/FullscreenIcon.d.ts.map +0 -1
  379. package/dist/src/icons/components/FullscreenIcon.js +0 -11
  380. package/dist/src/icons/components/SettingsIcon.d.ts.map +0 -1
  381. package/dist/src/icons/components/SettingsIcon.js +0 -11
  382. package/dist/src/icons/components/animated/LoadingIcon.d.ts.map +0 -1
  383. package/dist/src/icons/components/animated/LoadingIcon.js +0 -11
  384. package/dist/src/icons/components/animated/PlayPauseIcon.d.ts.map +0 -1
  385. package/dist/src/icons/components/animated/PlayPauseIcon.js +0 -9
  386. package/dist/src/icons/components/media/PauseIcon.d.ts.map +0 -1
  387. package/dist/src/icons/components/media/PauseIcon.js +0 -12
  388. package/dist/src/icons/components/media/PlayIcon.d.ts.map +0 -1
  389. package/dist/src/icons/components/media/PlayIcon.js +0 -12
  390. package/dist/src/icons/components/volume/VolumeIcon.d.ts.map +0 -1
  391. package/dist/src/icons/components/volume/VolumeIcon.js +0 -11
  392. package/dist/src/icons/components/volume/VolumeOffIcon.d.ts.map +0 -1
  393. package/dist/src/icons/components/volume/VolumeOffIcon.js +0 -11
  394. package/dist/src/icons/index.d.ts.map +0 -1
  395. package/dist/src/icons/index.js +0 -45
  396. package/dist/src/icons/provider.d.ts.map +0 -1
  397. package/dist/src/icons/provider.js +0 -37
  398. package/dist/src/icons/types.d.ts.map +0 -1
  399. package/dist/src/icons/types.js +0 -1
  400. package/dist/src/index-enhanced.d.ts.map +0 -1
  401. package/dist/src/index-enhanced.js +0 -16
  402. package/dist/src/index-legacy.d.ts.map +0 -1
  403. package/dist/src/index-legacy.js +0 -97
  404. package/dist/src/index.d.ts.map +0 -1
  405. package/dist/src/index.js +0 -90
  406. package/dist/src/index.minimal.d.ts.map +0 -1
  407. package/dist/src/index.minimal.js +0 -3
  408. package/dist/src/lib/deprecation.d.ts.map +0 -1
  409. package/dist/src/lib/deprecation.js +0 -31
  410. package/dist/src/lib/format-time.d.ts.map +0 -1
  411. package/dist/src/lib/format-time.js +0 -32
  412. package/dist/src/lib/index.d.ts.map +0 -1
  413. package/dist/src/lib/index.js +0 -3
  414. package/dist/src/lib/utils.d.ts.map +0 -1
  415. package/dist/src/lib/utils.js +0 -5
  416. package/dist/src/test/setup.d.ts.map +0 -1
  417. package/dist/src/test/setup.js +0 -65
  418. package/dist/src/types/events.d.ts.map +0 -1
  419. package/dist/src/types/events.js +0 -2
  420. package/dist/src/types/formats.d.ts.map +0 -1
  421. package/dist/src/types/formats.js +0 -63
  422. package/dist/src/types/index.d.ts.map +0 -1
  423. package/dist/src/types/index.js +0 -4
  424. package/dist/utils-Db13763z.cjs +0 -9
  425. package/dist/utils-Db13763z.cjs.map +0 -1
  426. package/dist/utils-nTO4AnHo.js +0 -2809
  427. package/dist/utils-nTO4AnHo.js.map +0 -1
  428. package/dist/utils.js +0 -2
  429. package/dist/utils.js.map +0 -1
  430. package/dist/utils.mjs +0 -7
  431. package/dist/utils.mjs.map +0 -1
  432. package/src/adapters/videojs-adapter.js +0 -350
  433. package/src/components/AnimateLoading.js +0 -41
  434. package/src/components/LoadingState.js +0 -111
  435. package/src/components/accessibility/keyboard-help-overlay.js +0 -90
  436. package/src/components/audio-player.js +0 -31
  437. package/src/components/basic/index.js +0 -29
  438. package/src/components/enhanced/advanced-features.js +0 -64
  439. package/src/components/enhanced/debug-panel.js +0 -94
  440. package/src/components/enhanced/enhanced-controls.js +0 -233
  441. package/src/components/enhanced/enhanced-media-player.js +0 -316
  442. package/src/components/enhanced/error-handling.js +0 -153
  443. package/src/components/enhanced/index.js +0 -10
  444. package/src/components/enhanced/media-player-enhanced.js +0 -250
  445. package/src/components/examples/basic-video-player.js +0 -16
  446. package/src/components/examples/custom-controls-example.js +0 -12
  447. package/src/components/examples/enhanced-controls-example.js +0 -18
  448. package/src/components/examples/enhanced-media-player-example.js +0 -13
  449. package/src/components/examples/loading-states-demo.js +0 -41
  450. package/src/components/examples/react-19-demo.js +0 -104
  451. package/src/components/examples/volume-orientation-demo.js +0 -31
  452. package/src/components/icon-demo.js +0 -16
  453. package/src/components/icons/index.js +0 -59
  454. package/src/components/icons/svg-icons/ArrowLeftIcon.js +0 -3
  455. package/src/components/icons/svg-icons/ArrowRightIcon.js +0 -3
  456. package/src/components/icons/svg-icons/AudioIcon.js +0 -4
  457. package/src/components/icons/svg-icons/BackwardIcon.js +0 -3
  458. package/src/components/icons/svg-icons/CameraIcon.js +0 -4
  459. package/src/components/icons/svg-icons/CheckIcon.js +0 -4
  460. package/src/components/icons/svg-icons/EnablePiPIcon.js +0 -5
  461. package/src/components/icons/svg-icons/ForwardIcon.js +0 -3
  462. package/src/components/icons/svg-icons/FullscreenEnterIcon.js +0 -3
  463. package/src/components/icons/svg-icons/FullscreenExitIcon.js +0 -3
  464. package/src/components/icons/svg-icons/LoadingIcon.js +0 -3
  465. package/src/components/icons/svg-icons/PauseIcon.js +0 -3
  466. package/src/components/icons/svg-icons/PlayIcon.js +0 -3
  467. package/src/components/icons/svg-icons/PlaybackSpeedIcon.js +0 -3
  468. package/src/components/icons/svg-icons/QualityIcon.js +0 -3
  469. package/src/components/icons/svg-icons/SettingsIcon.js +0 -3
  470. package/src/components/icons/svg-icons/SliderIcon.js +0 -3
  471. package/src/components/icons/svg-icons/SubtitleIcon.js +0 -3
  472. package/src/components/icons/svg-icons/SubtitleOffIcon.js +0 -3
  473. package/src/components/icons/svg-icons/UnPiPIcon.js +0 -5
  474. package/src/components/icons/svg-icons/VolumeMutedIcon.js +0 -3
  475. package/src/components/icons/svg-icons/VolumeOneIcon.js +0 -3
  476. package/src/components/icons/svg-icons/VolumeThreeIcon.js +0 -3
  477. package/src/components/icons/svg-icons/VolumeTwoIcon.js +0 -3
  478. package/src/components/legacy.js +0 -52
  479. package/src/components/media-metadata-display.js +0 -20
  480. package/src/components/media-player-audio.js +0 -18
  481. package/src/components/media-player-controls.js +0 -150
  482. package/src/components/media-player-error.js +0 -85
  483. package/src/components/media-player-fullscreen.js +0 -68
  484. package/src/components/media-player-hls.js +0 -20
  485. package/src/components/media-player-loading.js +0 -53
  486. package/src/components/media-player-play.js +0 -44
  487. package/src/components/media-player-root.js +0 -243
  488. package/src/components/media-player-seek.js +0 -92
  489. package/src/components/media-player-time.js +0 -57
  490. package/src/components/media-player-tooltip.js +0 -14
  491. package/src/components/media-player-video.js +0 -18
  492. package/src/components/media-player-volume.js +0 -88
  493. package/src/components/media-player.js +0 -67
  494. package/src/components/media-suspense.js +0 -173
  495. package/src/components/player-settings-form.js +0 -46
  496. package/src/components/react-player-wrapper.js +0 -163
  497. package/src/components/simple-video-player.js +0 -41
  498. package/src/components/ui/enhanced-seek-bar.js +0 -112
  499. package/src/components/ui/fullscreen-button.js +0 -21
  500. package/src/components/ui/media-resource-preloader.js +0 -295
  501. package/src/components/ui/play-button.js +0 -26
  502. package/src/components/ui/seek-bar.js +0 -54
  503. package/src/components/ui/time-display.js +0 -18
  504. package/src/components/ui/volume-control.js +0 -71
  505. package/src/components/unified/base-media-player.js +0 -104
  506. package/src/components/unified/media-player.js +0 -41
  507. package/src/components/variants/minimal/AccessibleMinimalPlayer.js +0 -322
  508. package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.js +0 -280
  509. package/src/components/variants/minimal/MinimalControls.js +0 -19
  510. package/src/components/variants/minimal/MinimalLoading.js +0 -6
  511. package/src/components/variants/minimal/MinimalMediaPlayer.js +0 -135
  512. package/src/components/variants/minimal/MinimalOverlay.js +0 -15
  513. package/src/components/variants/minimal/MinimalPlayButton.js +0 -29
  514. package/src/components/variants/minimal/MinimalSeekBar.js +0 -73
  515. package/src/components/variants/minimal/MinimalVolumeControl.js +0 -29
  516. package/src/components/variants/minimal/SimpleMinimalPlayer.js +0 -51
  517. package/src/components/variants/minimal/components/CenterPlayButton.js +0 -8
  518. package/src/components/variants/minimal/components/ControlBar.js +0 -10
  519. package/src/components/variants/minimal/components/EnhancedSettingsMenu.js +0 -68
  520. package/src/components/variants/minimal/components/PlaybackControls.js +0 -9
  521. package/src/components/variants/minimal/components/RightControls.js +0 -40
  522. package/src/components/variants/minimal/components/SeekBar.js +0 -43
  523. package/src/components/variants/minimal/components/SettingsDropdown.js +0 -18
  524. package/src/components/variants/minimal/components/SubtitleDisplay.js +0 -6
  525. package/src/components/variants/minimal/components/TimeDisplay.js +0 -5
  526. package/src/components/variants/minimal/components/VideoElement.js +0 -4
  527. package/src/components/variants/minimal/components/VolumeControl.js +0 -99
  528. package/src/components/variants/minimal/index.js +0 -8
  529. package/src/components/video-player.js +0 -38
  530. package/src/context/error-handling.js +0 -300
  531. package/src/context/media-context.js +0 -121
  532. package/src/context/media-provider.js +0 -164
  533. package/src/context/media-store.js +0 -273
  534. package/src/context/persistence.js +0 -356
  535. package/src/core/events/event-system.js +0 -288
  536. package/src/core/events/hooks.js +0 -198
  537. package/src/core/events/index.js +0 -7
  538. package/src/core/events/middleware.js +0 -219
  539. package/src/core/index.js +0 -15
  540. package/src/core/optimization/bundle-optimizer.js +0 -217
  541. package/src/core/performance/cicd.js +0 -83
  542. package/src/core/performance/index.js +0 -14
  543. package/src/core/performance/media-loading-optimizer.js +0 -404
  544. package/src/core/performance/performance-budgets.js +0 -326
  545. package/src/core/performance/performance-monitor.js +0 -297
  546. package/src/core/performance/performance-testing.js +0 -314
  547. package/src/core/plugins/base-plugin.js +0 -151
  548. package/src/core/plugins/enhanced-plugin-system.js +0 -305
  549. package/src/core/plugins/examples/analytics-plugin.js +0 -191
  550. package/src/core/plugins/index.js +0 -9
  551. package/src/core/plugins/registry.js +0 -261
  552. package/src/core/plugins/types.js +0 -31
  553. package/src/core/plugins/utils.js +0 -274
  554. package/src/core/progressive-loading.js +0 -239
  555. package/src/core/providers/enhanced-hls-provider.js +0 -273
  556. package/src/core/providers/service-provider.js +0 -105
  557. package/src/core/utils.js +0 -21
  558. package/src/features/media-session/media-session-manager.js +0 -331
  559. package/src/features/picture-in-picture/pip-manager.js +0 -353
  560. package/src/features/playlist/playlist-manager.js +0 -475
  561. package/src/features/subtitles/subtitle-manager.js +0 -335
  562. package/src/features/subtitles/subtitle-parser.js +0 -217
  563. package/src/features/thumbnails/thumbnail-generator.js +0 -388
  564. package/src/hooks/accessibility/index.js +0 -4
  565. package/src/hooks/accessibility/use-accessibility-preferences.js +0 -156
  566. package/src/hooks/accessibility/use-focus-management.js +0 -142
  567. package/src/hooks/accessibility/use-keyboard-shortcuts.js +0 -101
  568. package/src/hooks/accessibility/use-screen-reader.js +0 -148
  569. package/src/hooks/core/index.js +0 -19
  570. package/src/hooks/legacy.js +0 -17
  571. package/src/hooks/use-enhanced-media-player.js +0 -395
  572. package/src/hooks/use-intelligent-preloading.js +0 -258
  573. package/src/hooks/use-keyboard-controls.js +0 -83
  574. package/src/hooks/use-media-actions.js +0 -121
  575. package/src/hooks/use-media-metadata.js +0 -74
  576. package/src/hooks/use-media-optimistic.js +0 -205
  577. package/src/hooks/use-media-player.js +0 -251
  578. package/src/hooks/use-media-state.js +0 -162
  579. package/src/hooks/use-memory-optimization.js +0 -288
  580. package/src/hooks/use-optimistic-controls.js +0 -60
  581. package/src/hooks/use-optimized-media.js +0 -211
  582. package/src/hooks/use-touch-gestures.js +0 -289
  583. package/src/hooks/useEnhancedSubtitles.js +0 -205
  584. package/src/hooks/useKeyboardShortcuts.js +0 -59
  585. package/src/hooks/useMediaControls.js +0 -44
  586. package/src/hooks/useScreenshot.js +0 -56
  587. package/src/hooks/useSubtitles.js +0 -73
  588. package/src/hooks/useVideoPlayer.js +0 -184
  589. package/src/icons/components/FullscreenIcon.js +0 -11
  590. package/src/icons/components/SettingsIcon.js +0 -11
  591. package/src/icons/components/animated/LoadingIcon.js +0 -11
  592. package/src/icons/components/animated/PlayPauseIcon.js +0 -9
  593. package/src/icons/components/media/PauseIcon.js +0 -12
  594. package/src/icons/components/media/PlayIcon.js +0 -12
  595. package/src/icons/components/volume/VolumeIcon.js +0 -11
  596. package/src/icons/components/volume/VolumeOffIcon.js +0 -11
  597. package/src/icons/index.js +0 -45
  598. package/src/icons/provider.js +0 -37
  599. package/src/icons/types.js +0 -1
  600. package/src/index-enhanced.js +0 -16
  601. package/src/index-legacy.js +0 -97
  602. package/src/index.js +0 -90
  603. package/src/index.minimal.js +0 -3
  604. package/src/lib/deprecation.js +0 -31
  605. package/src/lib/format-time.js +0 -32
  606. package/src/lib/index.js +0 -3
  607. package/src/lib/utils.js +0 -5
  608. package/src/test/setup.js +0 -65
  609. package/src/types/events.js +0 -2
  610. package/src/types/formats.js +0 -63
  611. package/src/types/index.js +0 -4
@@ -1 +0,0 @@
1
- {"version":3,"file":"minimal-components-BmqRefl1.js","sources":["../src/components/media-player-root.tsx","../src/components/media-player-video.tsx","../src/components/media-player-time.tsx","../src/components/variants/minimal/MinimalPlayButton.tsx","../src/components/variants/minimal/MinimalSeekBar.tsx","../src/components/variants/minimal/MinimalVolumeControl.tsx","../src/components/variants/minimal/MinimalControls.tsx","../src/components/variants/minimal/MinimalOverlay.tsx","../src/components/variants/minimal/MinimalLoading.tsx","../src/components/icons/svg-icons/BackwardIcon.tsx","../src/components/icons/svg-icons/CameraIcon.tsx","../src/components/icons/svg-icons/ForwardIcon.tsx","../src/components/icons/svg-icons/FullscreenEnterIcon.tsx","../src/components/icons/svg-icons/FullscreenExitIcon.tsx","../src/components/icons/svg-icons/LoadingIcon.tsx","../src/components/icons/svg-icons/PauseIcon.tsx","../src/components/icons/svg-icons/PlayIcon.tsx","../src/components/icons/svg-icons/SettingsIcon.tsx","../src/components/icons/svg-icons/SubtitleIcon.tsx","../src/components/icons/svg-icons/VolumeMutedIcon.tsx","../src/components/icons/svg-icons/VolumeTwoIcon.tsx","../src/components/icons/index.tsx","../src/components/variants/minimal/MinimalMediaPlayer.tsx","../src/components/variants/minimal/components/VideoElement.tsx","../src/components/variants/minimal/components/SubtitleDisplay.tsx","../src/components/variants/minimal/components/CenterPlayButton.tsx","../src/components/variants/minimal/components/SeekBar.tsx","../src/components/variants/minimal/components/PlaybackControls.tsx","../src/components/variants/minimal/components/VolumeControl.tsx","../src/components/variants/minimal/components/TimeDisplay.tsx","../src/components/variants/minimal/components/SettingsDropdown.tsx","../src/components/variants/minimal/components/RightControls.tsx","../src/components/variants/minimal/components/ControlBar.tsx","../src/assets/mona-loading.gif","../src/components/AnimateLoading.tsx","../src/components/LoadingState.tsx","../src/components/variants/minimal/SimpleMinimalPlayer.tsx"],"sourcesContent":["\"use client\"\n\nimport React from \"react\"\nimport {\n\tMediaActionTypes,\n\tuseMediaContext,\n\tuseMediaDispatch,\n\tuseMediaSelector\n} from \"../context/media-context\"\nimport { MediaProvider } from \"../context/media-provider\"\nimport { useMediaGestures } from \"../hooks/use-touch-gestures\"\nimport { useMobileOptimizations, useDeviceInfo } from \"@rp/ui/hooks/use-mobile\"\nimport { cn } from \"../lib/utils\"\n\n// Utility function to compose refs\nfunction composeRefs<T>(...refs: Array<React.Ref<T> | undefined>) {\n\treturn (node: T) => {\n\t\trefs.forEach((ref) => {\n\t\t\tif (typeof ref === \"function\") {\n\t\t\t\tref(node)\n\t\t\t} else if (ref && typeof ref === \"object\") {\n\t\t\t\t;(ref as React.MutableRefObject<T>).current = node\n\t\t\t}\n\t\t})\n\t}\n}\n\n// MediaPlayer root component props\nexport interface MediaPlayerRootProps {\n\tchildren: React.ReactNode\n\tclassName?: string\n\tdir?: \"ltr\" | \"rtl\"\n\tdisabled?: boolean\n\tasChild?: boolean\n\tautoHide?: boolean\n\ttooltipDelayDuration?: number\n\ttooltipSideOffset?: number\n\twithoutTooltip?: boolean\n\n\t// Mobile-first options\n\tenableGestures?: boolean\n\tenableMobileOptimizations?: boolean\n\n\t// Media event handlers\n\tonPlay?: () => void\n\tonPause?: () => void\n\tonEnded?: () => void\n\tonTimeUpdate?: (currentTime: number) => void\n\tonVolumeChange?: (volume: number) => void\n\tonMuted?: (muted: boolean) => void\n\tonMediaError?: (error: string) => void\n\tonPipError?: (error: Error) => void\n\tonFullscreenChange?: (isFullscreen: boolean) => void\n}\n\n// Internal MediaPlayer implementation\nfunction MediaPlayerImpl({\n\tchildren,\n\tclassName,\n\tdir = \"ltr\",\n\tdisabled = false,\n\tasChild = false,\n\tautoHide = true,\n\tenableGestures = true,\n\tenableMobileOptimizations = true,\n\tonPlay,\n\tonPause,\n\tonEnded,\n\tonTimeUpdate,\n\tonVolumeChange,\n\tonMuted,\n\tonMediaError,\n\tonPipError,\n\tonFullscreenChange,\n\t...props\n}: MediaPlayerRootProps) {\n\tconst context = useMediaContext()\n\tconst dispatch = useMediaDispatch()\n\tconst { isTouchDevice } = useDeviceInfo()\n\n\t// Get state values\n\tconst isPlaying = useMediaSelector((state) => state.isPlaying)\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst volume = useMediaSelector((state) => state.volume)\n\tconst isMuted = useMediaSelector((state) => state.isMuted)\n\tconst error = useMediaSelector((state) => state.error)\n\tconst isFullscreen = useMediaSelector((state) => state.isFullscreen)\n\tconst isPictureInPicture = useMediaSelector((state) => state.isPictureInPicture)\n\n\t// Enable mobile optimizations\n\tuseMobileOptimizations()\n\n\t// Gesture handling actions - React 19 compiler will optimize this\n\tconst gestureActions = {\n\t\tonPlayPause: () => {\n\t\t\tif (disabled) return\n\t\t\tdispatch({\n\t\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t\t})\n\t\t},\n\t\tonSeek: (direction: 'forward' | 'backward', amount: number) => {\n\t\t\tif (disabled || !context.isVideo) return\n\t\t\tconst mediaElement = context.mediaRef.current\n\t\t\tif (!mediaElement) return\n\t\t\t\n\t\t\tconst newTime = direction === 'forward' \n\t\t\t\t? Math.min(mediaElement.duration || 0, currentTime + amount)\n\t\t\t\t: Math.max(0, currentTime - amount)\n\t\t\t\n\t\t\tdispatch({\n\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\tdetail: newTime\n\t\t\t})\n\t\t},\n\t\tonVolumeChange: (direction: 'up' | 'down', amount: number) => {\n\t\t\tif (disabled) return\n\t\t\tconst newVolume = direction === 'up'\n\t\t\t\t? Math.min(1, volume + amount)\n\t\t\t\t: Math.max(0, volume - amount)\n\t\t\t\n\t\t\tdispatch({\n\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\tdetail: newVolume\n\t\t\t})\n\t\t},\n\t\tonToggleFullscreen: () => {\n\t\t\tif (disabled || !context.isVideo) return\n\t\t\tdispatch({\n\t\t\t\ttype: isFullscreen ? MediaActionTypes.EXIT_FULLSCREEN : MediaActionTypes.ENTER_FULLSCREEN\n\t\t\t})\n\t\t},\n\t\tonZoom: (scale: number) => {\n\t\t\t// Handle video zoom - this could be implemented with CSS transforms\n\t\t\t// For now, we'll just log it as a placeholder\n\t\t\tconsole.log('Zoom gesture detected:', scale)\n\t\t}\n\t}\n\n\t\t// Set up touch gestures for mobile devices\n\t\tconst { isGestureEnabled } = useMediaGestures(\n\t\t\tcontext.rootRef as React.RefObject<HTMLElement>,\n\t\t\tenableGestures ? gestureActions : {}\n\t\t)\n\n\t// Keyboard event handler - React 19 compiler will optimize this\n\tconst handleKeyDown = (event: React.KeyboardEvent) => {\n\t\tif (disabled) return\n\n\t\tconst target = event.target as HTMLElement\n\t\tconst isInputElement =\n\t\t\ttarget.tagName === \"INPUT\" || target.tagName === \"TEXTAREA\" || target.isContentEditable\n\n\t\tif (isInputElement) return\n\n\t\tconst mediaElement = context.mediaRef.current\n\t\tif (!mediaElement) return\n\n\t\tswitch (event.code) {\n\t\t\tcase \"Space\":\n\t\t\tcase \"KeyK\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n\t\t\t\t})\n\t\t\t\tbreak\n\n\t\t\tcase \"KeyF\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: isFullscreen\n\t\t\t\t\t\t? MediaActionTypes.EXIT_FULLSCREEN\n\t\t\t\t\t\t: MediaActionTypes.ENTER_FULLSCREEN\n\t\t\t\t})\n\t\t\t\tbreak\n\n\t\t\tcase \"KeyM\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: MediaActionTypes.TOGGLE_MUTE\n\t\t\t\t})\n\t\t\t\tbreak\n\n\t\t\tcase \"ArrowLeft\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tif (context.isVideo && mediaElement instanceof HTMLVideoElement) {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: Math.max(0, currentTime - 10)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase \"ArrowRight\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tif (context.isVideo && mediaElement instanceof HTMLVideoElement) {\n\t\t\t\t\tdispatch({\n\t\t\t\t\t\ttype: MediaActionTypes.SEEK,\n\t\t\t\t\t\tdetail: Math.min(mediaElement.duration || 0, currentTime + 10)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\n\t\t\tcase \"ArrowUp\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\tdetail: Math.min(1, volume + 0.1)\n\t\t\t\t})\n\t\t\t\tbreak\n\n\t\t\tcase \"ArrowDown\":\n\t\t\t\tevent.preventDefault()\n\t\t\t\tdispatch({\n\t\t\t\t\ttype: MediaActionTypes.SET_VOLUME,\n\t\t\t\t\tdetail: Math.max(0, volume - 0.1)\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\t// Set up media element event listeners\n\tReact.useEffect(() => {\n\t\tconst mediaElement = context.mediaRef.current\n\t\tif (!mediaElement) return\n\n\t\tconst handlePlay = () => {\n\t\t\tdispatch({ type: MediaActionTypes.PLAY })\n\t\t\tonPlay?.()\n\t\t}\n\n\t\tconst handlePause = () => {\n\t\t\tdispatch({ type: MediaActionTypes.PAUSE })\n\t\t\tonPause?.()\n\t\t}\n\n\t\tconst handleEnded = () => {\n\t\t\tdispatch({ type: MediaActionTypes.PAUSE })\n\t\t\tonEnded?.()\n\t\t}\n\n\t\tconst handleTimeUpdate = () => {\n\t\t\tconst time = mediaElement.currentTime\n\t\t\tdispatch({ type: MediaActionTypes.SET_CURRENT_TIME, detail: time })\n\t\t\tonTimeUpdate?.(time)\n\t\t}\n\n\t\tconst handleVolumeChange = () => {\n\t\t\tconst vol = mediaElement.volume\n\t\t\tconst muted = mediaElement.muted\n\t\t\tdispatch({ type: MediaActionTypes.SET_VOLUME, detail: vol })\n\t\t\tdispatch({ type: muted ? MediaActionTypes.MUTE : MediaActionTypes.UNMUTE })\n\t\t\tonVolumeChange?.(vol)\n\t\t\tonMuted?.(muted)\n\t\t}\n\n\t\tconst handleLoadedMetadata = () => {\n\t\t\tdispatch({ type: MediaActionTypes.SET_DURATION, detail: mediaElement.duration })\n\t\t\tdispatch({ type: MediaActionTypes.SET_LOADING, detail: false })\n\t\t}\n\n\t\tconst handleError = () => {\n\t\t\tconst errorMessage = \"An error occurred while loading the media\"\n\t\t\tdispatch({ type: MediaActionTypes.SET_ERROR, detail: errorMessage })\n\t\t\tonMediaError?.(errorMessage)\n\t\t}\n\n\t\tconst handleLoadStart = () => {\n\t\t\tdispatch({ type: MediaActionTypes.SET_LOADING, detail: true })\n\t\t}\n\n\t\t// Add event listeners\n\t\tmediaElement.addEventListener(\"play\", handlePlay)\n\t\tmediaElement.addEventListener(\"pause\", handlePause)\n\t\tmediaElement.addEventListener(\"ended\", handleEnded)\n\t\tmediaElement.addEventListener(\"timeupdate\", handleTimeUpdate)\n\t\tmediaElement.addEventListener(\"volumechange\", handleVolumeChange)\n\t\tmediaElement.addEventListener(\"loadedmetadata\", handleLoadedMetadata)\n\t\tmediaElement.addEventListener(\"error\", handleError)\n\t\tmediaElement.addEventListener(\"loadstart\", handleLoadStart)\n\n\t\treturn () => {\n\t\t\tmediaElement.removeEventListener(\"play\", handlePlay)\n\t\t\tmediaElement.removeEventListener(\"pause\", handlePause)\n\t\t\tmediaElement.removeEventListener(\"ended\", handleEnded)\n\t\t\tmediaElement.removeEventListener(\"timeupdate\", handleTimeUpdate)\n\t\t\tmediaElement.removeEventListener(\"volumechange\", handleVolumeChange)\n\t\t\tmediaElement.removeEventListener(\"loadedmetadata\", handleLoadedMetadata)\n\t\t\tmediaElement.removeEventListener(\"error\", handleError)\n\t\t\tmediaElement.removeEventListener(\"loadstart\", handleLoadStart)\n\t\t}\n\t}, [dispatch, onPlay, onPause, onEnded, onTimeUpdate, onVolumeChange, onMuted, onMediaError])\n\n\tconst rootProps = {\n\t\t\"aria-labelledby\": context.labelId,\n\t\t\"aria-describedby\": context.descriptionId,\n\t\t\"aria-disabled\": disabled,\n\t\t\"data-disabled\": disabled ? \"\" : undefined,\n\t\t\"data-slot\": \"media-player\",\n\t\t\"data-state\": isFullscreen ? \"fullscreen\" : \"inline\",\n\t\tdir,\n\t\ttabIndex: disabled ? -1 : 0,\n\t\tclassName: cn(\n\t\t\t\"dark relative isolate flex flex-col overflow-hidden rounded-lg bg-background outline-none\",\n\t\t\t\"focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50\",\n\t\t\t\"data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n\t\t\t\"[&_video]:relative [&_video]:object-contain\",\n\t\t\t\"data-[state=fullscreen]:[&_video]:size-full\",\n\t\t\t\"[:fullscreen_&]:flex [:fullscreen_&]:h-full [:fullscreen_&]:max-h-screen [:fullscreen_&]:flex-col [:fullscreen_&]:justify-between\",\n\t\t\t// Mobile-first optimizations\n\t\t\tisTouchDevice && [\n\t\t\t\t\"touch-manipulation\", // Improves touch responsiveness\n\t\t\t\t\"select-none\", // Prevents text selection during gestures\n\t\t\t\t\"overscroll-contain\", // Prevents scroll chaining\n\t\t\t],\n\t\t\t// Enable hardware acceleration for smooth animations\n\t\t\t\"will-change-transform\",\n\t\t\t\"transform-gpu\",\n\t\t\tclassName\n\t\t),\n\t\tonKeyDown: handleKeyDown,\n\t\t...props\n\t}\n\n\treturn (\n\t\t<div ref={composeRefs(context.rootRef)} {...rootProps}>\n\t\t\t{children}\n\t\t</div>\n\t)\n}\n\n// Main MediaPlayer component with provider\nexport function MediaPlayerRoot(props: MediaPlayerRootProps) {\n\treturn (\n\t\t<MediaProvider>\n\t\t\t<MediaPlayerImpl {...props} />\n\t\t</MediaProvider>\n\t)\n}\n\nMediaPlayerRoot.displayName = \"MediaPlayerRoot\"\n","\"use client\"\n\nimport React from \"react\"\nimport { useMediaContext } from \"../context/media-context\"\n\nexport interface MediaPlayerVideoProps extends React.VideoHTMLAttributes<HTMLVideoElement> {\n\tasChild?: boolean\n}\n\nexport function MediaPlayerVideo({\n\tasChild = false,\n\tclassName,\n\tchildren,\n\t...props\n}: MediaPlayerVideoProps) {\n\tconst context = useMediaContext()\n\n\tif (asChild) {\n\t\t// When asChild is true, clone the child element and add our props\n\t\tconst child = React.Children.only(children) as React.ReactElement\n\t\treturn React.cloneElement(child, {\n\t\t\t...props,\n\t\t\tref: context.mediaRef,\n\t\t\t\"data-slot\": \"media-player-video\"\n\t\t} as any)\n\t}\n\n\treturn (\n\t\t<video\n\t\t\tref={context.mediaRef as React.RefObject<HTMLVideoElement>}\n\t\t\tdata-slot=\"media-player-video\"\n\t\t\tclassName={className}\n\t\t\t{...props}>\n\t\t\t{children}\n\t\t</video>\n\t)\n}\n\nMediaPlayerVideo.displayName = \"MediaPlayerVideo\"\n","\"use client\"\n\nimport React from \"react\"\nimport { useMediaContext, useMediaSelector } from \"../context/media-context\"\nimport { formatTime } from \"../lib/format-time\"\nimport { cn } from \"../lib/utils\"\n\nexport interface MediaPlayerTimeProps {\n\tvariant?: \"current\" | \"duration\" | \"remaining\" | \"current-duration\"\n\tclassName?: string\n\tasChild?: boolean\n\tchildren?: React.ReactNode\n}\n\nexport function MediaPlayerTime({\n\tvariant = \"current-duration\",\n\tclassName,\n\tasChild = false,\n\tchildren,\n\t...props\n}: MediaPlayerTimeProps) {\n\tconst context = useMediaContext()\n\tconst currentTime = useMediaSelector((state) => state.currentTime)\n\tconst duration = useMediaSelector((state) => state.duration)\n\n\tconst times = React.useMemo(() => {\n\t\tif (variant === \"remaining\") {\n\t\t\treturn {\n\t\t\t\tremaining: formatTime(Math.max(0, duration - currentTime))\n\t\t\t}\n\t\t}\n\n\t\tif (variant === \"duration\") {\n\t\t\treturn {\n\t\t\t\tduration: formatTime(duration)\n\t\t\t}\n\t\t}\n\n\t\tif (variant === \"current\") {\n\t\t\treturn {\n\t\t\t\tcurrent: formatTime(currentTime)\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tcurrent: formatTime(currentTime),\n\t\t\tduration: formatTime(duration)\n\t\t}\n\t}, [variant, currentTime, duration])\n\n\tconst timeProps = {\n\t\t\"data-slot\": \"media-player-time\",\n\t\t\"data-variant\": variant,\n\t\tdir: context.dir,\n\t\tclassName: cn(\"text-sm text-foreground/80 tabular-nums\", className),\n\t\t...props\n\t}\n\n\tif (variant !== \"current-duration\") {\n\t\tconst content = times[variant as keyof typeof times]\n\n\t\tif (asChild) {\n\t\t\tconst child = React.Children.only(children) as React.ReactElement\n\t\t\treturn React.cloneElement(child, timeProps as any, content)\n\t\t}\n\n\t\treturn <time {...timeProps}>{content}</time>\n\t}\n\n\tconst content = (\n\t\t<>\n\t\t\t<time>{times.current}</time>\n\t\t\t<span className=\"text-foreground/60\">/</span>\n\t\t\t<time>{times.duration}</time>\n\t\t</>\n\t)\n\n\tif (asChild) {\n\t\tconst child = React.Children.only(children) as React.ReactElement\n\t\treturn React.cloneElement(\n\t\t\tchild,\n\t\t\t{\n\t\t\t\t...timeProps,\n\t\t\t\tclassName: cn(\"flex items-center gap-1 text-foreground/80 text-sm\", className)\n\t\t\t} as any,\n\t\t\tcontent\n\t\t)\n\t}\n\n\treturn (\n\t\t<div\n\t\t\t{...timeProps}\n\t\t\tclassName={cn(\"flex items-center gap-1 text-foreground/80 text-sm\", className)}>\n\t\t\t{content}\n\t\t</div>\n\t)\n}\n\nMediaPlayerTime.displayName = \"MediaPlayerTime\"\n","\"use client\"\n\nimport React from \"react\"\nimport { useMediaContext, useMediaDispatch, MediaActionTypes } from \"../../../context/media-context\"\nimport { cn } from \"../../../lib/utils\"\nimport type { IconSet } from \"../../icons\"\n\nexport interface MinimalPlayButtonProps {\n isPlaying: boolean\n icons: IconSet\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\"\n className?: string\n}\n\nexport function MinimalPlayButton({\n isPlaying,\n icons,\n size = \"md\",\n className,\n}: MinimalPlayButtonProps) {\n const dispatch = useMediaDispatch()\n \n const handleClick = () => {\n dispatch({\n type: isPlaying ? MediaActionTypes.PAUSE : MediaActionTypes.PLAY\n })\n }\n\n const sizeClasses = {\n sm: \"h-10 w-10\",\n md: \"h-12 w-12 minimal-btn\",\n lg: \"h-16 w-16 minimal-btn-lg\",\n xl: \"h-20 w-20 minimal-btn-lg\",\n }\n\n const iconSizes = {\n sm: 27,\n md: 30,\n lg: 36,\n xl: 42,\n }\n\n const PlayIcon = icons.play\n const PauseIcon = icons.pause\n\n if (!PlayIcon || !PauseIcon) return null\n\n return (\n <button\n className={cn(\n \"minimal-btn\",\n sizeClasses[size],\n className\n )}\n onClick={handleClick}\n aria-label={isPlaying ? \"Pause\" : \"Play\"}\n >\n {isPlaying ? (\n <PauseIcon size={iconSizes[size]} />\n ) : (\n <PlayIcon size={iconSizes[size]} />\n )}\n </button>\n )\n}\n","\"use client\"\n\nimport React, { useRef, useState } from \"react\"\nimport { useMediaSelector, useMediaDispatch, MediaActionTypes } from \"../../../context/media-context\"\nimport { formatTime } from \"../../../lib/format-time\"\nimport { cn } from \"../../../lib/utils\"\n\nexport interface MinimalSeekBarProps {\n thumbnails?: string\n onSeek?: (time: number) => void\n className?: string\n}\n\nexport function MinimalSeekBar({\n thumbnails,\n onSeek,\n className,\n}: MinimalSeekBarProps) {\n const dispatch = useMediaDispatch()\n const currentTime = useMediaSelector((state) => state.currentTime)\n const duration = useMediaSelector((state) => state.duration)\n const buffered = useMediaSelector((state) => state.buffered)\n \n const [isDragging, setIsDragging] = useState(false)\n const [hoverTime, setHoverTime] = useState(0)\n const [hoverPosition, setHoverPosition] = useState(0)\n const seekBarRef = useRef<HTMLDivElement>(null)\n\n const progress = duration > 0 ? (currentTime / duration) * 100 : 0\n const bufferedProgress = buffered && buffered.length > 0 && duration > 0\n ? (buffered.end(buffered.length - 1) / duration) * 100\n : 0\n\n const handleSeek = (clientX: number) => {\n if (!seekBarRef.current || duration === 0) return\n \n const rect = seekBarRef.current.getBoundingClientRect()\n const position = Math.max(0, Math.min(1, (clientX - rect.left) / rect.width))\n const newTime = position * duration\n \n dispatch({\n type: MediaActionTypes.SEEK,\n detail: newTime\n })\n \n onSeek?.(newTime)\n }\n\n const handleMouseDown = (e: React.MouseEvent) => {\n e.preventDefault()\n setIsDragging(true)\n handleSeek(e.clientX)\n }\n\n const handleMouseMove = (e: React.MouseEvent) => {\n if (!seekBarRef.current || duration === 0) return\n \n const rect = seekBarRef.current.getBoundingClientRect()\n const position = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n const time = position * duration\n \n setHoverTime(time)\n setHoverPosition((e.clientX - rect.left))\n \n if (isDragging) {\n handleSeek(e.clientX)\n }\n }\n\n const handleMouseUp = () => {\n setIsDragging(false)\n }\n\n const handleMouseLeave = () => {\n setIsDragging(false)\n setHoverTime(0)\n }\n\n React.useEffect(() => {\n if (isDragging) {\n const handleGlobalMouseMove = (e: MouseEvent) => {\n handleSeek(e.clientX)\n }\n \n const handleGlobalMouseUp = () => {\n setIsDragging(false)\n }\n \n document.addEventListener(\"mousemove\", handleGlobalMouseMove)\n document.addEventListener(\"mouseup\", handleGlobalMouseUp)\n \n return () => {\n document.removeEventListener(\"mousemove\", handleGlobalMouseMove)\n document.removeEventListener(\"mouseup\", handleGlobalMouseUp)\n }\n }\n }, [isDragging])\n\n return (\n <div className={cn(\"group relative\", className)}>\n {/* Preview Tooltip */}\n {hoverTime > 0 && (\n <div\n className=\"pointer-events-none absolute bottom-full z-50 mb-2\"\n style={{ left: `${hoverPosition}px`, transform: \"translateX(-50%)\" }}\n >\n {thumbnails && (\n <div className=\"mb-1 rounded bg-black/90 p-1\">\n <div className=\"h-18 w-32 rounded bg-gray-800\" />\n </div>\n )}\n <div className=\"whitespace-nowrap rounded bg-black/90 px-2 py-1 text-white text-xs\">\n {formatTime(hoverTime)}\n </div>\n </div>\n )}\n\n {/* Seek Bar */}\n <div\n ref={seekBarRef}\n className=\"minimal-seekbar\"\n onMouseDown={handleMouseDown}\n onMouseMove={handleMouseMove}\n onMouseUp={handleMouseUp}\n onMouseLeave={handleMouseLeave}\n >\n {/* Buffered Progress */}\n <div\n className=\"minimal-seekbar-buffered\"\n style={{ width: `${bufferedProgress}%` }}\n />\n\n {/* Progress */}\n <div\n className=\"minimal-seekbar-progress\"\n style={{ width: `${progress}%` }}\n />\n\n {/* Thumb */}\n <div\n className={cn(\n \"minimal-seekbar-thumb\",\n isDragging && \"active\"\n )}\n style={{ left: `${progress}%` }}\n />\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport React, { useState } from \"react\"\nimport { useMediaSelector, useMediaDispatch, MediaActionTypes } from \"../../../context/media-context\"\nimport { cn } from \"../../../lib/utils\"\nimport type { IconSet } from \"../../icons\"\n\nexport interface MinimalVolumeControlProps {\n icons: IconSet\n className?: string\n}\n\nexport function MinimalVolumeControl({\n icons,\n className,\n}: MinimalVolumeControlProps) {\n const dispatch = useMediaDispatch()\n const volume = useMediaSelector((state) => state.volume)\n const isMuted = useMediaSelector((state) => state.isMuted)\n const [isExpanded, setIsExpanded] = useState(false)\n\n const handleVolumeChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const newVolume = parseFloat(e.target.value)\n dispatch({\n type: MediaActionTypes.SET_VOLUME,\n detail: newVolume\n })\n }\n\n const handleMuteToggle = () => {\n dispatch({\n type: MediaActionTypes.TOGGLE_MUTE\n })\n }\n\n const VolumeIcon = isMuted || volume === 0 ? icons.volumeMuted : icons.volume\n\n if (!VolumeIcon) return null\n\n return (\n <div\n className={cn(\n \"minimal-volume-group flex items-center gap-2\",\n className\n )}\n onMouseEnter={() => setIsExpanded(true)}\n onMouseLeave={() => setIsExpanded(false)}\n >\n {/* Volume Button */}\n <button\n className=\"minimal-btn inline-flex h-8 w-8 items-center justify-center rounded-full border border-white/20 bg-white/10 text-white transition-all duration-150 hover:border-white/30 hover:bg-white/20\"\n onClick={handleMuteToggle}\n aria-label={isMuted ? \"Unmute\" : \"Mute\"}\n >\n <VolumeIcon size={18} />\n </button>\n\n {/* Volume Slider */}\n <div\n className={cn(\n \"overflow-hidden transition-all duration-250\",\n isExpanded ? \"w-20 opacity-100\" : \"w-0 opacity-0\"\n )}\n >\n <input\n type=\"range\"\n min=\"0\"\n max=\"1\"\n step=\"0.01\"\n value={isMuted ? 0 : volume}\n onChange={handleVolumeChange}\n className=\"minimal-volume-slider h-1 w-full cursor-pointer appearance-none rounded-full bg-white/20\"\n style={{\n background: `linear-gradient(to right, rgb(59 130 246) 0%, rgb(59 130 246) ${(isMuted ? 0 : volume) * 100}%, rgba(255,255,255,0.2) ${(isMuted ? 0 : volume) * 100}%, rgba(255,255,255,0.2) 100%)`\n }}\n />\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { MediaPlayerPlay } from \"../../media-player-play\"\nimport { MediaPlayerSeek } from \"../../media-player-seek\"\nimport { MediaPlayerTime } from \"../../media-player-time\"\nimport { MediaPlayerVolume } from \"../../media-player-volume\"\nimport { MediaPlayerFullscreen } from \"../../media-player-fullscreen\"\nimport { MinimalPlayButton } from \"./MinimalPlayButton\"\nimport { MinimalSeekBar } from \"./MinimalSeekBar\"\nimport { MinimalVolumeControl } from \"./MinimalVolumeControl\"\nimport { cn } from \"../../../lib/utils\"\nimport type { IconSet } from \"../../icons\"\n\nexport interface MinimalControlsProps {\n visible: boolean\n icons: IconSet\n isPlaying: boolean\n showQualitySelector?: boolean\n showSpeedControl?: boolean\n qualities?: Array<{\n src: string\n quality: string\n default?: boolean\n }>\n thumbnails?: string\n onUserInteractionStart?: () => void\n onUserInteractionEnd?: () => void\n onSeek?: (time: number) => void\n}\n\nexport function MinimalControls({\n visible,\n icons,\n isPlaying,\n showQualitySelector,\n showSpeedControl,\n qualities,\n thumbnails,\n onUserInteractionStart,\n onUserInteractionEnd,\n onSeek,\n}: MinimalControlsProps) {\n return (\n <div\n className={cn(\n \"minimal-control-bar\",\n \"absolute right-0 bottom-0 left-0 z-40\",\n \"px-6 py-3 transition-all duration-200\",\n visible ? \"minimal-controls-visible\" : \"minimal-controls-hidden\"\n )}\n data-hidden={!visible}\n onMouseDown={onUserInteractionStart}\n onMouseUp={onUserInteractionEnd}\n onTouchStart={onUserInteractionStart}\n onTouchEnd={onUserInteractionEnd}\n >\n {/* Seek Bar - Top of controls */}\n <div className=\"mb-2\">\n <MinimalSeekBar\n thumbnails={thumbnails}\n onSeek={onSeek}\n />\n </div>\n\n {/* Main Controls Row */}\n <div className=\"flex items-center justify-between gap-3\">\n {/* Left Side Controls */}\n <div className=\"flex items-center gap-3\">\n {/* Play/Pause Button */}\n <MinimalPlayButton\n isPlaying={isPlaying}\n icons={icons}\n />\n\n {/* Volume Control */}\n <MinimalVolumeControl\n icons={icons}\n />\n\n {/* Time Display */}\n <div className=\"minimal-time select-none font-mono text-sm text-white/90\">\n <MediaPlayerTime variant=\"current\" />\n <span className=\"mx-1 text-white/60\">/</span>\n <MediaPlayerTime variant=\"duration\" />\n </div>\n </div>\n\n {/* Right Side Controls */}\n <div className=\"flex items-center gap-2\">\n {/* Quality Selector */}\n {showQualitySelector && qualities && qualities.length > 1 && (\n <button\n className=\"minimal-btn w-auto px-3 font-medium text-xs\"\n title=\"Quality\"\n >\n {qualities.find(q => q.default)?.quality || qualities[0]?.quality || 'Auto'}\n </button>\n )}\n\n {/* Speed Control */}\n {showSpeedControl && (\n <button\n className=\"minimal-btn w-auto px-3 font-medium text-xs\"\n title=\"Playback Speed\"\n >\n 1x\n </button>\n )}\n\n {/* Settings */}\n {icons.settings && (showQualitySelector || showSpeedControl) && (\n <button className=\"minimal-btn\" title=\"Settings\">\n <icons.settings size={18} />\n </button>\n )}\n\n {/* Fullscreen Button */}\n <button\n className=\"minimal-btn\"\n title=\"Toggle Fullscreen\"\n onClick={() => {\n // This would need to be connected to fullscreen logic\n const elem = document.documentElement\n if (!document.fullscreenElement) {\n elem.requestFullscreen?.()\n } else {\n document.exitFullscreen?.()\n }\n }}\n >\n {document.fullscreenElement ? (\n icons.exitFullscreen && <icons.exitFullscreen size={18} />\n ) : (\n icons.fullscreen && <icons.fullscreen size={18} />\n )}\n </button>\n </div>\n </div>\n </div>\n )\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { cn } from \"../../../lib/utils\"\nimport type { IconSet } from \"../../icons\"\n\nexport interface MinimalOverlayProps {\n visible: boolean\n showCenterButton?: boolean\n isPlaying?: boolean\n icons: IconSet\n onPlayPause?: () => void\n className?: string\n}\n\nexport function MinimalOverlay({\n visible,\n showCenterButton = false,\n isPlaying = false,\n icons,\n onPlayPause,\n className,\n}: MinimalOverlayProps) {\n if (!visible || !showCenterButton) return null\n\n const PlayIcon = icons.play\n const PauseIcon = icons.pause\n\n if (!PlayIcon || !PauseIcon) return null\n\n return (\n <div\n className={cn(\n \"absolute inset-0 z-30 flex items-center justify-center\",\n \"bg-black/20 transition-opacity duration-200\",\n className\n )}\n onClick={onPlayPause}\n >\n <button\n className={cn(\n \"minimal-center-play\",\n \"h-20 w-20 rounded-full\",\n \"flex items-center justify-center\",\n \"text-white\",\n \"transition-all duration-200\",\n \"hover:scale-110\",\n \"active:scale-95\"\n )}\n onClick={(e) => {\n e.stopPropagation()\n onPlayPause?.()\n }}\n aria-label={isPlaying ? \"Pause\" : \"Play\"}\n >\n {isPlaying ? (\n <PauseIcon size={48} />\n ) : (\n <PlayIcon size={48} className=\"ml-1\" />\n )}\n </button>\n </div>\n )\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { cn } from \"../../../lib/utils\"\n\nexport interface MinimalLoadingProps {\n icon?: React.FC<{ size?: number; className?: string }>\n className?: string\n}\n\nexport function MinimalLoading({\n icon: LoadingIcon,\n className,\n}: MinimalLoadingProps) {\n return (\n <div\n className={cn(\n \"absolute inset-0 z-40 flex items-center justify-center\",\n \"bg-black/60 backdrop-blur-sm\",\n className\n )}\n >\n <div className=\"text-white\">\n {LoadingIcon ? (\n <LoadingIcon size={48} className=\"animate-spin\" />\n ) : (\n <div className=\"minimal-spinner h-12 w-12 animate-spin rounded-full border-3 border-white/20 border-t-white\" />\n )}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { SVGProps, memo } from 'react'\n\nconst BackwardIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24' {...props}>\n <path\n fill='currentColor'\n d='M3 2.25a1 1 0 0 0-1 1V9a1 1 0 0 0 1 1h5.25a1 1 0 0 0 0-2H4.863c.985-1.179 2.208-2.113 3.682-2.57a9.435 9.435 0 0 1 6.106.16c1.981.738 3.81 2.232 4.722 3.894a1 1 0 1 0 1.754-.961c-1.175-2.143-3.415-3.927-5.778-4.807a11.435 11.435 0 0 0-7.395-.196C6.378 4.008 5.068 4.9 4 5.979V3.25a1 1 0 0 0-1-1ZM9.75 12a1 1 0 0 0-1.762-.647l-.222.265c-.515.623-1.078 1.303-2.28 2.024a1 1 0 1 0 1.029 1.716c.483-.29.889-.582 1.235-.865V20a1 1 0 0 0 2 0v-8Zm6.5-1c-1.386 0-2.4.635-3.008 1.661c-.564.95-.742 2.161-.742 3.339s.178 2.39.742 3.339C13.85 20.365 14.864 21 16.25 21s2.4-.635 3.008-1.661c.564-.95.742-2.161.742-3.339s-.178-2.39-.742-3.339C18.65 11.635 17.636 11 16.25 11Zm-1.75 5c0-1.031.166-1.82.461-2.318c.251-.422.613-.682 1.289-.682c.676 0 1.038.26 1.288.682c.296.498.462 1.287.462 2.318c0 1.031-.166 1.82-.462 2.318c-.25.422-.612.682-1.288.682s-1.038-.26-1.289-.682c-.295-.498-.461-1.287-.461-2.318Z'></path>\n </svg>\n)\n\nexport default BackwardIcon\n","import * as React from 'react'\nimport { SVGProps, memo } from 'react'\n\nconst CameraIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n width={32}\n height={32}\n viewBox='0 0 24 24'\n style={{ width: '100%', height: '100%' }}\n {...props}>\n <path\n fill='currentColor'\n d='M12 18q2.075 0 3.538-1.462Q17 15.075 17 13q0-2.075-1.462-3.538Q14.075 8 12 8 9.925 8 8.463 9.462 7 10.925 7 13q0 2.075 1.463 3.538Q9.925 18 12 18Zm0-2q-1.25 0-2.125-.875T9 13q0-1.25.875-2.125T12 10q1.25 0 2.125.875T15 13q0 1.25-.875 2.125T12 16Zm6-6q.425 0 .712-.288Q19 9.425 19 9t-.288-.713Q18.425 8 18 8t-.712.287Q17 8.575 17 9t.288.712Q17.575 10 18 10ZM4 21q-.825 0-1.412-.587Q2 19.825 2 19V7q0-.825.588-1.412Q3.175 5 4 5h3.15L8.7 3.325q.15-.15.337-.238Q9.225 3 9.425 3h5.15q.2 0 .388.087.187.088.337.238L16.85 5H20q.825 0 1.413.588Q22 6.175 22 7v12q0 .825-.587 1.413Q20.825 21 20 21Zm16-2V7h-4.05l-1.825-2h-4.25L8.05 7H4v12Zm-8-6Z'\n />\n </svg>\n)\n\nconst Memo = CameraIcon\nexport default Memo\n","import * as React from 'react'\nimport { SVGProps, memo } from 'react'\n\nconst ForwardIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24' {...props}>\n <path\n fill='currentColor'\n d='M21 2.25a1 1 0 0 1 1 1V9a1 1 0 0 1-1 1h-5.25a1 1 0 0 1 0-2h3.387c-.985-1.179-2.208-2.113-3.682-2.57a9.435 9.435 0 0 0-6.106.16c-1.981.738-3.81 2.232-4.722 3.894a1 1 0 0 1-1.754-.961C4.048 6.38 6.288 4.596 8.652 3.716a11.435 11.435 0 0 1 7.394-.196c1.576.488 2.886 1.38 3.954 2.459V3.25a1 1 0 0 1 1-1ZM9.095 11.061A1 1 0 0 1 9.75 12v8a1 1 0 0 1-2 0v-5.507c-.346.283-.752.575-1.235.864a1 1 0 1 1-1.03-1.715c1.203-.721 1.766-1.4 2.281-2.024c.074-.09.148-.178.222-.265a1 1 0 0 1 1.107-.292Zm4.147 1.6C13.85 11.635 14.864 11 16.25 11s2.4.635 3.008 1.661c.564.95.742 2.161.742 3.339s-.178 2.39-.742 3.339C18.65 20.365 17.636 21 16.25 21s-2.4-.636-3.008-1.661c-.564-.95-.742-2.161-.742-3.339s.178-2.39.742-3.339Zm1.72 1.021c-.296.498-.462 1.287-.462 2.318c0 1.031.166 1.82.461 2.318c.251.422.613.682 1.289.682c.676 0 1.038-.26 1.288-.682c.296-.498.462-1.287.462-2.318c0-1.031-.166-1.82-.462-2.318c-.25-.422-.612-.682-1.288-.682s-1.038.26-1.289.682Z'></path>\n </svg>\n)\n\nexport default ForwardIcon\n","import * as React from 'react'\nimport { SVGProps, memo } from 'react'\n\nconst FullscreenEnterIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n data-uia='control-fullscreen-enter'\n style={{ width: '100%', height: '100%' }}\n {...props}>\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M0 5a2 2 0 0 1 2-2h7v2H2v4H0V5Zm22 0h-7V3h7a2 2 0 0 1 2 2v4h-2V5ZM2 15v4h7v2H2a2 2 0 0 1-2-2v-4h2Zm20 4v-4h2v4a2 2 0 0 1-2 2h-7v-2h7Z'\n fill='currentColor'\n />\n </svg>\n)\n\nexport default FullscreenEnterIcon\n","import * as React from 'react'\nimport { SVGProps, memo } from 'react'\n\nconst FullscreenExitIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n data-uia='control-fullscreen-exit'\n style={{ width: '100%', height: '100%' }}\n {...props}>\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M24 8h-5V3h-2v7h7V8ZM0 16h5v5h2v-7H0v2Zm7-6H0V8h5V3h2v7Zm12 11v-5h5v-2h-7v7h2Z'\n fill='currentColor'\n />\n </svg>\n)\n\nexport default FullscreenExitIcon\n","import * as React from 'react'\nimport { SVGProps, memo } from 'react'\n\nconst LoadingIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className='svg-icon-nfplayerPlay'\n style={{ width: '100%', height: '100%' }}\n {...props}>\n <path\n fill='currentColor'\n d='M12 2A10 10 0 1 0 22 12A10 10 0 0 0 12 2Zm0 18a8 8 0 1 1 8-8A8 8 0 0 1 12 20Z'\n opacity='.5'\n />\n <path fill='currentColor' d='M20 12h2A10 10 0 0 0 12 2V4A8 8 0 0 1 20 12Z'>\n <animateTransform\n attributeName='transform'\n dur='1s'\n from='0 12 12'\n repeatCount='indefinite'\n to='360 12 12'\n type='rotate'\n />\n </path>\n </svg>\n)\n\nexport default LoadingIcon\n","import * as React from 'react'\nimport { SVGProps, memo } from 'react'\n\nconst PauseIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className='svg-icon-nfplayerPause'\n style={{ width: '100%', height: '100%' }}\n {...props}>\n <path\n fillRule='evenodd'\n clipRule='evenodd'\n d='M4.5 3a.5.5 0 0 0-.5.5v17a.5.5 0 0 0 .5.5h5a.5.5 0 0 0 .5-.5v-17a.5.5 0 0 0-.5-.5h-5Zm10 0a.5.5 0 0 0-.5.5v17a.5.5 0 0 0 .5.5h5a.5.5 0 0 0 .5-.5v-17a.5.5 0 0 0-.5-.5h-5Z'\n fill='currentColor'\n />\n </svg>\n)\n\nexport default PauseIcon\n","import * as React from 'react'\nimport { SVGProps, memo } from 'react'\n\nconst PlayIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className='svg-icon-nfplayerPlay'\n style={{ width: '100%', height: '100%' }}\n {...props}>\n <path\n d='M4 2.691a1 1 0 0 1 1.482-.876l16.925 9.309a1 1 0 0 1 0 1.752L5.482 22.185A1 1 0 0 1 4 21.309V2.69Z'\n fill='currentColor'\n />\n </svg>\n)\n\nexport default PlayIcon\n","import * as React from 'react'\nimport { SVGProps } from 'react'\n\nconst SettingsIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg width='24' height='24' viewBox='0 0 24 24' {...props}>\n <path\n fill='currentColor'\n d='M2 12c0-.865.11-1.703.316-2.504A3 3 0 0 0 4.99 4.867a9.99 9.99 0 0 1 4.335-2.505a3 3 0 0 0 5.348 0a9.99 9.99 0 0 1 4.335 2.505a3 3 0 0 0 2.675 4.63a10.036 10.036 0 0 1 0 5.007a3 3 0 0 0-2.675 4.629a9.99 9.99 0 0 1-4.335 2.505a3 3 0 0 0-5.348 0a9.99 9.99 0 0 1-4.335-2.505a3 3 0 0 0-2.675-4.63A10.056 10.056 0 0 1 2 12zm4.804 3c.63 1.091.81 2.346.564 3.524c.408.29.842.541 1.297.75A4.993 4.993 0 0 1 12 18c1.26 0 2.438.471 3.335 1.274c.455-.209.889-.46 1.297-.75A4.993 4.993 0 0 1 17.196 15a4.993 4.993 0 0 1 2.77-2.25a8.126 8.126 0 0 0 0-1.5A4.993 4.993 0 0 1 17.195 9a4.993 4.993 0 0 1-.564-3.524a7.989 7.989 0 0 0-1.297-.75A4.993 4.993 0 0 1 12 6a4.993 4.993 0 0 1-3.335-1.274a7.99 7.99 0 0 0-1.297.75A4.993 4.993 0 0 1 6.804 9a4.993 4.993 0 0 1-2.77 2.25a8.126 8.126 0 0 0 0 1.5A4.993 4.993 0 0 1 6.805 15zM12 15a3 3 0 1 1 0-6a3 3 0 0 1 0 6zm0-2a1 1 0 1 0 0-2a1 1 0 0 0 0 2z'></path>\n </svg>\n)\n\nexport default SettingsIcon\n","import * as React from 'react'\nimport { SVGProps, memo } from 'react'\n\nconst SubtitleIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg\n width='24'\n height='24'\n viewBox='0 0 24 24'\n fill='none'\n xmlns='http://www.w3.org/2000/svg'\n className='Hawkins-Icon Hawkins-Icon-Standard'\n style={{ width: '100%', height: '100%' }}\n {...props}>\n <path\n fill='currentColor'\n 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-2zm0 14H4V6h16v12zM6 10h2v2H6zm0 4h8v2H6zm10 0h2v2h-2zm-6-4h8v2h-8z'\n />\n </svg>\n)\n\nexport default SubtitleIcon\n","import * as React from 'react'\nimport { SVGProps, memo } from 'react'\n\nconst VolumeMutedIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24' {...props}>\n <g fill='currentColor'>\n <path\n fillRule='evenodd'\n d='M20.515 6.316a.75.75 0 0 1 .991.376c.468 1.035.994 2.768.994 5.308c0 2.192-.392 3.783-.8 4.844a7.72 7.72 0 0 1-.572 1.195a4.73 4.73 0 0 1-.289.425l-.007.01l-.003.003l-.002.002L20.25 18l.576.48a.75.75 0 0 1-1.156-.956l.003-.004l.031-.041a3.27 3.27 0 0 0 .137-.212c.12-.199.288-.516.459-.961c.342-.889.7-2.298.7-4.306c0-2.326-.48-3.849-.86-4.692a.75.75 0 0 1 .375-.992Zm-2.101 2.95a.75.75 0 0 1 .887.582c.11.53.199 1.24.199 2.152c0 1.11-.132 1.923-.273 2.474a5.172 5.172 0 0 1-.203.631a2.977 2.977 0 0 1-.102.228l-.01.018l-.003.007l-.002.003v.002s-.001.001-.657-.363l.656.364a.75.75 0 0 1-1.317-.719l.005-.01a1.85 1.85 0 0 0 .038-.087a3.66 3.66 0 0 0 .141-.447c.11-.424.227-1.111.227-2.101a9.17 9.17 0 0 0-.168-1.848a.75.75 0 0 1 .582-.886Z'\n clipRule='evenodd'></path>\n <path d='M21.78 3.53a.75.75 0 0 0-1.06-1.06l-4.45 4.449a11.265 11.265 0 0 0-.193-1.39c-.172-.788-.477-1.473-1.116-1.923a3.066 3.066 0 0 0-.769-.39c-.818-.28-1.631-.057-2.457.345c-.814.395-1.8 1.046-3.032 1.857l-.267.176c-.447.295-.602.394-.76.464a2.17 2.17 0 0 1-.535.16c-.171.03-.354.032-.89.032h-.162c-1.217 0-2.062-.001-2.814.347A3.962 3.962 0 0 0 1.548 8.22c-.392.729-.438 1.491-.504 2.575l-.008.13C1.014 11.294 1 11.658 1 12c0 .342.014.706.036 1.074l.008.13c.066 1.084.112 1.846.504 2.575a3.962 3.962 0 0 0 1.727 1.624c.61.283 1.283.336 2.166.345L2.72 20.47a.75.75 0 1 0 1.06 1.06l18-18ZM16.5 12a.75.75 0 0 0-1.255-.554l-.071.074l-6 6.274A.778.778 0 0 0 9.34 19c1.039.68 1.899 1.225 2.631 1.549c.743.328 1.48.489 2.222.236a3.08 3.08 0 0 0 .769-.391c.706-.497 1.005-1.28 1.167-2.18c.159-.884.213-2.056.281-3.516l.003-.058a68.23 68.23 0 0 0 .088-2.64Z'></path>\n </g>\n </svg>\n)\n\nexport default VolumeMutedIcon\n","import * as React from 'react'\nimport { SVGProps, memo } from 'react'\n\nconst VolumeTwoIcon = (props: SVGProps<SVGSVGElement>) => (\n <svg xmlns='http://www.w3.org/2000/svg' width='1em' height='1em' viewBox='0 0 24 24' {...props}>\n <g fill='currentColor'>\n <path d='M2.003 11.716c.037-1.843.056-2.764.668-3.552a3.18 3.18 0 0 1 .413-.431c.752-.636 1.746-.636 3.733-.636c.71 0 1.065 0 1.403-.092c.07-.02.14-.042.209-.067c.33-.121.627-.33 1.22-.746c2.338-1.645 3.508-2.467 4.489-2.11c.188.069.37.168.533.29c.848.635.913 2.115 1.042 5.073a70.58 70.58 0 0 1 .08 2.555c0 .521-.032 1.46-.08 2.555c-.13 2.958-.194 4.438-1.042 5.073a2.109 2.109 0 0 1-.533.29c-.982.357-2.15-.465-4.49-2.11c-.592-.416-.889-.625-1.22-.746a2.61 2.61 0 0 0-.208-.067c-.338-.092-.693-.092-1.403-.092c-1.987 0-2.98 0-3.733-.636a3.145 3.145 0 0 1-.413-.43c-.612-.79-.63-1.71-.668-3.553a14.06 14.06 0 0 1 0-.569Z'></path>\n <path\n fillRule='evenodd'\n d='M19.49 5.552a.66.66 0 0 1 .97.094l-.529.471l.53-.47l.002.002l.003.004l.007.009a2.572 2.572 0 0 1 .079.112c.047.071.111.173.186.305c.149.264.339.652.526 1.171C21.64 8.291 22 9.851 22 12c0 2.15-.36 3.71-.736 4.75c-.187.52-.377.907-.526 1.172a4.655 4.655 0 0 1-.265.417l-.007.009l-.003.003l-.001.002s-.001.001-.531-.47l.53.471a.66.66 0 0 1-.971.094a.77.77 0 0 1-.09-1.035l.03-.041c.026-.04.07-.11.125-.207a6.28 6.28 0 0 0 .422-.943c.314-.871.644-2.253.644-4.222c0-1.97-.33-3.35-.644-4.222a6.28 6.28 0 0 0-.422-.942a3.152 3.152 0 0 0-.157-.253m-1.641 1.833c.333-.197.753-.07.938.286l-.603.357l.603-.357l.001.002l.002.003l.003.007l.01.018l.024.053c.018.042.042.099.07.17c.053.145.12.35.185.62c.13.54.252 1.337.252 2.425c0 1.089-.122 1.886-.252 2.426c-.065.27-.132.475-.186.619a3.04 3.04 0 0 1-.094.223l-.009.018l-.003.007l-.002.003v.002s-.001.001-.604-.356l.603.357c-.185.355-.605.483-.938.286c-.33-.196-.45-.638-.272-.991l.004-.01l.035-.085c.032-.086.08-.23.13-.438c.1-.416.208-1.09.208-2.06c0-.971-.108-1.645-.208-2.06a3.757 3.757 0 0 0-.165-.524l-.004-.01a.76.76 0 0 1 .272-.991Z'\n clipRule='evenodd'></path>\n </g>\n </svg>\n)\n\nexport default VolumeTwoIcon\n","\"use client\"\n\nimport React from \"react\"\nimport BackwardIcon from \"./svg-icons/BackwardIcon\"\nimport CameraIcon from \"./svg-icons/CameraIcon\"\nimport ForwardIcon from \"./svg-icons/ForwardIcon\"\nimport FullscreenEnterIcon from \"./svg-icons/FullscreenEnterIcon\"\nimport FullscreenExitIcon from \"./svg-icons/FullscreenExitIcon\"\nimport LoadingIcon from \"./svg-icons/LoadingIcon\"\nimport PauseIcon from \"./svg-icons/PauseIcon\"\nimport PlayIcon from \"./svg-icons/PlayIcon\"\nimport PlaybackSpeedIcon from \"./svg-icons/PlaybackSpeedIcon\"\nimport SettingsIcon from \"./svg-icons/SettingsIcon\"\nimport SubtitleIconSVG from \"./svg-icons/SubtitleIcon\"\nimport VolumeMutedIcon from \"./svg-icons/VolumeMutedIcon\"\nimport VolumeOneIcon from \"./svg-icons/VolumeOneIcon\"\nimport VolumeThreeIcon from \"./svg-icons/VolumeThreeIcon\"\nimport VolumeTwoIcon from \"./svg-icons/VolumeTwoIcon\"\n\nexport interface IconProps {\n\tsize?: number\n\tclassName?: string\n\tcolor?: string\n}\n\n// Minimal Play Icon\nexport const MinimalPlayIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <PlayIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Pause Icon\nexport const MinimalPauseIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <PauseIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Volume Icon\nexport const MinimalVolumeIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <VolumeTwoIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Volume Muted Icon\nexport const MinimalVolumeMutedIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <VolumeMutedIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Fullscreen Icon\nexport const MinimalFullscreenIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <FullscreenEnterIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Exit Fullscreen Icon\nexport const MinimalExitFullscreenIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <FullscreenExitIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Settings Icon\nexport const MinimalSettingsIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <SettingsIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Loading Spinner\nexport const MinimalSpinner: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => (\n\t<LoadingIcon\n\t\twidth={size}\n\t\theight={size}\n\t\tclassName={`animate-spin ${className}`}\n\t\tstyle={{ color }}\n\t/>\n)\n\n// Minimal Forward Icon (using backward design)\nexport const MinimalForwardIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <BackwardIcon width={size} height={size} className={className} style={{ color }} />\n\n// Minimal Backward Icon\nexport const MinimalBackwardIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <ForwardIcon width={size} height={size} className={className} style={{ color }} />\n\n// Forward 10 seconds icon\nexport const MinimalForward10Icon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <ForwardIcon width={size} height={size} className={className} style={{ color }} />\n\n// Backward 10 seconds icon\nexport const MinimalBackward10Icon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <BackwardIcon width={size} height={size} className={className} style={{ color }} />\n\n// Subtitle/Caption icon\nexport const MinimalSubtitleIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <SubtitleIconSVG width={size} height={size} className={className} style={{ color }} />\n\n// Screenshot/Camera icon\nexport const MinimalScreenshotIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <CameraIcon width={size} height={size} className={className} style={{ color }} />\n\n// Speed icon\nexport const MinimalSpeedIcon: React.FC<IconProps> = ({\n\tsize = 24,\n\tclassName = \"\",\n\tcolor = \"currentColor\"\n}) => <PlaybackSpeedIcon width={size} height={size} className={className} style={{ color }} />\n\n// Icon Set Type\nexport interface IconSet {\n\tplay?: React.FC<IconProps>\n\tpause?: React.FC<IconProps>\n\tvolume?: React.FC<IconProps>\n\tvolumeMuted?: React.FC<IconProps>\n\tfullscreen?: React.FC<IconProps>\n\texitFullscreen?: React.FC<IconProps>\n\tsettings?: React.FC<IconProps>\n\tforward?: React.FC<IconProps>\n\tbackward?: React.FC<IconProps>\n\tspinner?: React.FC<IconProps>\n\tsubtitle?: React.FC<IconProps>\n}\n\n// Default Icon Set\nexport const defaultMinimalIcons: IconSet = {\n\tplay: MinimalPlayIcon,\n\tpause: MinimalPauseIcon,\n\tvolume: MinimalVolumeIcon,\n\tvolumeMuted: MinimalVolumeMutedIcon,\n\tfullscreen: MinimalFullscreenIcon,\n\texitFullscreen: MinimalExitFullscreenIcon,\n\tsettings: MinimalSettingsIcon,\n\tforward: MinimalForwardIcon,\n\tbackward: MinimalBackwardIcon,\n\tspinner: MinimalSpinner,\n\tsubtitle: MinimalSubtitleIcon\n}\n","\"use client\"\n\nimport React, { useCallback, useEffect, useRef, useState } from \"react\"\nimport { MediaPlayerRoot } from \"../../media-player-root\"\nimport { MediaPlayerVideo } from \"../../media-player-video\"\nimport { MinimalControls } from \"./MinimalControls\"\nimport { MinimalOverlay } from \"./MinimalOverlay\"\nimport { MinimalLoading } from \"./MinimalLoading\"\nimport { cn } from \"../../../lib/utils\"\nimport type { IconSet } from \"../../icons\"\nimport { defaultMinimalIcons } from \"../../icons\"\n\nexport interface MinimalMediaPlayerProps {\n src: string | string[]\n poster?: string\n autoPlay?: boolean\n muted?: boolean\n loop?: boolean\n autoHideControls?: boolean\n hideDelay?: number\n theme?: \"dark\" | \"light\" | \"transparent\"\n customIcons?: IconSet\n showCenterPlayButton?: boolean\n showLoadingSpinner?: boolean\n className?: string\n onPlay?: () => void\n onPause?: () => void\n onEnded?: () => void\n onTimeUpdate?: (currentTime: number) => void\n onVolumeChange?: (volume: number) => void\n onSeek?: (time: number) => void\n onError?: (error: Error) => void\n watermark?: {\n src: string\n position?: \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n opacity?: number\n size?: \"small\" | \"medium\" | \"large\"\n }\n qualities?: Array<{\n src: string\n quality: string\n default?: boolean\n }>\n showQualitySelector?: boolean\n showSpeedControl?: boolean\n thumbnails?: string\n}\n\nexport function MinimalMediaPlayer({\n src,\n poster,\n autoPlay = false,\n muted = false,\n loop = false,\n autoHideControls = true,\n hideDelay = 2500,\n theme = \"dark\",\n customIcons,\n showCenterPlayButton = true,\n showLoadingSpinner = true,\n className,\n onPlay,\n onPause,\n onEnded,\n onTimeUpdate,\n onVolumeChange,\n onSeek,\n onError,\n watermark,\n qualities,\n showQualitySelector = false,\n showSpeedControl = false,\n thumbnails,\n}: MinimalMediaPlayerProps) {\n const [controlsVisible, setControlsVisible] = useState(true)\n const [isPlaying, setIsPlaying] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n const hideTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n const containerRef = useRef<HTMLDivElement | null>(null)\n const [isHovered, setIsHovered] = useState(false)\n const [userInteracting, setUserInteracting] = useState(false)\n\n // Merge default icons with custom icons\n const icons = { ...defaultMinimalIcons, ...customIcons }\n\n // Auto-hide controls logic\n const resetHideTimer = () => {\n if (!autoHideControls) return\n\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current)\n }\n setControlsVisible(true)\n\n if (!userInteracting && isPlaying) {\n hideTimeoutRef.current = setTimeout(() => {\n setControlsVisible(false)\n }, hideDelay)\n }\n }\n\n // Handle mouse movement\n const handleMouseMove = () => {\n resetHideTimer()\n }\n\n // Handle mouse enter/leave\n const handleMouseEnter = () => {\n setIsHovered(true)\n setControlsVisible(true)\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current)\n }\n }\n\n const handleMouseLeave = () => {\n setIsHovered(false)\n if (isPlaying && autoHideControls && !userInteracting) {\n hideTimeoutRef.current = setTimeout(() => {\n setControlsVisible(false)\n }, 500)\n }\n }\n\n // Handle user interaction\n const handleUserInteractionStart = () => {\n setUserInteracting(true)\n setControlsVisible(true)\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current)\n }\n }\n\n const handleUserInteractionEnd = () => {\n setUserInteracting(false)\n resetHideTimer()\n }\n\n // Handle play state changes\n const handlePlayStateChange = (playing: boolean) => {\n setIsPlaying(playing)\n if (playing) {\n onPlay?.()\n resetHideTimer()\n } else {\n onPause?.()\n setControlsVisible(true)\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current)\n }\n }\n }\n\n // Handle loading state\n const handleLoadStart = () => {\n setIsLoading(true)\n setError(null)\n }\n\n const handleLoadedData = () => {\n setIsLoading(false)\n }\n\n // Handle errors\n const handleError = (e: Error) => {\n setIsLoading(false)\n setError(e.message || \"An error occurred\")\n onError?.(e)\n }\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (hideTimeoutRef.current) {\n clearTimeout(hideTimeoutRef.current)\n }\n }\n }, [])\n\n // Determine video source\n const videoSrc = qualities && qualities.length > 0\n ? qualities.find(q => q.default)?.src || qualities[0]?.src || (typeof src === 'string' ? src : src[0])\n : (typeof src === 'string' ? src : src[0])\n\n return (\n <div\n ref={containerRef}\n className={cn(\n \"minimal-player theme-minimal relative overflow-hidden rounded-lg bg-black\",\n `theme-minimal-${theme}`,\n className\n )}\n data-theme={theme}\n onMouseMove={handleMouseMove}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <MediaPlayerRoot\n className=\"relative h-full w-full\"\n autoHide={false}\n enableGestures={true}\n enableMobileOptimizations={true}\n >\n {/* Video Element */}\n <MediaPlayerVideo\n src={videoSrc}\n poster={poster}\n autoPlay={autoPlay}\n muted={muted}\n loop={loop}\n playsInline\n crossOrigin=\"anonymous\"\n onPlay={() => handlePlayStateChange(true)}\n onPause={() => handlePlayStateChange(false)}\n onEnded={onEnded}\n onTimeUpdate={(e) => {\n const video = e.currentTarget as HTMLVideoElement\n onTimeUpdate?.(video.currentTime)\n }}\n onVolumeChange={(e) => {\n const video = e.currentTarget as HTMLVideoElement\n onVolumeChange?.(video.volume)\n }}\n onLoadStart={handleLoadStart}\n onLoadedData={handleLoadedData}\n onError={(e) => handleError(new Error(\"Failed to load video\"))}\n />\n\n {/* Loading State */}\n {showLoadingSpinner && isLoading && (\n <MinimalLoading icon={icons.spinner} />\n )}\n\n {/* Error State */}\n {error && (\n <div className=\"absolute inset-0 z-50 flex items-center justify-center bg-black/80\">\n <div className=\"text-center\">\n <div className=\"mb-4 text-red-500\">\n <svg className=\"mx-auto h-12 w-12\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n </div>\n <p className=\"mb-2 text-lg text-white\">Playback Error</p>\n <p className=\"text-gray-400 text-sm\">{error}</p>\n </div>\n </div>\n )}\n\n {/* Watermark */}\n {watermark && (\n <div\n className={cn(\n \"pointer-events-none absolute z-20\",\n {\n \"top-4 left-4\": watermark.position === \"top-left\",\n \"top-4 right-4\": watermark.position === \"top-right\",\n \"bottom-16 left-4\": watermark.position === \"bottom-left\",\n \"right-4 bottom-16\": watermark.position === \"bottom-right\",\n }\n )}\n style={{ opacity: watermark.opacity || 0.7 }}\n >\n <img\n src={watermark.src}\n alt=\"\"\n className={cn(\n \"object-contain\",\n {\n \"h-8\": watermark.size === \"small\",\n \"h-12\": watermark.size === \"medium\" || !watermark.size,\n \"h-16\": watermark.size === \"large\",\n }\n )}\n />\n </div>\n )}\n\n {/* Center Play Button */}\n {showCenterPlayButton && !isPlaying && !isLoading && (\n <MinimalOverlay\n visible={true}\n showCenterButton={true}\n isPlaying={isPlaying}\n icons={icons}\n onPlayPause={() => {\n const video = containerRef.current?.querySelector(\"video\")\n if (video) {\n if (isPlaying) {\n video.pause()\n } else {\n video.play()\n }\n }\n }}\n />\n )}\n\n {/* Controls */}\n <MinimalControls\n visible={controlsVisible || !isPlaying || isHovered}\n icons={icons}\n isPlaying={isPlaying}\n showQualitySelector={showQualitySelector}\n showSpeedControl={showSpeedControl}\n qualities={qualities}\n thumbnails={thumbnails}\n onUserInteractionStart={handleUserInteractionStart}\n onUserInteractionEnd={handleUserInteractionEnd}\n onSeek={onSeek}\n />\n </MediaPlayerRoot>\n </div>\n )\n}\n","import React, { memo } from \"react\"\n\ninterface VideoElementProps {\n\tvideoRef: React.RefObject<HTMLVideoElement | null>\n\tsrc: string\n\tposter?: string\n\tsubtitleSrc?: string\n\tsubtitlesEnabled: boolean\n\tcrossOrigin?: \"anonymous\" | \"use-credentials\"\n\tonTogglePlay: () => void\n}\n\nexport const VideoElement = function VideoElement({\n\tvideoRef,\n\tsrc,\n\tposter,\n\tsubtitleSrc,\n\tsubtitlesEnabled,\n\tcrossOrigin,\n\tonTogglePlay\n}: VideoElementProps) {\n\treturn (\n\t\t<video\n\t\t\tref={videoRef}\n\t\t\tsrc={src}\n\t\t\tposter={poster}\n\t\t\tcrossOrigin={crossOrigin}\n\t\t\tclassName=\"h-full w-full object-contain\"\n\t\t\tonClick={onTogglePlay}\n\t\t>\n\t\t\t{subtitleSrc && (\n\t\t\t\t<track \n\t\t\t\t\tkind=\"subtitles\" \n\t\t\t\t\tsrc={subtitleSrc} \n\t\t\t\t\tdefault={subtitlesEnabled} \n\t\t\t\t/>\n\t\t\t)}\n\t\t</video>\n\t)\n}","import React, { memo } from \"react\"\n\ninterface SubtitleDisplayProps {\n\tsubtitlesEnabled: boolean\n\tsubtitleText: string\n}\n\nexport const SubtitleDisplay = function SubtitleDisplay({\n\tsubtitlesEnabled,\n\tsubtitleText\n}: SubtitleDisplayProps) {\n\tif (!subtitlesEnabled || !subtitleText) return null\n\n\treturn (\n\t\t<div className=\"pointer-events-none absolute right-0 bottom-20 left-0 px-4 text-center\">\n\t\t\t<div className=\"inline-block rounded bg-black/75 px-4 py-2 font-medium text-lg text-white\">\n\t\t\t\t{subtitleText}\n\t\t\t</div>\n\t\t</div>\n\t)\n}","import React, { memo } from \"react\"\nimport { defaultMinimalIcons } from \"../../../icons\"\n\ninterface CenterPlayButtonProps {\n\tisPlaying: boolean\n\tonTogglePlay: () => void\n}\n\nexport const CenterPlayButton = function CenterPlayButton({\n\tisPlaying,\n\tonTogglePlay\n}: CenterPlayButtonProps) {\n\tif (isPlaying) return null\n\n\tconst PlayIcon = defaultMinimalIcons.play\n\n\treturn (\n\t\t<div className=\"minimal-center-play cursor-pointer\" onClick={onTogglePlay}>\n\t\t\t{PlayIcon && <PlayIcon size={60} />}\n\t\t</div>\n\t)\n}","import React, { memo, useState, useRef } from \"react\"\nimport { cn } from \"../../../../lib/utils\"\nimport type { BufferedRange } from \"../../../../hooks/useVideoPlayer\"\n\ninterface SeekBarProps {\n\tcurrentTime: number\n\tduration: number\n\tbufferedRanges?: BufferedRange[]\n\tisSeeking?: boolean\n\tonSeek: (time: number) => void\n}\n\nexport const SeekBar = function SeekBar({\n\tcurrentTime,\n\tduration,\n\tbufferedRanges = [],\n\tisSeeking = false,\n\tonSeek\n}: SeekBarProps) {\n\tconst [isHovering, setIsHovering] = useState(false)\n\tconst [hoverPosition, setHoverPosition] = useState(0)\n\tconst [showRipple, setShowRipple] = useState(false)\n\tconst [ripplePosition, setRipplePosition] = useState({ x: 0, y: 0 })\n\tconst seekBarRef = useRef<HTMLDivElement>(null)\n\t\n\tconst progress = duration > 0 ? (currentTime / duration) * 100 : 0\n\n\tconst handleClick = (e: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (duration === 0) return\n\n\t\tconst rect = e.currentTarget.getBoundingClientRect()\n\t\tconst position = (e.clientX - rect.left) / rect.width\n\t\tconst newTime = Math.max(0, Math.min(duration, position * duration))\n\t\t\n\t\t// Add ripple effect\n\t\tsetRipplePosition({ x: e.clientX - rect.left, y: e.clientY - rect.top })\n\t\tsetShowRipple(true)\n\t\tsetTimeout(() => setShowRipple(false), 600)\n\t\t\n\t\tonSeek(newTime)\n\t}\n\t\n\tconst handleMouseMove = (e: React.MouseEvent<HTMLDivElement>) => {\n\t\tif (!seekBarRef.current) return\n\t\tconst rect = seekBarRef.current.getBoundingClientRect()\n\t\tconst position = ((e.clientX - rect.left) / rect.width) * 100\n\t\tsetHoverPosition(Math.max(0, Math.min(100, position)))\n\t}\n\t\n\tconst handleMouseEnter = () => setIsHovering(true)\n\tconst handleMouseLeave = () => setIsHovering(false)\n\n\treturn (\n\t\t<div className=\"relative mb-3\">\n\t\t\t<div \n\t\t\t\tref={seekBarRef}\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"minimal-seekbar group relative cursor-pointer\",\n\t\t\t\t\tisSeeking && \"minimal-seekbar-seeking\"\n\t\t\t\t)}\n\t\t\t\tonClick={handleClick}\n\t\t\t\tonMouseMove={handleMouseMove}\n\t\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\t\tonMouseLeave={handleMouseLeave}\n\t\t\t>\n\t\t\t\t{/* Buffered ranges */}\n\t\t\t\t{bufferedRanges.map((range, index) => {\n\t\t\t\t\tconst startPercent = duration > 0 ? (range.start / duration) * 100 : 0\n\t\t\t\t\tconst widthPercent = duration > 0 ? ((range.end - range.start) / duration) * 100 : 0\n\t\t\t\t\treturn (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tkey={index}\n\t\t\t\t\t\t\tclassName=\"minimal-seekbar-buffered\"\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tleft: `${startPercent}%`,\n\t\t\t\t\t\t\t\twidth: `${widthPercent}%`\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t)\n\t\t\t\t})}\n\t\t\t\t\n\t\t\t\t{/* Progress bar */}\n\t\t\t\t<div \n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"minimal-seekbar-progress\",\n\t\t\t\t\t\tisSeeking && \"minimal-seekbar-progress-seeking\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ width: `${progress}%` }} \n\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t{/* Hover indicator */}\n\t\t\t\t{isHovering && !isSeeking && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"minimal-seekbar-hover-indicator\"\n\t\t\t\t\t\tstyle={{ left: `${hoverPosition}%` }}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t\t\n\t\t\t\t{/* Thumb */}\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"minimal-seekbar-thumb\",\n\t\t\t\t\t\t(isHovering || isSeeking) && \"opacity-100\",\n\t\t\t\t\t\tisSeeking && \"minimal-seekbar-thumb-seeking\"\n\t\t\t\t\t)}\n\t\t\t\t\tstyle={{ left: `${progress}%` }}\n\t\t\t\t/>\n\t\t\t\t\n\t\t\t\t{/* Ripple effect */}\n\t\t\t\t{showRipple && (\n\t\t\t\t\t<div\n\t\t\t\t\t\tclassName=\"minimal-seekbar-ripple\"\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tleft: ripplePosition.x,\n\t\t\t\t\t\t\ttop: ripplePosition.y\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t)}\n\t\t\t</div>\n\t\t\t\n\t\t\t{/* Seeking indicator */}\n\t\t\t{isSeeking && (\n\t\t\t\t<div className=\"-top-6 -translate-x-1/2 absolute left-1/2 transform\">\n\t\t\t\t\t<div className=\"rounded bg-black/80 px-2 py-1 text-white text-xs backdrop-blur-sm\">\n\t\t\t\t\t\tSeeking...\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n","import React, { memo } from \"react\"\nimport { defaultMinimalIcons, MinimalBackward10Icon, MinimalForward10Icon } from \"../../../icons\"\n\ninterface PlaybackControlsProps {\n\tisPlaying: boolean\n\tonTogglePlay: () => void\n\tonSeekBackward: () => void\n\tonSeekForward: () => void\n}\n\nexport const PlaybackControls = function PlaybackControls({\n\tisPlaying,\n\tonTogglePlay,\n\tonSeekBackward,\n\tonSeekForward\n}: PlaybackControlsProps) {\n\tconst PlayIcon = defaultMinimalIcons.play\n\tconst PauseIcon = defaultMinimalIcons.pause\n\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn size-15\"\n\t\t\t\tonClick={onTogglePlay}\n\t\t\t\taria-label={isPlaying ? \"Pause\" : \"Play\"}\n\t\t\t>\n\t\t\t\t{isPlaying\n\t\t\t\t\t? PauseIcon && <PauseIcon size={32} />\n\t\t\t\t\t: PlayIcon && <PlayIcon size={32} />}\n\t\t\t</button>\n\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn h-9 w-9\"\n\t\t\t\tonClick={onSeekBackward}\n\t\t\t\taria-label=\"Backward 10 seconds\"\n\t\t\t\ttitle=\"Backward 10s (J)\"\n\t\t\t>\n\t\t\t\t<MinimalBackward10Icon size={18} />\n\t\t\t</button>\n\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn h-9 w-9\"\n\t\t\t\tonClick={onSeekForward}\n\t\t\t\taria-label=\"Forward 10 seconds\"\n\t\t\t\ttitle=\"Forward 10s (L)\"\n\t\t\t>\n\t\t\t\t<MinimalForward10Icon size={18} />\n\t\t\t</button>\n\t\t</div>\n\t)\n}","import React, { memo, useCallback, useRef, useEffect } from \"react\"\nimport { cn } from \"../../../../lib/utils\"\nimport { defaultMinimalIcons } from \"../../../icons\"\n\ninterface VolumeControlProps {\n\tvolume: number\n\tisMuted: boolean\n\tshowVolumeSlider: boolean\n\tonToggleMute: () => void\n\tonVolumeChange: (volume: number) => void\n\tonShowVolumeSlider: (show: boolean) => void\n\torientation?: \"horizontal\" | \"vertical\"\n\tclassName?: string\n}\n\nexport const VolumeControl = function VolumeControl({\n\tvolume,\n\tisMuted,\n\tshowVolumeSlider,\n\tonToggleMute,\n\tonVolumeChange,\n\tonShowVolumeSlider,\n\torientation = \"horizontal\",\n\tclassName\n}: VolumeControlProps) {\n\tconst VolumeIcon = defaultMinimalIcons.volume\n\tconst VolumeMutedIcon = defaultMinimalIcons.volumeMuted\n\tconst sliderRefHorizontal = useRef<HTMLDivElement>(null)\n\tconst sliderRefVertical = useRef<HTMLDivElement>(null)\n\tconst isDragging = useRef(false)\n\tconst [isDraggingState, setIsDraggingState] = React.useState(false)\n\tconst [isHovering, setIsHovering] = React.useState(false)\n const hideTimeoutRef = useRef<NodeJS.Timeout | null>(null)\n\n\tconst handleVolumeChange = useCallback(\n\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\n\t\t\tconst newVolume = parseFloat(e.target.value)\n\t\t\tonVolumeChange(newVolume)\n\t\t},\n\t\t[onVolumeChange]\n\t)\n\n\tconst handleSliderClick = useCallback(\n\t\t(e: React.MouseEvent<HTMLDivElement>, isVertical: boolean) => {\n\t\t\tconst sliderRef = isVertical ? sliderRefVertical : sliderRefHorizontal\n\t\t\tif (!sliderRef.current) return\n\t\t\tconst rect = sliderRef.current.getBoundingClientRect()\n\t\t\t\n\t\t\tlet percentage: number\n\t\t\tif (!isVertical) {\n\t\t\t\tpercentage = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n\t\t\t} else {\n\t\t\t\tpercentage = Math.max(0, Math.min(1, 1 - (e.clientY - rect.top) / rect.height))\n\t\t\t}\n\t\t\t\n\t\t\tonVolumeChange(percentage)\n\t\t},\n\t\t[onVolumeChange]\n\t)\n\n\tconst handleMouseDown = useCallback((e: React.MouseEvent<HTMLDivElement>, isVertical: boolean) => {\n\t\te.preventDefault()\n\t\te.stopPropagation()\n\t\tisDragging.current = true\n\t\tsetIsDraggingState(true)\n\t\thandleSliderClick(e, isVertical)\n\t}, [handleSliderClick])\n\n\tuseEffect(() => {\n\t\tconst handleMouseMove = (e: MouseEvent) => {\n\t\t\tif (!isDragging.current) return\n\t\t\t\n\t\t\tconst sliderRef = orientation === \"vertical\" ? sliderRefVertical : sliderRefHorizontal\n\t\t\tif (!sliderRef.current) return\n\t\t\t\n\t\t\tconst rect = sliderRef.current.getBoundingClientRect()\n\t\t\tlet percentage: number\n\t\t\t\n\t\t\tif (orientation === \"horizontal\") {\n\t\t\t\tpercentage = Math.max(0, Math.min(1, (e.clientX - rect.left) / rect.width))\n\t\t\t} else {\n\t\t\t\tpercentage = Math.max(0, Math.min(1, 1 - (e.clientY - rect.top) / rect.height))\n\t\t\t}\n\t\t\t\n\t\t\tonVolumeChange(percentage)\n\t\t}\n\n\t\tconst handleMouseUp = () => {\n\t\t\tisDragging.current = false\n\t\t\tsetIsDraggingState(false)\n\t\t}\n\n\t\tif (isDraggingState) {\n\t\t\tdocument.addEventListener(\"mousemove\", handleMouseMove)\n\t\t\tdocument.addEventListener(\"mouseup\", handleMouseUp)\n\t\t\t\n\t\t\treturn () => {\n\t\t\t\tdocument.removeEventListener(\"mousemove\", handleMouseMove)\n\t\t\t\tdocument.removeEventListener(\"mouseup\", handleMouseUp)\n\t\t\t}\n\t\t}\n\t}, [isDraggingState, orientation, onVolumeChange])\n\n\tconst handleMouseEnter = useCallback(() => {\n\t\tif (hideTimeoutRef.current) {\n\t\t\tclearTimeout(hideTimeoutRef.current)\n\t\t}\n\t\tsetIsHovering(true)\n\t\tonShowVolumeSlider(true)\n\t}, [onShowVolumeSlider])\n\n\tconst handleMouseLeave = useCallback(() => {\n\t\t// Add a small delay before hiding to prevent flickering\n\t\thideTimeoutRef.current = setTimeout(() => {\n\t\t\tif (!isDragging.current) {\n\t\t\t\tsetIsHovering(false)\n\t\t\t\tonShowVolumeSlider(false)\n\t\t\t}\n\t\t}, 200)\n\t}, [onShowVolumeSlider])\n\n\t// Clean up timeout on unmount\n\tuseEffect(() => {\n\t\treturn () => {\n\t\t\tif (hideTimeoutRef.current) {\n\t\t\t\tclearTimeout(hideTimeoutRef.current)\n\t\t\t}\n\t\t}\n\t}, [])\n\n\tconst volumePercentage = (isMuted ? 0 : volume) * 100\n\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"volume-control-wrapper\",\n\t\t\t\torientation === \"vertical\" ? \"relative\" : \"flex items-center gap-2\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t>\n\t\t\t{/* Volume slider for vertical orientation (appears above) */}\n\t\t\t{orientation === \"vertical\" && (\n\t\t\t\t<div\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\"volume-slider-vertical\",\n\t\t\t\t\t\t\"-translate-x-1/2 absolute bottom-full left-1/2 mb-2\",\n\t\t\t\t\t\t\"transition-all duration-300 ease-out\",\n\t\t\t\t\t\t(showVolumeSlider || isHovering || isDraggingState)\n\t\t\t\t\t\t\t? \"pointer-events-auto translate-y-0 opacity-100\" \n\t\t\t\t\t\t\t: \"pointer-events-none translate-y-2 opacity-0\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"rounded-lg bg-black/80 p-3 backdrop-blur-sm\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tref={sliderRefVertical}\n\t\t\t\t\t\t\tclassName=\"volume-slider-track-vertical group\"\n\t\t\t\t\t\t\tonMouseDown={(e) => handleMouseDown(e, true)}\n\t\t\t\t\t\t\tonClick={(e) => handleSliderClick(e, true)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div \n\t\t\t\t\t\t\t\tclassName=\"volume-slider-fill-vertical pointer-events-none\"\n\t\t\t\t\t\t\t\tstyle={{ height: `${volumePercentage}%` }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<div \n\t\t\t\t\t\t\t\tclassName={cn(\"volume-slider-thumb-vertical pointer-events-none\", isDraggingState && \"active\")}\n\t\t\t\t\t\t\t\tstyle={{ bottom: `${volumePercentage}%` }}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div className=\"mt-2 text-center text-white/70 text-xs\">\n\t\t\t\t\t\t\t{Math.round(volumePercentage)}%\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t{/* Volume button */}\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn h-10 w-10\"\n\t\t\t\tonClick={onToggleMute}\n\t\t\t\taria-label={isMuted ? \"Unmute\" : \"Mute\"}\n\t\t\t>\n\t\t\t\t{isMuted || volume === 0\n\t\t\t\t\t? VolumeMutedIcon && <VolumeMutedIcon size={20} />\n\t\t\t\t\t: VolumeIcon && <VolumeIcon size={20} />}\n\t\t\t</button>\n\n\t\t\t{/* Volume slider for horizontal orientation (appears beside) */}\n\t\t\t{orientation === \"horizontal\" && (\n\t\t\t\t<div\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"volume-slider-horizontal-wrapper\",\n\t\t\t\t\t\"overflow-hidden transition-all duration-300 ease-out\",\n\t\t\t\t\t(showVolumeSlider || isHovering || isDraggingState) ? \"w-24 opacity-100\" : \"w-0 opacity-0\"\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tref={sliderRefHorizontal}\n\t\t\t\t\t\tclassName=\"volume-slider-track-horizontal group\"\n\t\t\t\t\t\tonMouseDown={(e) => handleMouseDown(e, false)}\n\t\t\t\t\t\tonClick={(e) => handleSliderClick(e, false)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div \n\t\t\t\t\t\t\tclassName=\"volume-slider-fill-horizontal pointer-events-none\"\n\t\t\t\t\t\t\tstyle={{ width: `${volumePercentage}%` }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<div \n\t\t\t\t\t\t\tclassName={cn(\"volume-slider-thumb-horizontal pointer-events-none\", isDraggingState && \"active\")}\n\t\t\t\t\t\t\tstyle={{ left: `${volumePercentage}%` }}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}\n","import React, { memo } from \"react\"\nimport { formatTime } from \"../../../../lib/format-time\"\n\ninterface TimeDisplayProps {\n\tcurrentTime: number\n\tduration: number\n}\n\nexport const TimeDisplay = function TimeDisplay({\n\tcurrentTime,\n\tduration\n}: TimeDisplayProps) {\n\treturn (\n\t\t<div className=\"font-mono text-sm text-white\">\n\t\t\t{formatTime(currentTime)} / {formatTime(duration)}\n\t\t</div>\n\t)\n}","import React, { memo, useCallback } from \"react\"\nimport { cn } from \"../../../../lib/utils\"\nimport { defaultMinimalIcons } from \"../../../icons\"\n\ninterface SettingsDropdownProps {\n\tshowSettings: boolean\n\tplaybackRate: number\n\tonToggleSettings: () => void\n\tonChangePlaybackRate: (rate: number) => void\n}\n\nexport const SettingsDropdown = function SettingsDropdown({\n\tshowSettings,\n\tplaybackRate,\n\tonToggleSettings,\n\tonChangePlaybackRate\n}: SettingsDropdownProps) {\n\tconst playbackRates = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2]\n\n\tconst handleSettingsClick = useCallback((e: React.MouseEvent) => {\n\t\te.stopPropagation()\n\t\tonToggleSettings()\n\t}, [onToggleSettings])\n\n\tconst handleDropdownClick = useCallback((e: React.MouseEvent) => {\n\t\te.stopPropagation()\n\t}, [])\n\n\treturn (\n\t\t<div className=\"relative\" style={{ zIndex: showSettings ? 60 : \"auto\" }}>\n\t\t\t<button\n\t\t\t\tclassName={cn(\"minimal-btn h-9 w-9\", showSettings && \"text-cyan-500\")}\n\t\t\t\tonClick={handleSettingsClick}\n\t\t\t\taria-label=\"Settings\"\n\t\t\t>\n\t\t\t\t{defaultMinimalIcons.settings && <defaultMinimalIcons.settings size={18} />}\n\t\t\t</button>\n\n\t\t\t{showSettings && (\n\t\t\t\t<div\n\t\t\t\t\tclassName=\"absolute right-0 mb-2 min-w-[200px] rounded-lg border border-gray-700 bg-gray-900 py-2 shadow-xl\"\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tbottom: \"100%\",\n\t\t\t\t\t\tzIndex: 1000\n\t\t\t\t\t}}\n\t\t\t\t\tonClick={handleDropdownClick}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"px-3 py-1 text-gray-400 text-xs uppercase tracking-wider\">\n\t\t\t\t\t\tSpeed\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"px-1\">\n\t\t\t\t\t\t{playbackRates.map((rate) => (\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tkey={rate}\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"w-full rounded px-3 py-1.5 text-left text-sm transition-colors hover:bg-gray-800\",\n\t\t\t\t\t\t\t\t\t\"text-white\",\n\t\t\t\t\t\t\t\t\tplaybackRate === rate && \"bg-cyan-700/20 text-cyan-400\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tonClick={() => onChangePlaybackRate(rate)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{rate === 1 ? \"Normal\" : `${rate}x`}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t)}\n\t\t</div>\n\t)\n}","import React, { memo, useState, useRef, useEffect } from \"react\"\nimport { cn } from \"../../../../lib/utils\"\nimport {\n\tMinimalSubtitleIcon,\n\tMinimalScreenshotIcon,\n\tdefaultMinimalIcons\n} from \"../../../icons\"\nimport { SettingsDropdown } from \"./SettingsDropdown\"\n\ninterface RightControlsProps {\n\tsubtitleSrc?: string\n\tsubtitlesEnabled: boolean\n\tsubtitleTracks?: Array<{\n\t\tid: string\n\t\tlabel: string\n\t\tlanguage?: string\n\t\tsrc?: string\n\t}>\n\tcurrentTrackId?: string | null\n\thasSubtitles?: boolean\n\tsubtitleLoadError?: Error | null\n\tisFullscreen: boolean\n\tshowSettings: boolean\n\tplaybackRate: number\n\tonToggleSubtitles: () => void\n\tonSelectSubtitleTrack?: (trackId: string | null) => void\n\tonTakeScreenshot: (ctrlKey: boolean) => void\n\tonToggleFullscreen: () => void\n\tonToggleSettings: () => void\n\tonChangePlaybackRate: (rate: number) => void\n}\n\nexport const RightControls = function RightControls({\n\tsubtitleSrc,\n\tsubtitlesEnabled,\n\tsubtitleTracks,\n\tcurrentTrackId,\n\thasSubtitles,\n\tsubtitleLoadError,\n\tisFullscreen,\n\tshowSettings,\n\tplaybackRate,\n\tonToggleSubtitles,\n\tonSelectSubtitleTrack,\n\tonTakeScreenshot,\n\tonToggleFullscreen,\n\tonToggleSettings,\n\tonChangePlaybackRate\n}: RightControlsProps) {\n\tconst [showSubtitleMenu, setShowSubtitleMenu] = useState(false)\n\tconst subtitleMenuRef = useRef<HTMLDivElement>(null)\n\tconst FullscreenIcon = defaultMinimalIcons.fullscreen\n\tconst ExitFullscreenIcon = defaultMinimalIcons.exitFullscreen\n\n\t// Close subtitle menu when clicking outside\n\tuseEffect(() => {\n\t\tconst handleClickOutside = (event: MouseEvent) => {\n\t\t\tif (subtitleMenuRef.current && !subtitleMenuRef.current.contains(event.target as Node)) {\n\t\t\t\tsetShowSubtitleMenu(false)\n\t\t\t}\n\t\t}\n\n\t\tif (showSubtitleMenu) {\n\t\t\tdocument.addEventListener(\"mousedown\", handleClickOutside)\n\t\t\treturn () => document.removeEventListener(\"mousedown\", handleClickOutside)\n\t\t}\n\t}, [showSubtitleMenu])\n\n\tconst handleSubtitleClick = () => {\n\t\tif (subtitleTracks && subtitleTracks.length > 0) {\n\t\t\tsetShowSubtitleMenu(!showSubtitleMenu)\n\t\t} else {\n\t\t\tonToggleSubtitles()\n\t\t}\n\t}\n\n\treturn (\n\t\t<div className=\"flex items-center gap-2\">\n\t\t\t{/* Subtitle Button with Dropdown */}\n\t\t\t{hasSubtitles && (\n\t\t\t\t<div className=\"relative\" ref={subtitleMenuRef}>\n\t\t\t\t\t<button\n\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\"minimal-btn h-9 w-9\",\n\t\t\t\t\t\t\tsubtitlesEnabled && \"text-cyan-500\",\n\t\t\t\t\t\t\tsubtitleLoadError && \"text-red-500\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tonClick={handleSubtitleClick}\n\t\t\t\t\t\taria-label=\"Subtitles\"\n\t\t\t\t\t\ttitle={subtitleLoadError ? \"Subtitle Error\" : \"Subtitles (C)\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MinimalSubtitleIcon size={18} />\n\t\t\t\t\t</button>\n\n\t\t\t\t\t{/* Subtitle Track Selection Menu */}\n\t\t\t\t\t{showSubtitleMenu && subtitleTracks && subtitleTracks.length > 0 && (\n\t\t\t\t\t\t<div className=\"absolute right-0 bottom-full mb-2 w-48 rounded-md bg-gray-900/95 py-2 shadow-lg backdrop-blur-sm\">\n\t\t\t\t\t\t\t<div className=\"px-3 py-1 font-semibold text-gray-400 text-xs\">Subtitles</div>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{/* Off Option */}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\"flex w-full items-center px-3 py-1.5 text-gray-300 text-sm hover:bg-gray-800\",\n\t\t\t\t\t\t\t\t\t!subtitlesEnabled && \"bg-gray-800 text-cyan-500\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\tonSelectSubtitleTrack?.(null)\n\t\t\t\t\t\t\t\t\tsetShowSubtitleMenu(false)\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tOff\n\t\t\t\t\t\t\t</button>\n\n\t\t\t\t\t\t\t{/* Track Options */}\n\t\t\t\t\t\t\t{subtitleTracks.map((track) => (\n\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\tkey={track.id}\n\t\t\t\t\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\t\t\t\t\t\"flex w-full items-center px-3 py-1.5 text-gray-300 text-sm hover:bg-gray-800\",\n\t\t\t\t\t\t\t\t\t\tcurrentTrackId === track.id && \"bg-gray-800 text-cyan-500\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\tonClick={() => {\n\t\t\t\t\t\t\t\t\t\tonSelectSubtitleTrack?.(track.id)\n\t\t\t\t\t\t\t\t\t\tsetShowSubtitleMenu(false)\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span>{track.label}</span>\n\t\t\t\t\t\t\t\t\t{track.language && (\n\t\t\t\t\t\t\t\t\t\t<span className=\"ml-2 text-gray-500 text-xs\">({track.language})</span>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t))}\n\n\t\t\t\t\t\t\t{/* Error Message */}\n\t\t\t\t\t\t\t{subtitleLoadError && (\n\t\t\t\t\t\t\t\t<div className=\"mt-2 border-gray-800 border-t px-3 py-2\">\n\t\t\t\t\t\t\t\t\t<p className=\"text-red-400 text-xs\">Failed to load subtitles</p>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\t\t\t\t</div>\n\t\t\t)}\n\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn h-9 w-9\"\n\t\t\t\tonClick={(e) => onTakeScreenshot(e.ctrlKey || e.metaKey)}\n\t\t\t\taria-label=\"Take Screenshot\"\n\t\t\t\ttitle=\"Screenshot (S) - Ctrl+Click to copy\"\n\t\t\t>\n\t\t\t\t<MinimalScreenshotIcon size={18} />\n\t\t\t</button>\n\n\t\t\t<SettingsDropdown\n\t\t\t\tshowSettings={showSettings}\n\t\t\t\tplaybackRate={playbackRate}\n\t\t\t\tonToggleSettings={onToggleSettings}\n\t\t\t\tonChangePlaybackRate={onChangePlaybackRate}\n\t\t\t/>\n\n\t\t\t<button\n\t\t\t\tclassName=\"minimal-btn h-9 w-9\"\n\t\t\t\tonClick={onToggleFullscreen}\n\t\t\t\taria-label={isFullscreen ? \"Exit Fullscreen\" : \"Enter Fullscreen\"}\n\t\t\t\ttitle=\"Fullscreen (F)\"\n\t\t\t>\n\t\t\t\t{isFullscreen\n\t\t\t\t\t? ExitFullscreenIcon && <ExitFullscreenIcon size={18} />\n\t\t\t\t\t: FullscreenIcon && <FullscreenIcon size={18} />}\n\t\t\t</button>\n\t\t</div>\n\t)\n}","import React, { memo } from \"react\"\nimport { cn } from \"../../../../lib/utils\"\nimport { SeekBar } from \"./SeekBar\"\nimport { PlaybackControls } from \"./PlaybackControls\"\nimport { VolumeControl } from \"./VolumeControl\"\nimport { TimeDisplay } from \"./TimeDisplay\"\nimport { RightControls } from \"./RightControls\"\nimport type { BufferedRange } from \"../../../../hooks/useVideoPlayer\"\n\ninterface ControlBarProps {\n\tcontrolsVisible: boolean\n\tcurrentTime: number\n\tduration: number\n\tisPlaying: boolean\n\tvolume: number\n\tisMuted: boolean\n\tshowVolumeSlider: boolean\n\tisFullscreen: boolean\n\tshowSettings: boolean\n\tplaybackRate: number\n\tsubtitleSrc?: string\n\tsubtitlesEnabled: boolean\n\tsubtitleTracks?: Array<{\n\t\tid: string\n\t\tlabel: string\n\t\tlanguage?: string\n\t\tsrc?: string\n\t}>\n\tcurrentTrackId?: string | null\n\thasSubtitles?: boolean\n\tsubtitleLoadError?: Error | null\n\tvolumeOrientation?: \"horizontal\" | \"vertical\"\n\tbufferedRanges?: BufferedRange[]\n\tisSeeking?: boolean\n\tonSeek: (time: number) => void\n\tonTogglePlay: () => void\n\tonSeekBackward: () => void\n\tonSeekForward: () => void\n\tonToggleMute: () => void\n\tonVolumeChange: (volume: number) => void\n\tonShowVolumeSlider: (show: boolean) => void\n\tonToggleSubtitles: () => void\n\tonSelectSubtitleTrack?: (trackId: string | null) => void\n\tonTakeScreenshot: (ctrlKey: boolean) => void\n\tonToggleFullscreen: () => void\n\tonToggleSettings: () => void\n\tonChangePlaybackRate: (rate: number) => void\n}\n\nexport const ControlBar = function ControlBar({\n\tcontrolsVisible,\n\tcurrentTime,\n\tduration,\n\tisPlaying,\n\tvolume,\n\tisMuted,\n\tshowVolumeSlider,\n\tisFullscreen,\n\tshowSettings,\n\tplaybackRate,\n\tsubtitleSrc,\n\tsubtitlesEnabled,\n\tsubtitleTracks,\n\tcurrentTrackId,\n\thasSubtitles,\n\tsubtitleLoadError,\n\tvolumeOrientation = \"horizontal\",\n\tbufferedRanges,\n\tisSeeking,\n\tonSeek,\n\tonTogglePlay,\n\tonSeekBackward,\n\tonSeekForward,\n\tonToggleMute,\n\tonVolumeChange,\n\tonShowVolumeSlider,\n\tonToggleSubtitles,\n\tonSelectSubtitleTrack,\n\tonTakeScreenshot,\n\tonToggleFullscreen,\n\tonToggleSettings,\n\tonChangePlaybackRate\n}: ControlBarProps) {\n\treturn (\n\t\t<div\n\t\t\tclassName={cn(\n\t\t\t\t\"minimal-control-bar\",\n\t\t\t\t\"absolute right-0 bottom-0 left-0 z-40\",\n\t\t\t\t\"px-6 py-3 transition-all duration-200\",\n\t\t\t\tcontrolsVisible ? \"minimal-controls-visible\" : \"minimal-controls-hidden\"\n\t\t\t)}\n\t\t>\n\t\t\t<SeekBar\n\t\t\t\tcurrentTime={currentTime}\n\t\t\t\tduration={duration}\n\t\t\t\tbufferedRanges={bufferedRanges}\n\t\t\t\tisSeeking={isSeeking}\n\t\t\t\tonSeek={onSeek}\n\t\t\t/>\n\n\t\t\t<div className=\"flex items-center justify-between\">\n\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t<PlaybackControls\n\t\t\t\t\t\tisPlaying={isPlaying}\n\t\t\t\t\t\tonTogglePlay={onTogglePlay}\n\t\t\t\t\t\tonSeekBackward={onSeekBackward}\n\t\t\t\t\t\tonSeekForward={onSeekForward}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<VolumeControl\n\t\t\t\t\t\tvolume={volume}\n\t\t\t\t\t\tisMuted={isMuted}\n\t\t\t\t\t\tshowVolumeSlider={showVolumeSlider}\n\t\t\t\t\t\tonToggleMute={onToggleMute}\n\t\t\t\t\t\tonVolumeChange={onVolumeChange}\n\t\t\t\t\t\tonShowVolumeSlider={onShowVolumeSlider}\n\t\t\t\t\t\torientation={volumeOrientation}\n\t\t\t\t\t/>\n\n\t\t\t\t\t<TimeDisplay\n\t\t\t\t\t\tcurrentTime={currentTime}\n\t\t\t\t\t\tduration={duration}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\n\t\t\t\t<RightControls\n\t\t\t\t\tsubtitleSrc={subtitleSrc}\n\t\t\t\t\tsubtitlesEnabled={subtitlesEnabled}\n\t\t\t\t\tsubtitleTracks={subtitleTracks}\n\t\t\t\t\tcurrentTrackId={currentTrackId}\n\t\t\t\t\thasSubtitles={hasSubtitles}\n\t\t\t\t\tsubtitleLoadError={subtitleLoadError}\n\t\t\t\t\tisFullscreen={isFullscreen}\n\t\t\t\t\tshowSettings={showSettings}\n\t\t\t\t\tplaybackRate={playbackRate}\n\t\t\t\t\tonToggleSubtitles={onToggleSubtitles}\n\t\t\t\t\tonSelectSubtitleTrack={onSelectSubtitleTrack}\n\t\t\t\t\tonTakeScreenshot={onTakeScreenshot}\n\t\t\t\t\tonToggleFullscreen={onToggleFullscreen}\n\t\t\t\t\tonToggleSettings={onToggleSettings}\n\t\t\t\t\tonChangePlaybackRate={onChangePlaybackRate}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t)\n}","export default \"data:image/gif;base64,R0lGODlhgAGAAZECAPr7/ERNVv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5OTk5ODkxZS0wMWE2LTRlMTItYWM1Mi00YTIzMzI1MTViYjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkU2QTk5NkYxM0UzMTFFQzg5RkRCRTMwRTcyQUZCRjIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkU2QTk5NkUxM0UzMTFFQzg5RkRCRTMwRTcyQUZCRjIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxOTQyMDFlMi00OGRjLTQ3OTgtOTFlNi05ZjkyNzhjNTJlZTUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMjk3YTUwZC00MTM4LWVmNDYtYTY3Ni1kZTkzNDU1ZjNmOTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRm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\"","\"use client\"\n\nimport React, { useState, useEffect } from \"react\"\nimport { cn } from \"../lib/utils\"\n\n// Try to import the GIF using direct import for better compatibility\nlet monaLoadingGif: string | undefined\n\n// Import the GIF statically for bundling - this will be handled by Vite\n// @ts-ignore - Vite handles this import\nimport monaGifSrc from \"../assets/mona-loading.gif\"\n\ntry {\n monaLoadingGif = (monaGifSrc as unknown) as string\n} catch {\n // GIF import failed, will use fallback\n monaLoadingGif = undefined\n}\n\ninterface AnimateLoadingProps extends React.HTMLAttributes<HTMLDivElement> {\n loadingText?: string\n gifSrc?: string\n showFallback?: boolean\n}\n\nexport function AnimateLoading({\n loadingText = \"Loading...\",\n gifSrc,\n showFallback = true,\n className,\n ...props\n}: AnimateLoadingProps) {\n const [imageError, setImageError] = useState(false)\n const [imageLoaded, setImageLoaded] = useState(false)\n \n // Try multiple paths for the GIF\n const gifPaths = [\n gifSrc,\n monaLoadingGif,\n \"/mona-loading.gif\",\n \"./mona-loading.gif\",\n \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\" // 1x1 transparent gif as last resort\n ].filter(Boolean) as string[]\n \n const [currentGifIndex, setCurrentGifIndex] = useState(0)\n const currentGif = gifPaths[currentGifIndex]\n \n const handleImageError = () => {\n if (currentGifIndex < gifPaths.length - 1) {\n setCurrentGifIndex(currentGifIndex + 1)\n } else {\n setImageError(true)\n }\n }\n \n // Enhanced fallback CSS animation\n const FallbackAnimation = () => (\n <div className=\"relative h-12 w-12\">\n {/* Outer spinning gradient ring */}\n <div className=\"absolute inset-0 animate-spin rounded-full bg-gradient-to-r from-cyan-400 via-blue-500 to-cyan-400 opacity-75\" />\n \n {/* Inner background */}\n <div className=\"absolute inset-1 rounded-full bg-black/90\" />\n \n {/* Center spinning element */}\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div className=\"relative\">\n <div className=\"h-8 w-8 rounded-full border-2 border-white/20\" />\n <div className=\"absolute inset-0 h-8 w-8 animate-spin rounded-full border-2 border-transparent border-t-cyan-400\" />\n \n {/* Pulsing dot in center */}\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div className=\"h-2 w-2 animate-pulse rounded-full bg-cyan-400\" />\n </div>\n </div>\n </div>\n </div>\n )\n \n return (\n <div\n className={cn(\n \"flex flex-col items-center justify-center space-y-2 rounded py-2 text-white\",\n className\n )}\n {...props}\n >\n {/* Show fallback while image is loading or if error */}\n {(!imageLoaded || imageError) && showFallback && (\n <FallbackAnimation />\n )}\n \n {/* Try to load the actual GIF (hidden if not loaded) */}\n {!imageError && currentGif && (\n <img \n alt=\"loading\" \n height={50} \n width={50} \n src={currentGif}\n onError={handleImageError}\n onLoad={() => setImageLoaded(true)}\n className={cn(\n \"object-contain\",\n !imageLoaded && \"hidden\"\n )}\n style={{ display: imageLoaded ? 'block' : 'none' }}\n />\n )}\n \n <span className=\"mt-2 text-sm tracking-wider\">\n {loadingText}\n </span>\n </div>\n )\n}\n","\"use client\"\n\nimport React from \"react\"\nimport { cn } from \"../lib/utils\"\nimport { AnimateLoading } from \"./AnimateLoading\"\n\nexport type LoadingVariant = \"animate\" | \"spinner\" | \"skeleton\" | \"dots\"\nexport type LoadingContext = \"initial\" | \"seeking\" | \"buffering\"\nexport type LoadingSize = \"sm\" | \"md\" | \"lg\" | \"xl\"\n\nexport interface LoadingStateProps {\n variant?: LoadingVariant\n context?: LoadingContext\n size?: LoadingSize\n color?: string\n message?: string\n showMessage?: boolean\n className?: string\n style?: React.CSSProperties\n}\n\nconst sizeMap: Record<LoadingSize, { container: string; spinner: string; dots: string }> = {\n sm: {\n container: \"h-8 w-8\",\n spinner: \"h-6 w-6 border-2\",\n dots: \"h-1.5 w-1.5\"\n },\n md: {\n container: \"h-12 w-12\",\n spinner: \"h-10 w-10 border-3\",\n dots: \"h-2 w-2\"\n },\n lg: {\n container: \"h-16 w-16\",\n spinner: \"h-14 w-14 border-4\",\n dots: \"h-2.5 w-2.5\"\n },\n xl: {\n container: \"h-20 w-20\",\n spinner: \"h-18 w-18 border-4\",\n dots: \"h-3 w-3\"\n }\n}\n\nconst contextStyles: Record<LoadingContext, { wrapper: string; background: string }> = {\n initial: {\n wrapper: \"absolute inset-0 z-50 flex items-center justify-center\",\n background: \"bg-black/80\"\n },\n seeking: {\n wrapper: \"absolute inset-0 z-40 flex items-center justify-center\",\n background: \"bg-black/40\"\n },\n buffering: {\n wrapper: \"absolute inset-0 z-45 flex items-center justify-center\",\n background: \"bg-black/60\"\n }\n}\n\n// Default AnimateLoading wrapper component\nexport const AnimateLoadingWrapper = function AnimateLoadingWrapper({\n context = \"initial\",\n message,\n className,\n textSize = \"text-sm\"\n}: {\n context?: LoadingContext\n message?: string\n className?: string\n textSize?: string\n}) {\n const contextStyle = contextStyles[context]\n \n const getLoadingText = () => {\n if (message) return message\n \n switch (context) {\n case \"initial\":\n return \"Loading video...\"\n case \"seeking\":\n return \"Seeking...\"\n case \"buffering\":\n return \"Buffering...\"\n default:\n return \"Loading...\"\n }\n }\n \n return (\n <div className={cn(contextStyle.wrapper, contextStyle.background, className)}>\n <AnimateLoading \n loadingText={getLoadingText()}\n className={cn(\"text-white\", textSize)}\n />\n </div>\n )\n}\n\nexport const LoadingState = function LoadingState({\n variant = \"animate\",\n context = \"initial\",\n size = \"md\",\n color,\n message,\n showMessage = true,\n className,\n style\n}: LoadingStateProps) {\n const sizes = sizeMap[size]\n const contextStyle = contextStyles[context]\n\n // Use AnimateLoading as default\n if (variant === \"animate\") {\n return (\n <AnimateLoadingWrapper\n context={context}\n message={message}\n className={className}\n textSize={size === \"sm\" ? \"text-xs\" : size === \"lg\" ? \"text-base\" : \"text-sm\"}\n />\n )\n }\n\n const renderLoadingIndicator = () => {\n switch (variant) {\n case \"spinner\":\n return (\n <div\n className={cn(\n \"minimal-loading-spinner animate-spin rounded-full\",\n \"border-white/20 border-t-cyan-500\",\n sizes.spinner,\n className\n )}\n style={{\n borderTopColor: color || undefined,\n ...style\n }}\n />\n )\n\n case \"dots\":\n return (\n <div className=\"flex items-center gap-1\">\n {[0, 1, 2].map((i) => (\n <div\n key={i}\n className={cn(\n \"minimal-loading-dot rounded-full bg-cyan-500\",\n sizes.dots,\n className\n )}\n style={{\n backgroundColor: color || undefined,\n animationDelay: `${i * 150}ms`,\n ...style\n }}\n />\n ))}\n </div>\n )\n\n case \"skeleton\":\n return (\n <div className={cn(\"space-y-3\", className)}>\n <div className=\"minimal-loading-skeleton h-4 w-32 rounded bg-white/10\" />\n <div className=\"minimal-loading-skeleton h-3 w-24 rounded bg-white/10\" />\n <div className=\"minimal-loading-skeleton h-3 w-28 rounded bg-white/10\" />\n </div>\n )\n\n default:\n return null\n }\n }\n\n const getMessage = () => {\n if (message) return message\n \n switch (context) {\n case \"initial\":\n return \"Loading video...\"\n case \"seeking\":\n return \"Seeking...\"\n case \"buffering\":\n return \"Buffering...\"\n default:\n return \"Loading...\"\n }\n }\n\n return (\n <div className={cn(contextStyle.wrapper, contextStyle.background)}>\n <div className=\"flex flex-col items-center gap-4\">\n <div className={cn(sizes.container, \"flex items-center justify-center\")}>\n {renderLoadingIndicator()}\n </div>\n \n {showMessage && (\n <div className=\"text-center\">\n <p className=\"font-medium text-sm text-white/90\">\n {getMessage()}\n </p>\n {context === \"buffering\" && (\n <p className=\"mt-1 text-white/60 text-xs\">\n Please wait...\n </p>\n )}\n </div>\n )}\n </div>\n </div>\n )\n}\n\n// Custom loading component wrapper\nexport interface CustomLoadingProps {\n children: React.ReactNode\n context?: LoadingContext\n className?: string\n}\n\nexport const CustomLoading = function CustomLoading({\n children,\n context = \"initial\",\n className\n}: CustomLoadingProps) {\n const contextStyle = contextStyles[context]\n \n return (\n <div className={cn(contextStyle.wrapper, contextStyle.background, className)}>\n {children}\n </div>\n )\n}\n\n// Export default presets\nexport const LoadingPresets = {\n Initial: (props: Partial<LoadingStateProps>) => (\n <LoadingState variant=\"animate\" context=\"initial\" size=\"md\" {...props} />\n ),\n Seeking: (props: Partial<LoadingStateProps>) => (\n <LoadingState variant=\"animate\" context=\"seeking\" size=\"sm\" {...props} />\n ),\n Buffering: (props: Partial<LoadingStateProps>) => (\n <LoadingState variant=\"animate\" context=\"buffering\" size=\"sm\" {...props} />\n )\n}\n","\"use client\"\n\nimport { useState, useEffect, useRef, useCallback } from \"react\"\nimport { cn } from \"../../../lib/utils\"\nimport { useVideoPlayer } from \"../../../hooks/useVideoPlayer\"\nimport { useEnhancedSubtitles } from \"../../../hooks/useEnhancedSubtitles\"\nimport { useMediaControls } from \"../../../hooks/useMediaControls\"\nimport { useKeyboardShortcuts } from \"../../../hooks/useKeyboardShortcuts\"\nimport { useScreenshot } from \"../../../hooks/useScreenshot\"\nimport { VideoElement } from \"./components/VideoElement\"\nimport { SubtitleDisplay } from \"./components/SubtitleDisplay\"\nimport { CenterPlayButton } from \"./components/CenterPlayButton\"\nimport { ControlBar } from \"./components/ControlBar\"\nimport { LoadingState, CustomLoading, LoadingPresets } from \"../../LoadingState\"\nimport type { LoadingStateProps } from \"../../LoadingState\"\n\nexport interface SimpleMinimalPlayerProps {\n\tsrc: string\n\tposter?: string\n\tclassName?: string\n\tsubtitleSrc?: string\n\tsubtitleTracks?: Array<{\n\t\tid: string\n\t\tlabel: string\n\t\tlanguage?: string\n\t\tsrc?: string\n\t}>\n\tcrossOrigin?: \"anonymous\" | \"use-credentials\"\n\tvolumeOrientation?: \"horizontal\" | \"vertical\"\n\tloadingComponent?: React.ComponentType<{ context: \"initial\" | \"seeking\" | \"buffering\" }>\n\tshowLoadingState?: boolean\n\tloadingProps?: Partial<LoadingStateProps>\n}\n\nexport function SimpleMinimalPlayer(props: SimpleMinimalPlayerProps) {\n\tconst {\n\t\tsrc,\n\t\tposter,\n\t\tclassName,\n\t\tsubtitleSrc,\n\t\tsubtitleTracks,\n\t\tcrossOrigin,\n\t\tvolumeOrientation = \"horizontal\",\n\t\tloadingComponent: LoadingComponent = undefined,\n\t\tshowLoadingState = true,\n\t\tloadingProps = {}\n\t} = props\n\tconst containerRef = useRef<HTMLDivElement>(null)\n\tconst [showSettings, setShowSettings] = useState(false)\n\tconst [playbackRate, setPlaybackRate] = useState(1)\n\n\tconst { videoRef, state: videoState, controls: videoControls } = useVideoPlayer(containerRef)\n\tconst {\n\t\tsubtitlesEnabled,\n\t\tcurrentSubtitle,\n\t\ttoggleSubtitles,\n\t\tgetCurrentSubtitle,\n\t\tsetCurrentSubtitle,\n\t\tselectSubtitleTrack,\n\t\tavailableTracks,\n\t\tcurrentTrackId,\n\t\tloadError,\n\t\thasSubtitles\n\t} = useEnhancedSubtitles({\n\t\tsubtitleSrc,\n\t\tsubtitleTracks,\n\t\tonLoadError: (error) => console.error(\"Subtitle load error:\", error)\n\t})\n\tconst { takeScreenshot } = useScreenshot(videoRef)\n\tconst {\n\t\tcontrolsVisible,\n\t\tshowVolumeSlider,\n\t\tsetShowVolumeSlider,\n\t\thandleMouseMove,\n\t\thandleMouseEnter,\n\t\thandleMouseLeave\n\t} = useMediaControls(videoState.isPlaying, showSettings)\n\n\t// Update subtitle display based on current time\n\tuseEffect(() => {\n\t\tif (subtitlesEnabled) {\n\t\t\tconst subtitle = getCurrentSubtitle(videoState.currentTime)\n\t\t\tsetCurrentSubtitle(subtitle)\n\t\t}\n\t}, [videoState.currentTime, subtitlesEnabled, getCurrentSubtitle, setCurrentSubtitle])\n\n\t// Change playback rate\n\tconst changePlaybackRate = (rate: number) => {\n \t\tif (!videoRef.current) return\n \t\tvideoRef.current.playbackRate = rate\n \t\tsetPlaybackRate(rate)\n \t\tsetShowSettings(false)\n \t}\n\n\t// Keyboard shortcuts\n\tuseKeyboardShortcuts({\n\t\tvideoControls,\n\t\ttoggleSubtitles,\n\t\ttakeScreenshot,\n\t\tduration: videoState.duration\n\t})\n\n\treturn (\n\t\t<div\n\t\t\tref={containerRef}\n\t\t\tclassName={cn(\"minimal-player relative rounded-lg bg-black\", className)}\n\t\t\tstyle={{ overflow: \"hidden\" }}\n\t\t\tonMouseMove={handleMouseMove}\n\t\t\tonMouseEnter={handleMouseEnter}\n\t\t\tonMouseLeave={handleMouseLeave}\n\t\t>\n\t\t\t<VideoElement\n\t\t\t\tvideoRef={videoRef}\n\t\t\t\tsrc={src}\n\t\t\t\tposter={poster}\n\t\t\t\tsubtitleSrc={subtitleSrc}\n\t\t\t\tsubtitlesEnabled={subtitlesEnabled}\n\t\t\t\tcrossOrigin={crossOrigin}\n\t\t\t\tonTogglePlay={videoControls.togglePlay}\n\t\t\t/>\n\n\t\t\t<SubtitleDisplay\n\t\t\t\tsubtitlesEnabled={subtitlesEnabled}\n\t\t\t\tsubtitleText={currentSubtitle}\n\t\t\t/>\n\n\t\t\t{/* Show center play button only when not loading */}\n\t\t\t{!videoState.isLoading && (\n\t\t\t\t<CenterPlayButton\n\t\t\t\t\tisPlaying={videoState.isPlaying}\n\t\t\t\t\tonTogglePlay={videoControls.togglePlay}\n\t\t\t\t/>\n\t\t\t)}\n\n\t\t\t<ControlBar\n\t\t\t\tcontrolsVisible={controlsVisible}\n\t\t\t\tcurrentTime={videoState.currentTime}\n\t\t\t\tduration={videoState.duration}\n\t\t\t\tisPlaying={videoState.isPlaying}\n\t\t\t\tvolume={videoState.volume}\n\t\t\t\tisMuted={videoState.isMuted}\n\t\t\t\tshowVolumeSlider={showVolumeSlider}\n\t\t\t\tisFullscreen={videoState.isFullscreen}\n\t\t\t\tshowSettings={showSettings}\n\t\t\t\tplaybackRate={playbackRate}\n\t\t\t\tsubtitleSrc={subtitleSrc}\n\t\t\t\tsubtitlesEnabled={subtitlesEnabled}\n\t\t\t\tsubtitleTracks={availableTracks}\n\t\t\t\tcurrentTrackId={currentTrackId}\n\t\t\t\thasSubtitles={hasSubtitles}\n\t\t\t\tsubtitleLoadError={loadError}\n\t\t\t\tvolumeOrientation={volumeOrientation}\n\t\t\t\tbufferedRanges={videoState.bufferedRanges}\n\t\t\t\tisSeeking={videoState.isSeeking}\n\t\t\t\tonSeek={videoControls.seekTo}\n\t\t\t\tonTogglePlay={videoControls.togglePlay}\n\t\t\t\tonSeekBackward={videoControls.seekBackward}\n\t\t\t\tonSeekForward={videoControls.seekForward}\n\t\t\t\tonToggleMute={videoControls.toggleMute}\n\t\t\t\tonVolumeChange={videoControls.setVolume}\n\t\t\t\tonShowVolumeSlider={setShowVolumeSlider}\n\t\t\t\tonToggleSubtitles={toggleSubtitles}\n\t\t\t\tonSelectSubtitleTrack={selectSubtitleTrack}\n\t\t\t\tonTakeScreenshot={takeScreenshot}\n\t\t\t\tonToggleFullscreen={videoControls.toggleFullscreen}\n\t\t\t\tonToggleSettings={() => setShowSettings(!showSettings)}\n\t\t\t\tonChangePlaybackRate={changePlaybackRate}\n\t\t\t/>\n\n\t\t\t{/* Loading states */}\n\t\t\t{showLoadingState && (\n\t\t\t\t<>\n\t\t\t\t\t{/* Initial loading */}\n\t\t\t\t\t{videoState.isLoading && !videoState.isSeeking && !videoState.isBuffering && (\n\t\t\t\t\t\tLoadingComponent ? (\n\t\t\t\t\t\t\t<CustomLoading context=\"initial\">\n\t\t\t\t\t\t\t\t<LoadingComponent context=\"initial\" />\n\t\t\t\t\t\t\t</CustomLoading>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<LoadingPresets.Initial {...loadingProps} />\n\t\t\t\t\t\t)\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Seeking */}\n\t\t\t\t\t{videoState.isSeeking && (\n\t\t\t\t\t\tLoadingComponent ? (\n\t\t\t\t\t\t\t<CustomLoading context=\"seeking\">\n\t\t\t\t\t\t\t\t<LoadingComponent context=\"seeking\" />\n\t\t\t\t\t\t\t</CustomLoading>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<LoadingPresets.Seeking {...loadingProps} />\n\t\t\t\t\t\t)\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Buffering */}\n\t\t\t\t\t{videoState.isBuffering && !videoState.isSeeking && (\n\t\t\t\t\t\tLoadingComponent ? (\n\t\t\t\t\t\t\t<CustomLoading context=\"buffering\">\n\t\t\t\t\t\t\t\t<LoadingComponent context=\"buffering\" />\n\t\t\t\t\t\t\t</CustomLoading>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<LoadingPresets.Buffering {...loadingProps} />\n\t\t\t\t\t\t)\n\t\t\t\t\t)}\n\t\t\t\t</>\n\t\t\t)}\n\t\t</div>\n\t)\n}"],"names":["composeRefs","refs","node","ref","MediaPlayerImpl","children","className","dir","disabled","asChild","autoHide","enableGestures","enableMobileOptimizations","onPlay","onPause","onEnded","onTimeUpdate","onVolumeChange","onMuted","onMediaError","onPipError","onFullscreenChange","props","context","useMediaContext","dispatch","useMediaDispatch","isTouchDevice","useDeviceInfo","isPlaying","useMediaSelector","state","currentTime","volume","isFullscreen","useMobileOptimizations","gestureActions","MediaActionTypes","direction","amount","mediaElement","newTime","newVolume","scale","useMediaGestures","handleKeyDown","event","target","React","handlePlay","handlePause","handleEnded","handleTimeUpdate","time","handleVolumeChange","vol","muted","handleLoadedMetadata","handleError","errorMessage","handleLoadStart","rootProps","cn","jsx","MediaPlayerRoot","MediaProvider","MediaPlayerVideo","child","MediaPlayerTime","variant","duration","times","formatTime","timeProps","content","jsxs","Fragment","MinimalPlayButton","icons","size","handleClick","sizeClasses","iconSizes","PlayIcon","PauseIcon","MinimalSeekBar","thumbnails","onSeek","buffered","isDragging","setIsDragging","useState","hoverTime","setHoverTime","hoverPosition","setHoverPosition","seekBarRef","useRef","progress","bufferedProgress","handleSeek","clientX","rect","handleMouseDown","e","handleMouseMove","handleMouseUp","handleMouseLeave","handleGlobalMouseMove","handleGlobalMouseUp","MinimalVolumeControl","isMuted","isExpanded","setIsExpanded","handleMuteToggle","VolumeIcon","MinimalControls","visible","showQualitySelector","showSpeedControl","qualities","onUserInteractionStart","onUserInteractionEnd","q","elem","MinimalOverlay","showCenterButton","onPlayPause","MinimalLoading","LoadingIcon","BackwardIcon","CameraIcon","Memo","ForwardIcon","FullscreenEnterIcon","FullscreenExitIcon","SettingsIcon","SubtitleIcon","VolumeMutedIcon","VolumeTwoIcon","MinimalPlayIcon","color","MinimalPauseIcon","MinimalVolumeIcon","MinimalVolumeMutedIcon","MinimalFullscreenIcon","MinimalExitFullscreenIcon","MinimalSettingsIcon","MinimalSpinner","MinimalForwardIcon","MinimalBackwardIcon","MinimalForward10Icon","MinimalBackward10Icon","MinimalSubtitleIcon","SubtitleIconSVG","MinimalScreenshotIcon","defaultMinimalIcons","MinimalMediaPlayer","src","poster","autoPlay","loop","autoHideControls","hideDelay","theme","customIcons","showCenterPlayButton","showLoadingSpinner","onError","watermark","controlsVisible","setControlsVisible","setIsPlaying","isLoading","setIsLoading","error","setError","hideTimeoutRef","containerRef","isHovered","setIsHovered","userInteracting","setUserInteracting","resetHideTimer","handleMouseEnter","handleUserInteractionStart","handleUserInteractionEnd","handlePlayStateChange","playing","handleLoadedData","useEffect","videoSrc","video","VideoElement","videoRef","subtitleSrc","subtitlesEnabled","crossOrigin","onTogglePlay","SubtitleDisplay","subtitleText","CenterPlayButton","SeekBar","bufferedRanges","isSeeking","isHovering","setIsHovering","showRipple","setShowRipple","ripplePosition","setRipplePosition","position","range","index","startPercent","widthPercent","PlaybackControls","onSeekBackward","onSeekForward","VolumeControl","showVolumeSlider","onToggleMute","onShowVolumeSlider","orientation","sliderRefHorizontal","sliderRefVertical","isDraggingState","setIsDraggingState","useCallback","handleSliderClick","isVertical","sliderRef","percentage","volumePercentage","TimeDisplay","SettingsDropdown","showSettings","playbackRate","onToggleSettings","onChangePlaybackRate","playbackRates","handleSettingsClick","handleDropdownClick","rate","RightControls","subtitleTracks","currentTrackId","hasSubtitles","subtitleLoadError","onToggleSubtitles","onSelectSubtitleTrack","onTakeScreenshot","onToggleFullscreen","showSubtitleMenu","setShowSubtitleMenu","subtitleMenuRef","FullscreenIcon","ExitFullscreenIcon","handleClickOutside","handleSubtitleClick","track","ControlBar","volumeOrientation","monaGifSrc","monaLoadingGif","AnimateLoading","loadingText","gifSrc","showFallback","imageError","setImageError","imageLoaded","setImageLoaded","gifPaths","currentGifIndex","setCurrentGifIndex","currentGif","handleImageError","FallbackAnimation","sizeMap","contextStyles","AnimateLoadingWrapper","message","textSize","contextStyle","getLoadingText","LoadingState","showMessage","style","sizes","renderLoadingIndicator","i","getMessage","CustomLoading","LoadingPresets","SimpleMinimalPlayer","LoadingComponent","showLoadingState","loadingProps","setShowSettings","setPlaybackRate","videoState","videoControls","useVideoPlayer","currentSubtitle","toggleSubtitles","getCurrentSubtitle","setCurrentSubtitle","selectSubtitleTrack","availableTracks","loadError","useEnhancedSubtitles","takeScreenshot","useScreenshot","setShowVolumeSlider","useMediaControls","subtitle","changePlaybackRate","useKeyboardShortcuts"],"mappings":"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"}
Binary file