@therealtinhtute/baroiplayer 1.2.1 → 2.0.0-beta.1

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 (302) hide show
  1. package/README.md +90 -71
  2. package/dist/components/icons/index.d.ts +36 -0
  3. package/dist/components/icons/index.d.ts.map +1 -0
  4. package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts +4 -0
  5. package/dist/components/icons/svg-icons/ArrowLeftIcon.d.ts.map +1 -0
  6. package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts +5 -0
  7. package/dist/components/icons/svg-icons/ArrowRightIcon.d.ts.map +1 -0
  8. package/dist/components/icons/svg-icons/AudioIcon.d.ts +5 -0
  9. package/dist/components/icons/svg-icons/AudioIcon.d.ts.map +1 -0
  10. package/dist/components/icons/svg-icons/BackwardIcon.d.ts +5 -0
  11. package/dist/components/icons/svg-icons/BackwardIcon.d.ts.map +1 -0
  12. package/dist/components/icons/svg-icons/CameraIcon.d.ts +5 -0
  13. package/dist/components/icons/svg-icons/CameraIcon.d.ts.map +1 -0
  14. package/dist/components/icons/svg-icons/CheckIcon.d.ts +5 -0
  15. package/dist/components/icons/svg-icons/CheckIcon.d.ts.map +1 -0
  16. package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts +4 -0
  17. package/dist/components/icons/svg-icons/EnablePiPIcon.d.ts.map +1 -0
  18. package/dist/components/icons/svg-icons/ForwardIcon.d.ts +5 -0
  19. package/dist/components/icons/svg-icons/ForwardIcon.d.ts.map +1 -0
  20. package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts +5 -0
  21. package/dist/components/icons/svg-icons/FullscreenEnterIcon.d.ts.map +1 -0
  22. package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts +5 -0
  23. package/dist/components/icons/svg-icons/FullscreenExitIcon.d.ts.map +1 -0
  24. package/dist/components/icons/svg-icons/LoadingIcon.d.ts +5 -0
  25. package/dist/components/icons/svg-icons/LoadingIcon.d.ts.map +1 -0
  26. package/dist/components/icons/svg-icons/PauseIcon.d.ts +5 -0
  27. package/dist/components/icons/svg-icons/PauseIcon.d.ts.map +1 -0
  28. package/dist/components/icons/svg-icons/PlayIcon.d.ts +5 -0
  29. package/dist/components/icons/svg-icons/PlayIcon.d.ts.map +1 -0
  30. package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts +5 -0
  31. package/dist/components/icons/svg-icons/PlaybackSpeedIcon.d.ts.map +1 -0
  32. package/dist/components/icons/svg-icons/QualityIcon.d.ts +5 -0
  33. package/dist/components/icons/svg-icons/QualityIcon.d.ts.map +1 -0
  34. package/dist/components/icons/svg-icons/SettingsIcon.d.ts +5 -0
  35. package/dist/components/icons/svg-icons/SettingsIcon.d.ts.map +1 -0
  36. package/dist/components/icons/svg-icons/SliderIcon.d.ts +5 -0
  37. package/dist/components/icons/svg-icons/SliderIcon.d.ts.map +1 -0
  38. package/dist/components/icons/svg-icons/SubtitleIcon.d.ts +5 -0
  39. package/dist/components/icons/svg-icons/SubtitleIcon.d.ts.map +1 -0
  40. package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts +5 -0
  41. package/dist/components/icons/svg-icons/SubtitleOffIcon.d.ts.map +1 -0
  42. package/dist/components/icons/svg-icons/UnPiPIcon.d.ts +4 -0
  43. package/dist/components/icons/svg-icons/UnPiPIcon.d.ts.map +1 -0
  44. package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts +5 -0
  45. package/dist/components/icons/svg-icons/VolumeMutedIcon.d.ts.map +1 -0
  46. package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts +5 -0
  47. package/dist/components/icons/svg-icons/VolumeOneIcon.d.ts.map +1 -0
  48. package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts +5 -0
  49. package/dist/components/icons/svg-icons/VolumeThreeIcon.d.ts.map +1 -0
  50. package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts +5 -0
  51. package/dist/components/icons/svg-icons/VolumeTwoIcon.d.ts.map +1 -0
  52. package/dist/components/variants/gradient/gradient-audio.d.ts +13 -0
  53. package/dist/components/variants/gradient/gradient-audio.d.ts.map +1 -0
  54. package/dist/components/variants/gradient/gradient-controls.d.ts +4 -0
  55. package/dist/components/variants/gradient/gradient-controls.d.ts.map +1 -0
  56. package/dist/components/variants/gradient/gradient-glyphs.d.ts +30 -0
  57. package/dist/components/variants/gradient/gradient-glyphs.d.ts.map +1 -0
  58. package/dist/components/variants/gradient/gradient-video.d.ts +16 -0
  59. package/dist/components/variants/gradient/gradient-video.d.ts.map +1 -0
  60. package/dist/index.css +1 -1
  61. package/dist/index.d.ts +5 -0
  62. package/dist/index.d.ts.map +1 -0
  63. package/dist/index.js +1 -41
  64. package/dist/index.js.map +1 -1
  65. package/dist/index.mjs +750 -5640
  66. package/dist/index.mjs.map +1 -1
  67. package/dist/package.json +3 -0
  68. package/package.json +110 -114
  69. package/src/components/variants/gradient/gradient-audio.tsx +47 -0
  70. package/src/components/variants/gradient/gradient-controls.tsx +254 -0
  71. package/src/components/variants/gradient/gradient-glyphs.test.tsx +69 -0
  72. package/src/components/variants/gradient/gradient-glyphs.tsx +129 -0
  73. package/src/components/variants/gradient/gradient-skin.css +211 -0
  74. package/src/components/variants/gradient/gradient-video.tsx +70 -0
  75. package/src/index.ts +5 -198
  76. package/src/test/accessibility-utils.ts +0 -59
  77. package/dist/context/media.js +0 -1
  78. package/dist/context/media.mjs +0 -3
  79. package/dist/context/store.js +0 -1
  80. package/dist/context/store.mjs +0 -3
  81. package/dist/context-Bzd5QCKM.cjs +0 -7
  82. package/dist/context-Bzd5QCKM.cjs.map +0 -1
  83. package/dist/context-DD_SH4tT.js +0 -1053
  84. package/dist/context-DD_SH4tT.js.map +0 -1
  85. package/dist/core-events-BRnLMB7s.cjs +0 -2
  86. package/dist/core-events-BRnLMB7s.cjs.map +0 -1
  87. package/dist/core-events-v_mKdj5p.js +0 -417
  88. package/dist/core-events-v_mKdj5p.js.map +0 -1
  89. package/dist/core-plugins-CMBv-yVh.cjs +0 -2
  90. package/dist/core-plugins-CMBv-yVh.cjs.map +0 -1
  91. package/dist/core-plugins-CqCxLkbd.js +0 -754
  92. package/dist/core-plugins-CqCxLkbd.js.map +0 -1
  93. package/dist/core.js +0 -15
  94. package/dist/core.js.map +0 -1
  95. package/dist/core.mjs +0 -960
  96. package/dist/core.mjs.map +0 -1
  97. package/dist/enhanced-components-BwjBqSA1.js +0 -2858
  98. package/dist/enhanced-components-BwjBqSA1.js.map +0 -1
  99. package/dist/enhanced-components-C-ka-XLp.cjs +0 -2
  100. package/dist/enhanced-components-C-ka-XLp.cjs.map +0 -1
  101. package/dist/hooks-B-IIWPJr.js +0 -1842
  102. package/dist/hooks-B-IIWPJr.js.map +0 -1
  103. package/dist/hooks-DcHzmBwA.cjs +0 -4
  104. package/dist/hooks-DcHzmBwA.cjs.map +0 -1
  105. package/dist/minimal-components-BYsMQde5.js +0 -1610
  106. package/dist/minimal-components-BYsMQde5.js.map +0 -1
  107. package/dist/minimal-components-CsxQbDp7.cjs +0 -2
  108. package/dist/minimal-components-CsxQbDp7.cjs.map +0 -1
  109. package/dist/minimal-components.css +0 -1
  110. package/dist/mona-loading.gif +0 -0
  111. package/dist/performance-monitor-DCSijLJg.js +0 -312
  112. package/dist/performance-monitor-DCSijLJg.js.map +0 -1
  113. package/dist/performance-monitor-wNFKmqMr.cjs +0 -2
  114. package/dist/performance-monitor-wNFKmqMr.cjs.map +0 -1
  115. package/dist/rolldown-runtime-BmowowmI.js +0 -14
  116. package/dist/rolldown-runtime-mLOUI7ql.cjs +0 -1
  117. package/dist/utils-D2gQ7c2R.js +0 -64
  118. package/dist/utils-D2gQ7c2R.js.map +0 -1
  119. package/dist/utils-DJaAwiZ9.cjs +0 -2
  120. package/dist/utils-DJaAwiZ9.cjs.map +0 -1
  121. package/dist/utils.js +0 -1
  122. package/dist/utils.mjs +0 -3
  123. package/src/adapters/videojs-adapter.tsx +0 -470
  124. package/src/assets/mona-loading.gif +0 -0
  125. package/src/components/AnimateLoading.tsx +0 -111
  126. package/src/components/LoadingState.tsx +0 -239
  127. package/src/components/__tests__/media-player-accessibility.test.tsx +0 -510
  128. package/src/components/__tests__/media-player-react19.test.tsx +0 -457
  129. package/src/components/accessibility/keyboard-help-overlay.tsx +0 -207
  130. package/src/components/audio-player.tsx +0 -85
  131. package/src/components/basic/index.ts +0 -37
  132. package/src/components/enhanced/advanced-features.tsx +0 -311
  133. package/src/components/enhanced/debug-panel.tsx +0 -448
  134. package/src/components/enhanced/enhanced-controls.tsx +0 -597
  135. package/src/components/enhanced/enhanced-media-player.tsx +0 -566
  136. package/src/components/enhanced/error-handling.tsx +0 -338
  137. package/src/components/enhanced/index.ts +0 -39
  138. package/src/components/enhanced/media-player-enhanced.tsx +0 -383
  139. package/src/components/examples/basic-video-player.tsx +0 -50
  140. package/src/components/examples/custom-controls-example.tsx +0 -63
  141. package/src/components/examples/enhanced-controls-example.tsx +0 -100
  142. package/src/components/examples/enhanced-media-player-example.tsx +0 -302
  143. package/src/components/examples/loading-states-demo.tsx +0 -141
  144. package/src/components/examples/react-19-demo.tsx +0 -349
  145. package/src/components/examples/volume-orientation-demo.tsx +0 -105
  146. package/src/components/icon-demo.tsx +0 -196
  147. package/src/components/legacy.tsx +0 -87
  148. package/src/components/media-metadata-display.tsx +0 -99
  149. package/src/components/media-player-audio.tsx +0 -39
  150. package/src/components/media-player-controls.tsx +0 -223
  151. package/src/components/media-player-error.tsx +0 -163
  152. package/src/components/media-player-fullscreen.tsx +0 -109
  153. package/src/components/media-player-hls.tsx +0 -111
  154. package/src/components/media-player-loading.tsx +0 -76
  155. package/src/components/media-player-play.tsx +0 -75
  156. package/src/components/media-player-root.tsx +0 -338
  157. package/src/components/media-player-seek.tsx +0 -168
  158. package/src/components/media-player-time.tsx +0 -99
  159. package/src/components/media-player-tooltip.tsx +0 -58
  160. package/src/components/media-player-video.tsx +0 -54
  161. package/src/components/media-player-volume.tsx +0 -155
  162. package/src/components/media-player.tsx +0 -292
  163. package/src/components/media-suspense.tsx +0 -344
  164. package/src/components/player-settings-form.tsx +0 -158
  165. package/src/components/react-player-wrapper.tsx +0 -651
  166. package/src/components/simple-video-player.tsx +0 -62
  167. package/src/components/ui/blur-poster.tsx +0 -96
  168. package/src/components/ui/empty-state.tsx +0 -91
  169. package/src/components/ui/enhanced-seek-bar.tsx +0 -254
  170. package/src/components/ui/error-state.tsx +0 -124
  171. package/src/components/ui/fullscreen-button.tsx +0 -81
  172. package/src/components/ui/loading-skeleton.tsx +0 -107
  173. package/src/components/ui/media-resource-preloader.tsx +0 -458
  174. package/src/components/ui/offline-message.tsx +0 -98
  175. package/src/components/ui/play-button.tsx +0 -99
  176. package/src/components/ui/seek-bar.tsx +0 -191
  177. package/src/components/ui/time-display.tsx +0 -61
  178. package/src/components/ui/volume-control.tsx +0 -190
  179. package/src/components/unified/base-media-player.tsx +0 -252
  180. package/src/components/unified/media-player.tsx +0 -75
  181. package/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +0 -587
  182. package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +0 -573
  183. package/src/components/variants/minimal/MinimalControls.tsx +0 -124
  184. package/src/components/variants/minimal/MinimalLoading.tsx +0 -28
  185. package/src/components/variants/minimal/MinimalMediaPlayer.tsx +0 -318
  186. package/src/components/variants/minimal/MinimalOverlay.tsx +0 -58
  187. package/src/components/variants/minimal/MinimalPlayButton.tsx +0 -56
  188. package/src/components/variants/minimal/MinimalSeekBar.tsx +0 -140
  189. package/src/components/variants/minimal/MinimalVolumeControl.tsx +0 -75
  190. package/src/components/variants/minimal/SimpleMinimalPlayer.tsx +0 -206
  191. package/src/components/variants/minimal/components/CenterPlayButton.tsx +0 -22
  192. package/src/components/variants/minimal/components/ControlBar.tsx +0 -142
  193. package/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +0 -412
  194. package/src/components/variants/minimal/components/PlaybackControls.tsx +0 -46
  195. package/src/components/variants/minimal/components/RightControls.tsx +0 -164
  196. package/src/components/variants/minimal/components/SeekBar.tsx +0 -127
  197. package/src/components/variants/minimal/components/SettingsDropdown.tsx +0 -68
  198. package/src/components/variants/minimal/components/SubtitleDisplay.tsx +0 -21
  199. package/src/components/variants/minimal/components/TimeDisplay.tsx +0 -15
  200. package/src/components/variants/minimal/components/VideoElement.tsx +0 -35
  201. package/src/components/variants/minimal/components/VolumeControl.tsx +0 -220
  202. package/src/components/variants/minimal/index.ts +0 -23
  203. package/src/components/video-player.tsx +0 -100
  204. package/src/context/__tests__/media-store.test.ts +0 -509
  205. package/src/context/error-handling.ts +0 -398
  206. package/src/context/media-context.tsx +0 -254
  207. package/src/context/media-provider.tsx +0 -264
  208. package/src/context/media-store.ts +0 -387
  209. package/src/context/persistence.ts +0 -462
  210. package/src/core/events/event-system.ts +0 -448
  211. package/src/core/events/hooks.ts +0 -325
  212. package/src/core/events/index.ts +0 -22
  213. package/src/core/events/middleware.ts +0 -286
  214. package/src/core/index.ts +0 -22
  215. package/src/core/optimization/bundle-optimizer.tsx +0 -312
  216. package/src/core/performance/cicd.ts +0 -98
  217. package/src/core/performance/index.ts +0 -38
  218. package/src/core/performance/media-loading-optimizer.ts +0 -545
  219. package/src/core/performance/performance-budgets.ts +0 -437
  220. package/src/core/performance/performance-monitor.tsx +0 -488
  221. package/src/core/performance/performance-testing.ts +0 -461
  222. package/src/core/plugins/__tests__/registry.test.ts +0 -595
  223. package/src/core/plugins/base-plugin.ts +0 -225
  224. package/src/core/plugins/enhanced-plugin-system.ts +0 -435
  225. package/src/core/plugins/examples/analytics-plugin.ts +0 -241
  226. package/src/core/plugins/index.ts +0 -39
  227. package/src/core/plugins/registry.ts +0 -546
  228. package/src/core/plugins/types.ts +0 -169
  229. package/src/core/plugins/utils.ts +0 -317
  230. package/src/core/progressive-loading.tsx +0 -331
  231. package/src/core/providers/enhanced-hls-provider.ts +0 -307
  232. package/src/core/providers/lazy-provider.tsx +0 -14
  233. package/src/core/providers/service-provider.tsx +0 -164
  234. package/src/core/utils.tsx +0 -34
  235. package/src/features/media-session/media-session-manager.ts +0 -411
  236. package/src/features/picture-in-picture/pip-manager.ts +0 -428
  237. package/src/features/playlist/playlist-manager.ts +0 -626
  238. package/src/features/subtitles/subtitle-manager.ts +0 -435
  239. package/src/features/subtitles/subtitle-parser.ts +0 -284
  240. package/src/features/thumbnails/thumbnail-generator.ts +0 -528
  241. package/src/hooks/__tests__/currentTime-fix.test.ts +0 -149
  242. package/src/hooks/__tests__/use-media-player.test.ts +0 -712
  243. package/src/hooks/__tests__/use-media-state.test.tsx +0 -316
  244. package/src/hooks/accessibility/index.ts +0 -27
  245. package/src/hooks/accessibility/use-accessibility-preferences.ts +0 -190
  246. package/src/hooks/accessibility/use-focus-management.ts +0 -183
  247. package/src/hooks/accessibility/use-keyboard-shortcuts.ts +0 -152
  248. package/src/hooks/accessibility/use-screen-reader.ts +0 -212
  249. package/src/hooks/core/index.ts +0 -47
  250. package/src/hooks/legacy.ts +0 -21
  251. package/src/hooks/use-buffer-health.ts +0 -218
  252. package/src/hooks/use-enhanced-media-player.ts +0 -575
  253. package/src/hooks/use-focus-trap.tsx +0 -162
  254. package/src/hooks/use-intelligent-preloading.ts +0 -387
  255. package/src/hooks/use-keyboard-controls.ts +0 -115
  256. package/src/hooks/use-keyboard-shortcuts.ts +0 -255
  257. package/src/hooks/use-media-actions.ts +0 -184
  258. package/src/hooks/use-media-metadata.ts +0 -91
  259. package/src/hooks/use-media-optimistic.ts +0 -264
  260. package/src/hooks/use-media-player.ts +0 -343
  261. package/src/hooks/use-media-state.ts +0 -194
  262. package/src/hooks/use-memory-optimization.ts +0 -360
  263. package/src/hooks/use-network-status.ts +0 -124
  264. package/src/hooks/use-optimistic-controls.ts +0 -95
  265. package/src/hooks/use-optimized-media.ts +0 -283
  266. package/src/hooks/use-smart-preload.ts +0 -229
  267. package/src/hooks/use-touch-gestures.ts +0 -461
  268. package/src/hooks/useEnhancedSubtitles.ts +0 -258
  269. package/src/hooks/useKeyboardShortcuts.ts +0 -106
  270. package/src/hooks/useMediaControls.ts +0 -52
  271. package/src/hooks/useScreenshot.ts +0 -77
  272. package/src/hooks/useSubtitles.ts +0 -91
  273. package/src/hooks/useVideoPlayer.ts +0 -278
  274. package/src/icons/components/FullscreenIcon.tsx +0 -36
  275. package/src/icons/components/SettingsIcon.tsx +0 -37
  276. package/src/icons/components/animated/LoadingIcon.tsx +0 -27
  277. package/src/icons/components/animated/PlayPauseIcon.tsx +0 -42
  278. package/src/icons/components/media/PauseIcon.tsx +0 -38
  279. package/src/icons/components/media/PlayIcon.tsx +0 -37
  280. package/src/icons/components/volume/VolumeIcon.tsx +0 -38
  281. package/src/icons/components/volume/VolumeOffIcon.tsx +0 -38
  282. package/src/icons/index.ts +0 -56
  283. package/src/icons/provider.tsx +0 -58
  284. package/src/icons/types.ts +0 -60
  285. package/src/index-enhanced.ts +0 -35
  286. package/src/index-legacy.ts +0 -324
  287. package/src/index.css +0 -102
  288. package/src/lib/__tests__/async-utils.test.ts +0 -291
  289. package/src/lib/async-utils.ts +0 -194
  290. package/src/lib/deprecation.ts +0 -51
  291. package/src/lib/format-time.ts +0 -37
  292. package/src/lib/index.ts +0 -4
  293. package/src/lib/utils.ts +0 -6
  294. package/src/styles/globals.css +0 -462
  295. package/src/styles/minimal-player.css +0 -621
  296. package/src/styles/pixel-art.css +0 -41
  297. package/src/styles/videojs.css +0 -100
  298. package/src/types/assets.d.ts +0 -29
  299. package/src/types/events.ts +0 -47
  300. package/src/types/formats.ts +0 -79
  301. package/src/types/index.ts +0 -203
  302. package/src/types/videojs-plugins.d.ts +0 -14
