@videojs/html 10.0.0-beta.7 → 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.
Files changed (177) hide show
  1. package/cdn/audio-minimal.dev.js +9 -9
  2. package/cdn/audio-minimal.dev.js.map +1 -1
  3. package/cdn/audio-minimal.js +1 -1
  4. package/cdn/audio-minimal.js.map +1 -1
  5. package/cdn/audio.dev.js +9 -9
  6. package/cdn/audio.dev.js.map +1 -1
  7. package/cdn/audio.js +1 -1
  8. package/cdn/audio.js.map +1 -1
  9. package/cdn/background.dev.js +14 -1
  10. package/cdn/background.dev.js.map +1 -1
  11. package/cdn/background.js +1 -1
  12. package/cdn/background.js.map +1 -1
  13. package/cdn/{create-player-Dv7K1Ezk.js → create-player-4kACDl5S.js} +3 -2
  14. package/cdn/create-player-4kACDl5S.js.map +1 -0
  15. package/cdn/{create-player-QjiNZlh7.js → create-player-DxN4WCxY.js} +3 -3
  16. package/cdn/create-player-DxN4WCxY.js.map +1 -0
  17. package/cdn/media/simple-hls-video.dev.js +22 -4
  18. package/cdn/media/simple-hls-video.dev.js.map +1 -1
  19. package/cdn/media/simple-hls-video.js +1 -1
  20. package/cdn/media/simple-hls-video.js.map +1 -1
  21. package/cdn/{player-CztIlNio.js → player-DVYGAHSo.js} +2 -2
  22. package/cdn/{player-CztIlNio.js.map → player-DVYGAHSo.js.map} +1 -1
  23. package/cdn/{player-Dvj38jlr.js → player-u-bvetUg.js} +2 -2
  24. package/cdn/{player-Dvj38jlr.js.map → player-u-bvetUg.js.map} +1 -1
  25. package/cdn/{poster-O0SI05LC.js → poster-BoF67sLZ.js} +3 -3
  26. package/cdn/{poster-O0SI05LC.js.map → poster-BoF67sLZ.js.map} +1 -1
  27. package/cdn/{poster-C4WHg3BH.js → poster-CkKPGKQ1.js} +2 -2
  28. package/cdn/{poster-C4WHg3BH.js.map → poster-CkKPGKQ1.js.map} +1 -1
  29. package/cdn/video-minimal.dev.js +12 -12
  30. package/cdn/video-minimal.dev.js.map +1 -1
  31. package/cdn/video-minimal.js +1 -1
  32. package/cdn/video-minimal.js.map +1 -1
  33. package/cdn/video.dev.js +12 -12
  34. package/cdn/video.dev.js.map +1 -1
  35. package/cdn/video.js +1 -1
  36. package/cdn/video.js.map +1 -1
  37. package/cdn/{volume-slider-BqzTytgB.js → volume-slider-Bv1urvub.js} +2 -2
  38. package/cdn/{volume-slider-BqzTytgB.js.map → volume-slider-Bv1urvub.js.map} +1 -1
  39. package/cdn/{volume-slider-CfhOO9RM.js → volume-slider-DYG1mki7.js} +2 -2
  40. package/cdn/{volume-slider-CfhOO9RM.js.map → volume-slider-DYG1mki7.js.map} +1 -1
  41. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  42. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  43. package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
  44. package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  45. package/dist/default/_virtual/inline-css_src/define/background/skin.js +6 -0
  46. package/dist/default/_virtual/inline-css_src/define/background/skin.js.map +1 -0
  47. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  48. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  49. package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
  50. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  51. package/dist/default/define/audio/minimal-skin.css +161 -141
  52. package/dist/default/define/audio/minimal-skin.js +1 -1
  53. package/dist/default/define/audio/minimal-skin.js.map +1 -1
  54. package/dist/default/define/audio/minimal-skin.tailwind.js +1 -1
  55. package/dist/default/define/audio/minimal-skin.tailwind.js.map +1 -1
  56. package/dist/default/define/audio/skin.css +164 -132
  57. package/dist/default/define/audio/skin.js +1 -1
  58. package/dist/default/define/audio/skin.js.map +1 -1
  59. package/dist/default/define/audio/skin.tailwind.js +1 -1
  60. package/dist/default/define/audio/skin.tailwind.js.map +1 -1
  61. package/dist/default/define/background/skin.js +10 -0
  62. package/dist/default/define/background/skin.js.map +1 -1
  63. package/dist/default/define/video/minimal-skin.css +224 -192
  64. package/dist/default/define/video/minimal-skin.js +1 -1
  65. package/dist/default/define/video/minimal-skin.js.map +1 -1
  66. package/dist/default/define/video/minimal-skin.tailwind.js +1 -1
  67. package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
  68. package/dist/default/define/video/skin.css +238 -189
  69. package/dist/default/define/video/skin.js +1 -1
  70. package/dist/default/define/video/skin.js.map +1 -1
  71. package/dist/default/define/video/skin.tailwind.js +1 -1
  72. package/dist/default/define/video/skin.tailwind.js.map +1 -1
  73. package/dist/default/media/simple-hls-video/index.js +1 -0
  74. package/dist/default/media/simple-hls-video/index.js.map +1 -1
  75. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js +4 -3
  76. package/dist/default/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  77. package/dist/default/skins/dist/default/default/tailwind/components/button.js +4 -3
  78. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  79. package/dist/default/skins/dist/default/default/tailwind/components/error.js +2 -2
  80. package/dist/default/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  81. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js +1 -1
  82. package/dist/default/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  83. package/dist/default/skins/dist/default/default/tailwind/components/popup.js +1 -1
  84. package/dist/default/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  85. package/dist/default/skins/dist/default/default/tailwind/components/seek.js +1 -1
  86. package/dist/default/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  87. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +5 -3
  88. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  89. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js +8 -2
  90. package/dist/default/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  91. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +4 -3
  92. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  93. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js +15 -0
  94. package/dist/default/skins/dist/default/minimal/tailwind/components/error.js.map +1 -0
  95. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
  96. package/dist/default/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  97. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js +1 -1
  98. package/dist/default/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  99. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js +1 -1
  100. package/dist/default/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  101. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js +1 -1
  102. package/dist/default/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  103. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +9 -2
  104. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  105. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  106. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  107. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
  108. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  109. package/dist/dev/_virtual/inline-css_src/define/background/skin.js +6 -0
  110. package/dist/dev/_virtual/inline-css_src/define/background/skin.js.map +1 -0
  111. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  112. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  113. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
  114. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  115. package/dist/dev/define/audio/minimal-skin.css +161 -141
  116. package/dist/dev/define/audio/minimal-skin.js +5 -5
  117. package/dist/dev/define/audio/minimal-skin.js.map +1 -1
  118. package/dist/dev/define/audio/minimal-skin.tailwind.js +5 -5
  119. package/dist/dev/define/audio/minimal-skin.tailwind.js.map +1 -1
  120. package/dist/dev/define/audio/skin.css +164 -132
  121. package/dist/dev/define/audio/skin.js +5 -5
  122. package/dist/dev/define/audio/skin.js.map +1 -1
  123. package/dist/dev/define/audio/skin.tailwind.js +5 -5
  124. package/dist/dev/define/audio/skin.tailwind.js.map +1 -1
  125. package/dist/dev/define/background/skin.d.ts.map +1 -1
  126. package/dist/dev/define/background/skin.js +10 -0
  127. package/dist/dev/define/background/skin.js.map +1 -1
  128. package/dist/dev/define/video/minimal-skin.css +224 -192
  129. package/dist/dev/define/video/minimal-skin.js +8 -8
  130. package/dist/dev/define/video/minimal-skin.js.map +1 -1
  131. package/dist/dev/define/video/minimal-skin.tailwind.js +8 -8
  132. package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
  133. package/dist/dev/define/video/skin.css +238 -189
  134. package/dist/dev/define/video/skin.js +8 -8
  135. package/dist/dev/define/video/skin.js.map +1 -1
  136. package/dist/dev/define/video/skin.tailwind.js +8 -8
  137. package/dist/dev/define/video/skin.tailwind.js.map +1 -1
  138. package/dist/dev/media/simple-hls-video/index.js +1 -0
  139. package/dist/dev/media/simple-hls-video/index.js.map +1 -1
  140. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js +4 -3
  141. package/dist/dev/skins/dist/default/default/tailwind/audio.tailwind.js.map +1 -1
  142. package/dist/dev/skins/dist/default/default/tailwind/components/button.js +4 -3
  143. package/dist/dev/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  144. package/dist/dev/skins/dist/default/default/tailwind/components/error.js +2 -2
  145. package/dist/dev/skins/dist/default/default/tailwind/components/error.js.map +1 -1
  146. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js +1 -1
  147. package/dist/dev/skins/dist/default/default/tailwind/components/overlay.js.map +1 -1
  148. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js +1 -1
  149. package/dist/dev/skins/dist/default/default/tailwind/components/popup.js.map +1 -1
  150. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js +1 -1
  151. package/dist/dev/skins/dist/default/default/tailwind/components/seek.js.map +1 -1
  152. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js +5 -3
  153. package/dist/dev/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  154. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js +8 -2
  155. package/dist/dev/skins/dist/default/minimal/tailwind/audio.tailwind.js.map +1 -1
  156. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js +4 -3
  157. package/dist/dev/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  158. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js +15 -0
  159. package/dist/dev/skins/dist/default/minimal/tailwind/components/error.js.map +1 -0
  160. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js +1 -1
  161. package/dist/dev/skins/dist/default/minimal/tailwind/components/overlay.js.map +1 -1
  162. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js +1 -1
  163. package/dist/dev/skins/dist/default/minimal/tailwind/components/popup.js.map +1 -1
  164. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js +1 -1
  165. package/dist/dev/skins/dist/default/minimal/tailwind/components/root.js.map +1 -1
  166. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js +1 -1
  167. package/dist/dev/skins/dist/default/minimal/tailwind/components/seek.js.map +1 -1
  168. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js +9 -2
  169. package/dist/dev/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  170. package/package.json +9 -9
  171. package/cdn/audio-minimal.css +0 -1
  172. package/cdn/audio.css +0 -1
  173. package/cdn/background.css +0 -1
  174. package/cdn/create-player-Dv7K1Ezk.js.map +0 -1
  175. package/cdn/create-player-QjiNZlh7.js.map +0 -1
  176. package/cdn/video-minimal.css +0 -1
  177. package/cdn/video.css +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
  ========================================================================== */
