myetv-player 1.2.0 → 1.4.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 (47) hide show
  1. package/css/myetv-player.css +242 -168
  2. package/css/myetv-player.min.css +1 -1
  3. package/dist/myetv-player.js +638 -203
  4. package/dist/myetv-player.min.js +548 -170
  5. package/package.json +35 -16
  6. package/plugins/twitch/myetv-player-twitch-plugin.js +125 -11
  7. package/plugins/vimeo/myetv-player-vimeo.js +80 -49
  8. package/plugins/youtube/README.md +5 -2
  9. package/plugins/youtube/myetv-player-youtube-plugin.js +766 -6
  10. package/.github/workflows/codeql.yml +0 -100
  11. package/.github/workflows/npm-publish.yml +0 -30
  12. package/SECURITY.md +0 -50
  13. package/build.js +0 -195
  14. package/scss/README.md +0 -161
  15. package/scss/_audio-player.scss +0 -21
  16. package/scss/_base.scss +0 -116
  17. package/scss/_controls.scss +0 -204
  18. package/scss/_loading.scss +0 -111
  19. package/scss/_menus.scss +0 -432
  20. package/scss/_mixins.scss +0 -112
  21. package/scss/_poster.scss +0 -8
  22. package/scss/_progress-bar.scss +0 -319
  23. package/scss/_resolution.scss +0 -68
  24. package/scss/_responsive.scss +0 -1368
  25. package/scss/_themes.scss +0 -30
  26. package/scss/_title-overlay.scss +0 -60
  27. package/scss/_tooltips.scss +0 -7
  28. package/scss/_variables.scss +0 -49
  29. package/scss/_video.scss +0 -221
  30. package/scss/_volume.scss +0 -122
  31. package/scss/_watermark.scss +0 -128
  32. package/scss/myetv-player.scss +0 -51
  33. package/scss/package.json +0 -16
  34. package/src/README.md +0 -560
  35. package/src/chapters.js +0 -521
  36. package/src/controls.js +0 -1242
  37. package/src/core.js +0 -1922
  38. package/src/events.js +0 -537
  39. package/src/fullscreen.js +0 -82
  40. package/src/i18n.js +0 -374
  41. package/src/playlist.js +0 -177
  42. package/src/plugins.js +0 -384
  43. package/src/quality.js +0 -963
  44. package/src/streaming.js +0 -346
  45. package/src/subtitles.js +0 -524
  46. package/src/utils.js +0 -65
  47. package/src/watermark.js +0 -246
