@therealtinhtute/baroiplayer 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +384 -0
  3. package/dist/context/media.js +2 -0
  4. package/dist/context/media.js.map +1 -0
  5. package/dist/context/media.mjs +15 -0
  6. package/dist/context/media.mjs.map +1 -0
  7. package/dist/context/store.js +2 -0
  8. package/dist/context/store.js.map +1 -0
  9. package/dist/context/store.mjs +5 -0
  10. package/dist/context/store.mjs.map +1 -0
  11. package/dist/context-BMteAJDN.js +1140 -0
  12. package/dist/context-BMteAJDN.js.map +1 -0
  13. package/dist/context-DCJ_scmO.cjs +23 -0
  14. package/dist/context-DCJ_scmO.cjs.map +1 -0
  15. package/dist/core-events-B5W_j8yU.js +480 -0
  16. package/dist/core-events-B5W_j8yU.js.map +1 -0
  17. package/dist/core-events-CN0-Vhhq.cjs +2 -0
  18. package/dist/core-events-CN0-Vhhq.cjs.map +1 -0
  19. package/dist/core-plugins-Bq9KLany.js +696 -0
  20. package/dist/core-plugins-Bq9KLany.js.map +1 -0
  21. package/dist/core-plugins-CPDSHMiQ.cjs +2 -0
  22. package/dist/core-plugins-CPDSHMiQ.cjs.map +1 -0
  23. package/dist/core.js +37 -0
  24. package/dist/core.js.map +1 -0
  25. package/dist/core.mjs +1217 -0
  26. package/dist/core.mjs.map +1 -0
  27. package/dist/enhanced-components-DHv0MFvG.js +1073 -0
  28. package/dist/enhanced-components-DHv0MFvG.js.map +1 -0
  29. package/dist/enhanced-components-DTIObgB7.cjs +2 -0
  30. package/dist/enhanced-components-DTIObgB7.cjs.map +1 -0
  31. package/dist/hooks-C_r8wexn.cjs +4 -0
  32. package/dist/hooks-C_r8wexn.cjs.map +1 -0
  33. package/dist/hooks-Da2wVXlF.js +1630 -0
  34. package/dist/hooks-Da2wVXlF.js.map +1 -0
  35. package/dist/index.css +1 -0
  36. package/dist/index.js +112 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/index.mjs +6126 -0
  39. package/dist/index.mjs.map +1 -0
  40. package/dist/minimal-components-DSq5sQpy.js +2002 -0
  41. package/dist/minimal-components-DSq5sQpy.js.map +1 -0
  42. package/dist/minimal-components-DflWiihN.cjs +2 -0
  43. package/dist/minimal-components-DflWiihN.cjs.map +1 -0
  44. package/dist/minimal-components.css +1 -0
  45. package/dist/mona-loading.gif +0 -0
  46. package/dist/performance-monitor-CUW6f5ll.cjs +2 -0
  47. package/dist/performance-monitor-CUW6f5ll.cjs.map +1 -0
  48. package/dist/performance-monitor-rMW1RgV3.js +302 -0
  49. package/dist/performance-monitor-rMW1RgV3.js.map +1 -0
  50. package/dist/utils-BnscpYYd.js +2798 -0
  51. package/dist/utils-BnscpYYd.js.map +1 -0
  52. package/dist/utils-D_czS_0K.cjs +9 -0
  53. package/dist/utils-D_czS_0K.cjs.map +1 -0
  54. package/dist/utils.js +2 -0
  55. package/dist/utils.js.map +1 -0
  56. package/dist/utils.mjs +7 -0
  57. package/dist/utils.mjs.map +1 -0
  58. package/package.json +114 -0
  59. package/src/adapters/videojs-adapter.tsx +470 -0
  60. package/src/assets/mona-loading.gif +0 -0
  61. package/src/components/AnimateLoading.tsx +115 -0
  62. package/src/components/LoadingState.tsx +248 -0
  63. package/src/components/accessibility/keyboard-help-overlay.tsx +213 -0
  64. package/src/components/audio-player.tsx +85 -0
  65. package/src/components/basic/index.ts +37 -0
  66. package/src/components/enhanced/advanced-features.tsx +316 -0
  67. package/src/components/enhanced/debug-panel.tsx +422 -0
  68. package/src/components/enhanced/enhanced-controls.tsx +600 -0
  69. package/src/components/enhanced/enhanced-media-player.tsx +509 -0
  70. package/src/components/enhanced/error-handling.tsx +345 -0
  71. package/src/components/enhanced/index.ts +39 -0
  72. package/src/components/enhanced/media-player-enhanced.tsx +349 -0
  73. package/src/components/examples/basic-video-player.tsx +55 -0
  74. package/src/components/examples/custom-controls-example.tsx +63 -0
  75. package/src/components/examples/enhanced-controls-example.tsx +114 -0
  76. package/src/components/examples/enhanced-media-player-example.tsx +293 -0
  77. package/src/components/examples/loading-states-demo.tsx +142 -0
  78. package/src/components/examples/react-19-demo.tsx +381 -0
  79. package/src/components/examples/volume-orientation-demo.tsx +114 -0
  80. package/src/components/icon-demo.tsx +209 -0
  81. package/src/components/icons/index.tsx +166 -0
  82. package/src/components/icons/svg-icons/ArrowLeftIcon.tsx +18 -0
  83. package/src/components/icons/svg-icons/ArrowRightIcon.tsx +18 -0
  84. package/src/components/icons/svg-icons/AudioIcon.tsx +22 -0
  85. package/src/components/icons/svg-icons/BackwardIcon.tsx +12 -0
  86. package/src/components/icons/svg-icons/CameraIcon.tsx +19 -0
  87. package/src/components/icons/svg-icons/CheckIcon.tsx +19 -0
  88. package/src/components/icons/svg-icons/EnablePiPIcon.tsx +17 -0
  89. package/src/components/icons/svg-icons/ForwardIcon.tsx +12 -0
  90. package/src/components/icons/svg-icons/FullscreenEnterIcon.tsx +23 -0
  91. package/src/components/icons/svg-icons/FullscreenExitIcon.tsx +23 -0
  92. package/src/components/icons/svg-icons/LoadingIcon.tsx +32 -0
  93. package/src/components/icons/svg-icons/PauseIcon.tsx +23 -0
  94. package/src/components/icons/svg-icons/PlayIcon.tsx +21 -0
  95. package/src/components/icons/svg-icons/PlaybackSpeedIcon.tsx +23 -0
  96. package/src/components/icons/svg-icons/QualityIcon.tsx +21 -0
  97. package/src/components/icons/svg-icons/SettingsIcon.tsx +12 -0
  98. package/src/components/icons/svg-icons/SliderIcon.tsx +21 -0
  99. package/src/components/icons/svg-icons/SubtitleIcon.tsx +21 -0
  100. package/src/components/icons/svg-icons/SubtitleOffIcon.tsx +25 -0
  101. package/src/components/icons/svg-icons/UnPiPIcon.tsx +17 -0
  102. package/src/components/icons/svg-icons/VolumeMutedIcon.tsx +16 -0
  103. package/src/components/icons/svg-icons/VolumeOneIcon.tsx +22 -0
  104. package/src/components/icons/svg-icons/VolumeThreeIcon.tsx +16 -0
  105. package/src/components/icons/svg-icons/VolumeTwoIcon.tsx +16 -0
  106. package/src/components/legacy.tsx +93 -0
  107. package/src/components/media-metadata-display.tsx +100 -0
  108. package/src/components/media-player-audio.tsx +39 -0
  109. package/src/components/media-player-controls.tsx +226 -0
  110. package/src/components/media-player-error.tsx +163 -0
  111. package/src/components/media-player-fullscreen.tsx +109 -0
  112. package/src/components/media-player-hls.tsx +111 -0
  113. package/src/components/media-player-loading.tsx +76 -0
  114. package/src/components/media-player-play.tsx +75 -0
  115. package/src/components/media-player-root.tsx +340 -0
  116. package/src/components/media-player-seek.tsx +168 -0
  117. package/src/components/media-player-time.tsx +99 -0
  118. package/src/components/media-player-tooltip.tsx +58 -0
  119. package/src/components/media-player-video.tsx +39 -0
  120. package/src/components/media-player-volume.tsx +155 -0
  121. package/src/components/media-player.tsx +257 -0
  122. package/src/components/media-suspense.tsx +362 -0
  123. package/src/components/player-settings-form.tsx +163 -0
  124. package/src/components/react-player-wrapper.tsx +651 -0
  125. package/src/components/simple-video-player.tsx +60 -0
  126. package/src/components/ui/enhanced-seek-bar.tsx +235 -0
  127. package/src/components/ui/fullscreen-button.tsx +60 -0
  128. package/src/components/ui/media-resource-preloader.tsx +395 -0
  129. package/src/components/ui/play-button.tsx +107 -0
  130. package/src/components/ui/seek-bar.tsx +161 -0
  131. package/src/components/ui/time-display.tsx +40 -0
  132. package/src/components/ui/volume-control.tsx +143 -0
  133. package/src/components/unified/base-media-player.tsx +246 -0
  134. package/src/components/unified/media-player.tsx +75 -0
  135. package/src/components/variants/minimal/AccessibleMinimalPlayer.tsx +561 -0
  136. package/src/components/variants/minimal/EnhancedMinimalMediaPlayer.tsx +552 -0
  137. package/src/components/variants/minimal/MinimalControls.tsx +142 -0
  138. package/src/components/variants/minimal/MinimalLoading.tsx +32 -0
  139. package/src/components/variants/minimal/MinimalMediaPlayer.tsx +315 -0
  140. package/src/components/variants/minimal/MinimalOverlay.tsx +64 -0
  141. package/src/components/variants/minimal/MinimalPlayButton.tsx +65 -0
  142. package/src/components/variants/minimal/MinimalSeekBar.tsx +150 -0
  143. package/src/components/variants/minimal/MinimalVolumeControl.tsx +80 -0
  144. package/src/components/variants/minimal/SimpleMinimalPlayer.tsx +210 -0
  145. package/src/components/variants/minimal/components/CenterPlayButton.tsx +22 -0
  146. package/src/components/variants/minimal/components/ControlBar.tsx +146 -0
  147. package/src/components/variants/minimal/components/EnhancedSettingsMenu.tsx +361 -0
  148. package/src/components/variants/minimal/components/PlaybackControls.tsx +51 -0
  149. package/src/components/variants/minimal/components/RightControls.tsx +173 -0
  150. package/src/components/variants/minimal/components/SeekBar.tsx +131 -0
  151. package/src/components/variants/minimal/components/SettingsDropdown.tsx +70 -0
  152. package/src/components/variants/minimal/components/SubtitleDisplay.tsx +21 -0
  153. package/src/components/variants/minimal/components/TimeDisplay.tsx +18 -0
  154. package/src/components/variants/minimal/components/VideoElement.tsx +40 -0
  155. package/src/components/variants/minimal/components/VolumeControl.tsx +217 -0
  156. package/src/components/variants/minimal/index.ts +23 -0
  157. package/src/components/video-player.tsx +100 -0
  158. package/src/context/error-handling.ts +394 -0
  159. package/src/context/media-context.tsx +208 -0
  160. package/src/context/media-provider.tsx +265 -0
  161. package/src/context/media-store.ts +379 -0
  162. package/src/context/persistence.ts +453 -0
  163. package/src/core/events/event-system.ts +442 -0
  164. package/src/core/events/hooks.ts +302 -0
  165. package/src/core/events/index.ts +22 -0
  166. package/src/core/events/middleware.ts +269 -0
  167. package/src/core/index.ts +22 -0
  168. package/src/core/optimization/bundle-optimizer.tsx +308 -0
  169. package/src/core/performance/cicd.ts +96 -0
  170. package/src/core/performance/index.ts +38 -0
  171. package/src/core/performance/media-loading-optimizer.ts +538 -0
  172. package/src/core/performance/performance-budgets.ts +432 -0
  173. package/src/core/performance/performance-monitor.tsx +476 -0
  174. package/src/core/performance/performance-testing.ts +459 -0
  175. package/src/core/plugins/base-plugin.ts +224 -0
  176. package/src/core/plugins/enhanced-plugin-system.ts +411 -0
  177. package/src/core/plugins/examples/analytics-plugin.ts +242 -0
  178. package/src/core/plugins/index.ts +39 -0
  179. package/src/core/plugins/registry.ts +327 -0
  180. package/src/core/plugins/types.ts +159 -0
  181. package/src/core/plugins/utils.ts +316 -0
  182. package/src/core/progressive-loading.tsx +322 -0
  183. package/src/core/providers/enhanced-hls-provider.ts +339 -0
  184. package/src/core/providers/service-provider.tsx +168 -0
  185. package/src/core/utils.tsx +38 -0
  186. package/src/features/media-session/media-session-manager.ts +429 -0
  187. package/src/features/picture-in-picture/pip-manager.ts +429 -0
  188. package/src/features/playlist/playlist-manager.ts +606 -0
  189. package/src/features/subtitles/subtitle-manager.ts +441 -0
  190. package/src/features/subtitles/subtitle-parser.ts +280 -0
  191. package/src/features/thumbnails/thumbnail-generator.ts +519 -0
  192. package/src/hooks/accessibility/index.ts +27 -0
  193. package/src/hooks/accessibility/use-accessibility-preferences.ts +188 -0
  194. package/src/hooks/accessibility/use-focus-management.ts +176 -0
  195. package/src/hooks/accessibility/use-keyboard-shortcuts.ts +144 -0
  196. package/src/hooks/accessibility/use-screen-reader.ts +182 -0
  197. package/src/hooks/core/index.ts +47 -0
  198. package/src/hooks/legacy.ts +27 -0
  199. package/src/hooks/use-enhanced-media-player.ts +468 -0
  200. package/src/hooks/use-intelligent-preloading.ts +358 -0
  201. package/src/hooks/use-keyboard-controls.ts +115 -0
  202. package/src/hooks/use-media-actions.ts +175 -0
  203. package/src/hooks/use-media-metadata.ts +89 -0
  204. package/src/hooks/use-media-optimistic.ts +270 -0
  205. package/src/hooks/use-media-player.ts +312 -0
  206. package/src/hooks/use-media-state.ts +190 -0
  207. package/src/hooks/use-memory-optimization.ts +358 -0
  208. package/src/hooks/use-optimistic-controls.ts +92 -0
  209. package/src/hooks/use-optimized-media.ts +263 -0
  210. package/src/hooks/use-touch-gestures.ts +417 -0
  211. package/src/hooks/useEnhancedSubtitles.ts +258 -0
  212. package/src/hooks/useKeyboardShortcuts.ts +74 -0
  213. package/src/hooks/useMediaControls.ts +52 -0
  214. package/src/hooks/useScreenshot.ts +57 -0
  215. package/src/hooks/useSubtitles.ts +91 -0
  216. package/src/hooks/useVideoPlayer.ts +232 -0
  217. package/src/icons/components/FullscreenIcon.tsx +37 -0
  218. package/src/icons/components/SettingsIcon.tsx +38 -0
  219. package/src/icons/components/animated/LoadingIcon.tsx +43 -0
  220. package/src/icons/components/animated/PlayPauseIcon.tsx +50 -0
  221. package/src/icons/components/media/PauseIcon.tsx +39 -0
  222. package/src/icons/components/media/PlayIcon.tsx +38 -0
  223. package/src/icons/components/volume/VolumeIcon.tsx +39 -0
  224. package/src/icons/components/volume/VolumeOffIcon.tsx +39 -0
  225. package/src/icons/index.ts +56 -0
  226. package/src/icons/provider.tsx +64 -0
  227. package/src/icons/types.ts +40 -0
  228. package/src/index-enhanced.ts +35 -0
  229. package/src/index-legacy.ts +326 -0
  230. package/src/index.css +102 -0
  231. package/src/index.ts +216 -0
  232. package/src/lib/deprecation.ts +51 -0
  233. package/src/lib/format-time.ts +37 -0
  234. package/src/lib/index.ts +3 -0
  235. package/src/lib/utils.ts +6 -0
  236. package/src/styles/globals.css +462 -0
  237. package/src/styles/minimal-player.css +589 -0
  238. package/src/styles/pixel-art.css +46 -0
  239. package/src/styles/videojs.css +100 -0
  240. package/src/test/setup.ts +79 -0
  241. package/src/types/events.ts +47 -0
  242. package/src/types/formats.ts +95 -0
  243. package/src/types/index.ts +190 -0
  244. package/src/types/videojs-plugins.d.ts +14 -0