@@ -145,6 +45,8 @@
145
45
  letter-spacing: normal;
146
46
  -webkit-font-smoothing: auto;
147
47
  -moz-osx-font-smoothing: auto;
48
+
49
+ --media-controls-radius: var(--media-border-radius, 1rem);
148
50
  }
149
51
 
150
52
  /* ==========================================================================
@@ -183,27 +85,20 @@
183
85
  backdrop-filter: blur(0) saturate(1.5);
184
86
  opacity: 0;
185
87
  pointer-events: none;
88
+ transition-property: opacity, backdrop-filter;
89
+ transition-duration: var(--media-controls-transition-duration);
90
+ transition-delay: var(--media-controls-transition-delay);
91
+ transition-timing-function: ease-out;
92
+ }
186
93
 
187
- @media (pointer: fine) {
188
- transition-property: opacity, backdrop-filter;
189
- transition-duration: 500ms;
190
- transition-delay: 500ms;
191
- transition-timing-function: ease-out;
192
-
193
- @media (prefers-reduced-motion: reduce) {
194
- transition-duration: 100ms;
195
- }
196
- }
94
+ .media-minimal-skin .media-error ~ .media-overlay {
95
+ transition-duration: var(--media-error-dialog-transition-duration);
96
+ transition-delay: var(--media-error-dialog-transition-delay);
197
97
  }
198
98
 
199
99
  .media-minimal-skin .media-controls[data-visible] ~ .media-overlay,
200
100
  .media-minimal-skin .media-error[data-open] ~ .media-overlay {
201
101
  opacity: 1;
202
-
203
- @media (pointer: fine) {
204
- transition-duration: 150ms;
205
- transition-delay: 0ms;
206
- }
207
102
  }
208
103
 
209
104
  .media-minimal-skin .media-error[data-open] ~ .media-overlay {
@@ -232,61 +127,6 @@
232
127
  Error Dialog
233
128
  ========================================================================== */