@@ -1,319 +0,0 @@
1
- // ===================================
2
- // PROGRESS BAR
3
- // ===================================
4
-
5
- @use 'mixins' as *;
6
- @use 'variables' as *;
7
-
8
- /* PROGRESS BAR */
9
- .progress-container {
10
- width: 100%;
11
- height: var(--player-progress-height);
12
- background: var(--player-progress-bg);
13
- border-radius: calc(var(--player-progress-height) / 2);
14
- margin-bottom: 15px;
15
- position: relative;
16
- cursor: pointer;
17
- }
18
-
19
- .progress-bar {
20
- width: 100%;
21
- height: 100%;
22
- position: relative;
23
- border-radius: calc(var(--player-progress-height) / 2);
24
- overflow: hidden;
25
- }
26
-
27
- .progress-buffer {
28
- height: 100%;
29
- background: var(--player-progress-buffer);
30
- width: 0%;
31
- border-radius: calc(var(--player-progress-height) / 2);
32
- transition: width var(--player-transition-fast);
33
- }
34
-
35
- .progress-filled {
36
- position: absolute;
37
- top: 0;
38
- left: 0;
39
- height: 100%;
40
- background: var(--player-primary-color);
41
- width: 0%;
42
- border-radius: calc(var(--player-progress-height) / 2);
43
- transition: width 0.1s ease;
44
- }
45
-
46
- .progress-handle {
47
- position: absolute;
48
- top: 50%;
49
- transform: translate(-50%, -50%);
50
- width: var(--player-progress-handle-size);
51
- height: var(--player-progress-handle-size);
52
- background: var(--player-primary-color);
53
- border-radius: 50%;
54
- opacity: 1;
55
- transition: opacity var(--player-transition-fast);
56
- z-index: 2;
57
- left: 0%;
58
- box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3);
59
- pointer-events: all;
60
- touch-action: none;
61
- /* Larger invisible touch area */
62
- &::before {
63
- content: '';
64
- position: absolute;
65
- top: 50%;
66
- left: 50%;
67
- transform: translate(-50%, -50%);
68
- width: 44px;
69
- height: 44px;
70
- border-radius: 50%;
71
- }
72
- }
73
-
74
- .progress-container:hover .progress-handle {
75
- opacity: 1;
76
- }
77
-
78
- .progress-container:hover .progress-filled {
79
- background: var(--player-primary-hover);
80
- }
81
-
82
- /* TOOLTIP SEEK BAR */
83
- .seek-tooltip {
84
- position: absolute;
85
- bottom: 100%;
86
- left: 0;
87
- background: rgba(0, 0, 0, 0.9);
88
- color: white;
89
- padding: 6px 10px;
90
- border-radius: 6px;
91
- font-size: 12px;
92
- font-weight: 500;
93
- white-space: nowrap;
94
- opacity: 0;
95
- visibility: hidden;
96
- transform: translateX(-50%) translateY(-8px);
97
- transition: all 0.15s ease;
98
- z-index: 1000;
99
- box-shadow: var(--player-shadow-tooltip);
100
- font-variant-numeric: tabular-nums;
101
- backdrop-filter: blur(8px);
102
- border: 1px solid rgba(255, 255, 255, 0.1);
103
- }
104
-
105
- .seek-tooltip::after {
106
- content: '';
107
- position: absolute;
108
- top: 100%;
109
- left: 50%;
110
- transform: translateX(-50%);
111
- width: 0;
112
- height: 0;
113
- border-left: 5px solid transparent;
114
- border-right: 5px solid transparent;
115
- border-top: 5px solid rgba(0, 0, 0, 0.9);
116
- }
117
-
118
- .seek-tooltip.visible {
119
- opacity: 1;
120
- visibility: visible;
121
- transform: translateX(-50%) translateY(-4px);
122
- }
123
-
124
- /* CHAPTER MARKERS SYSTEM */
125
- .chapter-markers-container {
126
- position: absolute;
127
- top: 0;
128
- left: 0;
129
- width: 100%;
130
- height: 100%;
131
- pointer-events: none;
132
- z-index: 3;
133
- }
134
-
135
- .chapter-marker {
136
- position: absolute;
137
- top: 0;
138
- height: 100%;
139
- width: 3px;
140
- background: var(--player-primary-color);
141
- opacity: 0.7;
142
- cursor: pointer;
143
- pointer-events: auto;
144
- transition: all var(--player-transition-fast);
145
- border-radius: 2px;
146
- transform: translateX(-50%);
147
- }
148
-
149
- .chapter-marker:hover {
150
- opacity: 1;
151
- width: 4px;
152
- height: 120%;
153
- top: -10%;
154
- box-shadow: 0 0 8px var(--player-primary-color);
155
- }
156
-
157
- .chapter-marker.active {
158
- background: var(--player-primary-hover);
159
- opacity: 1;
160
- width: 4px;
161
- }
162
-
163
- .chapter-tooltip {
164
- position: absolute;
165
- bottom: 100%;
166
- left: 0;
167
- background: rgba(0, 0, 0, 0.95);
168
- backdrop-filter: blur(10px);
169
- border-radius: 8px;
170
- padding: 0;
171
- margin-bottom: 12px;
172
- opacity: 0;
173
- visibility: hidden;
174
- transition: all 0.2s ease;
175
- transform: translateX(-50%) translateY(-8px);
176
- z-index: 1000;
177
- box-shadow: var(--player-shadow-tooltip);
178
- border: 1px solid rgba(255, 255, 255, 0.15);
179
- min-width: 200px;
180
- max-width: 300px;
181
- overflow: hidden;
182
- pointer-events: none;
183
- }
184
-
185
- .chapter-tooltip::after {
186
- content: '';
187
- position: absolute;
188
- top: 100%;
189
- left: 50%;
190
- transform: translateX(-50%);
191
- width: 0;
192
- height: 0;
193
- border-left: 6px solid transparent;
194
- border-right: 6px solid transparent;
195
- border-top: 6px solid rgba(0, 0, 0, 0.95);
196
- }
197
-
198
- .chapter-tooltip-image {
199
- width: 100%;
200
- height: 150px;
201
- background-size: cover;
202
- background-position: center;
203
- background-repeat: no-repeat;
204
- display: none;
205
- border-bottom: 1px solid rgba(255, 255, 255, 0.1);
206
- }
207
-
208
- .chapter-tooltip-title {
209
- padding: 10px 12px 6px;
210
- color: var(--player-text-color);
211
- font-size: 14px;
212
- font-weight: 600;
213
- line-height: 1.3;
214
- word-wrap: break-word;
215
- }
216
-
217
- .chapter-tooltip-time {
218
- padding: 0 12px 10px;
219
- color: var(--player-text-secondary);
220
- font-size: 12px;
221
- font-weight: 400;
222
- font-variant-numeric: tabular-nums;
223
- }
224
-
225
- /* ===================================
226
- SEEK HANDLE SHAPES
227
- Available: none, circle, square, diamond, arrow, triangle, heart, star
228
- =================================== */
229
-
230
- /* Default shape: circle (already defined above) */
231
- .progress-handle {
232
- /* Base styles already defined */
233
- }
234
-
235
- .progress-handle-circle {
236
- border-radius: 50%;
237
- }
238
-
239
- .progress-handle-square {
240
- border-radius: 2px;
241
- }
242
-
243
- .progress-handle-diamond {
244
- border-radius: 2px;
245
- transform: translate(-50%, -50%) rotate(45deg);
246
- }
247
-
248
- .progress-handle-arrow {
249
- border-radius: 0;
250
- clip-path: polygon(0% 50%, 60% 0%, 60% 35%, 100% 35%, 100% 65%, 60% 65%, 60% 100%);
251
- }
252
-
253
- .progress-handle-triangle {
254
- border-radius: 0;
255
- clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
256
- }
257
-
258
- .progress-handle-heart {
259
- border-radius: 0;
260
- }
261
-
262
- .progress-handle-heart::before {
263
- content: '❤';
264
- font-size: 12px;
265
- position: absolute;
266
- top: 50%;
267
- left: 50%;
268
- transform: translate(-50%, -50%);
269
- }
270
-
271
- .progress-handle-star {
272
- border-radius: 0;
273
- clip-path: polygon(50% 0%, 61% 35%, 98% 35%, 68% 57%, 79% 91%, 50% 70%, 21% 91%, 32% 57%, 2% 35%, 39% 35%);
274
- }
275
-
276
- .progress-handle-none {
277
- opacity: 0 !important;
278
- }
279
-
280
- /* ===================================
281
- TOUCH/DRAG IMPROVEMENTS
282
- =================================== */
283
-
284
- /* Increase touch target ONLY for the handle, not the entire bar */
285
- .progress-handle {
286
- /* Invisible larger touch area */
287
- &::after {
288
- content: '';
289
- position: absolute;
290
- top: 50%;
291
- left: 50%;
292
- transform: translate(-50%, -50%);
293
- width: 44px;
294
- height: 44px;
295
- border-radius: 50%;
296
- /* Uncomment to debug: background: rgba(255, 0, 0, 0.2); */
297
- }
298
- }
299
-
300
- /* ONLY when actively seeking - enlarge bar */
301
- .progress-container.seeking {
302
- .progress-bar {
303
- height: calc(var(--player-progress-height) * 2);
304
- transition: height 0.15s ease;
305
- }
306
-
307
- .progress-handle {
308
- transform: translate(-50%, -50%) scale(1.4);
309
- transition: transform 0.15s ease;
310
- }
311
- }
312
-
313
- /* Desktop hover - subtle enlargement */
314
- @media (hover: hover) and (pointer: fine) {
315
- .progress-container:hover .progress-bar {
316
- height: calc(var(--player-progress-height) * 1.3);
317
- transition: height 0.15s ease;
318
- }
319
- }
@@ -1,68 +0,0 @@
1
- // ===================================
2
- // RESOLUTION MODES
3
- // ===================================
4
-
5
- // 16:9 aspect ratio (default)
6
- .video-wrapper.ratio-16-9 {
7
- .video-player {
8
- aspect-ratio: 16 / 9;
9
- }
10
- }
11
-
12
- // 4:3 aspect ratio
13
- .video-wrapper.ratio-4-3 {
14
- .video-player {
15
- aspect-ratio: 4 / 3;
16
- }
17
- }
18
-
19
- // 21:9 cinematic
20
- .video-wrapper.ratio-21-9 {
21
- .video-player {
22
- aspect-ratio: 21 / 9;
23
- }
24
- }
25
-
26
- // 1:1 square
27
- .video-wrapper.ratio-1-1 {
28
- .video-player {
29
- aspect-ratio: 1 / 1;
30
- }
31
- }
32
-
33
- // Fit to screen
34
- .video-wrapper.fit-to-screen {
35
- .video-player {
36
- width: 100%;
37
- height: 100%;
38
- object-fit: contain;
39
- }
40
- }
41
-
42
- // Fill screen (may crop)
43
- .video-wrapper.fill-screen {
44
- .video-player {
45
- width: 100%;
46
- height: 100%;
47
- object-fit: cover;
48
- }
49
- }
50
-
51
- // Stretched (may distort)
52
- .video-wrapper.stretched {
53
- .video-player {
54
- width: 100%;
55
- height: 100%;
56
- object-fit: fill;
57
- }
58
- }
59
-
60
- // Original size
61
- .video-wrapper.original-size {
62
- .video-player {
63
- width: auto;
64
- height: auto;
65
- max-width: 100%;
66
- max-height: 100%;
67
- }
68
- }