@@ -0,0 +1,589 @@
1
+ /**
2
+ * Minimal Media Player Styles - Fixed without @apply
3
+ * Uses cyan-700 as primary color
4
+ */
5
+
6
+ @layer components {
7
+ /* Main player container */
8
+ .minimal-player {
9
+ position: relative;
10
+ overflow: hidden;
11
+ border-radius: 0.5rem;
12
+ background-color: #000000;
13
+ }
14
+
15
+ /* Control bar styles */
16
+ .minimal-control-bar {
17
+ background: linear-gradient(
18
+ to top,
19
+ rgba(0, 0, 0, 0.95) 0%,
20
+ rgba(0, 0, 0, 0.7) 50%,
21
+ transparent 100%
22
+ );
23
+ }
24
+
25
+ /* Button styles - cyan-700 primary */
26
+ .minimal-btn {
27
+ display: inline-flex;
28
+ align-items: center;
29
+ justify-content: center;
30
+ height: 2.5rem;
31
+ width: 2.5rem;
32
+ border-radius: 9999px;
33
+ color: #ffffff;
34
+ transition: all 200ms;
35
+ background: none !important;
36
+ border: none !important;
37
+ outline: none !important;
38
+ }
39
+
40
+ .minimal-btn:hover {
41
+ color: #67e8f9;
42
+ transform: scale(1.1);
43
+ }
44
+
45
+ .minimal-btn:active {
46
+ transform: scale(0.95);
47
+ }
48
+
49
+ .minimal-btn:focus-visible {
50
+ box-shadow: 0 0 0 2px #000000, 0 0 0 4px #06b6d4;
51
+ }
52
+
53
+ /* Active/highlighted button state */
54
+ .minimal-btn.text-cyan-500 {
55
+ color: #22d3ee;
56
+ }
57
+
58
+ .minimal-btn.text-cyan-500:hover {
59
+ color: #67e8f9;
60
+ }
61
+
62
+ /* Larger button variant */
63
+ .minimal-btn-lg {
64
+ height: 3.5rem;
65
+ width: 3.5rem;
66
+ }
67
+
68
+ /* Center play button */
69
+ .minimal-center-play {
70
+ position: absolute;
71
+ top: 50%;
72
+ left: 50%;
73
+ transform: translate(-50%, -50%);
74
+ height: 5rem;
75
+ width: 5rem;
76
+ border-radius: 9999px;
77
+ display: flex;
78
+ align-items: center;
79
+ justify-content: center;
80
+ color: #ffffff;
81
+ transition: all 300ms;
82
+ background: none !important;
83
+ border: none !important;
84
+ }
85
+
86
+ .minimal-center-play:hover {
87
+ color: #67e8f9;
88
+ transform: translate(-50%, -50%) scale(1.1);
89
+ }
90
+
91
+ /* Seek bar styles */
92
+ .minimal-seekbar {
93
+ position: relative;
94
+ height: 0.25rem;
95
+ background-color: rgba(255, 255, 255, 0.2);
96
+ border-radius: 9999px;
97
+ cursor: pointer;
98
+ transition: all 200ms;
99
+ opacity: 1;
100
+ }
101
+
102
+ /* Always show seekbar but enhance on hover */
103
+ .minimal-seekbar:hover {
104
+ height: 0.375rem;
105
+ }
106
+
107
+ .minimal-seekbar-buffered {
108
+ position: absolute;
109
+ top: 0;
110
+ height: 100%;
111
+ background: linear-gradient(
112
+ 90deg,
113
+ rgba(255, 255, 255, 0.2),
114
+ rgba(255, 255, 255, 0.3)
115
+ );
116
+ border-radius: 9999px;
117
+ transition: all 200ms ease-out;
118
+ }
119
+
120
+ .minimal-seekbar-progress {
121
+ position: absolute;
122
+ top: 0;
123
+ left: 0;
124
+ height: 100%;
125
+ border-radius: 9999px;
126
+ background: linear-gradient(90deg, rgb(6, 182, 212), rgb(14, 116, 144));
127
+ }
128
+
129
+ .minimal-seekbar-thumb {
130
+ position: absolute;
131
+ top: 50%;
132
+ transform: translateY(-50%);
133
+ width: 1rem;
134
+ height: 1rem;
135
+ background-color: #06b6d4;
136
+ border-radius: 9999px;
137
+ box-shadow: 0 10px 15px -3px rgba(6, 182, 212, 0.5), 0 4px 6px -2px rgba(6, 182, 212, 0.5);
138
+ opacity: 0;
139
+ transform: translateY(-50%) scale(0);
140
+ transition: all 200ms;
141
+ border: 2px solid white;
142
+ }
143
+
144
+ /* Seeking state styles */
145
+ .minimal-seekbar-seeking {
146
+ opacity: 0.8;
147
+ }
148
+
149
+ .minimal-seekbar-progress-seeking {
150
+ animation: seekingPulse 1s ease-in-out infinite;
151
+ }
152
+
153
+ @keyframes seekingPulse {
154
+ 0%, 100% { opacity: 1; }
155
+ 50% { opacity: 0.6; }
156
+ }
157
+
158
+ .minimal-seekbar-thumb-seeking {
159
+ background-color: #22d3ee;
160
+ animation: thumbPulse 0.8s ease-in-out infinite;
161
+ }
162
+
163
+ @keyframes thumbPulse {
164
+ 0%, 100% { transform: translateY(-50%) scale(1); }
165
+ 50% { transform: translateY(-50%) scale(1.2); }
166
+ }
167
+
168
+ /* Hover indicator */
169
+ .minimal-seekbar-hover-indicator {
170
+ position: absolute;
171
+ top: 0;
172
+ width: 2px;
173
+ height: 100%;
174
+ background-color: rgba(255, 255, 255, 0.5);
175
+ pointer-events: none;
176
+ transition: opacity 150ms;
177
+ }
178
+
179
+ /* Ripple effect */
180
+ .minimal-seekbar-ripple {
181
+ position: absolute;
182
+ width: 20px;
183
+ height: 20px;
184
+ border-radius: 50%;
185
+ background-color: rgba(6, 182, 212, 0.3);
186
+ transform: translate(-50%, -50%);
187
+ pointer-events: none;
188
+ animation: ripple 600ms ease-out;
189
+ }
190
+
191
+ @keyframes ripple {
192
+ from {
193
+ width: 0;
194
+ height: 0;
195
+ opacity: 1;
196
+ }
197
+ to {
198
+ width: 40px;
199
+ height: 40px;
200
+ opacity: 0;
201
+ }
202
+ }
203
+
204
+ .minimal-seekbar:hover .minimal-seekbar-thumb,
205
+ .minimal-seekbar-thumb.active {
206
+ opacity: 1;
207
+ transform: translateY(-50%) scale(1);
208
+ }
209
+
210
+ /* Volume Control Styles */
211
+ .volume-control-wrapper {
212
+ position: relative;
213
+ }
214
+
215
+ .volume-control-wrapper:hover .volume-slider-horizontal-wrapper {
216
+ width: 6rem;
217
+ opacity: 1;
218
+ }
219
+
220
+ /* Horizontal Volume Slider */
221
+ .volume-slider-track-horizontal {
222
+ position: relative;
223
+ height: 0.25rem;
224
+ width: 100%;
225
+ border-radius: 9999px;
226
+ cursor: pointer;
227
+ background-color: rgba(255, 255, 255, 0.2);
228
+ transition: all 200ms;
229
+ }
230
+
231
+ .volume-slider-track-horizontal:hover {
232
+ height: 0.375rem;
233
+ }
234
+
235
+ .volume-slider-fill-horizontal {
236
+ position: absolute;
237
+ top: 0;
238
+ left: 0;
239
+ height: 100%;
240
+ border-radius: 9999px;
241
+ transition: all 100ms ease-out;
242
+ background: linear-gradient(
243
+ 90deg,
244
+ rgb(6, 182, 212) 0%,
245
+ rgb(14, 116, 144) 50%,
246
+ rgb(8, 145, 178) 100%
247
+ );
248
+ box-shadow: 0 0 8px rgba(6, 182, 212, 0.4);
249
+ }
250
+
251
+ .volume-slider-thumb-horizontal {
252
+ position: absolute;
253
+ top: 50%;
254
+ transform: translate(-50%, -50%);
255
+ width: 0.75rem;
256
+ height: 0.75rem;
257
+ background-color: #ffffff;
258
+ border-radius: 9999px;
259
+ opacity: 0;
260
+ transform: translate(-50%, -50%) scale(0);
261
+ transition: all 200ms;
262
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
263
+ border: 1.5px solid rgb(6, 182, 212);
264
+ }
265
+
266
+ .group:hover .volume-slider-thumb-horizontal,
267
+ .volume-slider-thumb-horizontal.active {
268
+ opacity: 1;
269
+ transform: translate(-50%, -50%) scale(1);
270
+ }
271
+
272
+ /* Vertical Volume Slider */
273
+ .volume-slider-track-vertical {
274
+ position: relative;
275
+ width: 0.25rem;
276
+ height: 6rem;
277
+ border-radius: 9999px;
278
+ cursor: pointer;
279
+ background-color: rgba(255, 255, 255, 0.2);
280
+ transition: all 200ms;
281
+ }
282
+
283
+ .volume-slider-track-vertical:hover {
284
+ width: 0.375rem;
285
+ }
286
+
287
+ .volume-slider-fill-vertical {
288
+ position: absolute;
289
+ bottom: 0;
290
+ left: 0;
291
+ width: 100%;
292
+ border-radius: 9999px;
293
+ transition: all 100ms ease-out;
294
+ background: linear-gradient(
295
+ 180deg,
296
+ rgb(6, 182, 212) 0%,
297
+ rgb(14, 116, 144) 50%,
298
+ rgb(8, 145, 178) 100%
299
+ );
300
+ box-shadow: 0 0 8px rgba(6, 182, 212, 0.4);
301
+ }
302
+
303
+ .volume-slider-thumb-vertical {
304
+ position: absolute;
305
+ left: 50%;
306
+ transform: translate(-50%, 50%);
307
+ width: 0.75rem;
308
+ height: 0.75rem;
309
+ background-color: #ffffff;
310
+ border-radius: 9999px;
311
+ opacity: 0;
312
+ transform: translate(-50%, 50%) scale(0);
313
+ transition: all 200ms;
314
+ box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);
315
+ border: 1.5px solid rgb(6, 182, 212);
316
+ }
317
+
318
+ .group:hover .volume-slider-thumb-vertical,
319
+ .volume-slider-thumb-vertical.active {
320
+ opacity: 1;
321
+ transform: translate(-50%, 50%) scale(1);
322
+ }
323
+
324
+ /* Hover effects for better interactivity */
325
+ .volume-slider-track-horizontal:active,
326
+ .volume-slider-track-vertical:active {
327
+ opacity: 0.9;
328
+ }
329
+
330
+ /* Legacy volume styles */
331
+ .minimal-volume {
332
+ display: flex;
333
+ align-items: center;
334
+ gap: 0.5rem;
335
+ }
336
+
337
+ .minimal-volume-slider {
338
+ width: 0;
339
+ opacity: 0;
340
+ transition: all 300ms;
341
+ }
342
+
343
+ .minimal-volume:hover .minimal-volume-slider {
344
+ width: 6rem;
345
+ opacity: 1;
346
+ }
347
+
348
+ .minimal-volume-track {
349
+ height: 0.25rem;
350
+ background-color: rgba(255, 255, 255, 0.2);
351
+ border-radius: 9999px;
352
+ }
353
+
354
+ .minimal-volume-fill {
355
+ height: 100%;
356
+ background-color: #06b6d4;
357
+ border-radius: 9999px;
358
+ }
359
+
360
+ /* Time display */
361
+ .minimal-time {
362
+ color: #ffffff;
363
+ font-size: 0.875rem;
364
+ font-family: ui-monospace, SFMono-Regular, "SF Mono", Consolas, "Liberation Mono", Menlo, monospace;
365
+ user-select: none;
366
+ }
367
+
368
+ @media (max-width: 640px) {
369
+ .minimal-time {
370
+ display: none;
371
+ }
372
+ }
373
+
374
+ @media (min-width: 640px) {
375
+ .minimal-time {
376
+ display: block;
377
+ }
378
+ }
379
+
380
+ /* Loading states and animations */
381
+ .minimal-loading {
382
+ position: absolute;
383
+ inset: 0;
384
+ display: flex;
385
+ align-items: center;
386
+ justify-content: center;
387
+ background-color: rgba(0, 0, 0, 0.8);
388
+ z-index: 50;
389
+ animation: fadeIn 200ms ease-out;
390
+ }
391
+
392
+ /* Spinner animation */
393
+ .minimal-loading-spinner {
394
+ animation: spin 1s linear infinite;
395
+ }
396
+
397
+ .minimal-spinner {
398
+ width: 3rem;
399
+ height: 3rem;
400
+ border: 4px solid rgba(255, 255, 255, 0.2);
401
+ border-top-color: #06b6d4;
402
+ border-radius: 9999px;
403
+ animation: spin 1s linear infinite;
404
+ }
405
+
406
+ @keyframes spin {
407
+ from { transform: rotate(0deg); }
408
+ to { transform: rotate(360deg); }
409
+ }
410
+
411
+ /* Dots animation */
412
+ .minimal-loading-dot {
413
+ animation: pulse 1.4s cubic-bezier(0.4, 0, 0.6, 1) infinite;
414
+ }
415
+
416
+ @keyframes pulse {
417
+ 0%, 100% {
418
+ opacity: 1;
419
+ transform: scale(1);
420
+ }
421
+ 50% {
422
+ opacity: 0.3;
423
+ transform: scale(0.8);
424
+ }
425
+ }
426
+
427
+ /* Skeleton animation */
428
+ .minimal-loading-skeleton {
429
+ animation: shimmer 2s ease-in-out infinite;
430
+ background: linear-gradient(
431
+ 90deg,
432
+ rgba(255, 255, 255, 0.1) 0%,
433
+ rgba(255, 255, 255, 0.2) 50%,
434
+ rgba(255, 255, 255, 0.1) 100%
435
+ );
436
+ background-size: 200% 100%;
437
+ }
438
+
439
+ @keyframes shimmer {
440
+ 0% { background-position: -200% center; }
441
+ 100% { background-position: 200% center; }
442
+ }
443
+
444
+ /* Fade animations */
445
+ @keyframes fadeIn {
446
+ from {
447
+ opacity: 0;
448
+ transform: scale(0.95);
449
+ }
450
+ to {
451
+ opacity: 1;
452
+ transform: scale(1);
453
+ }
454
+ }
455
+
456
+ @keyframes fadeOut {
457
+ from {
458
+ opacity: 1;
459
+ transform: scale(1);
460
+ }
461
+ to {
462
+ opacity: 0;
463
+ transform: scale(0.95);
464
+ }
465
+ }
466
+
467
+ /* Quality/Speed buttons */
468
+ .minimal-quality-btn,
469
+ .minimal-speed-btn {
470
+ padding: 0.375rem 0.75rem;
471
+ border-radius: 0.375rem;
472
+ background-color: rgba(255, 255, 255, 0.1);
473
+ color: #ffffff;
474
+ font-size: 0.875rem;
475
+ font-weight: 500;
476
+ transition: all 200ms;
477
+ border: none !important;
478
+ }
479
+
480
+ .minimal-quality-btn:hover,
481
+ .minimal-speed-btn:hover {
482
+ background-color: rgba(14, 116, 144, 0.3);
483
+ }
484
+
485
+ /* Control visibility animations */
486
+ .minimal-controls-visible {
487
+ opacity: 1;
488
+ transform: translateY(0);
489
+ }
490
+
491
+ .minimal-controls-hidden {
492
+ opacity: 0;
493
+ transform: translateY(0.5rem);
494
+ pointer-events: none;
495
+ }
496
+
497
+ /* Settings dropdown */
498
+ .minimal-settings-dropdown {
499
+ position: absolute;
500
+ bottom: 100%;
501
+ right: 0;
502
+ margin-bottom: 0.5rem;
503
+ background-color: #1f2937;
504
+ border-radius: 0.5rem;
505
+ box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
506
+ border: 1px solid #374151;
507
+ min-width: 200px;
508
+ padding: 0.5rem 0;
509
+ animation: slideUp 0.2s ease-out;
510
+ }
511
+
512
+ @keyframes slideUp {
513
+ from {
514
+ opacity: 0;
515
+ transform: translateY(10px);
516
+ }
517
+ to {
518
+ opacity: 1;
519
+ transform: translateY(0);
520
+ }
521
+ }
522
+
523
+ /* Subtitle display */
524
+ .minimal-subtitle-display {
525
+ position: absolute;
526
+ bottom: 5rem;
527
+ left: 0;
528
+ right: 0;
529
+ text-align: center;
530
+ padding: 0 1rem;
531
+ pointer-events: none;
532
+ z-index: 35;
533
+ }
534
+
535
+ .minimal-subtitle-text {
536
+ display: inline-block;
537
+ background-color: rgba(0, 0, 0, 0.75);
538
+ color: #ffffff;
539
+ padding: 0.5rem 1rem;
540
+ border-radius: 0.375rem;
541
+ font-size: 1.125rem;
542
+ font-weight: 500;
543
+ text-shadow: 1px 1px 2px rgba(0, 0, 0, 0.8);
544
+ }
545
+
546
+ /* Screenshot button special effect */
547
+ .minimal-btn-screenshot:active {
548
+ animation: flash 0.3s;
549
+ }
550
+
551
+ @keyframes flash {
552
+ 0%, 100% { opacity: 1; }
553
+ 50% { opacity: 0.5; background-color: rgba(255, 255, 255, 0.3); }
554
+ }
555
+
556
+ /* Remove all default borders */
557
+ .minimal-player * {
558
+ border-color: transparent !important;
559
+ }
560
+
561
+ .minimal-player button {
562
+ border: none !important;
563
+ outline: none !important;
564
+ }
565
+ }
566
+
567
+ /* Cyan-700 color scheme override */
568
+ @layer base {
569
+ .minimal-player {
570
+ --primary: rgb(14, 116, 144);
571
+ --primary-light: rgb(6, 182, 212);
572
+ --primary-dark: rgb(21, 94, 117);
573
+ --primary-hover: rgba(14, 116, 144, 0.3);
574
+ --primary-active: rgba(14, 116, 144, 0.4);
575
+ }
576
+ }
577
+
578
+ /* Z-index management */
579
+ @layer utilities {
580
+ .z-40 { z-index: 40; }
581
+ .z-45 { z-index: 45; }
582
+ .z-50 { z-index: 50; }
583
+
584
+ /* Border utilities */
585
+ .border-3 { border-width: 3px; }
586
+
587
+ /* Backdrop blur utilities - removed for performance */
588
+ .backdrop-blur-xs { /* backdrop-filter: blur(2px); */ }
589
+ }
@@ -0,0 +1,46 @@
1
+ /* Pixel Art Styles for Media Player */
2
+ .pixel-button {
3
+ image-rendering: pixelated;
4
+ image-rendering: -moz-crisp-edges;
5
+ image-rendering: crisp-edges;
6
+ font-family: 'Courier New', 'Monaco', 'Menlo', monospace;
7
+ letter-spacing: 0.05em;
8
+ }
9
+
10
+ .pixel-button svg {
11
+ image-rendering: pixelated;
12
+ image-rendering: -moz-crisp-edges;
13
+ image-rendering: crisp-edges;
14
+ filter: contrast(1.2) brightness(1.1);
15
+ }
16
+
17
+ .pixel-button:hover svg {
18
+ filter: contrast(1.3) brightness(1.2) drop-shadow(0 0 2px rgba(255, 255, 255, 0.3));
19
+ }
20
+
21
+ .pixel-progress {
22
+ image-rendering: pixelated;
23
+ image-rendering: -moz-crisp-edges;
24
+ image-rendering: crisp-edges;
25
+ }
26
+
27
+ .pixel-progress [role="slider"] {
28
+ image-rendering: pixelated;
29
+ image-rendering: -moz-crisp-edges;
30
+ image-rendering: crisp-edges;
31
+ box-shadow:
32
+ 0 0 0 1px rgba(0, 0, 0, 0.8),
33
+ inset 0 1px 0 rgba(255, 255, 255, 0.3),
34
+ 0 2px 4px rgba(0, 0, 0, 0.5);
35
+ }
36
+
37
+ .pixel-time-display {
38
+ text-shadow:
39
+ 1px 1px 0 rgba(0, 0, 0, 0.8),
40
+ -1px -1px 0 rgba(0, 0, 0, 0.8),
41
+ 1px -1px 0 rgba(0, 0, 0, 0.8),
42
+ -1px 1px 0 rgba(0, 0, 0, 0.8);
43
+ image-rendering: pixelated;
44
+ image-rendering: -moz-crisp-edges;
45
+ image-rendering: crisp-edges;
46
+ }
@@ -0,0 +1,100 @@
1
+ /* Import Video.js base styles */
2
+ @import 'video.js/dist/video-js.css';
3
+
4
+ /* Custom overrides for Video.js to work with Tailwind v4 */
5
+ .video-js {
6
+ font-family: inherit;
7
+ font-size: 1em;
8
+ color: #fff;
9
+ }
10
+
11
+ .video-js .vjs-big-play-button {
12
+ font-size: 3em;
13
+ line-height: 1.5em;
14
+ height: 1.5em;
15
+ width: 3em;
16
+ border: 0.06666em solid #fff;
17
+ border-radius: 0.3em;
18
+ left: 50%;
19
+ top: 50%;
20
+ margin-left: -1.5em;
21
+ margin-top: -0.75em;
22
+ }
23
+
24
+ .video-js:hover .vjs-big-play-button,
25
+ .video-js .vjs-big-play-button:focus {
26
+ background-color: rgba(0, 0, 0, 0.5);
27
+ }
28
+
29
+ .video-js .vjs-control-bar {
30
+ display: flex;
31
+ background: linear-gradient(to top, rgba(0, 0, 0, 0.8), transparent);
32
+ }
33
+
34
+ .video-js .vjs-progress-control {
35
+ position: absolute;
36
+ bottom: 2.5em;
37
+ left: 0;
38
+ right: 0;
39
+ width: 100%;
40
+ height: 0.3em;
41
+ }
42
+
43
+ .video-js .vjs-progress-holder {
44
+ margin: 0;
45
+ height: 0.3em;
46
+ }
47
+
48
+ .video-js .vjs-load-progress,
49
+ .video-js .vjs-play-progress {
50
+ height: 0.3em;
51
+ }
52
+
53
+ .video-js .vjs-menu-button-popup .vjs-menu {
54
+ background-color: rgba(0, 0, 0, 0.9);
55
+ border-radius: 0.3em;
56
+ }
57
+
58
+ /* Quality selector styling */
59
+ .vjs-quality-selector .vjs-menu-button {
60
+ order: 8;
61
+ }
62
+
63
+ .vjs-quality-selector .vjs-icon-placeholder:before {
64
+ content: "HD";
65
+ font-family: inherit;
66
+ font-weight: bold;
67
+ font-size: 0.8em;
68
+ }
69
+
70
+ /* Hide default controls when using custom controls */
71
+ .video-js.vjs-controls-disabled .vjs-control-bar {
72
+ display: none;
73
+ }
74
+
75
+ /* Subtitle styling */
76
+ .video-js .vjs-text-track-display {
77
+ pointer-events: none;
78
+ }
79
+
80
+ .video-js .vjs-text-track-cue {
81
+ background-color: rgba(0, 0, 0, 0.8);
82
+ border-radius: 0.2em;
83
+ padding: 0.2em 0.3em;
84
+ }
85
+
86
+ /* Loading spinner */
87
+ .video-js .vjs-loading-spinner {
88
+ border-color: rgba(255, 255, 255, 0.2);
89
+ border-top-color: #fff;
90
+ }
91
+
92
+ /* Error display */
93
+ .video-js .vjs-error-display {
94
+ background: rgba(0, 0, 0, 0.9);
95
+ }
96
+
97
+ .video-js .vjs-error-display .vjs-modal-dialog-content {
98
+ font-size: 1.2em;
99
+ text-align: center;
100
+ }