myetv-player 1.1.6 → 1.3.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 +153 -0
  2. package/css/myetv-player.min.css +1 -1
  3. package/dist/myetv-player.js +654 -129
  4. package/dist/myetv-player.min.js +579 -115
  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 +891 -14
  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 -188
  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 -1360
  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 -1243
  37. package/src/core.js +0 -1922
  38. package/src/events.js +0 -456
  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
package/scss/_mixins.scss DELETED
@@ -1,112 +0,0 @@
1
- // ===================================
2
- // MIXINS
3
- // ===================================
4
-
5
- @use 'variables' as *;
6
-
7
- // Mixin for button hover effects
8
- @mixin button-hover {
9
- transition: all $player-transition-fast;
10
-
11
- &:hover {
12
- background: $player-button-hover;
13
- transform: scale(1.05);
14
- }
15
-
16
- &:active {
17
- transform: scale(0.95);
18
- background: $player-button-active;
19
- }
20
- }
21
-
22
- // Mixin for overlay positioning
23
- @mixin overlay-base {
24
- position: absolute;
25
- top: 0;
26
- left: 0;
27
- width: 100%;
28
- height: 100%;
29
- }
30
-
31
- // Mixin for menu styling
32
- @mixin menu-base {
33
- position: absolute;
34
- bottom: 100%;
35
- right: 0;
36
- background: $player-bg-menu;
37
- backdrop-filter: blur(10px);
38
- border-radius: 8px;
39
- padding: 8px 0;
40
- margin-bottom: 10px;
41
- opacity: 0;
42
- visibility: hidden;
43
- transition: all $player-transition-fast;
44
- min-width: 140px;
45
- border: 1px solid rgba(255, 255, 255, 0.1);
46
- z-index: 100;
47
- box-shadow: $player-shadow-menu;
48
- }
49
-
50
- // Mixin for tooltip styling
51
- @mixin tooltip-base {
52
- position: absolute;
53
- bottom: 100%;
54
- background: rgba(0, 0, 0, 0.9);
55
- color: white;
56
- padding: 6px 10px;
57
- border-radius: 6px;
58
- font-size: 12px;
59
- font-weight: 500;
60
- white-space: nowrap;
61
- opacity: 0;
62
- visibility: hidden;
63
- transition: all 0.15s ease;
64
- z-index: 1000;
65
- box-shadow: $player-shadow-tooltip;
66
- backdrop-filter: blur(8px);
67
- border: 1px solid rgba(255, 255, 255, 0.1);
68
-
69
- &::after {
70
- content: '';
71
- position: absolute;
72
- top: 100%;
73
- left: 50%;
74
- transform: translateX(-50%);
75
- width: 0;
76
- height: 0;
77
- border-left: 5px solid transparent;
78
- border-right: 5px solid transparent;
79
- border-top: 5px solid rgba(0, 0, 0, 0.9);
80
- }
81
- }
82
-
83
- // Mixin for flex centering
84
- @mixin flex-center {
85
- display: flex;
86
- align-items: center;
87
- justify-content: center;
88
- }
89
-
90
- // Mixin for smooth transition
91
- @mixin smooth-transition($properties...) {
92
- transition: $properties $player-transition-normal;
93
- }
94
-
95
- // Responsive breakpoints
96
- @mixin tablet {
97
- @media (max-width: 768px) {
98
- @content;
99
- }
100
- }
101
-
102
- @mixin mobile {
103
- @media (max-width: 480px) {
104
- @content;
105
- }
106
- }
107
-
108
- @mixin small-mobile {
109
- @media (max-width: 350px) {
110
- @content;
111
- }
112
- }
package/scss/_poster.scss DELETED
@@ -1,8 +0,0 @@
1
- // ===================================
2
- // POSTER OVERLAY
3
- // ===================================
4
-
5
- @use 'mixins' as *;
6
- @use 'variables' as *;
7
-
8
-
@@ -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
- }