234
129
 
235
- .media-minimal-skin .media-error {
236
- position: absolute;
237
- inset: 0;
238
- z-index: 20;
239
- display: flex;
240
- align-items: center;
241
- justify-content: center;
242
- pointer-events: none;
243
- }
244
-
245
- .media-minimal-skin .media-error__dialog {
246
- display: flex;
247
- flex-direction: column;
248
- gap: 0.75rem;
249
- max-width: 16rem;
250
- padding: 1rem;
251
- color: oklch(1 0 0);
252
- font-size: 0.875rem;
253
- text-shadow: 0 1px 0 oklch(0 0 0 / 0.5);
254
- transition-property: opacity, scale;
255
- transition-duration: 500ms;
256
- transition-delay: 100ms;
257
- transition-timing-function: linear(
258
- 0,
259
- 0.034 1.5%,
260
- 0.763 9.7%,
261
- 1.066 13.9%,
262
- 1.198 19.9%,
263
- 1.184 21.8%,
264
- 0.963 37.5%,
265
- 0.997 50.9%,
266
- 1
267
- );
268
-
269
- /* Simple, fast transition for reduced motion users */
270
- @media (prefers-reduced-motion: reduce) {
271
- transition-duration: 100ms;
272
- transition-delay: 0ms;
273
- transition-timing-function: ease-out;
274
- }
275
- }
276
-
277
- .media-minimal-skin .media-error[data-starting-style] .media-error__dialog,
278
- .media-minimal-skin .media-error[data-ending-style] .media-error__dialog {
279
- opacity: 0;
280
- scale: 0.5;
281
- }
282
-
283
- .media-minimal-skin .media-error__content {
284
- display: flex;
285
- flex-direction: column;
286
- gap: 0.5rem;
287
- padding: 0.375rem 0;
288
- }
289
-
290
130
  .media-minimal-skin .media-error__title {
291
131
  font-weight: 600;
292
132
  line-height: 1.25;
@@ -306,6 +146,10 @@
306
146
  }
307
147
  }
308
148
 
149
+ .media-minimal-skin .media-error[data-open] ~ .media-controls * {
150
+ visibility: hidden;
151
+ }
152
+
309
153
  /* ==========================================================================
310
154
  Controls
311
155
  ========================================================================== */
@@ -384,16 +228,11 @@
384
228
  justify-content: center;
385
229
  flex-shrink: 0;
386
230
  padding: 0.5rem 1rem;
387
- background: oklch(1 0 0);
388
231
  border: none;
389
- border-radius: 0.5rem;
232
+ border-radius: calc(var(--media-controls-radius) - var(--media-controls-padding));
390
233
  outline: 2px solid transparent;
