@videojs/html 10.0.0-beta.8 → 10.0.0-beta.9
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/cdn/audio-minimal.dev.js +9 -9
- package/cdn/audio-minimal.dev.js.map +1 -1
- package/cdn/audio-minimal.js +1 -1
- package/cdn/audio-minimal.js.map +1 -1
- package/cdn/audio.dev.js +9 -9
- package/cdn/audio.dev.js.map +1 -1
- package/cdn/audio.js +1 -1
- package/cdn/audio.js.map +1 -1
- package/cdn/background.dev.js +1 -1
- package/cdn/background.js +1 -1
- package/cdn/{create-player-Dv7K1Ezk.js → create-player-4kACDl5S.js} +3 -2
- package/cdn/create-player-4kACDl5S.js.map +1 -0
- package/cdn/{create-player-QjiNZlh7.js → create-player-DxN4WCxY.js} +3 -3
- package/cdn/create-player-DxN4WCxY.js.map +1 -0
- package/cdn/media/simple-hls-video.dev.js +22 -4
- package/cdn/media/simple-hls-video.dev.js.map +1 -1
- package/cdn/media/simple-hls-video.js +1 -1
- package/cdn/media/simple-hls-video.js.map +1 -1
- package/cdn/{player-CztIlNio.js → player-DVYGAHSo.js} +2 -2
- package/cdn/{player-CztIlNio.js.map → player-DVYGAHSo.js.map} +1 -1
- package/cdn/{player-Dvj38jlr.js → player-u-bvetUg.js} +2 -2
- package/cdn/{player-Dvj38jlr.js.map → player-u-bvetUg.js.map} +1 -1
- package/cdn/{poster-O0SI05LC.js → poster-BoF67sLZ.js} +3 -3
- package/cdn/{poster-O0SI05LC.js.map → poster-BoF67sLZ.js.map} +1 -1
- package/cdn/{poster-C4WHg3BH.js → poster-CkKPGKQ1.js} +2 -2
- package/cdn/{poster-C4WHg3BH.js.map → poster-CkKPGKQ1.js.map} +1 -1
- package/cdn/video-minimal.dev.js +12 -12
- package/cdn/video-minimal.dev.js.map +1 -1
- package/cdn/video-minimal.js +1 -1
- package/cdn/video-minimal.js.map +1 -1
- package/cdn/video.dev.js +12 -12
- package/cdn/video.dev.js.map +1 -1
- package/cdn/video.js +1 -1
- package/cdn/video.js.map +1 -1
- package/cdn/{volume-slider-BqzTytgB.js → volume-slider-Bv1urvub.js} +2 -2
- package/cdn/{volume-slider-BqzTytgB.js.map → volume-slider-Bv1urvub.js.map} +1 -1
- package/cdn/{volume-slider-CfhOO9RM.js → volume-slider-DYG1mki7.js} +2 -2
- package/cdn/{volume-slider-CfhOO9RM.js.map → volume-slider-DYG1mki7.js.map} +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
- package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
- package/dist/default/define/audio/minimal-skin.css +161 -141
- package/dist/default/define/audio/minimal-skin.js +1 -1
- package/dist/default/define/audio/minimal-skin.js.map +1 -1
- package/dist/default/define/audio/minimal-skin.tailwind.js +1 -1
- package/dist/default/define/audio/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/audio/skin.css +164 -132
- package/dist/default/define/audio/skin.js +1 -1
- package/dist/default/define/audio/skin.js.map +1 -1
- package/dist/default/define/audio/skin.tailwind.js +1 -1
- package/dist/default/define/audio/skin.tailwind.js.map +1 -1
- package/dist/default/define/video/minimal-skin.css +224 -192
- package/dist/default/define/video/minimal-skin.js +1 -1
- package/dist/default/define/video/minimal-skin.js.map +1 -1
- package/dist/default/define/video/minimal-skin.tailwind.js +1 -1
- package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/default/define/video/skin.css +238 -189
- package/dist/default/define/video/skin.js +1 -1
- package/dist/default/define/video/skin.js.map +1 -1
- package/dist/default/define/video/skin.tailwind.js +1 -1
- package/dist/default/define/video/skin.tailwind.js.map +1 -1
- package/dist/default/media/simple-hls-video/index.js +1 -0
- package/dist/default/media/simple-hls-video/index.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +4 -3
- package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/button.js +4 -3
- package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/error.js +2 -2
- package/dist/default/skins/dist/default/default/tailwind/components/error.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/overlay.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/popup.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/seek.js +1 -1
- package/dist/default/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +5 -3
- package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +8 -2
- package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +4 -3
- package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/error.js +15 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/error.js.map +1 -0
- package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +9 -2
- package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
- package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
- package/dist/dev/define/audio/minimal-skin.css +161 -141
- package/dist/dev/define/audio/minimal-skin.js +5 -5
- package/dist/dev/define/audio/minimal-skin.js.map +1 -1
- package/dist/dev/define/audio/minimal-skin.tailwind.js +5 -5
- package/dist/dev/define/audio/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/audio/skin.css +164 -132
- package/dist/dev/define/audio/skin.js +5 -5
- package/dist/dev/define/audio/skin.js.map +1 -1
- package/dist/dev/define/audio/skin.tailwind.js +5 -5
- package/dist/dev/define/audio/skin.tailwind.js.map +1 -1
- package/dist/dev/define/video/minimal-skin.css +224 -192
- package/dist/dev/define/video/minimal-skin.js +8 -8
- package/dist/dev/define/video/minimal-skin.js.map +1 -1
- package/dist/dev/define/video/minimal-skin.tailwind.js +8 -8
- package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
- package/dist/dev/define/video/skin.css +238 -189
- package/dist/dev/define/video/skin.js +8 -8
- package/dist/dev/define/video/skin.js.map +1 -1
- package/dist/dev/define/video/skin.tailwind.js +8 -8
- package/dist/dev/define/video/skin.tailwind.js.map +1 -1
- package/dist/dev/media/simple-hls-video/index.js +1 -0
- package/dist/dev/media/simple-hls-video/index.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +4 -3
- package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js +4 -3
- package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/error.js +2 -2
- package/dist/dev/skins/dist/default/default/tailwind/components/error.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/seek.js +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +5 -3
- package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +8 -2
- package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +4 -3
- package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js +15 -0
- package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js.map +1 -0
- package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +9 -2
- package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
- package/package.json +8 -8
- package/cdn/create-player-Dv7K1Ezk.js.map +0 -1
- package/cdn/create-player-QjiNZlh7.js.map +0 -1
|
@@ -1,103 +1,3 @@
|
|
|
1
|
-
/* ==========================================================================
|
|
2
|
-
Icon State Visibility for Video Skins
|
|
3
|
-
|
|
4
|
-
Data-attribute-driven visibility rules for multi-state icon buttons.
|
|
5
|
-
Uses :is() with both element selectors (for HTML custom element wrappers)
|
|
6
|
-
and class selectors (for React rendered SVG elements).
|
|
7
|
-
========================================================================== */
|
|
8
|
-
|
|
9
|
-
/* --- All icons hidden by default --- */
|
|
10
|
-
|
|
11
|
-
.media-button--play .media-icon--restart,
|
|
12
|
-
.media-button--play .media-icon--play,
|
|
13
|
-
.media-button--play .media-icon--pause,
|
|
14
|
-
.media-button--mute .media-icon--volume-off,
|
|
15
|
-
.media-button--mute .media-icon--volume-low,
|
|
16
|
-
.media-button--mute .media-icon--volume-high,
|
|
17
|
-
.media-button--fullscreen .media-icon--fullscreen-enter,
|
|
18
|
-
.media-button--fullscreen .media-icon--fullscreen-exit,
|
|
19
|
-
.media-button--pip .media-icon--pip-enter,
|
|
20
|
-
.media-button--pip .media-icon--pip-exit,
|
|
21
|
-
.media-button--captions .media-icon--captions-off,
|
|
22
|
-
.media-button--captions .media-icon--captions-on {
|
|
23
|
-
display: none;
|
|
24
|
-
opacity: 0;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
/* --- Active icon per state --- */
|
|
28
|
-
|
|
29
|
-
/* Play: ended → restart */
|
|
30
|
-
.media-button--play[data-ended] .media-icon--restart,
|
|
31
|
-
/* Play: paused (not ended) → play */
|
|
32
|
-
.media-button--play:not([data-ended])[data-paused] .media-icon--play,
|
|
33
|
-
/* Play: playing (not paused, not ended) → pause */
|
|
34
|
-
.media-button--play:not([data-paused]):not([data-ended]) .media-icon--pause,
|
|
35
|
-
/* Mute: muted → volume off */
|
|
36
|
-
.media-button--mute[data-muted] .media-icon--volume-off,
|
|
37
|
-
/* Mute: volume low (not muted) → volume low */
|
|
38
|
-
.media-button--mute:not([data-muted])[data-volume-level="low"] .media-icon--volume-low,
|
|
39
|
-
/* Mute: volume high (not muted, not low) → volume high */
|
|
40
|
-
.media-button--mute:not([data-muted]):not([data-volume-level="low"]) .media-icon--volume-high,
|
|
41
|
-
/* Fullscreen: not fullscreen → enter */
|
|
42
|
-
.media-button--fullscreen:not([data-fullscreen]) .media-icon--fullscreen-enter,
|
|
43
|
-
/* Fullscreen: fullscreen → exit */
|
|
44
|
-
.media-button--fullscreen[data-fullscreen] .media-icon--fullscreen-exit,
|
|
45
|
-
/* Picture-in-Picture: not active → enter */
|
|
46
|
-
.media-button--pip:not([data-pip]) .media-icon--pip-enter,
|
|
47
|
-
/* Picture-in-Picture: active → exit */
|
|
48
|
-
.media-button--pip[data-pip] .media-icon--pip-exit,
|
|
49
|
-
/* Captions: not active → captions off */
|
|
50
|
-
.media-button--captions:not([data-active]) .media-icon--captions-off,
|
|
51
|
-
/* Captions: active → captions on */
|
|
52
|
-
.media-button--captions[data-active] .media-icon--captions-on {
|
|
53
|
-
display: block;
|
|
54
|
-
opacity: 1;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/* ==========================================================================
|
|
58
|
-
Tooltip Label State Visibility for Video Skins
|
|
59
|
-
|
|
60
|
-
Data-attribute-driven visibility rules for multi-state tooltip labels.
|
|
61
|
-
Uses adjacent sibling selectors to match button state → tooltip content.
|
|
62
|
-
========================================================================== */
|
|
63
|
-
|
|
64
|
-
/* --- All multi-state labels hidden by default --- */
|
|
65
|
-
|
|
66
|
-
.media-tooltip-label {
|
|
67
|
-
display: none;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/* --- Active label per state --- */
|
|
71
|
-
|
|
72
|
-
/* Play: ended → replay */
|
|
73
|
-
.media-button--play[data-ended] + .media-tooltip .media-tooltip-label--replay,
|
|
74
|
-
/* Play: paused (not ended) → play */
|
|
75
|
-
.media-button--play:not([data-ended])[data-paused] + .media-tooltip
|
|
76
|
-
.media-tooltip-label--play,
|
|
77
|
-
/* Play: playing (not paused, not ended) → pause */
|
|
78
|
-
.media-button--play:not([data-paused]):not([data-ended]) + .media-tooltip
|
|
79
|
-
.media-tooltip-label--pause,
|
|
80
|
-
/* Fullscreen: not fullscreen → enter */
|
|
81
|
-
.media-button--fullscreen:not([data-fullscreen]) + .media-tooltip
|
|
82
|
-
.media-tooltip-label--enter-fullscreen,
|
|
83
|
-
/* Fullscreen: fullscreen → exit */
|
|
84
|
-
.media-button--fullscreen[data-fullscreen] + .media-tooltip
|
|
85
|
-
.media-tooltip-label--exit-fullscreen,
|
|
86
|
-
/* Captions: not active → enable */
|
|
87
|
-
.media-button--captions:not([data-active]) + .media-tooltip
|
|
88
|
-
.media-tooltip-label--enable-captions,
|
|
89
|
-
/* Captions: active → disable */
|
|
90
|
-
.media-button--captions[data-active] + .media-tooltip
|
|
91
|
-
.media-tooltip-label--disable-captions,
|
|
92
|
-
/* PiP: not in pip → enter */
|
|
93
|
-
.media-button--pip:not([data-pip]) + .media-tooltip
|
|
94
|
-
.media-tooltip-label--enter-pip,
|
|
95
|
-
/* PiP: in pip → exit */
|
|
96
|
-
.media-button--pip[data-pip] + .media-tooltip
|
|
97
|
-
.media-tooltip-label--exit-pip {
|
|
98
|
-
display: block;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
1
|
/* ==========================================================================
|
|
102
2
|
Reset
|
|
103
3
|
========================================================================== */
|
|
@@ -215,27 +115,20 @@
|
|
|
215
115
|
backdrop-filter: blur(0) saturate(1.5);
|
|
216
116
|
opacity: 0;
|
|
217
117
|
pointer-events: none;
|
|
118
|
+
transition-property: opacity, backdrop-filter;
|
|
119
|
+
transition-duration: var(--media-controls-transition-duration);
|
|
120
|
+
transition-delay: var(--media-controls-transition-delay);
|
|
121
|
+
transition-timing-function: ease-out;
|
|
122
|
+
}
|
|
218
123
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
transition-delay: 500ms;
|
|
223
|
-
transition-timing-function: ease-out;
|
|
224
|
-
|
|
225
|
-
@media (prefers-reduced-motion: reduce) {
|
|
226
|
-
transition-duration: 100ms;
|
|
227
|
-
}
|
|
228
|
-
}
|
|
124
|
+
.media-default-skin .media-error ~ .media-overlay {
|
|
125
|
+
transition-duration: var(--media-error-dialog-transition-duration);
|
|
126
|
+
transition-delay: var(--media-error-dialog-transition-delay);
|
|
229
127
|
}
|
|
230
128
|
|
|
231
129
|
.media-default-skin .media-controls[data-visible] ~ .media-overlay,
|
|
232
130
|
.media-default-skin .media-error[data-open] ~ .media-overlay {
|
|
233
131
|
opacity: 1;
|
|
234
|
-
|
|
235
|
-
@media (pointer: fine) {
|
|
236
|
-
transition-duration: 150ms;
|
|
237
|
-
transition-delay: 0ms;
|
|
238
|
-
}
|
|
239
132
|
}
|
|
240
133
|
|
|
241
134
|
.media-default-skin .media-error[data-open] ~ .media-overlay {
|
|
@@ -270,57 +163,7 @@
|
|
|
270
163
|
========================================================================== */
|
|
271
164
|
|
|
272
165
|
.media-default-skin .media-error {
|
|
273
|
-
|
|
274
|
-
inset: 0;
|
|
275
|
-
z-index: 20;
|
|
276
|
-
display: flex;
|
|
277
|
-
align-items: center;
|
|
278
|
-
justify-content: center;
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
.media-default-skin .media-error__dialog {
|
|
282
|
-
display: flex;
|
|
283
|
-
flex-direction: column;
|
|
284
|
-
gap: 0.75rem;
|
|
285
|
-
max-width: 18rem;
|
|
286
|
-
padding: 0.75rem;
|
|
287
|
-
border-radius: 1.75rem;
|
|
288
|
-
color: oklch(1 0 0);
|
|
289
|
-
font-size: 0.875rem;
|
|
290
|
-
transition-property: opacity, scale;
|
|
291
|
-
transition-duration: 500ms;
|
|
292
|
-
transition-delay: 100ms;
|
|
293
|
-
transition-timing-function: linear(
|
|
294
|
-
0,
|
|
295
|
-
0.034 1.5%,
|
|
296
|
-
0.763 9.7%,
|
|
297
|
-
1.066 13.9%,
|
|
298
|
-
1.198 19.9%,
|
|
299
|
-
1.184 21.8%,
|
|
300
|
-
0.963 37.5%,
|
|
301
|
-
0.997 50.9%,
|
|
302
|
-
1
|
|
303
|
-
);
|
|
304
|
-
|
|
305
|
-
/* Simple, fast transition for reduced motion users */
|
|
306
|
-
@media (prefers-reduced-motion: reduce) {
|
|
307
|
-
transition-duration: 100ms;
|
|
308
|
-
transition-delay: 0ms;
|
|
309
|
-
transition-timing-function: ease-out;
|
|
310
|
-
}
|
|
311
|
-
}
|
|
312
|
-
|
|
313
|
-
.media-default-skin .media-error[data-starting-style] .media-error__dialog,
|
|
314
|
-
.media-default-skin .media-error[data-ending-style] .media-error__dialog {
|
|
315
|
-
opacity: 0;
|
|
316
|
-
scale: 0.5;
|
|
317
|
-
}
|
|
318
|
-
|
|
319
|
-
.media-default-skin .media-error__content {
|
|
320
|
-
display: flex;
|
|
321
|
-
flex-direction: column;
|
|
322
|
-
gap: 0.5rem;
|
|
323
|
-
padding: 0.5rem 0.5rem 0.375rem;
|
|
166
|
+
outline: none;
|
|
324
167
|
}
|
|
325
168
|
|
|
326
169
|
.media-default-skin .media-error__title {
|
|
@@ -342,6 +185,10 @@
|
|
|
342
185
|
}
|
|
343
186
|
}
|
|
344
187
|
|
|
188
|
+
.media-default-skin .media-error[data-open] ~ .media-controls * {
|
|
189
|
+
visibility: hidden;
|
|
190
|
+
}
|
|
191
|
+
|
|
345
192
|
/* ==========================================================================
|
|
346
193
|
Controls
|
|
347
194
|
========================================================================== */
|
|
@@ -402,15 +249,11 @@
|
|
|
402
249
|
justify-content: center;
|
|
403
250
|
flex-shrink: 0;
|
|
404
251
|
padding: 0.5rem 1rem;
|
|
405
|
-
background: oklch(1 0 0);
|
|
406
252
|
border: none;
|
|
407
253
|
border-radius: calc(infinity * 1px);
|
|
408
254
|
outline: 2px solid transparent;
|
|
409
255
|
outline-offset: -2px;
|
|
410
|
-
|
|
411
|
-
font-weight: 500;
|
|
412
|
-
text-align: center;
|
|
413
|
-
transition-property: background-color, color, outline-offset, scale;
|
|
256
|
+
transition-property: background-color, outline-offset, scale;
|
|
414
257
|
transition-duration: 150ms;
|
|
415
258
|
transition-timing-function: ease-out;
|
|
416
259
|
cursor: pointer;
|
|
@@ -418,10 +261,14 @@
|
|
|
418
261
|
touch-action: manipulation;
|
|
419
262
|
|
|
420
263
|
&:focus-visible {
|
|
421
|
-
outline-color:
|
|
264
|
+
outline-color: currentColor;
|
|
422
265
|
outline-offset: 2px;
|
|
423
266
|
}
|
|
424
267
|
|
|
268
|
+
&:active {
|
|
269
|
+
scale: 0.98;
|
|
270
|
+
}
|
|
271
|
+
|
|
425
272
|
&[disabled] {
|
|
426
273
|
opacity: 0.5;
|
|
427
274
|
filter: grayscale(1);
|
|
@@ -433,12 +280,16 @@
|
|
|
433
280
|
}
|
|
434
281
|
}
|
|
435
282
|
|
|
436
|
-
/*
|
|
437
|
-
.media-default-skin .media-button--
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
283
|
+
/* Primary button variant */
|
|
284
|
+
.media-default-skin .media-button--primary {
|
|
285
|
+
background: oklch(1 0 0);
|
|
286
|
+
color: oklch(0 0 0);
|
|
287
|
+
font-weight: 500;
|
|
288
|
+
text-align: center;
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/* Subtle button variant */
|
|
292
|
+
.media-default-skin .media-button--subtle {
|
|
442
293
|
background: transparent;
|
|
443
294
|
color: inherit;
|
|
444
295
|
text-shadow: inherit;
|
|
@@ -449,6 +300,14 @@
|
|
|
449
300
|
background-color: oklch(from currentColor l c h / 0.1);
|
|
450
301
|
text-decoration: none;
|
|
451
302
|
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/* Icon button variant */
|
|
306
|
+
.media-default-skin .media-button--icon {
|
|
307
|
+
display: grid;
|
|
308
|
+
width: 2.125rem;
|
|
309
|
+
padding: 0;
|
|
310
|
+
aspect-ratio: 1;
|
|
452
311
|
|
|
453
312
|
&:active {
|
|
454
313
|
scale: 0.9;
|
|
@@ -465,7 +324,7 @@
|
|
|
465
324
|
position: absolute;
|
|
466
325
|
right: -1px;
|
|
467
326
|
bottom: -3px;
|
|
468
|
-
font-size:
|
|
327
|
+
font-size: 10px;
|
|
469
328
|
font-weight: 480;
|
|
470
329
|
font-variant-numeric: tabular-nums;
|
|
471
330
|
}
|
|
@@ -688,6 +547,22 @@
|
|
|
688
547
|
outline-color: oklch(from currentColor l c h / 0.25);
|
|
689
548
|
outline-offset: 0;
|
|
690
549
|
}
|
|
550
|
+
|
|
551
|
+
&::after {
|
|
552
|
+
content: "";
|
|
553
|
+
position: absolute;
|
|
554
|
+
inset: -4px;
|
|
555
|
+
border-radius: inherit;
|
|
556
|
+
box-shadow: 0 0 0 2px oklch(1 0 0);
|
|
557
|
+
transition-property: opacity, scale;
|
|
558
|
+
transition-duration: 150ms;
|
|
559
|
+
transition-timing-function: ease-out;
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
&:not(:focus-visible)::after {
|
|
563
|
+
scale: 0.5;
|
|
564
|
+
opacity: 0;
|
|
565
|
+
}
|
|
691
566
|
}
|
|
692
567
|
|
|
693
568
|
.media-default-skin .media-slider:active .media-slider__thumb,
|
|
@@ -763,7 +638,8 @@
|
|
|
763
638
|
color: inherit;
|
|
764
639
|
overflow: visible;
|
|
765
640
|
transition-property: scale, opacity, filter;
|
|
766
|
-
transition-duration:
|
|
641
|
+
transition-duration: var(--media-popup-transition-duration);
|
|
642
|
+
transition-timing-function: var(--media-popup-transition-timing-function);
|
|
767
643
|
|
|
768
644
|
&[data-starting-style],
|
|
769
645
|
&[data-ending-style] {
|
|
@@ -882,6 +758,106 @@
|
|
|
882
758
|
font-family: inherit;
|
|
883
759
|
}
|
|
884
760
|
|
|
761
|
+
/* ==========================================================================
|
|
762
|
+
Icon State Visibility for Video Skins
|
|
763
|
+
|
|
764
|
+
Data-attribute-driven visibility rules for multi-state icon buttons.
|
|
765
|
+
Uses :is() with both element selectors (for HTML custom element wrappers)
|
|
766
|
+
and class selectors (for React rendered SVG elements).
|
|
767
|
+
========================================================================== */
|
|
768
|
+
|
|
769
|
+
/* --- All icons hidden by default --- */
|
|
770
|
+
|
|
771
|
+
.media-button--play .media-icon--restart,
|
|
772
|
+
.media-button--play .media-icon--play,
|
|
773
|
+
.media-button--play .media-icon--pause,
|
|
774
|
+
.media-button--mute .media-icon--volume-off,
|
|
775
|
+
.media-button--mute .media-icon--volume-low,
|
|
776
|
+
.media-button--mute .media-icon--volume-high,
|
|
777
|
+
.media-button--fullscreen .media-icon--fullscreen-enter,
|
|
778
|
+
.media-button--fullscreen .media-icon--fullscreen-exit,
|
|
779
|
+
.media-button--pip .media-icon--pip-enter,
|
|
780
|
+
.media-button--pip .media-icon--pip-exit,
|
|
781
|
+
.media-button--captions .media-icon--captions-off,
|
|
782
|
+
.media-button--captions .media-icon--captions-on {
|
|
783
|
+
display: none;
|
|
784
|
+
opacity: 0;
|
|
785
|
+
}
|
|
786
|
+
|
|
787
|
+
/* --- Active icon per state --- */
|
|
788
|
+
|
|
789
|
+
/* Play: ended → restart */
|
|
790
|
+
.media-button--play[data-ended] .media-icon--restart,
|
|
791
|
+
/* Play: paused (not ended) → play */
|
|
792
|
+
.media-button--play:not([data-ended])[data-paused] .media-icon--play,
|
|
793
|
+
/* Play: playing (not paused, not ended) → pause */
|
|
794
|
+
.media-button--play:not([data-paused]):not([data-ended]) .media-icon--pause,
|
|
795
|
+
/* Mute: muted → volume off */
|
|
796
|
+
.media-button--mute[data-muted] .media-icon--volume-off,
|
|
797
|
+
/* Mute: volume low (not muted) → volume low */
|
|
798
|
+
.media-button--mute:not([data-muted])[data-volume-level="low"] .media-icon--volume-low,
|
|
799
|
+
/* Mute: volume high (not muted, not low) → volume high */
|
|
800
|
+
.media-button--mute:not([data-muted]):not([data-volume-level="low"]) .media-icon--volume-high,
|
|
801
|
+
/* Fullscreen: not fullscreen → enter */
|
|
802
|
+
.media-button--fullscreen:not([data-fullscreen]) .media-icon--fullscreen-enter,
|
|
803
|
+
/* Fullscreen: fullscreen → exit */
|
|
804
|
+
.media-button--fullscreen[data-fullscreen] .media-icon--fullscreen-exit,
|
|
805
|
+
/* Picture-in-Picture: not active → enter */
|
|
806
|
+
.media-button--pip:not([data-pip]) .media-icon--pip-enter,
|
|
807
|
+
/* Picture-in-Picture: active → exit */
|
|
808
|
+
.media-button--pip[data-pip] .media-icon--pip-exit,
|
|
809
|
+
/* Captions: not active → captions off */
|
|
810
|
+
.media-button--captions:not([data-active]) .media-icon--captions-off,
|
|
811
|
+
/* Captions: active → captions on */
|
|
812
|
+
.media-button--captions[data-active] .media-icon--captions-on {
|
|
813
|
+
display: block;
|
|
814
|
+
opacity: 1;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
/* ==========================================================================
|
|
818
|
+
Tooltip Label State Visibility for Video Skins
|
|
819
|
+
|
|
820
|
+
Data-attribute-driven visibility rules for multi-state tooltip labels.
|
|
821
|
+
Uses adjacent sibling selectors to match button state → tooltip content.
|
|
822
|
+
========================================================================== */
|
|
823
|
+
|
|
824
|
+
/* --- All multi-state labels hidden by default --- */
|
|
825
|
+
|
|
826
|
+
.media-tooltip-label {
|
|
827
|
+
display: none;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
/* --- Active label per state --- */
|
|
831
|
+
|
|
832
|
+
/* Play: ended → replay */
|
|
833
|
+
.media-button--play[data-ended] + .media-tooltip .media-tooltip-label--replay,
|
|
834
|
+
/* Play: paused (not ended) → play */
|
|
835
|
+
.media-button--play:not([data-ended])[data-paused] + .media-tooltip
|
|
836
|
+
.media-tooltip-label--play,
|
|
837
|
+
/* Play: playing (not paused, not ended) → pause */
|
|
838
|
+
.media-button--play:not([data-paused]):not([data-ended]) + .media-tooltip
|
|
839
|
+
.media-tooltip-label--pause,
|
|
840
|
+
/* Fullscreen: not fullscreen → enter */
|
|
841
|
+
.media-button--fullscreen:not([data-fullscreen]) + .media-tooltip
|
|
842
|
+
.media-tooltip-label--enter-fullscreen,
|
|
843
|
+
/* Fullscreen: fullscreen → exit */
|
|
844
|
+
.media-button--fullscreen[data-fullscreen] + .media-tooltip
|
|
845
|
+
.media-tooltip-label--exit-fullscreen,
|
|
846
|
+
/* Captions: not active → enable */
|
|
847
|
+
.media-button--captions:not([data-active]) + .media-tooltip
|
|
848
|
+
.media-tooltip-label--enable-captions,
|
|
849
|
+
/* Captions: active → disable */
|
|
850
|
+
.media-button--captions[data-active] + .media-tooltip
|
|
851
|
+
.media-tooltip-label--disable-captions,
|
|
852
|
+
/* PiP: not in pip → enter */
|
|
853
|
+
.media-button--pip:not([data-pip]) + .media-tooltip
|
|
854
|
+
.media-tooltip-label--enter-pip,
|
|
855
|
+
/* PiP: in pip → exit */
|
|
856
|
+
.media-button--pip[data-pip] + .media-tooltip
|
|
857
|
+
.media-tooltip-label--exit-pip {
|
|
858
|
+
display: block;
|
|
859
|
+
}
|
|
860
|
+
|
|
885
861
|
|
|
886
862
|
/* ==========================================================================
|
|
887
863
|
Root
|
|
@@ -889,6 +865,17 @@
|
|
|
889
865
|
|
|
890
866
|
.media-default-skin--video {
|
|
891
867
|
background: oklch(0 0 0);
|
|
868
|
+
--media-spring-transition: linear(
|
|
869
|
+
0,
|
|
870
|
+
0.034 1.5%,
|
|
871
|
+
0.763 9.7%,
|
|
872
|
+
1.066 13.9%,
|
|
873
|
+
1.198 19.9%,
|
|
874
|
+
1.184 21.8%,
|
|
875
|
+
0.963 37.5%,
|
|
876
|
+
0.997 50.9%,
|
|
877
|
+
1
|
|
878
|
+
);
|
|
892
879
|
--media-border-color: oklch(0 0 0 / 0.1);
|
|
893
880
|
--media-surface-background-color: oklch(1 0 0 / 0.1);
|
|
894
881
|
--media-surface-inner-border-color: oklch(1 0 0 / 0.05);
|
|
@@ -898,6 +885,19 @@
|
|
|
898
885
|
--media-video-border-radius: var(--media-border-radius, 2rem);
|
|
899
886
|
--media-controls-transition-duration: 100ms;
|
|
900
887
|
--media-controls-transition-delay: 0ms;
|
|
888
|
+
--media-controls-transition-timing-function: ease-out;
|
|
889
|
+
--media-error-dialog-transition-duration: 350ms;
|
|
890
|
+
--media-error-dialog-transition-delay: 100ms;
|
|
891
|
+
--media-error-dialog-transition-timing-function: var(--media-spring-transition);
|
|
892
|
+
--media-popup-transition-duration: 100ms;
|
|
893
|
+
--media-popup-transition-timing-function: ease-out;
|
|
894
|
+
|
|
895
|
+
@media (prefers-reduced-motion: reduce) {
|
|
896
|
+
--media-error-dialog-transition-duration: 50ms;
|
|
897
|
+
--media-error-dialog-transition-delay: 0ms;
|
|
898
|
+
--media-error-dialog-transition-timing-function: ease-out;
|
|
899
|
+
--media-popup-transition-duration: 0ms;
|
|
900
|
+
}
|
|
901
901
|
|
|
902
902
|
@media (prefers-color-scheme: dark) {
|
|
903
903
|
--media-border-color: oklch(1 0 0 / 0.15);
|
|
@@ -913,7 +913,7 @@
|
|
|
913
913
|
--media-controls-transition-duration: 150ms;
|
|
914
914
|
}
|
|
915
915
|
@media (prefers-reduced-motion: reduce) {
|
|
916
|
-
--media-controls-transition-duration:
|
|
916
|
+
--media-controls-transition-duration: 50ms;
|
|
917
917
|
}
|
|
918
918
|
}
|
|
919
919
|
|
|
@@ -933,6 +933,55 @@
|
|
|
933
933
|
}
|
|
934
934
|
}
|
|
935
935
|
|
|
936
|
+
/* ==========================================================================
|
|
937
|
+
Error Dialog
|
|
938
|
+
========================================================================== */
|
|
939
|
+
|
|
940
|
+
.media-default-skin--video .media-error {
|
|
941
|
+
position: absolute;
|
|
942
|
+
inset: 0;
|
|
943
|
+
z-index: 20;
|
|
944
|
+
display: flex;
|
|
945
|
+
align-items: center;
|
|
946
|
+
justify-content: center;
|
|
947
|
+
}
|
|
948
|
+
|
|
949
|
+
.media-default-skin--video .media-error__dialog {
|
|
950
|
+
display: flex;
|
|
951
|
+
flex-direction: column;
|
|
952
|
+
gap: 0.75rem;
|
|
953
|
+
max-width: 18rem;
|
|
954
|
+
padding: 0.75rem;
|
|
955
|
+
border-radius: 1.75rem;
|
|
956
|
+
color: oklch(1 0 0);
|
|
957
|
+
text-shadow: 0 1px 0 oklch(0 0 0 / 0.25);
|
|
958
|
+
transition-property: opacity, scale;
|
|
959
|
+
transition-duration: var(--media-error-dialog-transition-duration);
|
|
960
|
+
transition-delay: var(--media-error-dialog-transition-delay);
|
|
961
|
+
transition-timing-function: var(--media-error-dialog-transition-timing-function);
|
|
962
|
+
}
|
|
963
|
+
|
|
964
|
+
.media-default-skin--video .media-error[data-starting-style] .media-error__dialog,
|
|
965
|
+
.media-default-skin--video .media-error[data-ending-style] .media-error__dialog {
|
|
966
|
+
opacity: 0;
|
|
967
|
+
scale: 0.5;
|
|
968
|
+
}
|
|
969
|
+
.media-default-skin--video .media-error[data-ending-style] .media-error__dialog {
|
|
970
|
+
transition-delay: 0ms;
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
.media-default-skin--video .media-error__content {
|
|
974
|
+
display: flex;
|
|
975
|
+
flex-direction: column;
|
|
976
|
+
gap: 0.5rem;
|
|
977
|
+
padding: 0.5rem 0.5rem 0.375rem;
|
|
978
|
+
text-shadow: inherit;
|
|
979
|
+
}
|
|
980
|
+
|
|
981
|
+
.media-default-skin--video .media-error__title {
|
|
982
|
+
font-size: 1rem;
|
|
983
|
+
}
|
|
984
|
+
|
|
936
985
|
/* ==========================================================================
|
|
937
986
|
Controls (hide/show behavior)
|
|
938
987
|
========================================================================== */
|
|
@@ -943,9 +992,9 @@
|
|
|
943
992
|
inset-inline: 0.75rem;
|
|
944
993
|
z-index: 10;
|
|
945
994
|
color: var(--media-color-primary, oklch(1 0 0));
|
|
946
|
-
transition-timing-function: ease-out;
|
|
947
995
|
transition-duration: var(--media-controls-transition-duration);
|
|
948
996
|
transition-delay: var(--media-controls-transition-delay);
|
|
997
|
+
transition-timing-function: var(--media-controls-transition-timing-function);
|
|
949
998
|
transform-origin: bottom;
|
|
950
999
|
|
|
951
1000
|
@media (pointer: fine) {
|
|
@@ -963,12 +1012,8 @@
|
|
|
963
1012
|
pointer-events: none;
|
|
964
1013
|
scale: 0.9;
|
|
965
1014
|
|
|
966
|
-
@media (pointer: fine) {
|
|
1015
|
+
@media (pointer: fine) and (prefers-reduced-motion: no-preference) {
|
|
967
1016
|
filter: blur(8px);
|
|
968
|
-
|
|
969
|
-
@media (prefers-reduced-motion: reduce) {
|
|
970
|
-
filter: blur(0);
|
|
971
|
-
}
|
|
972
1017
|
}
|
|
973
1018
|
|
|
974
1019
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -977,6 +1022,10 @@
|
|
|
977
1022
|
}
|
|
978
1023
|
}
|
|
979
1024
|
|
|
1025
|
+
.media-default-skin--video .media-error[data-open] ~ .media-controls {
|
|
1026
|
+
display: none;
|
|
1027
|
+
}
|
|
1028
|
+
|
|
980
1029
|
/* Hide cursor when controls are hidden in fullscreen */
|
|
981
1030
|
@media (pointer: fine) {
|
|
982
1031
|
.media-default-skin--video:fullscreen:has(.media-controls:not([data-visible])) {
|
|
@@ -993,7 +1042,7 @@
|
|
|
993
1042
|
box-shadow: 0 0 0 1px oklch(0 0 0 / 0.05);
|
|
994
1043
|
}
|
|
995
1044
|
|
|
996
|
-
.media-default-skin .media-slider__preview {
|
|
1045
|
+
.media-default-skin--video .media-slider__preview {
|
|
997
1046
|
position: absolute;
|
|
998
1047
|
left: var(--media-slider-pointer);
|
|
999
1048
|
bottom: calc(100% + 1.2rem);
|
|
@@ -1015,7 +1064,7 @@
|
|
|
1015
1064
|
max-height: 6rem;
|
|
1016
1065
|
}
|
|
1017
1066
|
}
|
|
1018
|
-
.media-default-skin .media-slider[data-pointing] .media-slider__preview:has([role="img"]:not([data-hidden])) {
|
|
1067
|
+
.media-default-skin--video .media-slider[data-pointing] .media-slider__preview:has([role="img"]:not([data-hidden])) {
|
|
1019
1068
|
opacity: 1;
|
|
1020
1069
|
scale: 1;
|
|
1021
1070
|
filter: blur(0);
|
|
@@ -23,7 +23,7 @@ import { ReactiveElement } from "@videojs/element";
|
|
|
23
23
|
//#region src/define/video/skin.ts
|
|
24
24
|
const SEEK_TIME = 10;
|
|
25
25
|
function getTemplateHTML() {
|
|
26
|
-
return `<media-container class="media-default-skin media-default-skin--video"><slot name="media"></slot><slot></slot><media-poster><slot name="poster"></slot></media-poster><media-buffering-indicator class="media-buffering-indicator"><div class="media-surface"> ${renderIcon("spinner", { class: "media-icon" })} </div></media-buffering-indicator><media-controls class="media-surface media-controls"><media-tooltip-group><media-play-button commandfor="play-tooltip" class="media-button media-button--icon media-button--play"> ${renderIcon("restart", { class: "media-icon media-icon--restart" })} ${renderIcon("play", { class: "media-icon media-icon--play" })} ${renderIcon("pause", { class: "media-icon media-icon--pause" })} </media-play-button><media-tooltip id="play-tooltip" side="top" class="media-surface media-tooltip"><span class="media-tooltip-label media-tooltip-label--replay">Replay</span><span class="media-tooltip-label media-tooltip-label--play">Play</span><span class="media-tooltip-label media-tooltip-label--pause">Pause</span></media-tooltip><media-seek-button commandfor="seek-backward-tooltip" seconds="${-SEEK_TIME}" class="media-button media-button--icon media-button--seek"> <span class="media-icon__container"> ${renderIcon("seek", { class: "media-icon media-icon--flipped" })} <span class="media-icon__label">${SEEK_TIME}</span></span></media-seek-button><media-tooltip id="seek-backward-tooltip" side="top" class="media-surface media-tooltip"> Seek backward ${SEEK_TIME} seconds </media-tooltip><media-seek-button commandfor="seek-forward-tooltip" seconds="${SEEK_TIME}" class="media-button media-button--icon media-button--seek"> <span class="media-icon__container"> ${renderIcon("seek", { class: "media-icon" })} <span class="media-icon__label">${SEEK_TIME}</span></span></media-seek-button><media-tooltip id="seek-forward-tooltip" side="top" class="media-surface media-tooltip"> Seek forward ${SEEK_TIME} seconds </media-tooltip><media-time-group class="media-time"><media-time type="current" class="media-time__value"></media-time><media-time-slider class="media-slider"><media-slider-track class="media-slider__track"><media-slider-fill class="media-slider__fill"></media-slider-fill><media-slider-buffer class="media-slider__buffer"></media-slider-buffer></media-slider-track><media-slider-thumb class="media-slider__thumb"></media-slider-thumb><div class="media-surface media-preview media-slider__preview"><media-slider-thumbnail class="media-preview__thumbnail"></media-slider-thumbnail><media-slider-value type="pointer" class="media-preview__timestamp"></media-slider-value> ${renderIcon("spinner", { class: "media-preview__spinner media-icon" })} </div></media-time-slider><media-time type="duration" class="media-time__value"></media-time></media-time-group><media-playback-rate-button commandfor="playback-rate-tooltip" class="media-button media-button--icon media-button--playback-rate"></media-playback-rate-button><media-tooltip id="playback-rate-tooltip" side="top" class="media-surface media-tooltip"> Toggle playback rate </media-tooltip><media-mute-button commandfor="video-volume-popover" class="media-button media-button--icon media-button--mute"> ${renderIcon("volume-off", { class: "media-icon media-icon--volume-off" })} ${renderIcon("volume-low", { class: "media-icon media-icon--volume-low" })} ${renderIcon("volume-high", { class: "media-icon media-icon--volume-high" })} </media-mute-button><media-popover id="video-volume-popover" open-on-hover delay="200" close-delay="100" side="top" class="media-surface media-popover media-popover--volume"><media-volume-slider class="media-slider" orientation="vertical" thumb-alignment="edge"><media-slider-track class="media-slider__track"><media-slider-fill class="media-slider__fill"></media-slider-fill></media-slider-track><media-slider-thumb class="media-slider__thumb media-slider__thumb--persistent"></media-slider-thumb></media-volume-slider></media-popover><media-captions-button commandfor="captions-tooltip" class="media-button media-button--icon media-button--captions"> ${renderIcon("captions-off", { class: "media-icon media-icon--captions-off" })} ${renderIcon("captions-on", { class: "media-icon media-icon--captions-on" })} </media-captions-button><media-tooltip id="captions-tooltip" side="top" class="media-surface media-tooltip"><span class="media-tooltip-label media-tooltip-label--enable-captions">Enable captions</span><span class="media-tooltip-label media-tooltip-label--disable-captions">Disable captions</span></media-tooltip><media-pip-button commandfor="pip-tooltip" class="media-button media-button--icon media-button--pip"> ${renderIcon("pip-enter", { class: "media-icon media-icon--pip-enter" })} ${renderIcon("pip-exit", { class: "media-icon media-icon--pip-exit" })} </media-pip-button><media-tooltip id="pip-tooltip" side="top" class="media-surface media-tooltip"><span class="media-tooltip-label media-tooltip-label--enter-pip">Enter picture-in-picture</span><span class="media-tooltip-label media-tooltip-label--exit-pip">Exit picture-in-picture</span></media-tooltip><media-fullscreen-button commandfor="fullscreen-tooltip" class="media-button media-button--icon media-button--fullscreen"> ${renderIcon("fullscreen-enter", { class: "media-icon media-icon--fullscreen-enter" })} ${renderIcon("fullscreen-exit", { class: "media-icon media-icon--fullscreen-exit" })} </media-fullscreen-button><media-tooltip id="fullscreen-tooltip" side="top" class="media-surface media-tooltip"><span class="media-tooltip-label media-tooltip-label--enter-fullscreen">Enter fullscreen</span><span class="media-tooltip-label media-tooltip-label--exit-fullscreen">Exit fullscreen</span></media-tooltip></media-tooltip-group></media-controls><div class="media-overlay"></div></media-container>`;
|
|
26
|
+
return `<media-container class="media-default-skin media-default-skin--video"><slot name="media"></slot><slot></slot><media-poster><slot name="poster"></slot></media-poster><media-buffering-indicator class="media-buffering-indicator"><div class="media-surface"> ${renderIcon("spinner", { class: "media-icon" })} </div></media-buffering-indicator><media-controls class="media-surface media-controls"><media-tooltip-group><media-play-button commandfor="play-tooltip" class="media-button media-button--subtle media-button--icon media-button--play"> ${renderIcon("restart", { class: "media-icon media-icon--restart" })} ${renderIcon("play", { class: "media-icon media-icon--play" })} ${renderIcon("pause", { class: "media-icon media-icon--pause" })} </media-play-button><media-tooltip id="play-tooltip" side="top" class="media-surface media-tooltip"><span class="media-tooltip-label media-tooltip-label--replay">Replay</span><span class="media-tooltip-label media-tooltip-label--play">Play</span><span class="media-tooltip-label media-tooltip-label--pause">Pause</span></media-tooltip><media-seek-button commandfor="seek-backward-tooltip" seconds="${-SEEK_TIME}" class="media-button media-button--subtle media-button--icon media-button--seek"> <span class="media-icon__container"> ${renderIcon("seek", { class: "media-icon media-icon--flipped" })} <span class="media-icon__label">${SEEK_TIME}</span></span></media-seek-button><media-tooltip id="seek-backward-tooltip" side="top" class="media-surface media-tooltip"> Seek backward ${SEEK_TIME} seconds </media-tooltip><media-seek-button commandfor="seek-forward-tooltip" seconds="${SEEK_TIME}" class="media-button media-button--subtle media-button--icon media-button--seek"> <span class="media-icon__container"> ${renderIcon("seek", { class: "media-icon" })} <span class="media-icon__label">${SEEK_TIME}</span></span></media-seek-button><media-tooltip id="seek-forward-tooltip" side="top" class="media-surface media-tooltip"> Seek forward ${SEEK_TIME} seconds </media-tooltip><media-time-group class="media-time"><media-time type="current" class="media-time__value"></media-time><media-time-slider class="media-slider"><media-slider-track class="media-slider__track"><media-slider-fill class="media-slider__fill"></media-slider-fill><media-slider-buffer class="media-slider__buffer"></media-slider-buffer></media-slider-track><media-slider-thumb class="media-slider__thumb"></media-slider-thumb><div class="media-surface media-preview media-slider__preview"><media-slider-thumbnail class="media-preview__thumbnail"></media-slider-thumbnail><media-slider-value type="pointer" class="media-preview__timestamp"></media-slider-value> ${renderIcon("spinner", { class: "media-preview__spinner media-icon" })} </div></media-time-slider><media-time type="duration" class="media-time__value"></media-time></media-time-group><media-playback-rate-button commandfor="playback-rate-tooltip" class="media-button media-button--subtle media-button--icon media-button--playback-rate"></media-playback-rate-button><media-tooltip id="playback-rate-tooltip" side="top" class="media-surface media-tooltip"> Toggle playback rate </media-tooltip><media-mute-button commandfor="video-volume-popover" class="media-button media-button--subtle media-button--icon media-button--mute"> ${renderIcon("volume-off", { class: "media-icon media-icon--volume-off" })} ${renderIcon("volume-low", { class: "media-icon media-icon--volume-low" })} ${renderIcon("volume-high", { class: "media-icon media-icon--volume-high" })} </media-mute-button><media-popover id="video-volume-popover" open-on-hover delay="200" close-delay="100" side="top" class="media-surface media-popover media-popover--volume"><media-volume-slider class="media-slider" orientation="vertical" thumb-alignment="edge"><media-slider-track class="media-slider__track"><media-slider-fill class="media-slider__fill"></media-slider-fill></media-slider-track><media-slider-thumb class="media-slider__thumb media-slider__thumb--persistent"></media-slider-thumb></media-volume-slider></media-popover><media-captions-button commandfor="captions-tooltip" class="media-button media-button--subtle media-button--icon media-button--captions"> ${renderIcon("captions-off", { class: "media-icon media-icon--captions-off" })} ${renderIcon("captions-on", { class: "media-icon media-icon--captions-on" })} </media-captions-button><media-tooltip id="captions-tooltip" side="top" class="media-surface media-tooltip"><span class="media-tooltip-label media-tooltip-label--enable-captions">Enable captions</span><span class="media-tooltip-label media-tooltip-label--disable-captions">Disable captions</span></media-tooltip><media-pip-button commandfor="pip-tooltip" class="media-button media-button--subtle media-button--icon media-button--pip"> ${renderIcon("pip-enter", { class: "media-icon media-icon--pip-enter" })} ${renderIcon("pip-exit", { class: "media-icon media-icon--pip-exit" })} </media-pip-button><media-tooltip id="pip-tooltip" side="top" class="media-surface media-tooltip"><span class="media-tooltip-label media-tooltip-label--enter-pip">Enter picture-in-picture</span><span class="media-tooltip-label media-tooltip-label--exit-pip">Exit picture-in-picture</span></media-tooltip><media-fullscreen-button commandfor="fullscreen-tooltip" class="media-button media-button--subtle media-button--icon media-button--fullscreen"> ${renderIcon("fullscreen-enter", { class: "media-icon media-icon--fullscreen-enter" })} ${renderIcon("fullscreen-exit", { class: "media-icon media-icon--fullscreen-exit" })} </media-fullscreen-button><media-tooltip id="fullscreen-tooltip" side="top" class="media-surface media-tooltip"><span class="media-tooltip-label media-tooltip-label--enter-fullscreen">Enter fullscreen</span><span class="media-tooltip-label media-tooltip-label--exit-fullscreen">Exit fullscreen</span></media-tooltip></media-tooltip-group></media-controls><div class="media-overlay"></div></media-container>`;
|
|
27
27
|
}
|
|
28
28
|
var VideoSkinElement = class extends SkinMixin(ReactiveElement) {
|
|
29
29
|
static {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skin.js","names":[],"sources":["../../../../src/define/video/skin.ts"],"sourcesContent":["import { ReactiveElement } from '@videojs/element';\nimport { renderIcon } from '@videojs/icons/render';\nimport { createStyles, SkinMixin } from '../skin-mixin';\nimport styles from './skin.css?inline';\n\n// Side-effect imports: register all custom elements used in the template.\nimport '../media/container';\nimport '../ui/buffering-indicator';\nimport '../ui/captions-button';\nimport '../ui/controls';\nimport '../ui/fullscreen-button';\nimport '../ui/mute-button';\nimport '../ui/pip-button';\nimport '../ui/play-button';\nimport '../ui/playback-rate-button';\nimport '../ui/popover';\nimport '../ui/poster';\nimport '../ui/seek-button';\nimport '../ui/time';\nimport '../ui/time-slider';\nimport '../ui/tooltip';\nimport '../ui/tooltip-group';\nimport '../ui/volume-slider';\n\nconst SEEK_TIME = 10;\n\nfunction getTemplateHTML() {\n return /*html*/ `\n <media-container class=\"media-default-skin media-default-skin--video\">\n <!-- @deprecated slot=\"media\" is no longer required, use the default slot instead -->\n <slot name=\"media\"></slot>\n <slot></slot>\n\n <media-poster>\n <slot name=\"poster\"></slot>\n </media-poster>\n\n <media-buffering-indicator class=\"media-buffering-indicator\">\n <div class=\"media-surface\">\n ${renderIcon('spinner', { class: 'media-icon' })}\n </div>\n </media-buffering-indicator>\n\n <media-controls class=\"media-surface media-controls\">\n <media-tooltip-group>\n <media-play-button commandfor=\"play-tooltip\" class=\"media-button media-button--icon media-button--play\">\n ${renderIcon('restart', { class: 'media-icon media-icon--restart' })}\n ${renderIcon('play', { class: 'media-icon media-icon--play' })}\n ${renderIcon('pause', { class: 'media-icon media-icon--pause' })}\n </media-play-button>\n <media-tooltip id=\"play-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n <span class=\"media-tooltip-label media-tooltip-label--replay\">Replay</span>\n <span class=\"media-tooltip-label media-tooltip-label--play\">Play</span>\n <span class=\"media-tooltip-label media-tooltip-label--pause\">Pause</span>\n </media-tooltip>\n\n <media-seek-button commandfor=\"seek-backward-tooltip\" seconds=\"${-SEEK_TIME}\" class=\"media-button media-button--icon media-button--seek\">\n <span class=\"media-icon__container\">\n ${renderIcon('seek', { class: 'media-icon media-icon--flipped' })}\n <span class=\"media-icon__label\">${SEEK_TIME}</span>\n </span>\n </media-seek-button>\n <media-tooltip id=\"seek-backward-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n Seek backward ${SEEK_TIME} seconds\n </media-tooltip>\n\n <media-seek-button commandfor=\"seek-forward-tooltip\" seconds=\"${SEEK_TIME}\" class=\"media-button media-button--icon media-button--seek\">\n <span class=\"media-icon__container\">\n ${renderIcon('seek', { class: 'media-icon' })}\n <span class=\"media-icon__label\">${SEEK_TIME}</span>\n </span>\n </media-seek-button>\n <media-tooltip id=\"seek-forward-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n Seek forward ${SEEK_TIME} seconds\n </media-tooltip>\n\n <media-time-group class=\"media-time\">\n <media-time type=\"current\" class=\"media-time__value\"></media-time>\n <media-time-slider class=\"media-slider\">\n <media-slider-track class=\"media-slider__track\">\n <media-slider-fill class=\"media-slider__fill\"></media-slider-fill>\n <media-slider-buffer class=\"media-slider__buffer\"></media-slider-buffer>\n </media-slider-track>\n <media-slider-thumb class=\"media-slider__thumb\"></media-slider-thumb>\n\n <div class=\"media-surface media-preview media-slider__preview\">\n <media-slider-thumbnail class=\"media-preview__thumbnail\"></media-slider-thumbnail>\n <media-slider-value type=\"pointer\" class=\"media-preview__timestamp\"></media-slider-value>\n ${renderIcon('spinner', { class: 'media-preview__spinner media-icon' })}\n </div>\n </media-time-slider>\n <media-time type=\"duration\" class=\"media-time__value\"></media-time>\n </media-time-group>\n\n <media-playback-rate-button commandfor=\"playback-rate-tooltip\" class=\"media-button media-button--icon media-button--playback-rate\"></media-playback-rate-button>\n <media-tooltip id=\"playback-rate-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n Toggle playback rate\n </media-tooltip>\n\n <media-mute-button commandfor=\"video-volume-popover\" class=\"media-button media-button--icon media-button--mute\">\n ${renderIcon('volume-off', { class: 'media-icon media-icon--volume-off' })}\n ${renderIcon('volume-low', { class: 'media-icon media-icon--volume-low' })}\n ${renderIcon('volume-high', { class: 'media-icon media-icon--volume-high' })}\n </media-mute-button>\n\n <media-popover id=\"video-volume-popover\" open-on-hover delay=\"200\" close-delay=\"100\" side=\"top\" class=\"media-surface media-popover media-popover--volume\">\n <media-volume-slider class=\"media-slider\" orientation=\"vertical\" thumb-alignment=\"edge\">\n <media-slider-track class=\"media-slider__track\">\n <media-slider-fill class=\"media-slider__fill\"></media-slider-fill>\n </media-slider-track>\n <media-slider-thumb class=\"media-slider__thumb media-slider__thumb--persistent\"></media-slider-thumb>\n </media-volume-slider>\n </media-popover>\n\n <media-captions-button commandfor=\"captions-tooltip\" class=\"media-button media-button--icon media-button--captions\">\n ${renderIcon('captions-off', { class: 'media-icon media-icon--captions-off' })}\n ${renderIcon('captions-on', { class: 'media-icon media-icon--captions-on' })}\n </media-captions-button>\n <media-tooltip id=\"captions-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n <span class=\"media-tooltip-label media-tooltip-label--enable-captions\">Enable captions</span>\n <span class=\"media-tooltip-label media-tooltip-label--disable-captions\">Disable captions</span>\n </media-tooltip>\n\n <media-pip-button commandfor=\"pip-tooltip\" class=\"media-button media-button--icon media-button--pip\">\n ${renderIcon('pip-enter', { class: 'media-icon media-icon--pip-enter' })}\n ${renderIcon('pip-exit', { class: 'media-icon media-icon--pip-exit' })}\n </media-pip-button>\n <media-tooltip id=\"pip-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n <span class=\"media-tooltip-label media-tooltip-label--enter-pip\">Enter picture-in-picture</span>\n <span class=\"media-tooltip-label media-tooltip-label--exit-pip\">Exit picture-in-picture</span>\n </media-tooltip>\n\n <media-fullscreen-button commandfor=\"fullscreen-tooltip\" class=\"media-button media-button--icon media-button--fullscreen\">\n ${renderIcon('fullscreen-enter', { class: 'media-icon media-icon--fullscreen-enter' })}\n ${renderIcon('fullscreen-exit', { class: 'media-icon media-icon--fullscreen-exit' })}\n </media-fullscreen-button>\n <media-tooltip id=\"fullscreen-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n <span class=\"media-tooltip-label media-tooltip-label--enter-fullscreen\">Enter fullscreen</span>\n <span class=\"media-tooltip-label media-tooltip-label--exit-fullscreen\">Exit fullscreen</span>\n </media-tooltip>\n </media-tooltip-group>\n </media-controls>\n\n <div class=\"media-overlay\"></div>\n </media-container>\n `;\n}\n\nexport class VideoSkinElement extends SkinMixin(ReactiveElement) {\n static readonly tagName = 'video-skin';\n static styles = createStyles(styles);\n static getTemplateHTML = getTemplateHTML;\n}\n\ncustomElements.define(VideoSkinElement.tagName, VideoSkinElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [VideoSkinElement.tagName]: VideoSkinElement;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,YAAY;AAElB,SAAS,kBAAkB;AACzB,QAAgB,iQAAA,WAAA,WAAA,EAAA,OAAA,cAAA,CAAA,CAAA,
|
|
1
|
+
{"version":3,"file":"skin.js","names":[],"sources":["../../../../src/define/video/skin.ts"],"sourcesContent":["import { ReactiveElement } from '@videojs/element';\nimport { renderIcon } from '@videojs/icons/render';\nimport { createStyles, SkinMixin } from '../skin-mixin';\nimport styles from './skin.css?inline';\n\n// Side-effect imports: register all custom elements used in the template.\nimport '../media/container';\nimport '../ui/buffering-indicator';\nimport '../ui/captions-button';\nimport '../ui/controls';\nimport '../ui/fullscreen-button';\nimport '../ui/mute-button';\nimport '../ui/pip-button';\nimport '../ui/play-button';\nimport '../ui/playback-rate-button';\nimport '../ui/popover';\nimport '../ui/poster';\nimport '../ui/seek-button';\nimport '../ui/time';\nimport '../ui/time-slider';\nimport '../ui/tooltip';\nimport '../ui/tooltip-group';\nimport '../ui/volume-slider';\n\nconst SEEK_TIME = 10;\n\nfunction getTemplateHTML() {\n return /*html*/ `\n <media-container class=\"media-default-skin media-default-skin--video\">\n <!-- @deprecated slot=\"media\" is no longer required, use the default slot instead -->\n <slot name=\"media\"></slot>\n <slot></slot>\n\n <media-poster>\n <slot name=\"poster\"></slot>\n </media-poster>\n\n <media-buffering-indicator class=\"media-buffering-indicator\">\n <div class=\"media-surface\">\n ${renderIcon('spinner', { class: 'media-icon' })}\n </div>\n </media-buffering-indicator>\n\n <media-controls class=\"media-surface media-controls\">\n <media-tooltip-group>\n <media-play-button commandfor=\"play-tooltip\" class=\"media-button media-button--subtle media-button--icon media-button--play\">\n ${renderIcon('restart', { class: 'media-icon media-icon--restart' })}\n ${renderIcon('play', { class: 'media-icon media-icon--play' })}\n ${renderIcon('pause', { class: 'media-icon media-icon--pause' })}\n </media-play-button>\n <media-tooltip id=\"play-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n <span class=\"media-tooltip-label media-tooltip-label--replay\">Replay</span>\n <span class=\"media-tooltip-label media-tooltip-label--play\">Play</span>\n <span class=\"media-tooltip-label media-tooltip-label--pause\">Pause</span>\n </media-tooltip>\n\n <media-seek-button commandfor=\"seek-backward-tooltip\" seconds=\"${-SEEK_TIME}\" class=\"media-button media-button--subtle media-button--icon media-button--seek\">\n <span class=\"media-icon__container\">\n ${renderIcon('seek', { class: 'media-icon media-icon--flipped' })}\n <span class=\"media-icon__label\">${SEEK_TIME}</span>\n </span>\n </media-seek-button>\n <media-tooltip id=\"seek-backward-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n Seek backward ${SEEK_TIME} seconds\n </media-tooltip>\n\n <media-seek-button commandfor=\"seek-forward-tooltip\" seconds=\"${SEEK_TIME}\" class=\"media-button media-button--subtle media-button--icon media-button--seek\">\n <span class=\"media-icon__container\">\n ${renderIcon('seek', { class: 'media-icon' })}\n <span class=\"media-icon__label\">${SEEK_TIME}</span>\n </span>\n </media-seek-button>\n <media-tooltip id=\"seek-forward-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n Seek forward ${SEEK_TIME} seconds\n </media-tooltip>\n\n <media-time-group class=\"media-time\">\n <media-time type=\"current\" class=\"media-time__value\"></media-time>\n <media-time-slider class=\"media-slider\">\n <media-slider-track class=\"media-slider__track\">\n <media-slider-fill class=\"media-slider__fill\"></media-slider-fill>\n <media-slider-buffer class=\"media-slider__buffer\"></media-slider-buffer>\n </media-slider-track>\n <media-slider-thumb class=\"media-slider__thumb\"></media-slider-thumb>\n\n <div class=\"media-surface media-preview media-slider__preview\">\n <media-slider-thumbnail class=\"media-preview__thumbnail\"></media-slider-thumbnail>\n <media-slider-value type=\"pointer\" class=\"media-preview__timestamp\"></media-slider-value>\n ${renderIcon('spinner', { class: 'media-preview__spinner media-icon' })}\n </div>\n </media-time-slider>\n <media-time type=\"duration\" class=\"media-time__value\"></media-time>\n </media-time-group>\n\n <media-playback-rate-button commandfor=\"playback-rate-tooltip\" class=\"media-button media-button--subtle media-button--icon media-button--playback-rate\"></media-playback-rate-button>\n <media-tooltip id=\"playback-rate-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n Toggle playback rate\n </media-tooltip>\n\n <media-mute-button commandfor=\"video-volume-popover\" class=\"media-button media-button--subtle media-button--icon media-button--mute\">\n ${renderIcon('volume-off', { class: 'media-icon media-icon--volume-off' })}\n ${renderIcon('volume-low', { class: 'media-icon media-icon--volume-low' })}\n ${renderIcon('volume-high', { class: 'media-icon media-icon--volume-high' })}\n </media-mute-button>\n\n <media-popover id=\"video-volume-popover\" open-on-hover delay=\"200\" close-delay=\"100\" side=\"top\" class=\"media-surface media-popover media-popover--volume\">\n <media-volume-slider class=\"media-slider\" orientation=\"vertical\" thumb-alignment=\"edge\">\n <media-slider-track class=\"media-slider__track\">\n <media-slider-fill class=\"media-slider__fill\"></media-slider-fill>\n </media-slider-track>\n <media-slider-thumb class=\"media-slider__thumb media-slider__thumb--persistent\"></media-slider-thumb>\n </media-volume-slider>\n </media-popover>\n\n <media-captions-button commandfor=\"captions-tooltip\" class=\"media-button media-button--subtle media-button--icon media-button--captions\">\n ${renderIcon('captions-off', { class: 'media-icon media-icon--captions-off' })}\n ${renderIcon('captions-on', { class: 'media-icon media-icon--captions-on' })}\n </media-captions-button>\n <media-tooltip id=\"captions-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n <span class=\"media-tooltip-label media-tooltip-label--enable-captions\">Enable captions</span>\n <span class=\"media-tooltip-label media-tooltip-label--disable-captions\">Disable captions</span>\n </media-tooltip>\n\n <media-pip-button commandfor=\"pip-tooltip\" class=\"media-button media-button--subtle media-button--icon media-button--pip\">\n ${renderIcon('pip-enter', { class: 'media-icon media-icon--pip-enter' })}\n ${renderIcon('pip-exit', { class: 'media-icon media-icon--pip-exit' })}\n </media-pip-button>\n <media-tooltip id=\"pip-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n <span class=\"media-tooltip-label media-tooltip-label--enter-pip\">Enter picture-in-picture</span>\n <span class=\"media-tooltip-label media-tooltip-label--exit-pip\">Exit picture-in-picture</span>\n </media-tooltip>\n\n <media-fullscreen-button commandfor=\"fullscreen-tooltip\" class=\"media-button media-button--subtle media-button--icon media-button--fullscreen\">\n ${renderIcon('fullscreen-enter', { class: 'media-icon media-icon--fullscreen-enter' })}\n ${renderIcon('fullscreen-exit', { class: 'media-icon media-icon--fullscreen-exit' })}\n </media-fullscreen-button>\n <media-tooltip id=\"fullscreen-tooltip\" side=\"top\" class=\"media-surface media-tooltip\">\n <span class=\"media-tooltip-label media-tooltip-label--enter-fullscreen\">Enter fullscreen</span>\n <span class=\"media-tooltip-label media-tooltip-label--exit-fullscreen\">Exit fullscreen</span>\n </media-tooltip>\n </media-tooltip-group>\n </media-controls>\n\n <div class=\"media-overlay\"></div>\n </media-container>\n `;\n}\n\nexport class VideoSkinElement extends SkinMixin(ReactiveElement) {\n static readonly tagName = 'video-skin';\n static styles = createStyles(styles);\n static getTemplateHTML = getTemplateHTML;\n}\n\ncustomElements.define(VideoSkinElement.tagName, VideoSkinElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [VideoSkinElement.tagName]: VideoSkinElement;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAwBA,MAAM,YAAY;AAElB,SAAS,kBAAkB;AACzB,QAAgB,iQAAA,WAAA,WAAA,EAAA,OAAA,cAAA,CAAA,CAAA,6OAAA,WAAA,WAAA,EAAA,OAAA,kCAAA,CAAA,CAAA,GAAA,WAAA,QAAA,EAAA,OAAA,+BAAA,CAAA,CAAA,GAAA,WAAA,SAAA,EAAA,OAAA,gCAAA,CAAA,CAAA,iZAAA,CAAA,UAAA,0HAAA,WAAA,QAAA,EAAA,OAAA,kCAAA,CAAA,CAAA,mCAAA,UAAA,4IAAA,UAAA,yFAAA,UAAA,0HAAA,WAAA,QAAA,EAAA,OAAA,cAAA,CAAA,CAAA,mCAAA,UAAA,0IAAA,UAAA,yqBAAA,WAAA,WAAA,EAAA,OAAA,qCAAA,CAAA,CAAA,6iBAAA,WAAA,cAAA,EAAA,OAAA,qCAAA,CAAA,CAAA,GAAA,WAAA,cAAA,EAAA,OAAA,qCAAA,CAAA,CAAA,GAAA,WAAA,eAAA,EAAA,OAAA,sCAAA,CAAA,CAAA,qqBAAA,WAAA,gBAAA,EAAA,OAAA,uCAAA,CAAA,CAAA,GAAA,WAAA,eAAA,EAAA,OAAA,sCAAA,CAAA,CAAA,sbAAA,WAAA,aAAA,EAAA,OAAA,oCAAA,CAAA,CAAA,GAAA,WAAA,YAAA,EAAA,OAAA,mCAAA,CAAA,CAAA,mcAAA,WAAA,oBAAA,EAAA,OAAA,2CAAA,CAAA,CAAA,GAAA,WAAA,mBAAA,EAAA,OAAA,0CAAA,CAAA,CAAA;;AAGlB,IAAY,mBAAZ,cAA+B,UAAA,gBAAA,CAAA;;iBACb;;;;;;yBAEC"}
|