@@ -1,1610 +0,0 @@
1
- import { a as e, f as t, i as n, l as r, t as i, u as a } from "./context-DD_SH4tT.js";
2
- import { c as o, f as s, h as c, l, m as u, o as d, s as f, u as p } from "./hooks-B-IIWPJr.js";
3
- import { g as m, p as h } from "./enhanced-components-BwjBqSA1.js";
4
- import g, { useCallback as _, useEffect as v, useRef as y, useState as b } from "react";
5
- //#region src/components/media-player-root.tsx
6
- var x = n();
7
- function S(...e) {
8
- return (t) => {
9
- e.forEach((e) => {
10
- typeof e == "function" ? e(t) : e && typeof e == "object" && (e.current = t);
11
- });
12
- };
13
- }
14
- function C({ children: n, className: i, dir: o = "ltr", disabled: l = !1, asChild: d = !1, autoHide: f = !0, enableGestures: p = !0, enableMobileOptimizations: h = !0, onPlay: _, onPause: v, onEnded: y, onTimeUpdate: b, onVolumeChange: C, onMuted: w, onMediaError: T, onPipError: E, onFullscreenChange: D, ...O }) {
15
- let k = r(), A = a(), { isTouchDevice: j } = u(), M = t((e) => e.isPlaying), N = t((e) => e.currentTime), P = t((e) => e.volume);
16
- t((e) => e.isMuted), t((e) => e.error);
17
- let F = t((e) => e.isFullscreen);
18
- t((e) => e.isPictureInPicture), c();
19
- let { isGestureEnabled: I } = s(k.rootRef, p ? {
20
- onPlayPause: () => {
21
- l || A({ type: M ? e.PAUSE : e.PLAY });
22
- },
23
- onSeek: (t, n) => {
24
- if (l || !k.isVideo) return;
25
- let r = k.mediaRef.current;
26
- if (!r) return;
27
- let i = t === "forward" ? Math.min(r.duration || 0, N + n) : Math.max(0, N - n);
28
- A({
29
- type: e.SEEK,
30
- detail: i
31
- });
32
- },
33
- onVolumeChange: (t, n) => {
34
- if (l) return;
35
- let r = t === "up" ? Math.min(1, P + n) : Math.max(0, P - n);
36
- A({
37
- type: e.SET_VOLUME,
38
- detail: r
39
- });
40
- },
41
- onToggleFullscreen: () => {
42
- l || !k.isVideo || A({ type: F ? e.EXIT_FULLSCREEN : e.ENTER_FULLSCREEN });
43
- },
44
- onZoom: (e) => {
45
- console.log("Zoom gesture detected:", e);
46
- }
47
- } : {}), L = (t) => {
48
- if (l) return;
49
- let n = t.target;
50
- if (n.tagName === "INPUT" || n.tagName === "TEXTAREA" || n.isContentEditable) return;
51
- let r = k.mediaRef.current;
52
- if (r) switch (t.code) {
53
- case "Space":
54
- case "KeyK":
55
- t.preventDefault(), A({ type: M ? e.PAUSE : e.PLAY });
56
- break;
57
- case "KeyF":
58
- t.preventDefault(), A({ type: F ? e.EXIT_FULLSCREEN : e.ENTER_FULLSCREEN });
59
- break;
60
- case "KeyM":
61
- t.preventDefault(), A({ type: e.TOGGLE_MUTE });
62
- break;
63
- case "ArrowLeft":
64
- t.preventDefault(), k.isVideo && r instanceof HTMLVideoElement && A({
65
- type: e.SEEK,
66
- detail: Math.max(0, N - 10)
67
- });
68
- break;
69
- case "ArrowRight":
70
- t.preventDefault(), k.isVideo && r instanceof HTMLVideoElement && A({
71
- type: e.SEEK,
72
- detail: Math.min(r.duration || 0, N + 10)
73
- });
74
- break;
75
- case "ArrowUp":
76
- t.preventDefault(), A({
77
- type: e.SET_VOLUME,
78
- detail: Math.min(1, P + .1)
79
- });
80
- break;
81
- case "ArrowDown":
82
- t.preventDefault(), A({
83
- type: e.SET_VOLUME,
84
- detail: Math.max(0, P - .1)
85
- });
86
- break;
87
- }
88
- };
89
- g.useEffect(() => {
90
- let t = k.mediaRef.current;
91
- if (!t) return;
92
- let n = () => {
93
- A({ type: e.PLAY }), _?.();
94
- }, r = () => {
95
- A({ type: e.PAUSE }), v?.();
96
- }, i = () => {
97
- A({ type: e.PAUSE }), y?.();
98
- }, a = () => {
99
- let n = t.currentTime;
100
- A({
101
- type: e.SET_CURRENT_TIME,
102
- detail: n
103
- }), b?.(n);
104
- }, o = () => {
105
- let n = t.volume, r = t.muted;
106
- A({
107
- type: e.SET_VOLUME,
108
- detail: n
109
- }), A({ type: r ? e.MUTE : e.UNMUTE }), C?.(n), w?.(r);
110
- }, s = () => {
111
- A({
112
- type: e.SET_DURATION,
113
- detail: t.duration
114
- }), A({
115
- type: e.SET_LOADING,
116
- detail: !1
117
- });
118
- }, c = () => {
119
- let t = "An error occurred while loading the media";
120
- A({
121
- type: e.SET_ERROR,
122
- detail: t
123
- }), T?.(t);
124
- }, l = () => {
125
- A({
126
- type: e.SET_LOADING,
127
- detail: !0
128
- });
129
- };
130
- return t.addEventListener("play", n), t.addEventListener("pause", r), t.addEventListener("ended", i), t.addEventListener("timeupdate", a), t.addEventListener("volumechange", o), t.addEventListener("loadedmetadata", s), t.addEventListener("error", c), t.addEventListener("loadstart", l), () => {
131
- t.removeEventListener("play", n), t.removeEventListener("pause", r), t.removeEventListener("ended", i), t.removeEventListener("timeupdate", a), t.removeEventListener("volumechange", o), t.removeEventListener("loadedmetadata", s), t.removeEventListener("error", c), t.removeEventListener("loadstart", l);
132
- };
133
- }, [
134
- A,
135
- _,
136
- v,
137
- y,
138
- b,
139
- C,
140
- w,
141
- T
142
- ]);
143
- let R = {
144
- "aria-labelledby": k.labelId,
145
- "aria-describedby": k.descriptionId,
146
- "aria-disabled": l,
147
- "data-disabled": l ? "" : void 0,
148
- "data-slot": "media-player",
149
- "data-state": F ? "fullscreen" : "inline",
150
- dir: o,
151
- tabIndex: l ? -1 : 0,
152
- className: m("dark relative isolate flex flex-col overflow-hidden rounded-lg bg-background outline-none", "focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50", "data-[disabled]:pointer-events-none data-[disabled]:opacity-50", "[&_video]:relative [&_video]:object-contain", "data-[state=fullscreen]:[&_video]:size-full", "[:fullscreen_&]:flex [:fullscreen_&]:h-full [:fullscreen_&]:max-h-screen [:fullscreen_&]:flex-col [:fullscreen_&]:justify-between", j && [
153
- "touch-manipulation",
154
- "select-none",
155
- "overscroll-contain"
156
- ], "will-change-transform", "transform-gpu", i),
157
- onKeyDown: L,
158
- ...O
159
- };
160
- return /* @__PURE__ */ (0, x.jsx)("div", {
161
- ref: S(k.rootRef),
162
- ...R,
163
- children: n
164
- });
165
- }
166
- function w(e) {
167
- return /* @__PURE__ */ (0, x.jsx)(i, { children: /* @__PURE__ */ (0, x.jsx)(C, { ...e }) });
168
- }
169
- w.displayName = "MediaPlayerRoot";
170
- //#endregion
171
- //#region src/components/icons/svg-icons/BackwardIcon.tsx
172
- var T = (e) => /* @__PURE__ */ (0, x.jsx)("svg", {
173
- xmlns: "http://www.w3.org/2000/svg",
174
- width: "1em",
175
- height: "1em",
176
- viewBox: "0 0 24 24",
177
- ...e,
178
- children: /* @__PURE__ */ (0, x.jsx)("path", {
179
- fill: "currentColor",
180
- 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"
181
- })
182
- }), E = (e) => /* @__PURE__ */ (0, x.jsx)("svg", {
183
- width: 32,
184
- height: 32,
185
- viewBox: "0 0 24 24",
186
- style: {
187
- width: "100%",
188
- height: "100%"
189
- },
190
- ...e,
191
- children: /* @__PURE__ */ (0, x.jsx)("path", {
192
- fill: "currentColor",
193
- 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"
194
- })
195
- }), D = (e) => /* @__PURE__ */ (0, x.jsx)("svg", {
196
- xmlns: "http://www.w3.org/2000/svg",
197
- width: "1em",
198
- height: "1em",
199
- viewBox: "0 0 24 24",
200
- ...e,
201
- children: /* @__PURE__ */ (0, x.jsx)("path", {
202
- fill: "currentColor",
203
- 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"
204
- })
205
- }), O = (e) => /* @__PURE__ */ (0, x.jsx)("svg", {
206
- width: "24",
207
- height: "24",
208
- viewBox: "0 0 24 24",
209
- fill: "none",
210
- xmlns: "http://www.w3.org/2000/svg",
211
- "data-uia": "control-fullscreen-enter",
212
- style: {
213
- width: "100%",
214
- height: "100%"
215
- },
216
- ...e,
217
- children: /* @__PURE__ */ (0, x.jsx)("path", {
218
- fillRule: "evenodd",
219
- clipRule: "evenodd",
220
- 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",
221
- fill: "currentColor"
222
- })
223
- }), k = (e) => /* @__PURE__ */ (0, x.jsx)("svg", {
224
- width: "24",
225
- height: "24",
226
- viewBox: "0 0 24 24",
227
- fill: "none",
228
- xmlns: "http://www.w3.org/2000/svg",
229
- "data-uia": "control-fullscreen-exit",
230
- style: {
231
- width: "100%",
232
- height: "100%"
233
- },
234
- ...e,
235
- children: /* @__PURE__ */ (0, x.jsx)("path", {
236
- fillRule: "evenodd",
237
- clipRule: "evenodd",
238
- d: "M24 8h-5V3h-2v7h7V8ZM0 16h5v5h2v-7H0v2Zm7-6H0V8h5V3h2v7Zm12 11v-5h5v-2h-7v7h2Z",
239
- fill: "currentColor"
240
- })
241
- }), A = (e) => /* @__PURE__ */ (0, x.jsxs)("svg", {
242
- width: "24",
243
- height: "24",
244
- viewBox: "0 0 24 24",
245
- fill: "none",
246
- xmlns: "http://www.w3.org/2000/svg",
247
- className: "svg-icon-nfplayerPlay",
248
- style: {
249
- width: "100%",
250
- height: "100%"
251
- },
252
- ...e,
253
- children: [/* @__PURE__ */ (0, x.jsx)("path", {
254
- fill: "currentColor",
255
- 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",
256
- opacity: ".5"
257
- }), /* @__PURE__ */ (0, x.jsx)("path", {
258
- fill: "currentColor",
259
- d: "M20 12h2A10 10 0 0 0 12 2V4A8 8 0 0 1 20 12Z",
260
- children: /* @__PURE__ */ (0, x.jsx)("animateTransform", {
261
- attributeName: "transform",
262
- dur: "1s",
263
- from: "0 12 12",
264
- repeatCount: "indefinite",
265
- to: "360 12 12",
266
- type: "rotate"
267
- })
268
- })]
269
- }), j = (e) => /* @__PURE__ */ (0, x.jsx)("svg", {
270
- width: "24",
271
- height: "24",
272
- viewBox: "0 0 24 24",
273
- fill: "none",
274
- xmlns: "http://www.w3.org/2000/svg",
275
- className: "svg-icon-nfplayerPause",
276
- style: {
277
- width: "100%",
278
- height: "100%"
279
- },
280
- ...e,
281
- children: /* @__PURE__ */ (0, x.jsx)("path", {
282
- fillRule: "evenodd",
283
- clipRule: "evenodd",
284
- 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",
285
- fill: "currentColor"
286
- })
287
- }), M = (e) => /* @__PURE__ */ (0, x.jsx)("svg", {
288
- width: "24",
289
- height: "24",
290
- viewBox: "0 0 24 24",
291
- fill: "none",
292
- xmlns: "http://www.w3.org/2000/svg",
293
- className: "svg-icon-nfplayerPlay",
294
- style: {
295
- width: "100%",
296
- height: "100%"
297
- },
298
- ...e,
299
- children: /* @__PURE__ */ (0, x.jsx)("path", {
300
- 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",
301
- fill: "currentColor"
302
- })
303
- }), N = (e) => /* @__PURE__ */ (0, x.jsx)("svg", {
304
- width: "24",
305
- height: "24",
306
- viewBox: "0 0 24 24",
307
- ...e,
308
- children: /* @__PURE__ */ (0, x.jsx)("path", {
309
- fill: "currentColor",
310
- 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"
311
- })
312
- }), P = (e) => /* @__PURE__ */ (0, x.jsx)("svg", {
313
- width: "24",
314
- height: "24",
315
- viewBox: "0 0 24 24",
316
- fill: "none",
317
- xmlns: "http://www.w3.org/2000/svg",
318
- className: "Hawkins-Icon Hawkins-Icon-Standard",
319
- style: {
320
- width: "100%",
321
- height: "100%"
322
- },
323
- ...e,
324
- children: /* @__PURE__ */ (0, x.jsx)("path", {
325
- fill: "currentColor",
326
- 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"
327
- })
328
- }), F = (e) => /* @__PURE__ */ (0, x.jsx)("svg", {
329
- xmlns: "http://www.w3.org/2000/svg",
330
- width: "1em",
331
- height: "1em",
332
- viewBox: "0 0 24 24",
333
- ...e,
334
- children: /* @__PURE__ */ (0, x.jsxs)("g", {
335
- fill: "currentColor",
336
- children: [/* @__PURE__ */ (0, x.jsx)("path", {
337
- fillRule: "evenodd",
338
- 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",
339
- clipRule: "evenodd"
340
- }), /* @__PURE__ */ (0, x.jsx)("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" })]
341
- })
342
- }), I = (e) => /* @__PURE__ */ (0, x.jsx)("svg", {
343
- xmlns: "http://www.w3.org/2000/svg",
344
- width: "1em",
345
- height: "1em",
346
- viewBox: "0 0 24 24",
347
- ...e,
348
- children: /* @__PURE__ */ (0, x.jsxs)("g", {
349
- fill: "currentColor",
350
- children: [/* @__PURE__ */ (0, x.jsx)("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" }), /* @__PURE__ */ (0, x.jsx)("path", {
351
- fillRule: "evenodd",
352
- 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",
353
- clipRule: "evenodd"
354
- })]
355
- })
356
- }), L = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(M, {
357
- width: e,
358
- height: e,
359
- className: t,
360
- style: { color: n }
361
- }), R = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(j, {
362
- width: e,
363
- height: e,
364
- className: t,
365
- style: { color: n }
366
- }), z = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(I, {
367
- width: e,
368
- height: e,
369
- className: t,
370
- style: { color: n }
371
- }), B = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(F, {
372
- width: e,
373
- height: e,
374
- className: t,
375
- style: { color: n }
376
- }), V = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(O, {
377
- width: e,
378
- height: e,
379
- className: t,
380
- style: { color: n }
381
- }), H = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(k, {
382
- width: e,
383
- height: e,
384
- className: t,
385
- style: { color: n }
386
- }), U = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(N, {
387
- width: e,
388
- height: e,
389
- className: t,
390
- style: { color: n }
391
- }), W = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(A, {
392
- width: e,
393
- height: e,
394
- className: `animate-spin ${t}`,
395
- style: { color: n }
396
- }), G = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(T, {
397
- width: e,
398
- height: e,
399
- className: t,
400
- style: { color: n }
401
- }), ee = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(D, {
402
- width: e,
403
- height: e,
404
- className: t,
405
- style: { color: n }
406
- }), te = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(D, {
407
- width: e,
408
- height: e,
409
- className: t,
410
- style: { color: n }
411
- }), ne = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(T, {
412
- width: e,
413
- height: e,
414
- className: t,
415
- style: { color: n }
416
- }), K = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(P, {
417
- width: e,
418
- height: e,
419
- className: t,
420
- style: { color: n }
421
- }), re = ({ size: e = 24, className: t = "", color: n = "currentColor" }) => /* @__PURE__ */ (0, x.jsx)(E, {
422
- width: e,
423
- height: e,
424
- className: t,
425
- style: { color: n }
426
- }), q = {
427
- play: L,
428
- pause: R,
429
- volume: z,
430
- volumeMuted: B,
431
- fullscreen: V,
432
- exitFullscreen: H,
433
- settings: U,
434
- forward: G,
435
- backward: ee,
436
- spinner: W,
437
- subtitle: K
438
- };
439
- //#endregion
440
- //#region src/components/media-player-video.tsx
441
- function J(...e) {
442
- return (t) => {
443
- e.forEach((e) => {
444
- typeof e == "function" ? e(t) : e && (e.current = t);
445
- });
446
- };
447
- }
448
- function ie({ asChild: e = !1, className: t, children: n, ...i }) {
449
- let a = r(), o = g.useMemo(() => J(a.mediaRef), [a.mediaRef]);
450
- if (e) {
451
- let e = g.Children.only(n);
452
- return g.cloneElement(e, {
453
- ...i,
454
- ref: o,
455
- "data-slot": "media-player-video"
456
- });
457
- }
458
- return /* @__PURE__ */ (0, x.jsx)("video", {
459
- ref: o,
460
- "data-slot": "media-player-video",
461
- className: t,
462
- ...i,
463
- children: n
464
- });
465
- }
466
- ie.displayName = "MediaPlayerVideo";
467
- //#endregion
468
- //#region src/components/media-player-time.tsx
469
- function Y({ variant: e = "current-duration", className: n, asChild: i = !1, children: a, ...o }) {
470
- let s = r(), c = t((e) => e.currentTime), l = t((e) => e.duration), u = g.useMemo(() => e === "remaining" ? { remaining: h(Math.max(0, l - c)) } : e === "duration" ? { duration: h(l) } : e === "current" ? { current: h(c) } : {
471
- current: h(c),
472
- duration: h(l)
473
- }, [
474
- e,
475
- c,
476
- l
477
- ]), d = {
478
- "data-slot": "media-player-time",
479
- "data-variant": e,
480
- dir: s.dir,
481
- className: m("text-sm text-foreground/80 tabular-nums", n),
482
- ...o
483
- };
484
- if (e !== "current-duration") {
485
- let t = u[e];
486
- if (i) {
487
- let e = g.Children.only(a);
488
- return g.cloneElement(e, d, t);
489
- }
490
- return /* @__PURE__ */ (0, x.jsx)("time", {
491
- ...d,
492
- children: t
493
- });
494
- }
495
- let f = /* @__PURE__ */ (0, x.jsxs)(x.Fragment, { children: [
496
- /* @__PURE__ */ (0, x.jsx)("time", { children: u.current }),
497
- /* @__PURE__ */ (0, x.jsx)("span", {
498
- className: "text-foreground/60",
499
- children: "/"
500
- }),
501
- /* @__PURE__ */ (0, x.jsx)("time", { children: u.duration })
502
- ] });
503
- if (i) {
504
- let e = g.Children.only(a);
505
- return g.cloneElement(e, {
506
- ...d,
507
- className: m("flex items-center gap-1 text-foreground/80 text-sm", n)
508
- }, f);
509
- }
510
- return /* @__PURE__ */ (0, x.jsx)("div", {
511
- ...d,
512
- className: m("flex items-center gap-1 text-foreground/80 text-sm", n),
513
- children: f
514
- });
515
- }
516
- Y.displayName = "MediaPlayerTime";
517
- //#endregion
518
- //#region src/components/variants/minimal/MinimalPlayButton.tsx
519
- function ae({ isPlaying: t, icons: n, size: r = "md", className: i }) {
520
- let o = a(), s = () => {
521
- o({ type: t ? e.PAUSE : e.PLAY });
522
- }, c = {
523
- sm: "h-10 w-10",
524
- md: "h-12 w-12 minimal-btn",
525
- lg: "h-16 w-16 minimal-btn-lg",
526
- xl: "h-20 w-20 minimal-btn-lg"
527
- }, l = {
528
- sm: 27,
529
- md: 30,
530
- lg: 36,
531
- xl: 42
532
- }, u = n.play, d = n.pause;
533
- return !u || !d ? null : /* @__PURE__ */ (0, x.jsx)("button", {
534
- className: m("minimal-btn", c[r], i),
535
- onClick: s,
536
- "aria-label": t ? "Pause" : "Play",
537
- children: (0, x.jsx)(t ? d : u, { size: l[r] })
538
- });
539
- }
540
- //#endregion
541
- //#region src/components/variants/minimal/MinimalSeekBar.tsx
542
- function oe({ thumbnails: n, onSeek: r, className: i }) {
543
- let o = a(), s = t((e) => e.currentTime), c = t((e) => e.duration), l = t((e) => e.buffered), [u, d] = b(!1), [f, p] = b(0), [_, v] = b(0), S = y(null), C = c > 0 ? s / c * 100 : 0, w = l && l.length > 0 && c > 0 ? l.end(l.length - 1) / c * 100 : 0, T = (t) => {
544
- if (!S.current || c === 0) return;
545
- let n = S.current.getBoundingClientRect(), i = Math.max(0, Math.min(1, (t - n.left) / n.width)) * c;
546
- o({
547
- type: e.SEEK,
548
- detail: i
549
- }), r?.(i);
550
- };
551
- return g.useEffect(() => {
552
- if (u) {
553
- let e = (e) => {
554
- T(e.clientX);
555
- }, t = () => {
556
- d(!1);
557
- };
558
- return document.addEventListener("mousemove", e), document.addEventListener("mouseup", t), () => {
559
- document.removeEventListener("mousemove", e), document.removeEventListener("mouseup", t);
560
- };
561
- }
562
- }, [u]), /* @__PURE__ */ (0, x.jsxs)("div", {
563
- className: m("group relative", i),
564
- children: [f > 0 && /* @__PURE__ */ (0, x.jsxs)("div", {
565
- className: "pointer-events-none absolute bottom-full z-50 mb-2",
566
- style: {
567
- left: `${_}px`,
568
- transform: "translateX(-50%)"
569
- },
570
- children: [n && /* @__PURE__ */ (0, x.jsx)("div", {
571
- className: "mb-1 rounded bg-black/90 p-1",
572
- children: /* @__PURE__ */ (0, x.jsx)("div", { className: "h-18 w-32 rounded bg-gray-800" })
573
- }), /* @__PURE__ */ (0, x.jsx)("div", {
574
- className: "whitespace-nowrap rounded bg-black/90 px-2 py-1 text-white text-xs",
575
- children: h(f)
576
- })]
577
- }), /* @__PURE__ */ (0, x.jsxs)("div", {
578
- ref: S,
579
- className: "minimal-seekbar",
580
- onMouseDown: (e) => {
581
- e.preventDefault(), d(!0), T(e.clientX);
582
- },
583
- onMouseMove: (e) => {
584
- if (!S.current || c === 0) return;
585
- let t = S.current.getBoundingClientRect(), n = Math.max(0, Math.min(1, (e.clientX - t.left) / t.width)) * c;
586
- p(n), v(e.clientX - t.left), u && T(e.clientX);
587
- },
588
- onMouseUp: () => {
589
- d(!1);
590
- },
591
- onMouseLeave: () => {
592
- d(!1), p(0);
593
- },
594
- children: [
595
- /* @__PURE__ */ (0, x.jsx)("div", {
596
- className: "minimal-seekbar-buffered",
597
- style: { width: `${w}%` }
598
- }),
599
- /* @__PURE__ */ (0, x.jsx)("div", {
600
- className: "minimal-seekbar-progress",
601
- style: { width: `${C}%` }
602
- }),
603
- /* @__PURE__ */ (0, x.jsx)("div", {
604
- className: m("minimal-seekbar-thumb", u && "active"),
605
- style: { left: `${C}%` }
606
- })
607
- ]
608
- })]
609
- });
610
- }
611
- //#endregion
612
- //#region src/components/variants/minimal/MinimalVolumeControl.tsx
613
- function se({ icons: n, className: r }) {
614
- let i = a(), o = t((e) => e.volume), s = t((e) => e.isMuted), [c, l] = b(!1), u = (t) => {
615
- i({
616
- type: e.SET_VOLUME,
617
- detail: parseFloat(t.target.value)
618
- });
619
- }, d = () => {
620
- i({ type: e.TOGGLE_MUTE });
621
- }, f = s || o === 0 ? n.volumeMuted : n.volume;
622
- return f ? /* @__PURE__ */ (0, x.jsxs)("div", {
623
- className: m("minimal-volume-group flex items-center gap-2", r),
624
- onMouseEnter: () => l(!0),
625
- onMouseLeave: () => l(!1),
626
- children: [/* @__PURE__ */ (0, x.jsx)("button", {
627
- 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",
628
- onClick: d,
629
- "aria-label": s ? "Unmute" : "Mute",
630
- children: /* @__PURE__ */ (0, x.jsx)(f, { size: 18 })
631
- }), /* @__PURE__ */ (0, x.jsx)("div", {
632
- className: m("overflow-hidden transition-all duration-250", c ? "w-20 opacity-100" : "w-0 opacity-0"),
633
- children: /* @__PURE__ */ (0, x.jsx)("input", {
634
- type: "range",
635
- min: "0",
636
- max: "1",
637
- step: "0.01",
638
- value: s ? 0 : o,
639
- onChange: u,
640
- className: "minimal-volume-slider h-1 w-full cursor-pointer appearance-none rounded-full bg-white/20",
641
- style: { background: `linear-gradient(to right, rgb(59 130 246) 0%, rgb(59 130 246) ${(s ? 0 : o) * 100}%, rgba(255,255,255,0.2) ${(s ? 0 : o) * 100}%, rgba(255,255,255,0.2) 100%)` }
642
- })
643
- })]
644
- }) : null;
645
- }
646
- //#endregion
647
- //#region src/components/variants/minimal/MinimalControls.tsx
648
- function ce({ visible: e, icons: t, isPlaying: n, showQualitySelector: r, showSpeedControl: i, qualities: a, thumbnails: o, onUserInteractionStart: s, onUserInteractionEnd: c, onSeek: l }) {
649
- return /* @__PURE__ */ (0, x.jsxs)("div", {
650
- className: m("minimal-control-bar", "absolute right-0 bottom-0 left-0 z-40", "px-6 py-3 transition-all duration-200", e ? "minimal-controls-visible" : "minimal-controls-hidden"),
651
- "data-hidden": !e,
652
- onMouseDown: s,
653
- onMouseUp: c,
654
- onTouchStart: s,
655
- onTouchEnd: c,
656
- children: [/* @__PURE__ */ (0, x.jsx)("div", {
657
- className: "mb-2",
658
- children: /* @__PURE__ */ (0, x.jsx)(oe, {
659
- thumbnails: o,
660
- onSeek: l
661
- })
662
- }), /* @__PURE__ */ (0, x.jsxs)("div", {
663
- className: "flex items-center justify-between gap-3",
664
- children: [/* @__PURE__ */ (0, x.jsxs)("div", {
665
- className: "flex items-center gap-3",
666
- children: [
667
- /* @__PURE__ */ (0, x.jsx)(ae, {
668
- isPlaying: n,
669
- icons: t
670
- }),
671
- /* @__PURE__ */ (0, x.jsx)(se, { icons: t }),
672
- /* @__PURE__ */ (0, x.jsxs)("div", {
673
- className: "minimal-time select-none font-mono text-sm text-white/90",
674
- children: [
675
- /* @__PURE__ */ (0, x.jsx)(Y, { variant: "current" }),
676
- /* @__PURE__ */ (0, x.jsx)("span", {
677
- className: "mx-1 text-white/60",
678
- children: "/"
679
- }),
680
- /* @__PURE__ */ (0, x.jsx)(Y, { variant: "duration" })
681
- ]
682
- })
683
- ]
684
- }), /* @__PURE__ */ (0, x.jsxs)("div", {
685
- className: "flex items-center gap-2",
686
- children: [
687
- r && a && a.length > 1 && /* @__PURE__ */ (0, x.jsx)("button", {
688
- className: "minimal-btn w-auto px-3 font-medium text-xs",
689
- title: "Quality",
690
- children: a.find((e) => e.default)?.quality || a[0]?.quality || "Auto"
691
- }),
692
- i && /* @__PURE__ */ (0, x.jsx)("button", {
693
- className: "minimal-btn w-auto px-3 font-medium text-xs",
694
- title: "Playback Speed",
695
- children: "1x"
696
- }),
697
- t.settings && (r || i) && /* @__PURE__ */ (0, x.jsx)("button", {
698
- className: "minimal-btn",
699
- title: "Settings",
700
- children: /* @__PURE__ */ (0, x.jsx)(t.settings, { size: 18 })
701
- }),
702
- /* @__PURE__ */ (0, x.jsx)("button", {
703
- className: "minimal-btn",
704
- title: "Toggle Fullscreen",
705
- onClick: () => {
706
- document.fullscreenElement ? document.exitFullscreen?.() : document.documentElement.requestFullscreen?.();
707
- },
708
- children: document.fullscreenElement ? t.exitFullscreen && /* @__PURE__ */ (0, x.jsx)(t.exitFullscreen, { size: 18 }) : t.fullscreen && /* @__PURE__ */ (0, x.jsx)(t.fullscreen, { size: 18 })
709
- })
710
- ]
711
- })]
712
- })]
713
- });
714
- }
715
- //#endregion
716
- //#region src/components/variants/minimal/MinimalLoading.tsx
717
- function le({ icon: e, className: t }) {
718
- return /* @__PURE__ */ (0, x.jsx)("div", {
719
- className: m("absolute inset-0 z-40 flex items-center justify-center", "bg-black/60 backdrop-blur-sm", t),
720
- children: /* @__PURE__ */ (0, x.jsx)("div", {
721
- className: "text-white",
722
- children: e ? /* @__PURE__ */ (0, x.jsx)(e, {
723
- size: 48,
724
- className: "animate-spin"
725
- }) : /* @__PURE__ */ (0, x.jsx)("div", { className: "minimal-spinner h-12 w-12 animate-spin rounded-full border-3 border-white/20 border-t-white" })
726
- })
727
- });
728
- }
729
- //#endregion
730
- //#region src/components/variants/minimal/MinimalOverlay.tsx
731
- function ue({ visible: e, showCenterButton: t = !1, isPlaying: n = !1, icons: r, onPlayPause: i, className: a }) {
732
- if (!e || !t) return null;
733
- let o = r.play, s = r.pause;
734
- return !o || !s ? null : /* @__PURE__ */ (0, x.jsx)("div", {
735
- className: m("absolute inset-0 z-30 flex items-center justify-center", "bg-black/20 transition-opacity duration-200", a),
736
- onClick: i,
737
- children: /* @__PURE__ */ (0, x.jsx)("button", {
738
- className: m("minimal-center-play", "h-20 w-20 rounded-full", "flex items-center justify-center", "text-white", "transition-all duration-200", "hover:scale-110", "active:scale-95"),
739
- onClick: (e) => {
740
- e.stopPropagation(), i?.();
741
- },
742
- "aria-label": n ? "Pause" : "Play",
743
- children: n ? /* @__PURE__ */ (0, x.jsx)(s, { size: 48 }) : /* @__PURE__ */ (0, x.jsx)(o, {
744
- size: 48,
745
- className: "ml-1"
746
- })
747
- })
748
- });
749
- }
750
- //#endregion
751
- //#region src/components/variants/minimal/MinimalMediaPlayer.tsx
752
- function de({ src: e, poster: t, autoPlay: n = !1, muted: r = !1, loop: i = !1, autoHideControls: a = !0, hideDelay: o = 2500, theme: s = "dark", customIcons: c, showCenterPlayButton: l = !0, showLoadingSpinner: u = !0, className: d, onPlay: f, onPause: p, onEnded: h, onTimeUpdate: g, onVolumeChange: _, onSeek: S, onError: C, watermark: T, qualities: E, showQualitySelector: D = !1, showSpeedControl: O = !1, thumbnails: k }) {
753
- let [A, j] = b(!0), [M, N] = b(!1), [P, F] = b(!1), [I, L] = b(null), R = y(null), z = y(null), [B, V] = b(!1), [H, U] = b(!1), W = {
754
- ...q,
755
- ...c
756
- }, G = () => {
757
- a && (R.current && clearTimeout(R.current), j(!0), !H && M && (R.current = setTimeout(() => {
758
- j(!1);
759
- }, o)));
760
- }, ee = () => {
761
- G();
762
- }, te = () => {
763
- V(!0), j(!0), R.current && clearTimeout(R.current);
764
- }, ne = () => {
765
- V(!1), M && a && !H && (R.current = setTimeout(() => {
766
- j(!1);
767
- }, 500));
768
- }, K = () => {
769
- U(!0), j(!0), R.current && clearTimeout(R.current);
770
- }, re = () => {
771
- U(!1), G();
772
- }, J = (e) => {
773
- N(e), e ? (f?.(), G()) : (p?.(), j(!0), R.current && clearTimeout(R.current));
774
- }, Y = () => {
775
- F(!0), L(null);
776
- }, ae = () => {
777
- F(!1);
778
- }, oe = (e) => {
779
- F(!1), L(e.message || "An error occurred"), C?.(e);
780
- };
781
- v(() => () => {
782
- R.current && clearTimeout(R.current);
783
- }, []);
784
- let se = E && E.length > 0 && (E.find((e) => e.default)?.src || E[0]?.src) || (typeof e == "string" ? e : e[0]);
785
- return /* @__PURE__ */ (0, x.jsx)("div", {
786
- ref: z,
787
- className: m("minimal-player theme-minimal relative overflow-hidden rounded-lg bg-black", `theme-minimal-${s}`, d),
788
- "data-theme": s,
789
- onMouseMove: ee,
790
- onMouseEnter: te,
791
- onMouseLeave: ne,
792
- children: /* @__PURE__ */ (0, x.jsxs)(w, {
793
- className: "relative h-full w-full",
794
- autoHide: !1,
795
- enableGestures: !0,
796
- enableMobileOptimizations: !0,
797
- children: [
798
- /* @__PURE__ */ (0, x.jsx)(ie, {
799
- src: se,
800
- poster: t,
801
- autoPlay: n,
802
- muted: r,
803
- loop: i,
804
- playsInline: !0,
805
- crossOrigin: "anonymous",
806
- onPlay: () => J(!0),
807
- onPause: () => J(!1),
808
- onEnded: h,
809
- onTimeUpdate: (e) => {
810
- let t = e.currentTarget;
811
- g?.(t.currentTime);
812
- },
813
- onVolumeChange: (e) => {
814
- let t = e.currentTarget;
815
- _?.(t.volume);
816
- },
817
- onLoadStart: Y,
818
- onLoadedData: ae,
819
- onError: (e) => oe(/* @__PURE__ */ Error("Failed to load video"))
820
- }),
821
- u && P && /* @__PURE__ */ (0, x.jsx)(le, { icon: W.spinner }),
822
- I && /* @__PURE__ */ (0, x.jsx)("div", {
823
- className: "absolute inset-0 z-50 flex items-center justify-center bg-black/80",
824
- children: /* @__PURE__ */ (0, x.jsxs)("div", {
825
- className: "text-center",
826
- children: [
827
- /* @__PURE__ */ (0, x.jsx)("div", {
828
- className: "mb-4 text-red-500",
829
- children: /* @__PURE__ */ (0, x.jsx)("svg", {
830
- className: "mx-auto h-12 w-12",
831
- fill: "none",
832
- viewBox: "0 0 24 24",
833
- stroke: "currentColor",
834
- children: /* @__PURE__ */ (0, x.jsx)("path", {
835
- strokeLinecap: "round",
836
- strokeLinejoin: "round",
837
- strokeWidth: 2,
838
- d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
839
- })
840
- })
841
- }),
842
- /* @__PURE__ */ (0, x.jsx)("p", {
843
- className: "mb-2 text-lg text-white",
844
- children: "Playback Error"
845
- }),
846
- /* @__PURE__ */ (0, x.jsx)("p", {
847
- className: "text-gray-400 text-sm",
848
- children: I
849
- })
850
- ]
851
- })
852
- }),
853
- T && /* @__PURE__ */ (0, x.jsx)("div", {
854
- className: m("pointer-events-none absolute z-20", {
855
- "top-4 left-4": T.position === "top-left",
856
- "top-4 right-4": T.position === "top-right",
857
- "bottom-16 left-4": T.position === "bottom-left",
858
- "right-4 bottom-16": T.position === "bottom-right"
859
- }),
860
- style: { opacity: T.opacity || .7 },
861
- children: /* @__PURE__ */ (0, x.jsx)("img", {
862
- src: T.src,
863
- alt: "",
864
- className: m("object-contain", {
865
- "h-8": T.size === "small",
866
- "h-12": T.size === "medium" || !T.size,
867
- "h-16": T.size === "large"
868
- })
869
- })
870
- }),
871
- l && !M && !P && /* @__PURE__ */ (0, x.jsx)(ue, {
872
- visible: !0,
873
- showCenterButton: !0,
874
- isPlaying: M,
875
- icons: W,
876
- onPlayPause: () => {
877
- let e = z.current?.querySelector("video");
878
- e && (M ? e.pause() : e.play());
879
- }
880
- }),
881
- /* @__PURE__ */ (0, x.jsx)(ce, {
882
- visible: A || !M || B,
883
- icons: W,
884
- isPlaying: M,
885
- showQualitySelector: D,
886
- showSpeedControl: O,
887
- qualities: E,
888
- thumbnails: k,
889
- onUserInteractionStart: K,
890
- onUserInteractionEnd: re,
891
- onSeek: S
892
- })
893
- ]
894
- })
895
- });
896
- }
897
- //#endregion
898
- //#region src/assets/mona-loading.gif
899
- var fe = "data:image/gif;base64,R0lGODlhgAGAAZECAPr7/ERNVv///wAAACH/C05FVFNDQVBFMi4wAwEAAAAh/wtYTVAgRGF0YVhNUDw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo5OTk5ODkxZS0wMWE2LTRlMTItYWM1Mi00YTIzMzI1MTViYjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MkU2QTk5NkYxM0UzMTFFQzg5RkRCRTMwRTcyQUZCRjIiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MkU2QTk5NkUxM0UzMTFFQzg5RkRCRTMwRTcyQUZCRjIiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKE1hY2ludG9zaCkiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxOTQyMDFlMi00OGRjLTQ3OTgtOTFlNi05ZjkyNzhjNTJlZTUiIHN0UmVmOmRvY3VtZW50SUQ9ImFkb2JlOmRvY2lkOnBob3Rvc2hvcDplMjk3YTUwZC00MTM4LWVmNDYtYTY3Ni1kZTkzNDU1ZjNmOTkiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRm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";
900
- //#endregion
901
- //#region src/components/AnimateLoading.tsx
902
- function pe(e) {
903
- if (typeof e == "string" && e.length > 0) return e;
904
- if (e && typeof e == "object" && "src" in e && typeof e.src == "string") return e.src;
905
- }
906
- var me = pe(fe);
907
- function he({ loadingText: e = "Loading...", gifSrc: t, showFallback: n = !0, className: r, ...i }) {
908
- let [a, o] = b(!1), [s, c] = b(!1), l = [
909
- t,
910
- me,
911
- "/mona-loading.gif",
912
- "./mona-loading.gif",
913
- "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
914
- ].filter(Boolean), [u, d] = b(0), f = l[u], p = () => {
915
- u < l.length - 1 ? d(u + 1) : o(!0);
916
- }, h = () => /* @__PURE__ */ (0, x.jsxs)("div", {
917
- className: "relative h-12 w-12",
918
- children: [
919
- /* @__PURE__ */ (0, x.jsx)("div", { className: "absolute inset-0 animate-spin rounded-full bg-gradient-to-r from-cyan-400 via-blue-500 to-cyan-400 opacity-75" }),
920
- /* @__PURE__ */ (0, x.jsx)("div", { className: "absolute inset-1 rounded-full bg-black/90" }),
921
- /* @__PURE__ */ (0, x.jsx)("div", {
922
- className: "absolute inset-0 flex items-center justify-center",
923
- children: /* @__PURE__ */ (0, x.jsxs)("div", {
924
- className: "relative",
925
- children: [
926
- /* @__PURE__ */ (0, x.jsx)("div", { className: "h-8 w-8 rounded-full border-2 border-white/20" }),
927
- /* @__PURE__ */ (0, x.jsx)("div", { className: "absolute inset-0 h-8 w-8 animate-spin rounded-full border-2 border-transparent border-t-cyan-400" }),
928
- /* @__PURE__ */ (0, x.jsx)("div", {
929
- className: "absolute inset-0 flex items-center justify-center",
930
- children: /* @__PURE__ */ (0, x.jsx)("div", { className: "h-2 w-2 animate-pulse rounded-full bg-cyan-400" })
931
- })
932
- ]
933
- })
934
- })
935
- ]
936
- });
937
- return /* @__PURE__ */ (0, x.jsxs)("div", {
938
- className: m("flex flex-col items-center justify-center space-y-2 rounded py-2 text-white", r),
939
- ...i,
940
- children: [
941
- (!s || a) && n && /* @__PURE__ */ (0, x.jsx)(h, {}),
942
- !a && f && /* @__PURE__ */ (0, x.jsx)("img", {
943
- alt: "loading",
944
- height: 50,
945
- width: 50,
946
- src: f,
947
- onError: p,
948
- onLoad: () => c(!0),
949
- className: m("object-contain", !s && "hidden"),
950
- style: { display: s ? "block" : "none" }
951
- }),
952
- /* @__PURE__ */ (0, x.jsx)("span", {
953
- className: "mt-2 text-sm tracking-wider",
954
- children: e
955
- })
956
- ]
957
- });
958
- }
959
- //#endregion
960
- //#region src/components/LoadingState.tsx
961
- var ge = {
962
- sm: {
963
- container: "h-8 w-8",
964
- spinner: "h-6 w-6 border-2",
965
- dots: "h-1.5 w-1.5"
966
- },
967
- md: {
968
- container: "h-12 w-12",
969
- spinner: "h-10 w-10 border-3",
970
- dots: "h-2 w-2"
971
- },
972
- lg: {
973
- container: "h-16 w-16",
974
- spinner: "h-14 w-14 border-4",
975
- dots: "h-2.5 w-2.5"
976
- },
977
- xl: {
978
- container: "h-20 w-20",
979
- spinner: "h-18 w-18 border-4",
980
- dots: "h-3 w-3"
981
- }
982
- }, X = {
983
- initial: {
984
- wrapper: "absolute inset-0 z-50 flex items-center justify-center",
985
- background: "bg-black/80"
986
- },
987
- seeking: {
988
- wrapper: "absolute inset-0 z-40 flex items-center justify-center",
989
- background: "bg-black/40"
990
- },
991
- buffering: {
992
- wrapper: "absolute inset-0 z-45 flex items-center justify-center",
993
- background: "bg-black/60"
994
- }
995
- }, _e = function({ context: e = "initial", message: t, className: n, textSize: r = "text-sm" }) {
996
- let i = X[e];
997
- return /* @__PURE__ */ (0, x.jsx)("div", {
998
- className: m(i.wrapper, i.background, n),
999
- children: /* @__PURE__ */ (0, x.jsx)(he, {
1000
- loadingText: (() => {
1001
- if (t) return t;
1002
- switch (e) {
1003
- case "initial": return "Loading video...";
1004
- case "seeking": return "Seeking...";
1005
- case "buffering": return "Buffering...";
1006
- default: return "Loading...";
1007
- }
1008
- })(),
1009
- className: m("text-white", r)
1010
- })
1011
- });
1012
- }, Z = function({ variant: e = "animate", context: t = "initial", size: n = "md", color: r, message: i, showMessage: a = !0, className: o, style: s }) {
1013
- let c = ge[n], l = X[t];
1014
- return e === "animate" ? /* @__PURE__ */ (0, x.jsx)(_e, {
1015
- context: t,
1016
- message: i,
1017
- className: o,
1018
- textSize: n === "sm" ? "text-xs" : n === "lg" ? "text-base" : "text-sm"
1019
- }) : /* @__PURE__ */ (0, x.jsx)("div", {
1020
- className: m(l.wrapper, l.background),
1021
- children: /* @__PURE__ */ (0, x.jsxs)("div", {
1022
- className: "flex flex-col items-center gap-4",
1023
- children: [/* @__PURE__ */ (0, x.jsx)("div", {
1024
- className: m(c.container, "flex items-center justify-center"),
1025
- children: (() => {
1026
- switch (e) {
1027
- case "spinner": return /* @__PURE__ */ (0, x.jsx)("div", {
1028
- className: m("minimal-loading-spinner animate-spin rounded-full", "border-white/20 border-t-cyan-500", c.spinner, o),
1029
- style: {
1030
- borderTopColor: r || void 0,
1031
- ...s
1032
- }
1033
- });
1034
- case "dots": return /* @__PURE__ */ (0, x.jsx)("div", {
1035
- className: "flex items-center gap-1",
1036
- children: [
1037
- 0,
1038
- 1,
1039
- 2
1040
- ].map((e) => /* @__PURE__ */ (0, x.jsx)("div", {
1041
- className: m("minimal-loading-dot rounded-full bg-cyan-500", c.dots, o),
1042
- style: {
1043
- backgroundColor: r || void 0,
1044
- animationDelay: `${e * 150}ms`,
1045
- ...s
1046
- }
1047
- }, e))
1048
- });
1049
- case "skeleton": return /* @__PURE__ */ (0, x.jsxs)("div", {
1050
- className: m("space-y-3", o),
1051
- children: [
1052
- /* @__PURE__ */ (0, x.jsx)("div", { className: "minimal-loading-skeleton h-4 w-32 rounded bg-white/10" }),
1053
- /* @__PURE__ */ (0, x.jsx)("div", { className: "minimal-loading-skeleton h-3 w-24 rounded bg-white/10" }),
1054
- /* @__PURE__ */ (0, x.jsx)("div", { className: "minimal-loading-skeleton h-3 w-28 rounded bg-white/10" })
1055
- ]
1056
- });
1057
- default: return null;
1058
- }
1059
- })()
1060
- }), a && /* @__PURE__ */ (0, x.jsxs)("div", {
1061
- className: "text-center",
1062
- children: [/* @__PURE__ */ (0, x.jsx)("p", {
1063
- className: "font-medium text-sm text-white/90",
1064
- children: (() => {
1065
- if (i) return i;
1066
- switch (t) {
1067
- case "initial": return "Loading video...";
1068
- case "seeking": return "Seeking...";
1069
- case "buffering": return "Buffering...";
1070
- default: return "Loading...";
1071
- }
1072
- })()
1073
- }), t === "buffering" && /* @__PURE__ */ (0, x.jsx)("p", {
1074
- className: "mt-1 text-white/60 text-xs",
1075
- children: "Please wait..."
1076
- })]
1077
- })]
1078
- })
1079
- });
1080
- }, Q = function({ children: e, context: t = "initial", className: n }) {
1081
- let r = X[t];
1082
- return /* @__PURE__ */ (0, x.jsx)("div", {
1083
- className: m(r.wrapper, r.background, n),
1084
- children: e
1085
- });
1086
- }, $ = {
1087
- Initial: (e) => /* @__PURE__ */ (0, x.jsx)(Z, {
1088
- variant: "animate",
1089
- context: "initial",
1090
- size: "md",
1091
- ...e
1092
- }),
1093
- Seeking: (e) => /* @__PURE__ */ (0, x.jsx)(Z, {
1094
- variant: "animate",
1095
- context: "seeking",
1096
- size: "sm",
1097
- ...e
1098
- }),
1099
- Buffering: (e) => /* @__PURE__ */ (0, x.jsx)(Z, {
1100
- variant: "animate",
1101
- context: "buffering",
1102
- size: "sm",
1103
- ...e
1104
- })
1105
- }, ve = function({ isPlaying: e, onTogglePlay: t }) {
1106
- if (e) return null;
1107
- let n = q.play;
1108
- return /* @__PURE__ */ (0, x.jsx)("div", {
1109
- className: "minimal-center-play cursor-pointer",
1110
- onClick: t,
1111
- children: n && /* @__PURE__ */ (0, x.jsx)(n, { size: 60 })
1112
- });
1113
- }, ye = function({ isPlaying: e, onTogglePlay: t, onSeekBackward: n, onSeekForward: r }) {
1114
- let i = q.play, a = q.pause;
1115
- return /* @__PURE__ */ (0, x.jsxs)("div", {
1116
- className: "flex items-center gap-2",
1117
- children: [
1118
- /* @__PURE__ */ (0, x.jsx)("button", {
1119
- className: "minimal-btn size-15",
1120
- onClick: t,
1121
- "aria-label": e ? "Pause" : "Play",
1122
- children: e ? a && /* @__PURE__ */ (0, x.jsx)(a, { size: 32 }) : i && /* @__PURE__ */ (0, x.jsx)(i, { size: 32 })
1123
- }),
1124
- /* @__PURE__ */ (0, x.jsx)("button", {
1125
- className: "minimal-btn h-9 w-9",
1126
- onClick: n,
1127
- "aria-label": "Backward 10 seconds",
1128
- title: "Backward 10s (J)",
1129
- children: /* @__PURE__ */ (0, x.jsx)(ne, { size: 18 })
1130
- }),
1131
- /* @__PURE__ */ (0, x.jsx)("button", {
1132
- className: "minimal-btn h-9 w-9",
1133
- onClick: r,
1134
- "aria-label": "Forward 10 seconds",
1135
- title: "Forward 10s (L)",
1136
- children: /* @__PURE__ */ (0, x.jsx)(te, { size: 18 })
1137
- })
1138
- ]
1139
- });
1140
- }, be = function({ showSettings: e, playbackRate: t, onToggleSettings: n, onChangePlaybackRate: r }) {
1141
- let i = [
1142
- .25,
1143
- .5,
1144
- .75,
1145
- 1,
1146
- 1.25,
1147
- 1.5,
1148
- 1.75,
1149
- 2
1150
- ], a = _((e) => {
1151
- e.stopPropagation(), n();
1152
- }, [n]), o = _((e) => {
1153
- e.stopPropagation();
1154
- }, []);
1155
- return /* @__PURE__ */ (0, x.jsxs)("div", {
1156
- className: "relative",
1157
- style: { zIndex: e ? 60 : "auto" },
1158
- children: [/* @__PURE__ */ (0, x.jsx)("button", {
1159
- className: m("minimal-btn h-9 w-9", e && "text-cyan-500"),
1160
- onClick: a,
1161
- "aria-label": "Settings",
1162
- children: q.settings && /* @__PURE__ */ (0, x.jsx)(q.settings, { size: 18 })
1163
- }), e && /* @__PURE__ */ (0, x.jsxs)("div", {
1164
- className: "absolute right-0 mb-2 min-w-[200px] rounded-lg border border-gray-700 bg-gray-900 py-2 shadow-xl",
1165
- style: {
1166
- bottom: "100%",
1167
- zIndex: 1e3
1168
- },
1169
- onClick: o,
1170
- children: [/* @__PURE__ */ (0, x.jsx)("div", {
1171
- className: "px-3 py-1 text-gray-400 text-xs uppercase tracking-wider",
1172
- children: "Speed"
1173
- }), /* @__PURE__ */ (0, x.jsx)("div", {
1174
- className: "px-1",
1175
- children: i.map((e) => /* @__PURE__ */ (0, x.jsx)("button", {
1176
- className: m("w-full rounded px-3 py-1.5 text-left text-sm transition-colors hover:bg-gray-800", "text-white", t === e && "bg-cyan-700/20 text-cyan-400"),
1177
- onClick: () => r(e),
1178
- children: e === 1 ? "Normal" : `${e}x`
1179
- }, e))
1180
- })]
1181
- })]
1182
- });
1183
- }, xe = function({ subtitleSrc: e, subtitlesEnabled: t, subtitleTracks: n, currentTrackId: r, hasSubtitles: i, subtitleLoadError: a, isFullscreen: o, showSettings: s, playbackRate: c, onToggleSubtitles: l, onSelectSubtitleTrack: u, onTakeScreenshot: d, onToggleFullscreen: f, onToggleSettings: p, onChangePlaybackRate: h }) {
1184
- let [g, _] = b(!1), S = y(null), C = q.fullscreen, w = q.exitFullscreen;
1185
- return v(() => {
1186
- let e = (e) => {
1187
- S.current && !S.current.contains(e.target) && _(!1);
1188
- };
1189
- if (g) return document.addEventListener("mousedown", e), () => document.removeEventListener("mousedown", e);
1190
- }, [g]), /* @__PURE__ */ (0, x.jsxs)("div", {
1191
- className: "flex items-center gap-2",
1192
- children: [
1193
- i && /* @__PURE__ */ (0, x.jsxs)("div", {
1194
- className: "relative",
1195
- ref: S,
1196
- children: [/* @__PURE__ */ (0, x.jsx)("button", {
1197
- className: m("minimal-btn h-9 w-9", t && "text-cyan-500", a && "text-red-500"),
1198
- onClick: () => {
1199
- n && n.length > 0 ? _(!g) : l();
1200
- },
1201
- "aria-label": "Subtitles",
1202
- title: a ? "Subtitle Error" : "Subtitles (C)",
1203
- children: /* @__PURE__ */ (0, x.jsx)(K, { size: 18 })
1204
- }), g && n && n.length > 0 && /* @__PURE__ */ (0, x.jsxs)("div", {
1205
- className: "absolute right-0 bottom-full mb-2 w-48 rounded-md bg-gray-900/95 py-2 shadow-lg backdrop-blur-sm",
1206
- children: [
1207
- /* @__PURE__ */ (0, x.jsx)("div", {
1208
- className: "px-3 py-1 font-semibold text-gray-400 text-xs",
1209
- children: "Subtitles"
1210
- }),
1211
- /* @__PURE__ */ (0, x.jsx)("button", {
1212
- className: m("flex w-full items-center px-3 py-1.5 text-gray-300 text-sm hover:bg-gray-800", !t && "bg-gray-800 text-cyan-500"),
1213
- onClick: () => {
1214
- u?.(null), _(!1);
1215
- },
1216
- children: "Off"
1217
- }),
1218
- n.map((e) => /* @__PURE__ */ (0, x.jsxs)("button", {
1219
- className: m("flex w-full items-center px-3 py-1.5 text-gray-300 text-sm hover:bg-gray-800", r === e.id && "bg-gray-800 text-cyan-500"),
1220
- onClick: () => {
1221
- u?.(e.id), _(!1);
1222
- },
1223
- children: [/* @__PURE__ */ (0, x.jsx)("span", { children: e.label }), e.language && /* @__PURE__ */ (0, x.jsxs)("span", {
1224
- className: "ml-2 text-gray-500 text-xs",
1225
- children: [
1226
- "(",
1227
- e.language,
1228
- ")"
1229
- ]
1230
- })]
1231
- }, e.id)),
1232
- a && /* @__PURE__ */ (0, x.jsx)("div", {
1233
- className: "mt-2 border-gray-800 border-t px-3 py-2",
1234
- children: /* @__PURE__ */ (0, x.jsx)("p", {
1235
- className: "text-red-400 text-xs",
1236
- children: "Failed to load subtitles"
1237
- })
1238
- })
1239
- ]
1240
- })]
1241
- }),
1242
- /* @__PURE__ */ (0, x.jsx)("button", {
1243
- className: "minimal-btn h-9 w-9",
1244
- onClick: (e) => d(e.ctrlKey || e.metaKey),
1245
- "aria-label": "Take Screenshot",
1246
- title: "Screenshot (S) - Ctrl+Click to copy",
1247
- children: /* @__PURE__ */ (0, x.jsx)(re, { size: 18 })
1248
- }),
1249
- /* @__PURE__ */ (0, x.jsx)(be, {
1250
- showSettings: s,
1251
- playbackRate: c,
1252
- onToggleSettings: p,
1253
- onChangePlaybackRate: h
1254
- }),
1255
- /* @__PURE__ */ (0, x.jsx)("button", {
1256
- className: "minimal-btn h-9 w-9",
1257
- onClick: f,
1258
- "aria-label": o ? "Exit Fullscreen" : "Enter Fullscreen",
1259
- title: "Fullscreen (F)",
1260
- children: o ? w && /* @__PURE__ */ (0, x.jsx)(w, { size: 18 }) : C && /* @__PURE__ */ (0, x.jsx)(C, { size: 18 })
1261
- })
1262
- ]
1263
- });
1264
- }, Se = function({ currentTime: e, duration: t, bufferedRanges: n = [], isSeeking: r = !1, onSeek: i }) {
1265
- let [a, o] = b(!1), [s, c] = b(0), [l, u] = b(!1), [d, f] = b({
1266
- x: 0,
1267
- y: 0
1268
- }), p = y(null), h = t > 0 ? e / t * 100 : 0;
1269
- return /* @__PURE__ */ (0, x.jsxs)("div", {
1270
- className: "relative mb-3",
1271
- children: [/* @__PURE__ */ (0, x.jsxs)("div", {
1272
- ref: p,
1273
- className: m("minimal-seekbar group relative cursor-pointer", r && "minimal-seekbar-seeking"),
1274
- onClick: (e) => {
1275
- if (t === 0) return;
1276
- let n = e.currentTarget.getBoundingClientRect(), r = (e.clientX - n.left) / n.width, a = Math.max(0, Math.min(t, r * t));
1277
- f({
1278
- x: e.clientX - n.left,
1279
- y: e.clientY - n.top
1280
- }), u(!0), setTimeout(() => u(!1), 600), i(a);
1281
- },
1282
- onMouseMove: (e) => {
1283
- if (!p.current) return;
1284
- let t = p.current.getBoundingClientRect(), n = (e.clientX - t.left) / t.width * 100;
1285
- c(Math.max(0, Math.min(100, n)));
1286
- },
1287
- onMouseEnter: () => o(!0),
1288
- onMouseLeave: () => o(!1),
1289
- children: [
1290
- n.map((e, n) => {
1291
- let r = t > 0 ? e.start / t * 100 : 0, i = t > 0 ? (e.end - e.start) / t * 100 : 0;
1292
- return /* @__PURE__ */ (0, x.jsx)("div", {
1293
- className: "minimal-seekbar-buffered",
1294
- style: {
1295
- left: `${r}%`,
1296
- width: `${i}%`
1297
- }
1298
- }, n);
1299
- }),
1300
- /* @__PURE__ */ (0, x.jsx)("div", {
1301
- className: m("minimal-seekbar-progress", r && "minimal-seekbar-progress-seeking"),
1302
- style: { width: `${h}%` }
1303
- }),
1304
- a && !r && /* @__PURE__ */ (0, x.jsx)("div", {
1305
- className: "minimal-seekbar-hover-indicator",
1306
- style: { left: `${s}%` }
1307
- }),
1308
- /* @__PURE__ */ (0, x.jsx)("div", {
1309
- className: m("minimal-seekbar-thumb", (a || r) && "opacity-100", r && "minimal-seekbar-thumb-seeking"),
1310
- style: { left: `${h}%` }
1311
- }),
1312
- l && /* @__PURE__ */ (0, x.jsx)("div", {
1313
- className: "minimal-seekbar-ripple",
1314
- style: {
1315
- left: d.x,
1316
- top: d.y
1317
- }
1318
- })
1319
- ]
1320
- }), r && /* @__PURE__ */ (0, x.jsx)("div", {
1321
- className: "-top-6 -translate-x-1/2 absolute left-1/2 transform",
1322
- children: /* @__PURE__ */ (0, x.jsx)("div", {
1323
- className: "rounded bg-black/80 px-2 py-1 text-white text-xs backdrop-blur-sm",
1324
- children: "Seeking..."
1325
- })
1326
- })]
1327
- });
1328
- }, Ce = function({ currentTime: e, duration: t }) {
1329
- return /* @__PURE__ */ (0, x.jsxs)("div", {
1330
- className: "font-mono text-sm text-white",
1331
- children: [
1332
- h(e),
1333
- " / ",
1334
- h(t)
1335
- ]
1336
- });
1337
- }, we = function({ volume: e, isMuted: t, showVolumeSlider: n, onToggleMute: r, onVolumeChange: i, onShowVolumeSlider: a, orientation: o = "horizontal", className: s }) {
1338
- let c = q.volume, l = q.volumeMuted, u = y(null), d = y(null), f = y(!1), [p, h] = g.useState(!1), [b, S] = g.useState(!1), C = y(null);
1339
- _((e) => {
1340
- i(parseFloat(e.target.value));
1341
- }, [i]);
1342
- let w = _((e, t) => {
1343
- let n = t ? d : u;
1344
- if (!n.current) return;
1345
- let r = n.current.getBoundingClientRect(), a;
1346
- a = t ? Math.max(0, Math.min(1, 1 - (e.clientY - r.top) / r.height)) : Math.max(0, Math.min(1, (e.clientX - r.left) / r.width)), i(a);
1347
- }, [i]), T = _((e, t) => {
1348
- e.preventDefault(), e.stopPropagation(), f.current = !0, h(!0), w(e, t);
1349
- }, [w]);
1350
- v(() => {
1351
- let e = (e) => {
1352
- if (!f.current) return;
1353
- let t = o === "vertical" ? d : u;
1354
- if (!t.current) return;
1355
- let n = t.current.getBoundingClientRect(), r;
1356
- r = o === "horizontal" ? Math.max(0, Math.min(1, (e.clientX - n.left) / n.width)) : Math.max(0, Math.min(1, 1 - (e.clientY - n.top) / n.height)), i(r);
1357
- }, t = () => {
1358
- f.current = !1, h(!1);
1359
- };
1360
- if (p) return document.addEventListener("mousemove", e), document.addEventListener("mouseup", t), () => {
1361
- document.removeEventListener("mousemove", e), document.removeEventListener("mouseup", t);
1362
- };
1363
- }, [
1364
- p,
1365
- o,
1366
- i
1367
- ]);
1368
- let E = _(() => {
1369
- C.current && clearTimeout(C.current), S(!0), a(!0);
1370
- }, [a]), D = _(() => {
1371
- C.current = setTimeout(() => {
1372
- f.current || (S(!1), a(!1));
1373
- }, 200);
1374
- }, [a]);
1375
- v(() => () => {
1376
- C.current && clearTimeout(C.current);
1377
- }, []);
1378
- let O = (t ? 0 : e) * 100;
1379
- return /* @__PURE__ */ (0, x.jsxs)("div", {
1380
- className: m("volume-control-wrapper", o === "vertical" ? "relative" : "flex items-center gap-2", s),
1381
- onMouseEnter: E,
1382
- onMouseLeave: D,
1383
- children: [
1384
- o === "vertical" && /* @__PURE__ */ (0, x.jsx)("div", {
1385
- className: m("volume-slider-vertical", "-translate-x-1/2 absolute bottom-full left-1/2 mb-2", "transition-all duration-300 ease-out", n || b || p ? "pointer-events-auto translate-y-0 opacity-100" : "pointer-events-none translate-y-2 opacity-0"),
1386
- children: /* @__PURE__ */ (0, x.jsxs)("div", {
1387
- className: "rounded-lg bg-black/80 p-3 backdrop-blur-sm",
1388
- children: [/* @__PURE__ */ (0, x.jsxs)("div", {
1389
- ref: d,
1390
- className: "volume-slider-track-vertical group",
1391
- onMouseDown: (e) => T(e, !0),
1392
- onClick: (e) => w(e, !0),
1393
- children: [/* @__PURE__ */ (0, x.jsx)("div", {
1394
- className: "volume-slider-fill-vertical pointer-events-none",
1395
- style: { height: `${O}%` }
1396
- }), /* @__PURE__ */ (0, x.jsx)("div", {
1397
- className: m("volume-slider-thumb-vertical pointer-events-none", p && "active"),
1398
- style: { bottom: `${O}%` }
1399
- })]
1400
- }), /* @__PURE__ */ (0, x.jsxs)("div", {
1401
- className: "mt-2 text-center text-white/70 text-xs",
1402
- children: [Math.round(O), "%"]
1403
- })]
1404
- })
1405
- }),
1406
- /* @__PURE__ */ (0, x.jsx)("button", {
1407
- className: "minimal-btn h-10 w-10",
1408
- onClick: r,
1409
- "aria-label": t ? "Unmute" : "Mute",
1410
- children: t || e === 0 ? l && /* @__PURE__ */ (0, x.jsx)(l, { size: 20 }) : c && /* @__PURE__ */ (0, x.jsx)(c, { size: 20 })
1411
- }),
1412
- o === "horizontal" && /* @__PURE__ */ (0, x.jsx)("div", {
1413
- className: m("volume-slider-horizontal-wrapper", "overflow-hidden transition-all duration-300 ease-out", n || b || p ? "w-24 opacity-100" : "w-0 opacity-0"),
1414
- children: /* @__PURE__ */ (0, x.jsxs)("div", {
1415
- ref: u,
1416
- className: "volume-slider-track-horizontal group",
1417
- onMouseDown: (e) => T(e, !1),
1418
- onClick: (e) => w(e, !1),
1419
- children: [/* @__PURE__ */ (0, x.jsx)("div", {
1420
- className: "volume-slider-fill-horizontal pointer-events-none",
1421
- style: { width: `${O}%` }
1422
- }), /* @__PURE__ */ (0, x.jsx)("div", {
1423
- className: m("volume-slider-thumb-horizontal pointer-events-none", p && "active"),
1424
- style: { left: `${O}%` }
1425
- })]
1426
- })
1427
- })
1428
- ]
1429
- });
1430
- }, Te = function({ controlsVisible: e, currentTime: t, duration: n, isPlaying: r, volume: i, isMuted: a, showVolumeSlider: o, isFullscreen: s, showSettings: c, playbackRate: l, subtitleSrc: u, subtitlesEnabled: d, subtitleTracks: f, currentTrackId: p, hasSubtitles: h, subtitleLoadError: g, volumeOrientation: _ = "horizontal", bufferedRanges: v, isSeeking: y, onSeek: b, onTogglePlay: S, onSeekBackward: C, onSeekForward: w, onToggleMute: T, onVolumeChange: E, onShowVolumeSlider: D, onToggleSubtitles: O, onSelectSubtitleTrack: k, onTakeScreenshot: A, onToggleFullscreen: j, onToggleSettings: M, onChangePlaybackRate: N }) {
1431
- return /* @__PURE__ */ (0, x.jsxs)("div", {
1432
- className: m("minimal-control-bar", "absolute right-0 bottom-0 left-0 z-40", "px-6 py-3 transition-all duration-200", e ? "minimal-controls-visible" : "minimal-controls-hidden"),
1433
- children: [/* @__PURE__ */ (0, x.jsx)(Se, {
1434
- currentTime: t,
1435
- duration: n,
1436
- bufferedRanges: v,
1437
- isSeeking: y,
1438
- onSeek: b
1439
- }), /* @__PURE__ */ (0, x.jsxs)("div", {
1440
- className: "flex items-center justify-between",
1441
- children: [/* @__PURE__ */ (0, x.jsxs)("div", {
1442
- className: "flex items-center gap-2",
1443
- children: [
1444
- /* @__PURE__ */ (0, x.jsx)(ye, {
1445
- isPlaying: r,
1446
- onTogglePlay: S,
1447
- onSeekBackward: C,
1448
- onSeekForward: w
1449
- }),
1450
- /* @__PURE__ */ (0, x.jsx)(we, {
1451
- volume: i,
1452
- isMuted: a,
1453
- showVolumeSlider: o,
1454
- onToggleMute: T,
1455
- onVolumeChange: E,
1456
- onShowVolumeSlider: D,
1457
- orientation: _
1458
- }),
1459
- /* @__PURE__ */ (0, x.jsx)(Ce, {
1460
- currentTime: t,
1461
- duration: n
1462
- })
1463
- ]
1464
- }), /* @__PURE__ */ (0, x.jsx)(xe, {
1465
- subtitleSrc: u,
1466
- subtitlesEnabled: d,
1467
- subtitleTracks: f,
1468
- currentTrackId: p,
1469
- hasSubtitles: h,
1470
- subtitleLoadError: g,
1471
- isFullscreen: s,
1472
- showSettings: c,
1473
- playbackRate: l,
1474
- onToggleSubtitles: O,
1475
- onSelectSubtitleTrack: k,
1476
- onTakeScreenshot: A,
1477
- onToggleFullscreen: j,
1478
- onToggleSettings: M,
1479
- onChangePlaybackRate: N
1480
- })]
1481
- })]
1482
- });
1483
- }, Ee = function({ subtitlesEnabled: e, subtitleText: t }) {
1484
- return !e || !t ? null : /* @__PURE__ */ (0, x.jsx)("div", {
1485
- className: "pointer-events-none absolute right-0 bottom-20 left-0 px-4 text-center",
1486
- children: /* @__PURE__ */ (0, x.jsx)("div", {
1487
- className: "inline-block rounded bg-black/75 px-4 py-2 font-medium text-lg text-white",
1488
- children: t
1489
- })
1490
- });
1491
- }, De = function({ videoRef: e, src: t, poster: n, subtitleSrc: r, subtitlesEnabled: i, crossOrigin: a, onTogglePlay: o }) {
1492
- return /* @__PURE__ */ (0, x.jsx)("video", {
1493
- ref: e,
1494
- crossOrigin: a,
1495
- src: t,
1496
- poster: n,
1497
- className: "h-full w-full object-contain",
1498
- onClick: o,
1499
- children: r && /* @__PURE__ */ (0, x.jsx)("track", {
1500
- kind: "subtitles",
1501
- src: r,
1502
- default: i
1503
- })
1504
- });
1505
- };
1506
- //#endregion
1507
- //#region src/components/variants/minimal/SimpleMinimalPlayer.tsx
1508
- function Oe(e) {
1509
- let { src: t, poster: n, className: r, subtitleSrc: i, subtitleTracks: a, crossOrigin: s, volumeOrientation: c = "horizontal", loadingComponent: u = void 0, showLoadingState: h = !0, loadingProps: g = {} } = e, _ = y(null), [S, C] = b(!1), [w, T] = b(1), { videoRef: E, state: D, controls: O } = d(_), { subtitlesEnabled: k, currentSubtitle: A, toggleSubtitles: j, getCurrentSubtitle: M, setCurrentSubtitle: N, selectSubtitleTrack: P, availableTracks: F, currentTrackId: I, loadError: L, hasSubtitles: R } = p({
1510
- subtitleSrc: i,
1511
- subtitleTracks: a,
1512
- onLoadError: (e) => console.error("Subtitle load error:", e)
1513
- }), { takeScreenshot: z } = f(E), { controlsVisible: B, showVolumeSlider: V, setShowVolumeSlider: H, handleMouseMove: U, handleMouseEnter: W, handleMouseLeave: G } = o(D.isPlaying, S);
1514
- return v(() => {
1515
- if (k) {
1516
- let e = M(D.currentTime);
1517
- N(e);
1518
- }
1519
- }, [
1520
- D.currentTime,
1521
- k,
1522
- M,
1523
- N
1524
- ]), l({
1525
- videoControls: O,
1526
- toggleSubtitles: j,
1527
- takeScreenshot: z,
1528
- duration: D.duration
1529
- }), /* @__PURE__ */ (0, x.jsxs)("div", {
1530
- ref: _,
1531
- className: m("minimal-player relative rounded-lg bg-black", r),
1532
- style: { overflow: "hidden" },
1533
- onMouseMove: U,
1534
- onMouseEnter: W,
1535
- onMouseLeave: G,
1536
- children: [
1537
- /* @__PURE__ */ (0, x.jsx)(De, {
1538
- videoRef: E,
1539
- src: t,
1540
- poster: n,
1541
- subtitleSrc: i,
1542
- subtitlesEnabled: k,
1543
- crossOrigin: s,
1544
- onTogglePlay: O.togglePlay
1545
- }),
1546
- /* @__PURE__ */ (0, x.jsx)(Ee, {
1547
- subtitlesEnabled: k,
1548
- subtitleText: A
1549
- }),
1550
- !D.isLoading && /* @__PURE__ */ (0, x.jsx)(ve, {
1551
- isPlaying: D.isPlaying,
1552
- onTogglePlay: O.togglePlay
1553
- }),
1554
- /* @__PURE__ */ (0, x.jsx)(Te, {
1555
- controlsVisible: B,
1556
- currentTime: D.currentTime,
1557
- duration: D.duration,
1558
- isPlaying: D.isPlaying,
1559
- volume: D.volume,
1560
- isMuted: D.isMuted,
1561
- showVolumeSlider: V,
1562
- isFullscreen: D.isFullscreen,
1563
- showSettings: S,
1564
- playbackRate: w,
1565
- subtitleSrc: i,
1566
- subtitlesEnabled: k,
1567
- subtitleTracks: F,
1568
- currentTrackId: I,
1569
- hasSubtitles: R,
1570
- subtitleLoadError: L,
1571
- volumeOrientation: c,
1572
- bufferedRanges: D.bufferedRanges,
1573
- isSeeking: D.isSeeking,
1574
- onSeek: O.seekTo,
1575
- onTogglePlay: O.togglePlay,
1576
- onSeekBackward: O.seekBackward,
1577
- onSeekForward: O.seekForward,
1578
- onToggleMute: O.toggleMute,
1579
- onVolumeChange: O.setVolume,
1580
- onShowVolumeSlider: H,
1581
- onToggleSubtitles: j,
1582
- onSelectSubtitleTrack: P,
1583
- onTakeScreenshot: z,
1584
- onToggleFullscreen: O.toggleFullscreen,
1585
- onToggleSettings: () => C(!S),
1586
- onChangePlaybackRate: (e) => {
1587
- E.current && (E.current.playbackRate = e, T(e), C(!1));
1588
- }
1589
- }),
1590
- h && /* @__PURE__ */ (0, x.jsxs)(x.Fragment, { children: [
1591
- D.isLoading && !D.isSeeking && !D.isBuffering && (u ? /* @__PURE__ */ (0, x.jsx)(Q, {
1592
- context: "initial",
1593
- children: /* @__PURE__ */ (0, x.jsx)(u, { context: "initial" })
1594
- }) : /* @__PURE__ */ (0, x.jsx)($.Initial, { ...g })),
1595
- D.isSeeking && (u ? /* @__PURE__ */ (0, x.jsx)(Q, {
1596
- context: "seeking",
1597
- children: /* @__PURE__ */ (0, x.jsx)(u, { context: "seeking" })
1598
- }) : /* @__PURE__ */ (0, x.jsx)($.Seeking, { ...g })),
1599
- D.isBuffering && !D.isSeeking && (u ? /* @__PURE__ */ (0, x.jsx)(Q, {
1600
- context: "buffering",
1601
- children: /* @__PURE__ */ (0, x.jsx)(u, { context: "buffering" })
1602
- }) : /* @__PURE__ */ (0, x.jsx)($.Buffering, { ...g }))
1603
- ] })
1604
- ]
1605
- });
1606
- }
1607
- //#endregion
1608
- export { L as a, w as c, R as i, de as n, z as o, V as r, q as s, Oe as t };
1609
-
1610
- //# sourceMappingURL=minimal-components-BYsMQde5.js.map