myetv-player 1.0.6 → 1.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/scss/_base.scss CHANGED
@@ -101,21 +101,6 @@ body {
101
101
  opacity: 0;
102
102
  }
103
103
 
104
- .video-wrapper:not(.has-controls) .video-watermark.watermark-bottomleft:not(.hide-on-autohide),
105
- .video-wrapper:not(.has-controls) .video-watermark.watermark-bottomright:not(.hide-on-autohide) {
106
- bottom: 15px;
107
- }
108
-
109
- .video-wrapper.has-controls .video-watermark {
110
- visibility: visible;
111
- opacity: 0.7;
112
- }
113
-
114
- .video-wrapper.has-controls .video-watermark.watermark-bottomleft,
115
- .video-wrapper.has-controls .video-watermark.watermark-bottomright {
116
- bottom: 90px;
117
- }
118
-
119
104
  .hidden {
120
105
  display: none !important;
121
106
  }
@@ -1,30 +1,311 @@
1
- // ===================================
2
- // CONTROLS
3
- // ===================================
4
-
5
- @use 'mixins' as *;
6
- @use 'variables' as *;
7
-
8
- /* CONTROLS - IMPROVED RESPONSIVE DESIGN */
9
- .controls {
10
- position: absolute;
11
- bottom: 0;
12
- left: 0;
13
- right: 0;
14
- background: var(--player-bg-controls);
15
- padding: var(--player-controls-padding);
16
- opacity: 0;
17
- transform: translateY(100%);
18
- transition: all var(--player-transition-normal);
19
- z-index: 10;
20
- min-height: 70px !important;
21
- box-sizing: border-box;
22
- }
23
-
24
- .controls.show {
25
- opacity: 1;
26
- transform: translateY(0);
27
- position: absolute !important;
28
- bottom: 0 !important;
29
- z-index: 20 !important;
30
- }
1
+ // ===================================
2
+ // CONTROLS
3
+ // ===================================
4
+
5
+ @use 'mixins' as *;
6
+ @use 'variables' as *;
7
+
8
+ // ===================================
9
+ // PREVENT TEXT SELECTION DURING DRAG
10
+ // ===================================
11
+
12
+ // Disable text selection on all controls when dragging
13
+ .controls,
14
+ .progress-container,
15
+ .progress-bar,
16
+ .controls-main,
17
+ .controls-left,
18
+ .controls-right,
19
+ .time-display {
20
+ user-select: none; // Prevent text selection
21
+ -webkit-user-select: none; // Safari
22
+ -moz-user-select: none; // Firefox
23
+ -ms-user-select: none; // IE/Edge
24
+ }
25
+
26
+ // ===================================
27
+ // PROGRESS BAR SYSTEM
28
+ // ===================================
29
+
30
+ .progress-container {
31
+ position: relative;
32
+ overflow: visible !important; // Allow handle to extend outside the container
33
+ padding: 0; // No padding - keeps control bar height normal
34
+ margin-bottom: 10px; // Space below instead of padding
35
+ display: flex;
36
+ align-items: center; // Vertically center the progress bar
37
+ cursor: pointer;
38
+ }
39
+
40
+ .progress-bar {
41
+ position: relative;
42
+ width: 100%;
43
+ height: 4px; // Thin progress bar
44
+ background: rgba(255, 255, 255, 0.3); // Semi-transparent background
45
+ border-radius: 2px;
46
+ overflow: visible !important; // Allow handle to be visible
47
+ cursor: pointer;
48
+ }
49
+
50
+ // Buffer bar (shows buffered/loaded video)
51
+ .progress-buffer {
52
+ position: absolute;
53
+ left: 0;
54
+ top: 0;
55
+ height: 100%;
56
+ background: rgba(255, 255, 255, 0.5);
57
+ border-radius: 2px;
58
+ pointer-events: none;
59
+ z-index: 1; // Below filled bar
60
+ }
61
+
62
+ // Filled bar (shows watched video progress)
63
+ .progress-filled {
64
+ position: absolute;
65
+ left: 0;
66
+ top: 0;
67
+ height: 100%;
68
+ background: var(--player-accent, #ff0000); // Accent color fill
69
+ border-radius: 2px;
70
+ pointer-events: none;
71
+ z-index: 2; // Above buffer, below handle
72
+ }
73
+
74
+ // ===================================
75
+ // PROGRESS HANDLE - BASE STYLES
76
+ // ===================================
77
+
78
+ .progress-handle {
79
+ position: absolute;
80
+ top: 50%;
81
+ left: 0%;
82
+ transform: translate(-50%, -50%); // Center the handle
83
+ width: 14px;
84
+ height: 14px;
85
+ background: var(--player-accent, #ff0000);
86
+ cursor: grab; // Indicates draggable
87
+ transition: all 0.2s ease; // Smooth transition for size changes
88
+ z-index: 10; // Above everything (buffer and filled)
89
+ pointer-events: auto; // Ensure it's clickable
90
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3); // Subtle shadow for depth
91
+ }
92
+
93
+ // Grabbing cursor when actively dragging
94
+ .progress-handle:active {
95
+ cursor: grabbing;
96
+ }
97
+
98
+ // ===================================
99
+ // SEEK HANDLE SHAPES
100
+ // ===================================
101
+
102
+ // Circle - classic round handle (default recommended)
103
+ .progress-handle-circle {
104
+ border-radius: 50%; // Perfect circle
105
+ }
106
+
107
+ // Square - sharp corners
108
+ .progress-handle-square {
109
+ border-radius: 3px; // Slightly rounded corners
110
+ }
111
+
112
+ // Diamond - rotated square
113
+ .progress-handle-diamond {
114
+ border-radius: 2px;
115
+ transform: translate(-50%, -50%) rotate(45deg); // 45 degree rotation
116
+ }
117
+
118
+ // Arrow - pointing upward
119
+ .progress-handle-arrow {
120
+ background: transparent;
121
+ width: 0 !important;
122
+ height: 0 !important;
123
+ border-left: 7px solid transparent;
124
+ border-right: 7px solid transparent;
125
+ border-bottom: 14px solid var(--player-accent, #ff0000); // Triangle pointing up
126
+ border-radius: 0;
127
+ box-shadow: none; // No shadow for border-based shapes
128
+ }
129
+
130
+ // Triangle - simple triangle shape
131
+ .progress-handle-triangle {
132
+ background: transparent;
133
+ width: 0 !important;
134
+ height: 0 !important;
135
+ border-left: 8px solid transparent;
136
+ border-right: 8px solid transparent;
137
+ border-bottom: 14px solid var(--player-accent, #ff0000);
138
+ border-radius: 0;
139
+ box-shadow: none;
140
+ }
141
+
142
+ // Heart - romantic shape using clip-path
143
+ .progress-handle-heart {
144
+ width: 16px !important;
145
+ height: 16px !important;
146
+ clip-path: polygon( 50% 15%, 65% 0%, 80% 0%, 95% 15%, 95% 30%, 50% 85%, 5% 30%, 5% 15%, 20% 0%, 35% 0% );
147
+ }
148
+
149
+ // Star - five-pointed star using clip-path
150
+ .progress-handle-star {
151
+ width: 16px !important;
152
+ height: 16px !important;
153
+ clip-path: polygon( 50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35% );
154
+ }
155
+
156
+ // None - completely hidden (no visual indicator)
157
+ .progress-handle-none {
158
+ opacity: 0 !important;
159
+ pointer-events: none !important;
160
+ }
161
+
162
+ // ===================================
163
+ // FORCE HANDLE ALWAYS VISIBLE
164
+ // ===================================
165
+
166
+ // Override any other rule that hides the handle
167
+ .progress-handle {
168
+ opacity: 1 !important; // Always visible
169
+ }
170
+
171
+ .progress-container .progress-handle {
172
+ opacity: 1 !important; // Always visible with higher specificity
173
+ }
174
+
175
+ // ===================================
176
+ // MOBILE TOUCH ENHANCEMENTS
177
+ // ===================================
178
+
179
+ // Media query for tablets and mobile devices (max width 768px)
180
+ @media (max-width: 768px) {
181
+
182
+ // Progress bar stays thin (4px)
183
+ .progress-bar {
184
+ height: 4px; // Keep thin
185
+ }
186
+
187
+ // Handle with large invisible touch area
188
+ .progress-handle {
189
+ touch-action: none; // Critical for mobile drag
190
+ -webkit-touch-callout: none; // Disable iOS callout
191
+ // Add large invisible touch area using pseudo-element
192
+ &::before {
193
+ content: '';
194
+ position: absolute;
195
+ top: 50%;
196
+ left: 50%;
197
+ transform: translate(-50%, -50%);
198
+ width: 50px; // Large touch target (50x50px)
199
+ height: 50px;
200
+ border-radius: 50%;
201
+ background: transparent; // Invisible but touchable
202
+ z-index: -1; // Behind the visible handle
203
+ }
204
+ // Scale up when touched/active
205
+ &:active {
206
+ width: 24px !important; // Grow: 14px -> 24px
207
+ height: 24px !important;
208
+ box-shadow: 0 3px 8px rgba(0, 0, 0, 0.4); // Stronger shadow when active
209
+ }
210
+ }
211
+
212
+ // Adjust shapes when active (touched)
213
+ .progress-handle-circle:active {
214
+ border-radius: 50%;
215
+ }
216
+
217
+ .progress-handle-square:active {
218
+ border-radius: 5px;
219
+ }
220
+
221
+ .progress-handle-diamond:active {
222
+ border-radius: 4px;
223
+ transform: translate(-50%, -50%) rotate(45deg);
224
+ }
225
+
226
+ .progress-handle-arrow:active {
227
+ border-left: 12px solid transparent;
228
+ border-right: 12px solid transparent;
229
+ border-bottom: 24px solid var(--player-accent, #ff0000);
230
+ }
231
+
232
+ .progress-handle-triangle:active {
233
+ border-left: 13px solid transparent;
234
+ border-right: 13px solid transparent;
235
+ border-bottom: 24px solid var(--player-accent, #ff0000);
236
+ }
237
+
238
+ .progress-handle-heart:active,
239
+ .progress-handle-star:active {
240
+ width: 26px !important;
241
+ height: 26px !important;
242
+ }
243
+ }
244
+
245
+ // Enhanced touch targets for very small screens (phones)
246
+ @media (max-width: 480px) {
247
+
248
+ // Progress bar stays thin on phones too
249
+ .progress-bar {
250
+ height: 4px; // Keep thin
251
+ }
252
+
253
+ .progress-handle {
254
+ &::before {
255
+ width: 60px; // Extra large touch target on phones
256
+ height: 60px;
257
+ }
258
+ // Even bigger when touched on phones
259
+ &:active {
260
+ width: 28px !important;
261
+ height: 28px !important;
262
+ }
263
+ }
264
+
265
+ .progress-handle-heart:active,
266
+ .progress-handle-star:active {
267
+ width: 30px !important;
268
+ height: 30px !important;
269
+ }
270
+ }
271
+
272
+ // ===================================
273
+ // CONTROLS CONTAINER
274
+ // ===================================
275
+
276
+ /* Main controls container */
277
+ .controls {
278
+ position: absolute;
279
+ bottom: 0;
280
+ left: 0;
281
+ right: 0;
282
+ background: var(--player-bg-controls);
283
+ padding: var(--player-controls-padding);
284
+ opacity: 0; // Hidden by default
285
+ transform: translateY(100%); // Slide out below
286
+ transition: all var(--player-transition-normal);
287
+ z-index: 10;
288
+ min-height: 70px !important;
289
+ box-sizing: border-box;
290
+ }
291
+
292
+ /* Controls visible state */
293
+ .controls.show {
294
+ opacity: 1; // Fully visible
295
+ transform: translateY(0); // Slide in
296
+ position: absolute !important;
297
+ bottom: 0 !important;
298
+ z-index: 20 !important; // Above other elements
299
+ }
300
+
301
+ // ===================================
302
+ // TOUCH EVENT FIXES FOR MOBILE
303
+ // ===================================
304
+
305
+ // Prevent default touch behavior on progress bar
306
+ .progress-container,
307
+ .progress-bar,
308
+ .progress-handle {
309
+ touch-action: none; // Disable browser's default touch gestures
310
+ -webkit-touch-callout: none; // Disable callout on iOS
311
+ }
package/scss/_menus.scss CHANGED
@@ -4235,4 +4235,55 @@ video::-webkit-media-text-track-display {
4235
4235
  /* Clickable watermark cursor */
4236
4236
  .video-watermark[style*="cursor: pointer"] {
4237
4237
  cursor: pointer !important;
4238
+ }
4239
+ /* ===================================
4240
+ FIX SUBMENU CLIPPING ON SMALL SCREENS
4241
+ =================================== */
4242
+
4243
+ /* Change positioning from bottom-aligned to top-aligned when menu would be clipped */
4244
+ /* ONLY affects submenus inside settings menu (small screen mode) */
4245
+ @media (max-height: 600px) {
4246
+ .settings-menu .settings-submenu,
4247
+ .settings-option .settings-submenu,
4248
+ .settings-option .quality-submenu,
4249
+ .settings-option .speed-submenu {
4250
+ /* Remove bottom positioning */
4251
+ bottom: auto !important;
4252
+ /* Align to top of parent option */
4253
+ top: 0 !important;
4254
+ /* Reduce max-height on very small screens */
4255
+ max-height: 150px !important;
4256
+ }
4257
+ }
4258
+
4259
+ /* Even smaller screens - ultra compact */
4260
+ @media (max-height: 400px) {
4261
+ .settings-menu .settings-submenu,
4262
+ .settings-option .settings-submenu,
4263
+ .settings-option .quality-submenu,
4264
+ .settings-option .speed-submenu {
4265
+ max-height: 120px !important;
4266
+ }
4267
+ }
4268
+
4269
+ /* For very small players (width < 400px) - only inside settings menu */
4270
+ @media (max-width: 400px) {
4271
+ .settings-menu .settings-submenu,
4272
+ .settings-option .settings-submenu,
4273
+ .settings-option .quality-submenu,
4274
+ .settings-option .speed-submenu {
4275
+ /* Switch to top alignment */
4276
+ bottom: auto !important;
4277
+ top: 0 !important;
4278
+ max-height: 180px !important;
4279
+ }
4280
+ }
4281
+
4282
+ /* EXCLUDE standalone subtitles menu (the one that appears when player is large) */
4283
+ /* Keep original bottom positioning for standalone menus */
4284
+ .subtitles-button .subtitles-menu,
4285
+ .yt-subtitles-submenu:not(.settings-option *),
4286
+ .yt-quality-submenu:not(.settings-option *) {
4287
+ bottom: 0 !important;
4288
+ top: auto !important;
4238
4289
  }