391
234
  outline-offset: -2px;
392
- color: oklch(0 0 0);
393
- font-weight: 500;
394
- text-align: center;
395
- text-shadow: inherit;
396
- transition-property: background-color, color, outline-offset, scale;
235
+ transition-property: background-color, outline-offset, scale;
397
236
  transition-duration: 150ms;
398
237
  transition-timing-function: ease-out;
399
238
  cursor: pointer;
@@ -405,6 +244,10 @@
405
244
  outline-offset: 2px;
406
245
  }
407
246
 
247
+ &:active {
248
+ scale: 0.98;
249
+ }
250
+
408
251
  &[disabled] {
409
252
  opacity: 0.5;
410
253
  filter: grayscale(1);
@@ -416,21 +259,42 @@
416
259
  }
417
260
  }
418
261
 
419
- /* Icon button variant */
420
- .media-minimal-skin .media-button--icon {
421
- display: grid;
422
- width: 2.375rem;
423
- padding: 0;
424
- aspect-ratio: 1;
262
+ /* biome-ignore lint/correctness/noUnknownProperty: corner-shape is an emerging CSS spec */
263
+ @supports (corner-shape: squircle) {
264
+ .media-minimal-skin .media-button {
265
+ border-radius: var(--media-controls-radius);
266
+ /* biome-ignore lint/correctness/noUnknownProperty: corner-shape is an emerging CSS spec */
267
+ corner-shape: squircle;
268
+ }
269
+ }
270
+
271
+ /* Primary button variant */
272
+ .media-minimal-skin .media-button--primary {
273
+ background: oklch(1 0 0);
274
+ color: oklch(0 0 0);
275
+ font-weight: 500;
276
+ text-align: center;
277
+ }
278
+
279
+ /* Subtle button variant */
280
+ .media-minimal-skin .media-button--subtle {
425
281
  background: transparent;
426
282
  color: inherit;
283
+ text-shadow: inherit;
427
284
 
428
285
  &:hover,
429
286
  &:focus-visible,
430
287
  &[aria-expanded="true"] {
431
- color: oklch(from currentColor l c h / 0.8);
432
- text-decoration: none;
288
+ background: oklch(from currentColor l c h / 0.1);
433
289
  }
290
+ }
291
+
292
+ /* Icon button variant */
293
+ .media-minimal-skin .media-button--icon {
294
+ display: grid;
295
+ width: 2.375rem;
296
+ padding: 0;
297
+ aspect-ratio: 1;
434
298
 
435
299
  &:active {
436
300
  scale: 0.9;
@@ -447,7 +311,7 @@
447
311
  position: absolute;
448
312
  right: -1px;
449
313
  bottom: -3px;
450
- font-size: 0.75em;
314
+ font-size: 10px;
451
315
  font-weight: 480;
452
316
  font-variant-numeric: tabular-nums;
453
317
  }
@@ -733,7 +597,8 @@
733
597
  color: inherit;
734
598
  overflow: visible;
735
599
  transition-property: scale, opacity, filter;
736
- transition-duration: 150ms;
600
+ transition-duration: var(--media-popup-transition-duration);
601
+ transition-timing-function: var(--media-popup-transition-timing-function);
737
602
 
738
603
  &[data-starting-style],
739
604
  &[data-ending-style] {
@@ -859,6 +724,106 @@
859
724
  font-family: inherit;
860
725
  }
861
726
 
727
+ /* ==========================================================================
728
+ Icon State Visibility for Video Skins
729
+
730
+ Data-attribute-driven visibility rules for multi-state icon buttons.
731
+ Uses :is() with both element selectors (for HTML custom element wrappers)
732
+ and class selectors (for React rendered SVG elements).
733
+ ========================================================================== */
734
+
735
+ /* --- All icons hidden by default --- */
736
+
737
+ .media-button--play .media-icon--restart,
738
+ .media-button--play .media-icon--play,
739
+ .media-button--play .media-icon--pause,
740
+ .media-button--mute .media-icon--volume-off,
741
+ .media-button--mute .media-icon--volume-low,
742
+ .media-button--mute .media-icon--volume-high,
743
+ .media-button--fullscreen .media-icon--fullscreen-enter,
744
+ .media-button--fullscreen .media-icon--fullscreen-exit,
745
+ .media-button--pip .media-icon--pip-enter,
746
+ .media-button--pip .media-icon--pip-exit,
747
+ .media-button--captions .media-icon--captions-off,
748
+ .media-button--captions .media-icon--captions-on {
749
+ display: none;
750
+ opacity: 0;
751
+ }
752
+
753
+ /* --- Active icon per state --- */
754
+
755
+ /* Play: ended → restart */
756
+ .media-button--play[data-ended] .media-icon--restart,
757
+ /* Play: paused (not ended) → play */
758
+ .media-button--play:not([data-ended])[data-paused] .media-icon--play,
759
+ /* Play: playing (not paused, not ended) → pause */
760
+ .media-button--play:not([data-paused]):not([data-ended]) .media-icon--pause,
761
+ /* Mute: muted → volume off */
762
+ .media-button--mute[data-muted] .media-icon--volume-off,
763
+ /* Mute: volume low (not muted) → volume low */
764
+ .media-button--mute:not([data-muted])[data-volume-level="low"] .media-icon--volume-low,
765
+ /* Mute: volume high (not muted, not low) → volume high */
766
+ .media-button--mute:not([data-muted]):not([data-volume-level="low"]) .media-icon--volume-high,
767
+ /* Fullscreen: not fullscreen → enter */
768
+ .media-button--fullscreen:not([data-fullscreen]) .media-icon--fullscreen-enter,
769
+ /* Fullscreen: fullscreen → exit */
770
+ .media-button--fullscreen[data-fullscreen] .media-icon--fullscreen-exit,
771
+ /* Picture-in-Picture: not active → enter */
772
+ .media-button--pip:not([data-pip]) .media-icon--pip-enter,
773
+ /* Picture-in-Picture: active → exit */
774
+ .media-button--pip[data-pip] .media-icon--pip-exit,
775
+ /* Captions: not active → captions off */
776
+ .media-button--captions:not([data-active]) .media-icon--captions-off,
777
+ /* Captions: active → captions on */
778
+ .media-button--captions[data-active] .media-icon--captions-on {
779
+ display: block;
780
+ opacity: 1;
781
+ }
782
+
783
+ /* ==========================================================================
784
+ Tooltip Label State Visibility for Video Skins
785
+
786
+ Data-attribute-driven visibility rules for multi-state tooltip labels.
787
+ Uses adjacent sibling selectors to match button state → tooltip content.
788
+ ========================================================================== */
789
+
790
+ /* --- All multi-state labels hidden by default --- */
791
+
792
+ .media-tooltip-label {
793
+ display: none;
794
+ }
795
+
796
+ /* --- Active label per state --- */
797
+
798
+ /* Play: ended → replay */
799
+ .media-button--play[data-ended] + .media-tooltip .media-tooltip-label--replay,
800
+ /* Play: paused (not ended) → play */
801
+ .media-button--play:not([data-ended])[data-paused] + .media-tooltip
802
+ .media-tooltip-label--play,
803
+ /* Play: playing (not paused, not ended) → pause */
804
+ .media-button--play:not([data-paused]):not([data-ended]) + .media-tooltip
805
+ .media-tooltip-label--pause,
806
+ /* Fullscreen: not fullscreen → enter */
807
+ .media-button--fullscreen:not([data-fullscreen]) + .media-tooltip
808
+ .media-tooltip-label--enter-fullscreen,
809
+ /* Fullscreen: fullscreen → exit */
810
+ .media-button--fullscreen[data-fullscreen] + .media-tooltip
811
+ .media-tooltip-label--exit-fullscreen,
812
+ /* Captions: not active → enable */
813
+ .media-button--captions:not([data-active]) + .media-tooltip
814
+ .media-tooltip-label--enable-captions,
815
+ /* Captions: active → disable */
816
+ .media-button--captions[data-active] + .media-tooltip
817
+ .media-tooltip-label--disable-captions,
818
+ /* PiP: not in pip → enter */
819
+ .media-button--pip:not([data-pip]) + .media-tooltip
820
+ .media-tooltip-label--enter-pip,
821
+ /* PiP: in pip → exit */
822
+ .media-button--pip[data-pip] + .media-tooltip
823
+ .media-tooltip-label--exit-pip {
824
+ display: block;
825
+ }
826
+
862
827
 
863
828
  /* ==========================================================================
864
829
  Root
@@ -869,8 +834,21 @@
869
834
  background: oklch(0 0 0);
870
835
  --media-border-color: oklch(0 0 0 / 0.15);
871
836
  --media-video-border-radius: var(--media-border-radius, 0.75rem);
837
+ --media-controls-padding: 0.375rem;
872
838
  --media-controls-transition-duration: 100ms;
873
839
  --media-controls-transition-delay: 0ms;
840
+ --media-controls-transition-timing-function: ease-out;
841
+ --media-error-dialog-transition-duration: 250ms;
842
+ --media-error-dialog-transition-delay: 100ms;
843
+ --media-error-dialog-transition-timing-function: ease-out;
844
+ --media-popup-transition-duration: 100ms;
845
+ --media-popup-transition-timing-function: ease-out;
846
+
847
+ @media (prefers-reduced-motion: reduce) {
848
+ --media-error-dialog-transition-duration: 50ms;
849
+ --media-error-dialog-transition-delay: 0ms;
850
+ --media-popup-transition-duration: 0ms;
851
+ }
874
852
 
875
853
  @media (prefers-color-scheme: dark) {
876
854
  --media-border-color: oklch(1 0 0 / 0.15);
@@ -886,7 +864,7 @@
886
864
  --media-controls-transition-duration: 150ms;
887
865
  }
888
866
  @media (prefers-reduced-motion: reduce) {
889
- --media-controls-transition-duration: 100ms;
867
+ --media-controls-transition-duration: 50ms;
890
868
  }
891
869
  }
892
870
 
@@ -907,6 +885,60 @@
907
885
  }
908
886
  }
909
887
 
888
+ /* ==========================================================================
889
+ Error Dialog
890
+ ========================================================================== */
891
+
892
+ .media-minimal-skin--video .media-error {
893
+ position: absolute;
894
+ inset: 0;
895
+ z-index: 20;
896
+ display: flex;
897
+ align-items: center;
898
+ justify-content: center;
899
+ pointer-events: none;
900
+ outline: none;
901
+ }
902
+
903
+ .media-minimal-skin--video .media-error__dialog {
904
+ display: flex;
905
+ flex-direction: column;
906
+ gap: 0.75rem;
907
+ max-width: 16rem;
908
+ padding: 1rem;
909
+ color: oklch(1 0 0);
910
+ text-shadow: 0 1px 0 oklch(0 0 0 / 0.5);
911
+ transition-property: opacity, scale;
912
+ transition-duration: var(--media-error-dialog-transition-duration);
913
+ transition-delay: var(--media-error-dialog-transition-delay);
914
+ transition-timing-function: var(--media-error-dialog-transition-timing-function);
915
+ pointer-events: auto;
916
+ }
917
+
918
+ .media-minimal-skin--video .media-error[data-starting-style] .media-error__dialog,
919
+ .media-minimal-skin--video .media-error[data-ending-style] .media-error__dialog {
920
+ opacity: 0;
921
+ scale: 0.5;
922
+ }
923
+ .media-minimal-skin--video .media-error[data-ending-style] .media-error__dialog {
924
+ transition-delay: 0ms;
925
+ }
926
+
927
+ .media-minimal-skin--video .media-error__content {
928
+ display: flex;
929
+ flex-direction: column;
930
+ gap: 0.5rem;
931
+ padding: 0.375rem 0;
932
+ }
933
+
934
+ .media-minimal-skin--video .media-error__title {
935
+ font-size: 1.125rem;
936
+ }
937
+
938
+ .media-minimal-skin--video .media-error[data-open] ~ .media-controls {
939
+ display: none;
940
+ }
941
+
910
942
  /* ==========================================================================
911
943
  Controls (hide/show behavior)
912
944
  ========================================================================== */
@@ -917,11 +949,11 @@
917
949
  inset-inline: 0;
918
950
  z-index: 10;
919
951
  gap: 0.5rem;
920
- padding: 2rem 0.375rem 0.375rem 0.375rem;
952
+ padding: 2rem var(--media-controls-padding) var(--media-controls-padding) var(--media-controls-padding);
921
953
  color: var(--media-color-primary, oklch(1 0 0));
922
954
  transition-duration: var(--media-controls-transition-duration);
923
955
  transition-delay: var(--media-controls-transition-delay);
924
- transition-timing-function: ease-out;
956
+ transition-timing-function: var(--media-controls-transition-timing-function);
925
957
 
926
958
  @media (pointer: fine) {
927
959
  will-change: translate, filter, opacity;
@@ -981,7 +1013,7 @@
981
1013
  Slider preview
982
1014
  ========================================================================== */
983
1015
 
984
- .media-minimal-skin .media-slider__preview {
1016
+ .media-minimal-skin--video .media-slider__preview {
985
1017
  position: absolute;
986
1018
  left: var(--media-slider-pointer);
987
1019
  bottom: calc(100% + 0.5rem);
@@ -1017,7 +1049,7 @@
1017
1049
  max-height: 6rem;
1018
1050
  }
1019
1051
  }
1020
- .media-minimal-skin .media-slider[data-pointing] .media-slider__preview:has([role="img"]:not([data-hidden])) {
1052
+ .media-minimal-skin--video .media-slider[data-pointing] .media-slider__preview:has([role="img"]:not([data-hidden])) {
1021
1053
  opacity: 1;
1022
1054
  scale: 1;
1023
1055
  filter: blur(0);
@@ -22,7 +22,7 @@ import { ReactiveElement } from "@videojs/element";
22
22
  //#region src/define/video/minimal-skin.ts
23
23
  const SEEK_TIME = 10;
24
24
  function getTemplateHTML() {
25
- return `<media-container class="media-minimal-skin media-minimal-skin--video"><slot name="media"></slot><slot></slot><media-poster><slot name="poster"></slot></media-poster><media-buffering-indicator class="media-buffering-indicator"> ${renderIcon("spinner", { class: "media-icon" })} </media-buffering-indicator><media-controls class="media-controls"><media-tooltip-group><div class="media-button-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-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-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-tooltip"> Seek forward ${SEEK_TIME} seconds </media-tooltip></div><div class="media-time-controls"><media-time-group class="media-time"><media-time type="current" class="media-time__value media-time__value--current"></media-time><media-time-separator class="media-time__separator"></media-time-separator><media-time type="duration" class="media-time__value media-time__value--duration"></media-time></media-time-group><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-preview media-slider__preview"><div class="media-preview__thumbnail-wrapper"><media-slider-thumbnail class="media-preview__thumbnail"></media-slider-thumbnail></div><media-slider-value type="pointer" class="media-preview__timestamp"></media-slider-value> ${renderIcon("spinner", { class: "media-preview__spinner media-icon" })} </div></media-time-slider></div><div class="media-button-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-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-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-tooltip"> Toggle captions </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-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-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></div></media-tooltip-group></media-controls><div class="media-overlay"></div></media-container>`;
25
+ return `<media-container class="media-minimal-skin media-minimal-skin--video"><slot name="media"></slot><slot></slot><media-poster><slot name="poster"></slot></media-poster><media-buffering-indicator class="media-buffering-indicator"> ${renderIcon("spinner", { class: "media-icon" })} </media-buffering-indicator><media-controls class="media-controls"><media-tooltip-group><div class="media-button-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-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-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-tooltip"> Seek forward ${SEEK_TIME} seconds </media-tooltip></div><div class="media-time-controls"><media-time-group class="media-time"><media-time type="current" class="media-time__value media-time__value--current"></media-time><media-time-separator class="media-time__separator"></media-time-separator><media-time type="duration" class="media-time__value media-time__value--duration"></media-time></media-time-group><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-preview media-slider__preview"><div class="media-preview__thumbnail-wrapper"><media-slider-thumbnail class="media-preview__thumbnail"></media-slider-thumbnail></div><media-slider-value type="pointer" class="media-preview__timestamp"></media-slider-value> ${renderIcon("spinner", { class: "media-preview__spinner media-icon" })} </div></media-time-slider></div><div class="media-button-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-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-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-tooltip"> Toggle captions </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-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-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></div></media-tooltip-group></media-controls><div class="media-overlay"></div></media-container>`;
26
26
  }
27
27
  var MinimalVideoSkinElement = class extends SkinMixin(ReactiveElement) {
28
28
  static {
@@ -1 +1 @@
1
- {"version":3,"file":"minimal-skin.js","names":[],"sources":["../../../../src/define/video/minimal-skin.ts"],"sourcesContent":["import { ReactiveElement } from '@videojs/element';\nimport { renderIcon } from '@videojs/icons/render/minimal';\nimport { createStyles, SkinMixin } from '../skin-mixin';\nimport styles from './minimal-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/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-minimal-skin media-minimal-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 ${renderIcon('spinner', { class: 'media-icon' })}\n </media-buffering-indicator>\n\n <media-controls class=\"media-controls\">\n <media-tooltip-group>\n <div class=\"media-button-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-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-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-tooltip\">\n Seek forward ${SEEK_TIME} seconds\n </media-tooltip>\n </div>\n\n <div class=\"media-time-controls\">\n <media-time-group class=\"media-time\">\n <media-time type=\"current\" class=\"media-time__value media-time__value--current\"></media-time>\n <media-time-separator class=\"media-time__separator\"></media-time-separator>\n <media-time type=\"duration\" class=\"media-time__value media-time__value--duration\"></media-time>\n </media-time-group>\n\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-preview media-slider__preview\">\n <div class=\"media-preview__thumbnail-wrapper\">\n <media-slider-thumbnail class=\"media-preview__thumbnail\"></media-slider-thumbnail>\n </div>\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 </div>\n\n <div class=\"media-button-group\">\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-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-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-tooltip\">\n Toggle captions\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-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-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 </div>\n </media-tooltip-group>\n </media-controls>\n\n <div class=\"media-overlay\"></div>\n </media-container>\n `;\n}\n\nexport class MinimalVideoSkinElement extends SkinMixin(ReactiveElement) {\n static readonly tagName = 'video-minimal-skin';\n static styles = createStyles(styles);\n static getTemplateHTML = getTemplateHTML;\n}\n\ncustomElements.define(MinimalVideoSkinElement.tagName, MinimalVideoSkinElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [MinimalVideoSkinElement.tagName]: MinimalVideoSkinElement;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAM,YAAY;AAElB,SAAS,kBAAkB;AACzB,QAAgB,sOAAA,WAAA,WAAA,EAAA,OAAA,cAAA,CAAA,CAAA,oOAAA,WAAA,WAAA,EAAA,OAAA,kCAAA,CAAA,CAAA,GAAA,WAAA,QAAA,EAAA,OAAA,+BAAA,CAAA,CAAA,GAAA,WAAA,SAAA,EAAA,OAAA,gCAAA,CAAA,CAAA,mYAAA,CAAA,UAAA,oGAAA,WAAA,QAAA,EAAA,OAAA,kCAAA,CAAA,CAAA,mCAAA,UAAA,8HAAA,UAAA,yFAAA,UAAA,oGAAA,WAAA,QAAA,EAAA,OAAA,cAAA,CAAA,CAAA,mCAAA,UAAA,4HAAA,UAAA,88BAAA,WAAA,WAAA,EAAA,OAAA,qCAAA,CAAA,CAAA,qcAAA,WAAA,cAAA,EAAA,OAAA,qCAAA,CAAA,CAAA,GAAA,WAAA,cAAA,EAAA,OAAA,qCAAA,CAAA,CAAA,GAAA,WAAA,eAAA,EAAA,OAAA,sCAAA,CAAA,CAAA,koBAAA,WAAA,gBAAA,EAAA,OAAA,uCAAA,CAAA,CAAA,GAAA,WAAA,eAAA,EAAA,OAAA,sCAAA,CAAA,CAAA,wOAAA,WAAA,aAAA,EAAA,OAAA,oCAAA,CAAA,CAAA,GAAA,WAAA,YAAA,EAAA,OAAA,mCAAA,CAAA,CAAA,gaAAA,WAAA,oBAAA,EAAA,OAAA,2CAAA,CAAA,CAAA,GAAA,WAAA,mBAAA,EAAA,OAAA,0CAAA,CAAA,CAAA;;AAGlB,IAAY,0BAAZ,cAA+B,UAAA,gBAAA,CAAA;;iBACb;;;;;;yBAEC"}
1
+ {"version":3,"file":"minimal-skin.js","names":[],"sources":["../../../../src/define/video/minimal-skin.ts"],"sourcesContent":["import { ReactiveElement } from '@videojs/element';\nimport { renderIcon } from '@videojs/icons/render/minimal';\nimport { createStyles, SkinMixin } from '../skin-mixin';\nimport styles from './minimal-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/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-minimal-skin media-minimal-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 ${renderIcon('spinner', { class: 'media-icon' })}\n </media-buffering-indicator>\n\n <media-controls class=\"media-controls\">\n <media-tooltip-group>\n <div class=\"media-button-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-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-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-tooltip\">\n Seek forward ${SEEK_TIME} seconds\n </media-tooltip>\n </div>\n\n <div class=\"media-time-controls\">\n <media-time-group class=\"media-time\">\n <media-time type=\"current\" class=\"media-time__value media-time__value--current\"></media-time>\n <media-time-separator class=\"media-time__separator\"></media-time-separator>\n <media-time type=\"duration\" class=\"media-time__value media-time__value--duration\"></media-time>\n </media-time-group>\n\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-preview media-slider__preview\">\n <div class=\"media-preview__thumbnail-wrapper\">\n <media-slider-thumbnail class=\"media-preview__thumbnail\"></media-slider-thumbnail>\n </div>\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 </div>\n\n <div class=\"media-button-group\">\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-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-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-tooltip\">\n Toggle captions\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-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-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 </div>\n </media-tooltip-group>\n </media-controls>\n\n <div class=\"media-overlay\"></div>\n </media-container>\n `;\n}\n\nexport class MinimalVideoSkinElement extends SkinMixin(ReactiveElement) {\n static readonly tagName = 'video-minimal-skin';\n static styles = createStyles(styles);\n static getTemplateHTML = getTemplateHTML;\n}\n\ncustomElements.define(MinimalVideoSkinElement.tagName, MinimalVideoSkinElement);\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [MinimalVideoSkinElement.tagName]: MinimalVideoSkinElement;\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAM,YAAY;AAElB,SAAS,kBAAkB;AACzB,QAAgB,sOAAA,WAAA,WAAA,EAAA,OAAA,cAAA,CAAA,CAAA,yPAAA,WAAA,WAAA,EAAA,OAAA,kCAAA,CAAA,CAAA,GAAA,WAAA,QAAA,EAAA,OAAA,+BAAA,CAAA,CAAA,GAAA,WAAA,SAAA,EAAA,OAAA,gCAAA,CAAA,CAAA,mYAAA,CAAA,UAAA,0HAAA,WAAA,QAAA,EAAA,OAAA,kCAAA,CAAA,CAAA,mCAAA,UAAA,8HAAA,UAAA,yFAAA,UAAA,0HAAA,WAAA,QAAA,EAAA,OAAA,cAAA,CAAA,CAAA,mCAAA,UAAA,4HAAA,UAAA,88BAAA,WAAA,WAAA,EAAA,OAAA,qCAAA,CAAA,CAAA,+eAAA,WAAA,cAAA,EAAA,OAAA,qCAAA,CAAA,CAAA,GAAA,WAAA,cAAA,EAAA,OAAA,qCAAA,CAAA,CAAA,GAAA,WAAA,eAAA,EAAA,OAAA,sCAAA,CAAA,CAAA,upBAAA,WAAA,gBAAA,EAAA,OAAA,uCAAA,CAAA,CAAA,GAAA,WAAA,eAAA,EAAA,OAAA,sCAAA,CAAA,CAAA,6PAAA,WAAA,aAAA,EAAA,OAAA,oCAAA,CAAA,CAAA,GAAA,WAAA,YAAA,EAAA,OAAA,mCAAA,CAAA,CAAA,qbAAA,WAAA,oBAAA,EAAA,OAAA,2CAAA,CAAA,CAAA,GAAA,WAAA,mBAAA,EAAA,OAAA,0CAAA,CAAA,CAAA;;AAGlB,IAAY,0BAAZ,cAA+B,UAAA,gBAAA,CAAA;;iBACb;;;;;;yBAEC"}