@videojs/react 10.0.0-alpha.4 → 10.0.0-alpha.5

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 (286) hide show
  1. package/dist/default/_virtual/_rolldown/runtime.js +1 -19
  2. package/dist/default/index.js +10 -33
  3. package/dist/default/player/context.js +11 -1
  4. package/dist/default/player/context.js.map +1 -1
  5. package/dist/default/presets/audio/index.js +2 -8
  6. package/dist/default/presets/audio/skin.css +1 -0
  7. package/dist/default/presets/background/index.js +2 -8
  8. package/dist/default/presets/background/skin.css +1 -0
  9. package/dist/default/presets/video/index.js +2 -8
  10. package/dist/default/presets/video/minimal-skin.css +178 -53
  11. package/dist/default/presets/video/minimal-skin.js +63 -90
  12. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  13. package/dist/default/presets/video/minimal-skin.tailwind.js +126 -107
  14. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  15. package/dist/default/presets/video/skin.css +179 -54
  16. package/dist/default/presets/video/skin.js +61 -88
  17. package/dist/default/presets/video/skin.js.map +1 -1
  18. package/dist/default/presets/video/skin.tailwind.js +121 -104
  19. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  20. package/dist/default/skins/dist/default/video/default.tailwind.js +90 -0
  21. package/dist/default/skins/dist/default/video/default.tailwind.js.map +1 -0
  22. package/dist/default/skins/dist/default/video/minimal.tailwind.js +86 -0
  23. package/dist/default/skins/dist/default/video/minimal.tailwind.js.map +1 -0
  24. package/dist/default/ui/captions-button/captions-button.js +1 -16
  25. package/dist/default/ui/captions-button/captions-button.js.map +1 -1
  26. package/dist/default/ui/controls/context.js +16 -0
  27. package/dist/default/ui/controls/context.js.map +1 -0
  28. package/dist/default/ui/controls/controls-group.js +4 -1
  29. package/dist/default/ui/controls/controls-group.js.map +1 -1
  30. package/dist/default/ui/controls/controls-root.js +19 -10
  31. package/dist/default/ui/controls/controls-root.js.map +1 -1
  32. package/dist/default/ui/create-context-part.js +29 -0
  33. package/dist/default/ui/create-context-part.js.map +1 -0
  34. package/dist/default/ui/create-media-button.js +52 -0
  35. package/dist/default/ui/create-media-button.js.map +1 -0
  36. package/dist/default/ui/fullscreen-button/fullscreen-button.js +8 -33
  37. package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  38. package/dist/default/ui/hooks/use-slider.js +75 -0
  39. package/dist/default/ui/hooks/use-slider.js.map +1 -0
  40. package/dist/default/ui/mute-button/mute-button.js +8 -36
  41. package/dist/default/ui/mute-button/mute-button.js.map +1 -1
  42. package/dist/default/ui/pip-button/pip-button.js +8 -33
  43. package/dist/default/ui/pip-button/pip-button.js.map +1 -1
  44. package/dist/default/ui/play-button/play-button.js +7 -33
  45. package/dist/default/ui/play-button/play-button.js.map +1 -1
  46. package/dist/default/ui/playback-rate-button/index.js +3 -0
  47. package/dist/default/ui/playback-rate-button/playback-rate-button.js +34 -0
  48. package/dist/default/ui/playback-rate-button/playback-rate-button.js.map +1 -0
  49. package/dist/default/ui/popover/context.js +16 -0
  50. package/dist/default/ui/popover/context.js.map +1 -0
  51. package/dist/default/ui/popover/index.js +4 -0
  52. package/dist/default/ui/popover/index.parts.js +17 -0
  53. package/dist/default/ui/popover/index.parts.js.map +1 -0
  54. package/dist/default/ui/popover/popover-arrow.js +17 -0
  55. package/dist/default/ui/popover/popover-arrow.js.map +1 -0
  56. package/dist/default/ui/popover/popover-popup.js +94 -0
  57. package/dist/default/ui/popover/popover-popup.js.map +1 -0
  58. package/dist/default/ui/popover/popover-root.js +69 -0
  59. package/dist/default/ui/popover/popover-root.js.map +1 -0
  60. package/dist/default/ui/popover/popover-trigger.js +43 -0
  61. package/dist/default/ui/popover/popover-trigger.js.map +1 -0
  62. package/dist/default/ui/poster/poster.js +2 -1
  63. package/dist/default/ui/poster/poster.js.map +1 -1
  64. package/dist/default/ui/seek-button/seek-button.js +7 -34
  65. package/dist/default/ui/seek-button/seek-button.js.map +1 -1
  66. package/dist/default/ui/slider/context.js +22 -0
  67. package/dist/default/ui/slider/context.js.map +1 -0
  68. package/dist/default/ui/slider/index.js +3 -0
  69. package/dist/default/ui/slider/index.parts.js +21 -0
  70. package/dist/default/ui/slider/index.parts.js.map +1 -0
  71. package/dist/default/ui/slider/slider-buffer.js +16 -0
  72. package/dist/default/ui/slider/slider-buffer.js.map +1 -0
  73. package/dist/default/ui/slider/slider-fill.js +16 -0
  74. package/dist/default/ui/slider/slider-fill.js.map +1 -0
  75. package/dist/default/ui/slider/slider-root.js +71 -0
  76. package/dist/default/ui/slider/slider-root.js.map +1 -0
  77. package/dist/default/ui/slider/slider-thumb.js +32 -0
  78. package/dist/default/ui/slider/slider-thumb.js.map +1 -0
  79. package/dist/default/ui/slider/slider-track.js +16 -0
  80. package/dist/default/ui/slider/slider-track.js.map +1 -0
  81. package/dist/default/ui/slider/slider-value.js +32 -0
  82. package/dist/default/ui/slider/slider-value.js.map +1 -0
  83. package/dist/default/ui/thumbnail/thumbnail.js +87 -0
  84. package/dist/default/ui/thumbnail/thumbnail.js.map +1 -0
  85. package/dist/default/ui/time/time-value.js +2 -1
  86. package/dist/default/ui/time/time-value.js.map +1 -1
  87. package/dist/default/ui/time-slider/index.js +3 -0
  88. package/dist/default/ui/time-slider/index.parts.js +21 -0
  89. package/dist/default/ui/time-slider/index.parts.js.map +1 -0
  90. package/dist/default/ui/time-slider/time-slider-root.js +96 -0
  91. package/dist/default/ui/time-slider/time-slider-root.js.map +1 -0
  92. package/dist/default/ui/volume-slider/index.js +3 -0
  93. package/dist/default/ui/volume-slider/index.parts.js +19 -0
  94. package/dist/default/ui/volume-slider/index.parts.js.map +1 -0
  95. package/dist/default/ui/volume-slider/volume-slider-root.js +86 -0
  96. package/dist/default/ui/volume-slider/volume-slider-root.js.map +1 -0
  97. package/dist/default/utils/use-force-render.js +13 -0
  98. package/dist/default/utils/use-force-render.js.map +1 -0
  99. package/dist/default/utils/use-latest-ref.js +20 -0
  100. package/dist/default/utils/use-latest-ref.js.map +1 -0
  101. package/dist/default/utils/use-safe-id.js +22 -0
  102. package/dist/default/utils/use-safe-id.js.map +1 -0
  103. package/dist/dev/_virtual/_rolldown/runtime.js +1 -19
  104. package/dist/dev/index.d.ts +20 -2
  105. package/dist/dev/index.js +10 -33
  106. package/dist/dev/player/context.d.ts.map +1 -1
  107. package/dist/dev/player/context.js +11 -1
  108. package/dist/dev/player/context.js.map +1 -1
  109. package/dist/dev/presets/audio/index.d.ts +2 -9
  110. package/dist/dev/presets/audio/index.js +2 -8
  111. package/dist/dev/presets/audio/skin.css +1 -0
  112. package/dist/dev/presets/background/index.d.ts +2 -9
  113. package/dist/dev/presets/background/index.js +2 -8
  114. package/dist/dev/presets/background/skin.css +1 -0
  115. package/dist/dev/presets/video/index.d.ts +2 -9
  116. package/dist/dev/presets/video/index.js +2 -8
  117. package/dist/dev/presets/video/minimal-skin.css +178 -53
  118. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
  119. package/dist/dev/presets/video/minimal-skin.js +61 -88
  120. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  121. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
  122. package/dist/dev/presets/video/minimal-skin.tailwind.js +124 -105
  123. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  124. package/dist/dev/presets/video/skin.css +179 -54
  125. package/dist/dev/presets/video/skin.d.ts.map +1 -1
  126. package/dist/dev/presets/video/skin.js +61 -88
  127. package/dist/dev/presets/video/skin.js.map +1 -1
  128. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
  129. package/dist/dev/presets/video/skin.tailwind.js +121 -104
  130. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  131. package/dist/dev/skins/dist/default/video/default.tailwind.js +90 -0
  132. package/dist/dev/skins/dist/default/video/default.tailwind.js.map +1 -0
  133. package/dist/dev/skins/dist/default/video/minimal.tailwind.js +86 -0
  134. package/dist/dev/skins/dist/default/video/minimal.tailwind.js.map +1 -0
  135. package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -1
  136. package/dist/dev/ui/captions-button/captions-button.js +1 -16
  137. package/dist/dev/ui/captions-button/captions-button.js.map +1 -1
  138. package/dist/dev/ui/controls/context.js +16 -0
  139. package/dist/dev/ui/controls/context.js.map +1 -0
  140. package/dist/dev/ui/controls/controls-group.d.ts +2 -2
  141. package/dist/dev/ui/controls/controls-group.d.ts.map +1 -1
  142. package/dist/dev/ui/controls/controls-group.js +4 -1
  143. package/dist/dev/ui/controls/controls-group.js.map +1 -1
  144. package/dist/dev/ui/controls/controls-root.d.ts.map +1 -1
  145. package/dist/dev/ui/controls/controls-root.js +19 -10
  146. package/dist/dev/ui/controls/controls-root.js.map +1 -1
  147. package/dist/dev/ui/create-context-part.js +29 -0
  148. package/dist/dev/ui/create-context-part.js.map +1 -0
  149. package/dist/dev/ui/create-media-button.js +55 -0
  150. package/dist/dev/ui/create-media-button.js.map +1 -0
  151. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts +2 -1
  152. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -1
  153. package/dist/dev/ui/fullscreen-button/fullscreen-button.js +9 -37
  154. package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  155. package/dist/dev/ui/hooks/use-slider.d.ts +36 -0
  156. package/dist/dev/ui/hooks/use-slider.d.ts.map +1 -0
  157. package/dist/dev/ui/hooks/use-slider.js +75 -0
  158. package/dist/dev/ui/hooks/use-slider.js.map +1 -0
  159. package/dist/dev/ui/mute-button/mute-button.d.ts +2 -4
  160. package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -1
  161. package/dist/dev/ui/mute-button/mute-button.js +9 -40
  162. package/dist/dev/ui/mute-button/mute-button.js.map +1 -1
  163. package/dist/dev/ui/pip-button/pip-button.d.ts +2 -1
  164. package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -1
  165. package/dist/dev/ui/pip-button/pip-button.js +9 -37
  166. package/dist/dev/ui/pip-button/pip-button.js.map +1 -1
  167. package/dist/dev/ui/play-button/play-button.d.ts +1 -1
  168. package/dist/dev/ui/play-button/play-button.d.ts.map +1 -1
  169. package/dist/dev/ui/play-button/play-button.js +8 -37
  170. package/dist/dev/ui/play-button/play-button.js.map +1 -1
  171. package/dist/dev/ui/playback-rate-button/index.d.ts +2 -0
  172. package/dist/dev/ui/playback-rate-button/index.js +3 -0
  173. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts +30 -0
  174. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts.map +1 -0
  175. package/dist/dev/ui/playback-rate-button/playback-rate-button.js +34 -0
  176. package/dist/dev/ui/playback-rate-button/playback-rate-button.js.map +1 -0
  177. package/dist/dev/ui/popover/context.d.ts +17 -0
  178. package/dist/dev/ui/popover/context.d.ts.map +1 -0
  179. package/dist/dev/ui/popover/context.js +16 -0
  180. package/dist/dev/ui/popover/context.js.map +1 -0
  181. package/dist/dev/ui/popover/index.d.ts +3 -0
  182. package/dist/dev/ui/popover/index.js +4 -0
  183. package/dist/dev/ui/popover/index.parts.d.ts +12 -0
  184. package/dist/dev/ui/popover/index.parts.d.ts.map +1 -0
  185. package/dist/dev/ui/popover/index.parts.js +17 -0
  186. package/dist/dev/ui/popover/index.parts.js.map +1 -0
  187. package/dist/dev/ui/popover/popover-arrow.d.ts +15 -0
  188. package/dist/dev/ui/popover/popover-arrow.d.ts.map +1 -0
  189. package/dist/dev/ui/popover/popover-arrow.js +17 -0
  190. package/dist/dev/ui/popover/popover-arrow.js.map +1 -0
  191. package/dist/dev/ui/popover/popover-popup.d.ts +15 -0
  192. package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -0
  193. package/dist/dev/ui/popover/popover-popup.js +94 -0
  194. package/dist/dev/ui/popover/popover-popup.js.map +1 -0
  195. package/dist/dev/ui/popover/popover-root.d.ts +29 -0
  196. package/dist/dev/ui/popover/popover-root.d.ts.map +1 -0
  197. package/dist/dev/ui/popover/popover-root.js +69 -0
  198. package/dist/dev/ui/popover/popover-root.js.map +1 -0
  199. package/dist/dev/ui/popover/popover-trigger.d.ts +15 -0
  200. package/dist/dev/ui/popover/popover-trigger.d.ts.map +1 -0
  201. package/dist/dev/ui/popover/popover-trigger.js +43 -0
  202. package/dist/dev/ui/popover/popover-trigger.js.map +1 -0
  203. package/dist/dev/ui/poster/poster.d.ts.map +1 -1
  204. package/dist/dev/ui/poster/poster.js +2 -1
  205. package/dist/dev/ui/poster/poster.js.map +1 -1
  206. package/dist/dev/ui/seek-button/seek-button.d.ts +1 -1
  207. package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -1
  208. package/dist/dev/ui/seek-button/seek-button.js +8 -38
  209. package/dist/dev/ui/seek-button/seek-button.js.map +1 -1
  210. package/dist/dev/ui/slider/context.js +22 -0
  211. package/dist/dev/ui/slider/context.js.map +1 -0
  212. package/dist/dev/ui/slider/index.d.ts +2 -0
  213. package/dist/dev/ui/slider/index.js +3 -0
  214. package/dist/dev/ui/slider/index.parts.d.ts +14 -0
  215. package/dist/dev/ui/slider/index.parts.d.ts.map +1 -0
  216. package/dist/dev/ui/slider/index.parts.js +21 -0
  217. package/dist/dev/ui/slider/index.parts.js.map +1 -0
  218. package/dist/dev/ui/slider/slider-buffer.d.ts +14 -0
  219. package/dist/dev/ui/slider/slider-buffer.d.ts.map +1 -0
  220. package/dist/dev/ui/slider/slider-buffer.js +16 -0
  221. package/dist/dev/ui/slider/slider-buffer.js.map +1 -0
  222. package/dist/dev/ui/slider/slider-fill.d.ts +14 -0
  223. package/dist/dev/ui/slider/slider-fill.d.ts.map +1 -0
  224. package/dist/dev/ui/slider/slider-fill.js +16 -0
  225. package/dist/dev/ui/slider/slider-fill.js.map +1 -0
  226. package/dist/dev/ui/slider/slider-root.d.ts +19 -0
  227. package/dist/dev/ui/slider/slider-root.d.ts.map +1 -0
  228. package/dist/dev/ui/slider/slider-root.js +71 -0
  229. package/dist/dev/ui/slider/slider-root.js.map +1 -0
  230. package/dist/dev/ui/slider/slider-thumb.d.ts +14 -0
  231. package/dist/dev/ui/slider/slider-thumb.d.ts.map +1 -0
  232. package/dist/dev/ui/slider/slider-thumb.js +32 -0
  233. package/dist/dev/ui/slider/slider-thumb.js.map +1 -0
  234. package/dist/dev/ui/slider/slider-track.d.ts +14 -0
  235. package/dist/dev/ui/slider/slider-track.d.ts.map +1 -0
  236. package/dist/dev/ui/slider/slider-track.js +16 -0
  237. package/dist/dev/ui/slider/slider-track.js.map +1 -0
  238. package/dist/dev/ui/slider/slider-value.d.ts +19 -0
  239. package/dist/dev/ui/slider/slider-value.d.ts.map +1 -0
  240. package/dist/dev/ui/slider/slider-value.js +32 -0
  241. package/dist/dev/ui/slider/slider-value.js.map +1 -0
  242. package/dist/dev/ui/thumbnail/thumbnail.d.ts +17 -0
  243. package/dist/dev/ui/thumbnail/thumbnail.d.ts.map +1 -0
  244. package/dist/dev/ui/thumbnail/thumbnail.js +87 -0
  245. package/dist/dev/ui/thumbnail/thumbnail.js.map +1 -0
  246. package/dist/dev/ui/time/time-value.d.ts.map +1 -1
  247. package/dist/dev/ui/time/time-value.js +2 -1
  248. package/dist/dev/ui/time/time-value.js.map +1 -1
  249. package/dist/dev/ui/time-slider/index.d.ts +2 -0
  250. package/dist/dev/ui/time-slider/index.js +3 -0
  251. package/dist/dev/ui/time-slider/index.parts.d.ts +15 -0
  252. package/dist/dev/ui/time-slider/index.parts.d.ts.map +1 -0
  253. package/dist/dev/ui/time-slider/index.parts.js +21 -0
  254. package/dist/dev/ui/time-slider/index.parts.js.map +1 -0
  255. package/dist/dev/ui/time-slider/time-slider-root.d.ts +17 -0
  256. package/dist/dev/ui/time-slider/time-slider-root.d.ts.map +1 -0
  257. package/dist/dev/ui/time-slider/time-slider-root.js +99 -0
  258. package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -0
  259. package/dist/dev/ui/volume-slider/index.d.ts +2 -0
  260. package/dist/dev/ui/volume-slider/index.js +3 -0
  261. package/dist/dev/ui/volume-slider/index.parts.d.ts +14 -0
  262. package/dist/dev/ui/volume-slider/index.parts.d.ts.map +1 -0
  263. package/dist/dev/ui/volume-slider/index.parts.js +19 -0
  264. package/dist/dev/ui/volume-slider/index.parts.js.map +1 -0
  265. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts +17 -0
  266. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts.map +1 -0
  267. package/dist/dev/ui/volume-slider/volume-slider-root.js +89 -0
  268. package/dist/dev/ui/volume-slider/volume-slider-root.js.map +1 -0
  269. package/dist/dev/utils/use-force-render.js +13 -0
  270. package/dist/dev/utils/use-force-render.js.map +1 -0
  271. package/dist/dev/utils/use-latest-ref.js +20 -0
  272. package/dist/dev/utils/use-latest-ref.js.map +1 -0
  273. package/dist/dev/utils/use-safe-id.js +22 -0
  274. package/dist/dev/utils/use-safe-id.js.map +1 -0
  275. package/package.json +6 -5
  276. package/dist/default/index.js.map +0 -1
  277. package/dist/default/presets/audio/index.js.map +0 -1
  278. package/dist/default/presets/background/index.js.map +0 -1
  279. package/dist/default/presets/video/index.js.map +0 -1
  280. package/dist/dev/index.js.map +0 -1
  281. package/dist/dev/presets/audio/index.d.ts.map +0 -1
  282. package/dist/dev/presets/audio/index.js.map +0 -1
  283. package/dist/dev/presets/background/index.d.ts.map +0 -1
  284. package/dist/dev/presets/background/index.js.map +0 -1
  285. package/dist/dev/presets/video/index.d.ts.map +0 -1
  286. package/dist/dev/presets/video/index.js.map +0 -1
@@ -5,12 +5,20 @@ import { FullscreenButton } from "../../ui/fullscreen-button/fullscreen-button.j
5
5
  import { MuteButton } from "../../ui/mute-button/mute-button.js";
6
6
  import { PiPButton } from "../../ui/pip-button/pip-button.js";
7
7
  import { PlayButton } from "../../ui/play-button/play-button.js";
8
+ import { PlaybackRateButton } from "../../ui/playback-rate-button/playback-rate-button.js";
9
+ import { PopoverPopup } from "../../ui/popover/popover-popup.js";
10
+ import { PopoverRoot } from "../../ui/popover/popover-root.js";
11
+ import { PopoverTrigger } from "../../ui/popover/popover-trigger.js";
8
12
  import { SeekButton } from "../../ui/seek-button/seek-button.js";
13
+ import { SliderBuffer } from "../../ui/slider/slider-buffer.js";
14
+ import { SliderFill } from "../../ui/slider/slider-fill.js";
15
+ import { SliderThumb } from "../../ui/slider/slider-thumb.js";
16
+ import { SliderTrack } from "../../ui/slider/slider-track.js";
9
17
  import { Group } from "../../ui/time/time-group.js";
10
18
  import { Separator } from "../../ui/time/time-separator.js";
11
19
  import { Value } from "../../ui/time/time-value.js";
12
- import { CaptionsButton } from "../../ui/captions-button/captions-button.js";
13
- import { ErrorDialog } from "../../ui/error-dialog/error-dialog.js";
20
+ import { TimeSliderRoot } from "../../ui/time-slider/time-slider-root.js";
21
+ import { VolumeSliderRoot } from "../../ui/volume-slider/volume-slider-root.js";
14
22
  import CaptionsOffIcon from "../../icons/dist/react/minimal/captions-off.js";
15
23
  import CaptionsOnIcon from "../../icons/dist/react/minimal/captions-on.js";
16
24
  import FullscreenEnterIcon from "../../icons/dist/react/minimal/fullscreen-enter.js";
@@ -24,8 +32,10 @@ import SpinnerIcon from "../../icons/dist/react/minimal/spinner.js";
24
32
  import VolumeHighIcon from "../../icons/dist/react/minimal/volume-high.js";
25
33
  import VolumeLowIcon from "../../icons/dist/react/minimal/volume-low.js";
26
34
  import VolumeOffIcon from "../../icons/dist/react/minimal/volume-off.js";
35
+ import { CaptionsButton } from "../../ui/captions-button/captions-button.js";
36
+ import { ErrorDialog } from "../../ui/error-dialog/error-dialog.js";
27
37
  import { forwardRef } from "react";
28
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
38
+ import { jsx, jsxs } from "react/jsx-runtime";
29
39
  import { cn } from "@videojs/utils/style";
30
40
 
31
41
  //#region src/presets/video/minimal-skin.tsx
@@ -38,72 +48,17 @@ const Button = forwardRef(function Button({ className, ...props }, ref) {
38
48
  ...props
39
49
  });
40
50
  });
41
- function PlayButtonIcon({ state, className, ...rest }) {
42
- const { ended, paused } = state;
43
- return /* @__PURE__ */ jsxs(Fragment, { children: [
44
- /* @__PURE__ */ jsx(RestartIcon, {
45
- ...rest,
46
- className: cn(className, { "media-icon--hidden": !ended })
47
- }),
48
- /* @__PURE__ */ jsx(PlayIcon, {
49
- ...rest,
50
- className: cn(className, { "media-icon--hidden": ended || !paused })
51
- }),
52
- /* @__PURE__ */ jsx(PauseIcon, {
53
- ...rest,
54
- className: cn(className, { "media-icon--hidden": paused })
55
- })
56
- ] });
57
- }
58
- function MuteButtonIcon({ state, className, ...rest }) {
59
- const { muted, volumeLevel } = state;
60
- return /* @__PURE__ */ jsxs(Fragment, { children: [
61
- /* @__PURE__ */ jsx(VolumeOffIcon, {
62
- ...rest,
63
- className: cn(className, { "media-icon--hidden": !muted })
64
- }),
65
- /* @__PURE__ */ jsx(VolumeLowIcon, {
66
- ...rest,
67
- className: cn(className, { "media-icon--hidden": muted || volumeLevel !== "low" })
68
- }),
69
- /* @__PURE__ */ jsx(VolumeHighIcon, {
70
- ...rest,
71
- className: cn(className, { "media-icon--hidden": muted || volumeLevel === "low" })
72
- })
73
- ] });
74
- }
75
- function CaptionsButtonIcon({ state, className, ...rest }) {
76
- const { active } = state;
77
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(CaptionsOffIcon, {
78
- ...rest,
79
- className: cn(className, { "media-icon--hidden": active })
80
- }), /* @__PURE__ */ jsx(CaptionsOnIcon, {
81
- ...rest,
82
- className: cn(className, { "media-icon--hidden": !active })
83
- })] });
84
- }
85
- function FullscreenButtonIcon({ state, className, ...rest }) {
86
- const { fullscreen } = state;
87
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(FullscreenExitIcon, {
88
- ...rest,
89
- className: cn(className, { "media-icon--hidden": !fullscreen })
90
- }), /* @__PURE__ */ jsx(FullscreenEnterIcon, {
91
- ...rest,
92
- className: cn(className, { "media-icon--hidden": fullscreen })
93
- })] });
94
- }
95
51
  function MinimalVideoSkin(props) {
96
52
  const { children, className, ...rest } = props;
97
53
  return /* @__PURE__ */ jsxs(Container, {
98
54
  className: cn("media-minimal-skin", className),
99
55
  ...rest,
100
56
  children: [
101
- children,
102
- /* @__PURE__ */ jsx(BufferingIndicator, { render: (props, state) => state.visible ? /* @__PURE__ */ jsx("div", {
57
+ /* @__PURE__ */ jsx(BufferingIndicator, { render: (props) => /* @__PURE__ */ jsx("div", {
103
58
  ...props,
104
59
  className: "media-buffering-indicator",
105
60
  children: /* @__PURE__ */ jsx(SpinnerIcon, { className: "media-icon" })
106
- }) : null }),
61
+ }) }),
107
62
  /* @__PURE__ */ jsx(ErrorDialog, {
108
63
  "aria-labelledby": "media-error-title",
109
64
  "aria-describedby": "media-error-description",
@@ -139,13 +94,14 @@ function MinimalVideoSkin(props) {
139
94
  /* @__PURE__ */ jsxs("span", {
140
95
  className: "media-button-group",
141
96
  children: [
142
- /* @__PURE__ */ jsx(PlayButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
97
+ /* @__PURE__ */ jsx(PlayButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
143
98
  ...props,
144
- className: "media-button--icon",
145
- children: /* @__PURE__ */ jsx(PlayButtonIcon, {
146
- state,
147
- className: "media-icon"
148
- })
99
+ className: "media-button--icon media-button--play",
100
+ children: [
101
+ /* @__PURE__ */ jsx(RestartIcon, { className: "media-icon media-icon--restart" }),
102
+ /* @__PURE__ */ jsx(PlayIcon, { className: "media-icon media-icon--play" }),
103
+ /* @__PURE__ */ jsx(PauseIcon, { className: "media-icon media-icon--pause" })
104
+ ]
149
105
  }) }),
150
106
  /* @__PURE__ */ jsx(SeekButton, {
151
107
  seconds: -SEEK_TIME,
@@ -192,51 +148,68 @@ function MinimalVideoSkin(props) {
192
148
  className: "media-time__value media-time__value--duration"
193
149
  })
194
150
  ]
195
- }), /* @__PURE__ */ jsx("span", {
151
+ }), /* @__PURE__ */ jsxs(TimeSliderRoot, {
196
152
  className: "media-slider",
197
- style: {
198
- height: "4px",
199
- background: "oklch(1 0 0 / 0.2)"
200
- }
153
+ children: [/* @__PURE__ */ jsxs(SliderTrack, {
154
+ className: "media-slider__track",
155
+ children: [/* @__PURE__ */ jsx(SliderFill, { className: "media-slider__fill" }), /* @__PURE__ */ jsx(SliderBuffer, { className: "media-slider__buffer" })]
156
+ }), /* @__PURE__ */ jsx(SliderThumb, { className: "media-slider__thumb" })]
201
157
  })]
202
158
  }),
203
159
  /* @__PURE__ */ jsxs("span", {
204
160
  className: "media-button-group",
205
161
  children: [
206
- /* @__PURE__ */ jsx(MuteButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
162
+ /* @__PURE__ */ jsx(PlaybackRateButton, { render: (props) => /* @__PURE__ */ jsx(Button, {
207
163
  ...props,
208
- className: "media-button--icon",
209
- children: /* @__PURE__ */ jsx(MuteButtonIcon, {
210
- state,
211
- className: "media-icon"
212
- })
164
+ className: "media-button--icon media-button--playback-rate"
213
165
  }) }),
214
- /* @__PURE__ */ jsx(CaptionsButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
166
+ /* @__PURE__ */ jsxs(PopoverRoot, {
167
+ openOnHover: true,
168
+ delay: 200,
169
+ closeDelay: 100,
170
+ side: "top",
171
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, { render: /* @__PURE__ */ jsx(MuteButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
172
+ ...props,
173
+ className: "media-button--icon media-button--mute",
174
+ children: [
175
+ /* @__PURE__ */ jsx(VolumeOffIcon, { className: "media-icon media-icon--volume-off" }),
176
+ /* @__PURE__ */ jsx(VolumeLowIcon, { className: "media-icon media-icon--volume-low" }),
177
+ /* @__PURE__ */ jsx(VolumeHighIcon, { className: "media-icon media-icon--volume-high" })
178
+ ]
179
+ }) }) }), /* @__PURE__ */ jsx(PopoverPopup, {
180
+ className: "media-surface media-popup media-popup--volume media-popup-animation",
181
+ children: /* @__PURE__ */ jsxs(VolumeSliderRoot, {
182
+ className: "media-slider",
183
+ orientation: "vertical",
184
+ thumbAlignment: "edge",
185
+ children: [/* @__PURE__ */ jsx(SliderTrack, {
186
+ className: "media-slider__track",
187
+ children: /* @__PURE__ */ jsx(SliderFill, { className: "media-slider__fill" })
188
+ }), /* @__PURE__ */ jsx(SliderThumb, { className: "media-slider__thumb media-slider__thumb--persistent" })]
189
+ })
190
+ })]
191
+ }),
192
+ /* @__PURE__ */ jsx(CaptionsButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
215
193
  ...props,
216
- className: "media-button--icon",
217
- children: /* @__PURE__ */ jsx(CaptionsButtonIcon, {
218
- state,
219
- className: "media-icon"
220
- })
194
+ className: "media-button--icon media-button--captions",
195
+ children: [/* @__PURE__ */ jsx(CaptionsOffIcon, { className: "media-icon media-icon--captions-off" }), /* @__PURE__ */ jsx(CaptionsOnIcon, { className: "media-icon media-icon--captions-on" })]
221
196
  }) }),
222
197
  /* @__PURE__ */ jsx(PiPButton, { render: (props) => /* @__PURE__ */ jsx(Button, {
223
198
  ...props,
224
199
  className: "media-button--icon",
225
200
  children: /* @__PURE__ */ jsx(PipIcon, { className: "media-icon" })
226
201
  }) }),
227
- /* @__PURE__ */ jsx(FullscreenButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
202
+ /* @__PURE__ */ jsx(FullscreenButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
228
203
  ...props,
229
- className: "media-button--icon",
230
- children: /* @__PURE__ */ jsx(FullscreenButtonIcon, {
231
- state,
232
- className: "media-icon"
233
- })
204
+ className: "media-button--icon media-button--fullscreen",
205
+ children: [/* @__PURE__ */ jsx(FullscreenEnterIcon, { className: "media-icon media-icon--fullscreen-enter" }), /* @__PURE__ */ jsx(FullscreenExitIcon, { className: "media-icon media-icon--fullscreen-exit" })]
234
206
  }) })
235
207
  ]
236
208
  })
237
209
  ]
238
210
  }),
239
- /* @__PURE__ */ jsx("div", { className: "media-overlay" })
211
+ /* @__PURE__ */ jsx("div", { className: "media-overlay" }),
212
+ children
240
213
  ]
241
214
  });
242
215
  }
@@ -1 +1 @@
1
- {"version":3,"file":"minimal-skin.js","names":["Controls.Root","Time.Group","Time.Value","Time.Separator"],"sources":["../../../../src/presets/video/minimal-skin.tsx"],"sourcesContent":["import type { FullscreenButtonState, MuteButtonState, PlayButtonState } from '@videojs/core';\nimport {\n CaptionsOffIcon,\n CaptionsOnIcon,\n FullscreenEnterIcon,\n FullscreenExitIcon,\n PauseIcon,\n PipIcon,\n PlayIcon,\n RestartIcon,\n SeekIcon,\n SpinnerIcon,\n VolumeHighIcon,\n VolumeLowIcon,\n VolumeOffIcon,\n} from '@videojs/icons/react/minimal';\nimport { cn } from '@videojs/utils/style';\nimport { type ComponentProps, forwardRef, type ReactNode } from 'react';\nimport { Container } from '@/player/context';\nimport { BufferingIndicator } from '@/ui/buffering-indicator';\nimport { CaptionsButton, type CaptionsButtonState } from '@/ui/captions-button';\nimport { Controls } from '@/ui/controls';\nimport { ErrorDialog } from '@/ui/error-dialog';\nimport { FullscreenButton } from '@/ui/fullscreen-button';\nimport { MuteButton } from '@/ui/mute-button';\nimport { PiPButton } from '@/ui/pip-button';\nimport { PlayButton } from '@/ui/play-button';\nimport { SeekButton } from '@/ui/seek-button';\nimport { Time } from '@/ui/time';\nimport type { BaseSkinProps } from '../types';\n\nconst SEEK_TIME = 10;\n\nexport type MinimalVideoSkinProps = BaseSkinProps;\n\nconst Button = forwardRef<HTMLButtonElement, ComponentProps<'button'>>(function Button({ className, ...props }, ref) {\n return <button ref={ref} type=\"button\" className={cn('media-button', className)} {...props} />;\n});\n\nfunction PlayButtonIcon({ state, className, ...rest }: { state: PlayButtonState } & ComponentProps<'svg'>) {\n const { ended, paused } = state;\n return (\n <>\n <RestartIcon {...rest} className={cn(className, { 'media-icon--hidden': !ended })} />\n <PlayIcon {...rest} className={cn(className, { 'media-icon--hidden': ended || !paused })} />\n <PauseIcon {...rest} className={cn(className, { 'media-icon--hidden': paused })} />\n </>\n );\n}\n\nfunction MuteButtonIcon({ state, className, ...rest }: { state: MuteButtonState } & ComponentProps<'svg'>) {\n const { muted, volumeLevel } = state;\n return (\n <>\n <VolumeOffIcon {...rest} className={cn(className, { 'media-icon--hidden': !muted })} />\n <VolumeLowIcon {...rest} className={cn(className, { 'media-icon--hidden': muted || volumeLevel !== 'low' })} />\n <VolumeHighIcon {...rest} className={cn(className, { 'media-icon--hidden': muted || volumeLevel === 'low' })} />\n </>\n );\n}\n\nfunction CaptionsButtonIcon({ state, className, ...rest }: { state: CaptionsButtonState } & ComponentProps<'svg'>) {\n const { active } = state;\n return (\n <>\n <CaptionsOffIcon {...rest} className={cn(className, { 'media-icon--hidden': active })} />\n <CaptionsOnIcon {...rest} className={cn(className, { 'media-icon--hidden': !active })} />\n </>\n );\n}\n\nfunction FullscreenButtonIcon({ state, className, ...rest }: { state: FullscreenButtonState } & ComponentProps<'svg'>) {\n const { fullscreen } = state;\n return (\n <>\n <FullscreenExitIcon {...rest} className={cn(className, { 'media-icon--hidden': !fullscreen })} />\n <FullscreenEnterIcon {...rest} className={cn(className, { 'media-icon--hidden': fullscreen })} />\n </>\n );\n}\n\nexport function MinimalVideoSkin(props: MinimalVideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container className={cn('media-minimal-skin', className)} {...rest}>\n {children}\n\n <BufferingIndicator\n render={(props, state) =>\n state.visible ? (\n <div {...props} className=\"media-buffering-indicator\">\n <SpinnerIcon className=\"media-icon\" />\n </div>\n ) : null\n }\n />\n\n <ErrorDialog\n aria-labelledby=\"media-error-title\"\n aria-describedby=\"media-error-description\"\n render={(props, { onDismiss }) => (\n <div {...props} className=\"media-error\">\n <div className=\"media-error__dialog\">\n <div className=\"media-error__content\">\n <p id=\"media-error-title\" className=\"media-error__title\">\n Something went wrong.\n </p>\n <p id=\"media-error-description\" className=\"media-error__description\">\n An error occurred while trying to play the video. Please try again.\n </p>\n </div>\n <div className=\"media-error__actions\">\n <Button onClick={onDismiss}>OK</Button>\n </div>\n </div>\n </div>\n )}\n />\n\n <Controls.Root className=\"media-controls\">\n <span className=\"media-button-group\">\n <PlayButton\n render={(props, state) => (\n <Button {...props} className=\"media-button--icon\">\n <PlayButtonIcon state={state} className=\"media-icon\" />\n </Button>\n )}\n />\n\n <SeekButton\n seconds={-SEEK_TIME}\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--seek\">\n <span className=\"media-icon__container\">\n <SeekIcon className=\"media-icon media-icon--seek media-icon--flipped\" />\n <span className=\"media-icon__label\">{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n\n <SeekButton\n seconds={SEEK_TIME}\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--seek\">\n <span className=\"media-icon__container\">\n <SeekIcon className=\"media-icon media-icon--seek\" />\n <span className=\"media-icon__label\">{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n </span>\n\n <span className=\"media-time-controls\">\n <Time.Group className=\"media-time\">\n <Time.Value type=\"current\" className=\"media-time__value media-time__value--current\" />\n <Time.Separator className=\"media-time__separator\" />\n <Time.Value type=\"duration\" className=\"media-time__value media-time__value--duration\" />\n </Time.Group>\n\n {/* Temporary spacer */}\n <span className=\"media-slider\" style={{ height: '4px', background: 'oklch(1 0 0 / 0.2)' }} />\n </span>\n\n <span className=\"media-button-group\">\n <MuteButton\n render={(props, state) => (\n <Button {...props} className=\"media-button--icon\">\n <MuteButtonIcon state={state} className=\"media-icon\" />\n </Button>\n )}\n />\n\n <CaptionsButton\n render={(props, state) => (\n <Button {...props} className=\"media-button--icon\">\n <CaptionsButtonIcon state={state} className=\"media-icon\" />\n </Button>\n )}\n />\n\n <PiPButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon\">\n <PipIcon className=\"media-icon\" />\n </Button>\n )}\n />\n\n <FullscreenButton\n render={(props, state) => (\n <Button {...props} className=\"media-button--icon\">\n <FullscreenButtonIcon state={state} className=\"media-icon\" />\n </Button>\n )}\n />\n </span>\n </Controls.Root>\n\n {/* <div className=\"media-captions\">\n <div className=\"media-captions__container\">\n <span className=\"media-captions__text\">An example cue</span>\n <span className=\"media-captions__text\">\n <p>Another example cue with HTML</p>\n </span>\n </div>\n </div> */}\n\n <div className=\"media-overlay\" />\n </Container>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"minimal-skin.js","names":["Controls.Root","Time.Group","Time.Value","Time.Separator","TimeSlider.Root","TimeSlider.Track","TimeSlider.Fill","TimeSlider.Buffer","TimeSlider.Thumb","Popover.Root","Popover.Trigger","Popover.Popup","VolumeSlider.Root","VolumeSlider.Track","VolumeSlider.Fill","VolumeSlider.Thumb"],"sources":["../../../../src/presets/video/minimal-skin.tsx"],"sourcesContent":["import {\n CaptionsOffIcon,\n CaptionsOnIcon,\n FullscreenEnterIcon,\n FullscreenExitIcon,\n PauseIcon,\n PipIcon,\n PlayIcon,\n RestartIcon,\n SeekIcon,\n SpinnerIcon,\n VolumeHighIcon,\n VolumeLowIcon,\n VolumeOffIcon,\n} from '@videojs/icons/react/minimal';\nimport { cn } from '@videojs/utils/style';\nimport { type ComponentProps, forwardRef, type ReactNode } from 'react';\nimport { Container } from '@/player/context';\nimport { BufferingIndicator } from '@/ui/buffering-indicator';\nimport { CaptionsButton } from '@/ui/captions-button';\nimport { Controls } from '@/ui/controls';\nimport { ErrorDialog } from '@/ui/error-dialog';\nimport { FullscreenButton } from '@/ui/fullscreen-button';\nimport { MuteButton } from '@/ui/mute-button';\nimport { PiPButton } from '@/ui/pip-button';\nimport { PlayButton } from '@/ui/play-button';\nimport { PlaybackRateButton } from '@/ui/playback-rate-button';\nimport { Popover } from '@/ui/popover';\nimport { SeekButton } from '@/ui/seek-button';\nimport { Time } from '@/ui/time';\nimport { TimeSlider } from '@/ui/time-slider';\nimport { VolumeSlider } from '@/ui/volume-slider';\nimport type { BaseSkinProps } from '../types';\n\nconst SEEK_TIME = 10;\n\nexport type MinimalVideoSkinProps = BaseSkinProps;\n\nconst Button = forwardRef<HTMLButtonElement, ComponentProps<'button'>>(function Button({ className, ...props }, ref) {\n return <button ref={ref} type=\"button\" className={cn('media-button', className)} {...props} />;\n});\n\nexport function MinimalVideoSkin(props: MinimalVideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container className={cn('media-minimal-skin', className)} {...rest}>\n <BufferingIndicator\n render={(props) => (\n <div {...props} className=\"media-buffering-indicator\">\n <SpinnerIcon className=\"media-icon\" />\n </div>\n )}\n />\n\n <ErrorDialog\n aria-labelledby=\"media-error-title\"\n aria-describedby=\"media-error-description\"\n render={(props, { onDismiss }) => (\n <div {...props} className=\"media-error\">\n <div className=\"media-error__dialog\">\n <div className=\"media-error__content\">\n <p id=\"media-error-title\" className=\"media-error__title\">\n Something went wrong.\n </p>\n <p id=\"media-error-description\" className=\"media-error__description\">\n An error occurred while trying to play the video. Please try again.\n </p>\n </div>\n <div className=\"media-error__actions\">\n <Button onClick={onDismiss}>OK</Button>\n </div>\n </div>\n </div>\n )}\n />\n\n <Controls.Root className=\"media-controls\">\n <span className=\"media-button-group\">\n <PlayButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--play\">\n <RestartIcon className=\"media-icon media-icon--restart\" />\n <PlayIcon className=\"media-icon media-icon--play\" />\n <PauseIcon className=\"media-icon media-icon--pause\" />\n </Button>\n )}\n />\n\n <SeekButton\n seconds={-SEEK_TIME}\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--seek\">\n <span className=\"media-icon__container\">\n <SeekIcon className=\"media-icon media-icon--seek media-icon--flipped\" />\n <span className=\"media-icon__label\">{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n\n <SeekButton\n seconds={SEEK_TIME}\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--seek\">\n <span className=\"media-icon__container\">\n <SeekIcon className=\"media-icon media-icon--seek\" />\n <span className=\"media-icon__label\">{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n </span>\n\n <span className=\"media-time-controls\">\n <Time.Group className=\"media-time\">\n <Time.Value type=\"current\" className=\"media-time__value media-time__value--current\" />\n <Time.Separator className=\"media-time__separator\" />\n <Time.Value type=\"duration\" className=\"media-time__value media-time__value--duration\" />\n </Time.Group>\n\n <TimeSlider.Root className=\"media-slider\">\n <TimeSlider.Track className=\"media-slider__track\">\n <TimeSlider.Fill className=\"media-slider__fill\" />\n <TimeSlider.Buffer className=\"media-slider__buffer\" />\n </TimeSlider.Track>\n <TimeSlider.Thumb className=\"media-slider__thumb\" />\n </TimeSlider.Root>\n </span>\n\n <span className=\"media-button-group\">\n <PlaybackRateButton\n render={(props) => <Button {...props} className=\"media-button--icon media-button--playback-rate\" />}\n />\n\n <Popover.Root openOnHover delay={200} closeDelay={100} side=\"top\">\n <Popover.Trigger\n render={\n <MuteButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--mute\">\n <VolumeOffIcon className=\"media-icon media-icon--volume-off\" />\n <VolumeLowIcon className=\"media-icon media-icon--volume-low\" />\n <VolumeHighIcon className=\"media-icon media-icon--volume-high\" />\n </Button>\n )}\n />\n }\n />\n <Popover.Popup className=\"media-surface media-popup media-popup--volume media-popup-animation\">\n <VolumeSlider.Root className=\"media-slider\" orientation=\"vertical\" thumbAlignment=\"edge\">\n <VolumeSlider.Track className=\"media-slider__track\">\n <VolumeSlider.Fill className=\"media-slider__fill\" />\n </VolumeSlider.Track>\n <VolumeSlider.Thumb className=\"media-slider__thumb media-slider__thumb--persistent\" />\n </VolumeSlider.Root>\n </Popover.Popup>\n </Popover.Root>\n\n <CaptionsButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--captions\">\n <CaptionsOffIcon className=\"media-icon media-icon--captions-off\" />\n <CaptionsOnIcon className=\"media-icon media-icon--captions-on\" />\n </Button>\n )}\n />\n\n <PiPButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon\">\n <PipIcon className=\"media-icon\" />\n </Button>\n )}\n />\n\n <FullscreenButton\n render={(props) => (\n <Button {...props} className=\"media-button--icon media-button--fullscreen\">\n <FullscreenEnterIcon className=\"media-icon media-icon--fullscreen-enter\" />\n <FullscreenExitIcon className=\"media-icon media-icon--fullscreen-exit\" />\n </Button>\n )}\n />\n </span>\n </Controls.Root>\n\n {/* <div className=\"media-captions\">\n <div className=\"media-captions__container\">\n <span className=\"media-captions__text\">An example cue</span>\n <span className=\"media-captions__text\">\n <p>Another example cue with HTML</p>\n </span>\n </div>\n </div> */}\n\n <div className=\"media-overlay\" />\n\n {children}\n </Container>\n );\n}\n"],"mappings":"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"}
@@ -5,12 +5,20 @@ import { FullscreenButton } from "../../ui/fullscreen-button/fullscreen-button.j
5
5
  import { MuteButton } from "../../ui/mute-button/mute-button.js";
6
6
  import { PiPButton } from "../../ui/pip-button/pip-button.js";
7
7
  import { PlayButton } from "../../ui/play-button/play-button.js";
8
+ import { PlaybackRateButton } from "../../ui/playback-rate-button/playback-rate-button.js";
9
+ import { PopoverPopup } from "../../ui/popover/popover-popup.js";
10
+ import { PopoverRoot } from "../../ui/popover/popover-root.js";
11
+ import { PopoverTrigger } from "../../ui/popover/popover-trigger.js";
8
12
  import { SeekButton } from "../../ui/seek-button/seek-button.js";
13
+ import { SliderBuffer } from "../../ui/slider/slider-buffer.js";
14
+ import { SliderFill as SliderFill$1 } from "../../ui/slider/slider-fill.js";
15
+ import { SliderThumb as SliderThumb$1 } from "../../ui/slider/slider-thumb.js";
16
+ import { SliderTrack as SliderTrack$1 } from "../../ui/slider/slider-track.js";
9
17
  import { Group } from "../../ui/time/time-group.js";
10
18
  import { Separator } from "../../ui/time/time-separator.js";
11
19
  import { Value } from "../../ui/time/time-value.js";
12
- import { CaptionsButton } from "../../ui/captions-button/captions-button.js";
13
- import { ErrorDialog } from "../../ui/error-dialog/error-dialog.js";
20
+ import { TimeSliderRoot } from "../../ui/time-slider/time-slider-root.js";
21
+ import { VolumeSliderRoot } from "../../ui/volume-slider/volume-slider-root.js";
14
22
  import CaptionsOffIcon from "../../icons/dist/react/minimal/captions-off.js";
15
23
  import CaptionsOnIcon from "../../icons/dist/react/minimal/captions-on.js";
16
24
  import FullscreenEnterIcon from "../../icons/dist/react/minimal/fullscreen-enter.js";
@@ -24,108 +32,83 @@ import SpinnerIcon from "../../icons/dist/react/minimal/spinner.js";
24
32
  import VolumeHighIcon from "../../icons/dist/react/minimal/volume-high.js";
25
33
  import VolumeLowIcon from "../../icons/dist/react/minimal/volume-low.js";
26
34
  import VolumeOffIcon from "../../icons/dist/react/minimal/volume-off.js";
35
+ import { CaptionsButton } from "../../ui/captions-button/captions-button.js";
36
+ import { ErrorDialog } from "../../ui/error-dialog/error-dialog.js";
37
+ import { playbackRate } from "../../skins/dist/default/video/default.tailwind.js";
38
+ import { bufferingIndicator, button, buttonGroup, controls, error, icon, iconContainer, iconFlipped, iconState, overlay, popup, root, seek, slider, time } from "../../skins/dist/default/video/minimal.tailwind.js";
27
39
  import { forwardRef } from "react";
28
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
40
+ import { jsx, jsxs } from "react/jsx-runtime";
29
41
  import { cn } from "@videojs/utils/style";
30
42
 
31
43
  //#region src/presets/video/minimal-skin.tailwind.tsx
32
44
  const SEEK_TIME = 10;
33
- const icon = cn("[grid-area:1/1] size-4.5", "drop-shadow-[0_1px_0_var(--tw-drop-shadow-color)] drop-shadow-black/25", "transition-discrete transition-[display,opacity] duration-150 ease-out");
34
- const iconHidden = "hidden opacity-0";
35
45
  const Button = forwardRef(function Button({ className, variant, ...props }, ref) {
36
46
  return /* @__PURE__ */ jsx("button", {
37
47
  ref,
38
48
  type: "button",
39
- className: cn("shrink-0 border-none cursor-pointer select-none", "outline-2 outline-transparent -outline-offset-2", "transition-[background-color,color,outline-offset] duration-150 ease-out", "disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale", variant === "icon" ? cn("grid p-2.5 bg-transparent rounded-md", "text-white", "hover:text-white/80 hover:no-underline", "focus-visible:text-white/80", "focus-visible:outline-white focus-visible:outline-offset-2", "aria-expanded:text-white/80") : cn("flex items-center justify-center py-2 px-4 bg-white rounded-lg", "text-black font-medium", "focus-visible:outline-white focus-visible:outline-offset-2"), className),
49
+ className: cn(button.base, variant === "icon" ? button.icon : button.default, className),
50
+ ...props
51
+ });
52
+ });
53
+ const SliderRoot = forwardRef(function SliderRoot({ className, ...props }, ref) {
54
+ return /* @__PURE__ */ jsx("div", {
55
+ ref,
56
+ className: cn(slider.root, className),
57
+ ...props
58
+ });
59
+ });
60
+ const SliderTrack = forwardRef(function SliderTrack({ className, ...props }, ref) {
61
+ return /* @__PURE__ */ jsx("div", {
62
+ ref,
63
+ className: cn(slider.track, className),
64
+ ...props
65
+ });
66
+ });
67
+ const SliderFill = forwardRef(function SliderFill({ type = "fill", className, ...props }, ref) {
68
+ return /* @__PURE__ */ jsx("div", {
69
+ ref,
70
+ className: cn(slider.fill.base, type === "fill" ? slider.fill.fill : slider.fill.buffer, className),
71
+ ...props
72
+ });
73
+ });
74
+ const SliderThumb = forwardRef(function SliderThumb({ persistent, className, ...props }, ref) {
75
+ return /* @__PURE__ */ jsx("div", {
76
+ ref,
77
+ className: cn(slider.thumb.base, persistent ? void 0 : slider.thumb.interactive, className),
40
78
  ...props
41
79
  });
42
80
  });
43
- function PlayButtonIcon({ state, className, ...rest }) {
44
- const { ended, paused } = state;
45
- return /* @__PURE__ */ jsxs(Fragment, { children: [
46
- /* @__PURE__ */ jsx(RestartIcon, {
47
- ...rest,
48
- className: cn(className, { [iconHidden]: !ended })
49
- }),
50
- /* @__PURE__ */ jsx(PlayIcon, {
51
- ...rest,
52
- className: cn(className, { [iconHidden]: ended || !paused })
53
- }),
54
- /* @__PURE__ */ jsx(PauseIcon, {
55
- ...rest,
56
- className: cn(className, { [iconHidden]: paused })
57
- })
58
- ] });
59
- }
60
- function MuteButtonIcon({ state, className, ...rest }) {
61
- const { muted, volumeLevel } = state;
62
- return /* @__PURE__ */ jsxs(Fragment, { children: [
63
- /* @__PURE__ */ jsx(VolumeOffIcon, {
64
- ...rest,
65
- className: cn(className, { [iconHidden]: !muted })
66
- }),
67
- /* @__PURE__ */ jsx(VolumeLowIcon, {
68
- ...rest,
69
- className: cn(className, { [iconHidden]: muted || volumeLevel !== "low" })
70
- }),
71
- /* @__PURE__ */ jsx(VolumeHighIcon, {
72
- ...rest,
73
- className: cn(className, { [iconHidden]: muted || volumeLevel === "low" })
74
- })
75
- ] });
76
- }
77
- function CaptionsButtonIcon({ state, className, ...rest }) {
78
- const { active } = state;
79
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(CaptionsOffIcon, {
80
- ...rest,
81
- className: cn(className, { [iconHidden]: active })
82
- }), /* @__PURE__ */ jsx(CaptionsOnIcon, {
83
- ...rest,
84
- className: cn(className, { [iconHidden]: !active })
85
- })] });
86
- }
87
- function FullscreenButtonIcon({ state, className, ...rest }) {
88
- const { fullscreen } = state;
89
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(FullscreenExitIcon, {
90
- ...rest,
91
- className: cn(className, { [iconHidden]: !fullscreen })
92
- }), /* @__PURE__ */ jsx(FullscreenEnterIcon, {
93
- ...rest,
94
- className: cn(className, { [iconHidden]: fullscreen })
95
- })] });
96
- }
97
81
  function MinimalVideoSkinTailwind(props) {
98
82
  const { children, className, ...rest } = props;
99
83
  return /* @__PURE__ */ jsxs(Container, {
100
- className: cn("relative isolate overflow-clip @container/media-root", "rounded-[var(--media-border-radius,0.75rem)] bg-black", "font-[Inter_Variable,Inter,ui-sans-serif,system-ui,sans-serif] text-[0.8125rem] leading-normal subpixel-antialiased", "**:box-border **:m-0", "[&_button]:font-[inherit]", "motion-safe:[interpolate-size:allow-keywords]", "after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10", "after:inset-0 after:ring-1 after:ring-inset after:ring-black/15", "dark:after:ring-white/15", "[&>video]:block [&>video]:w-full [&>video]:h-full", "[&>img]:absolute [&>img]:inset-0 [&>img]:w-full [&>img]:h-full", "[&>img]:object-cover [&>img]:pointer-events-none", "[&>img]:transition-opacity [&>img]:duration-[250ms]", "[&>img:not([data-visible])]:opacity-0", "[&:fullscreen]:rounded-none", className),
84
+ className: cn(root, className),
101
85
  ...rest,
102
86
  children: [
103
- children,
104
- /* @__PURE__ */ jsx(BufferingIndicator, { render: (props, state) => state.visible ? /* @__PURE__ */ jsx("div", {
87
+ /* @__PURE__ */ jsx(BufferingIndicator, { render: (props) => /* @__PURE__ */ jsx("div", {
105
88
  ...props,
106
- className: "absolute inset-0 flex items-center justify-center pointer-events-none z-10 text-white",
89
+ className: bufferingIndicator,
107
90
  children: /* @__PURE__ */ jsx(SpinnerIcon, { className: icon })
108
- }) : null }),
91
+ }) }),
109
92
  /* @__PURE__ */ jsx(ErrorDialog, {
110
93
  "aria-labelledby": "media-error-title",
111
94
  "aria-describedby": "media-error-description",
112
95
  render: (props, { onDismiss }) => /* @__PURE__ */ jsx("div", {
113
96
  ...props,
114
- className: "peer/error group/error absolute inset-0 z-20 items-center justify-center pointer-events-none hidden data-[visible]:flex",
97
+ className: error.root,
115
98
  children: /* @__PURE__ */ jsxs("div", {
116
- className: cn("hidden flex-col gap-3 max-w-64 p-4 text-white text-sm pointer-events-auto", "group-data-[visible]/error:flex", "text-shadow-2xs text-shadow-black/50", "transition-[display,opacity,scale,transform] duration-500 delay-100 transition-discrete", "starting:opacity-0 starting:scale-50", "ease-[linear(0,0.034_1.5%,0.763_9.7%,1.066_13.9%,1.198_19.9%,1.184_21.8%,0.963_37.5%,0.997_50.9%,1)]"),
99
+ className: error.dialog,
117
100
  children: [/* @__PURE__ */ jsxs("div", {
118
- className: "flex flex-col gap-2 py-1.5",
101
+ className: error.content,
119
102
  children: [/* @__PURE__ */ jsx("p", {
120
103
  id: "media-error-title",
121
- className: "font-semibold leading-tight",
104
+ className: error.title,
122
105
  children: "Something went wrong."
123
106
  }), /* @__PURE__ */ jsx("p", {
124
107
  id: "media-error-description",
125
108
  children: "An error occurred while trying to play the video. Please try again."
126
109
  })]
127
110
  }), /* @__PURE__ */ jsx("div", {
128
- className: "flex gap-2 *:flex-1",
111
+ className: error.actions,
129
112
  children: /* @__PURE__ */ jsx(Button, {
130
113
  onClick: onDismiss,
131
114
  children: "OK"
@@ -135,29 +118,32 @@ function MinimalVideoSkinTailwind(props) {
135
118
  })
136
119
  }),
137
120
  /* @__PURE__ */ jsxs(ControlsRoot, {
138
- className: cn("peer/controls", "absolute @container/media-controls bottom-0 inset-x-0", "pt-8 px-1.5 pb-1.5 flex items-center gap-2", "text-white z-10", "will-change-[translate,filter,opacity]", "transition-[translate,filter,opacity] ease-out", "delay-0 duration-75", "not-data-[visible]:opacity-0 not-data-[visible]:translate-y-full", "not-data-[visible]:blur-[8px] not-data-[visible]:pointer-events-none", "not-data-[visible]:delay-500 not-data-[visible]:duration-500", "motion-reduce:not-data-[visible]:duration-100", "motion-reduce:not-data-[visible]:translate-y-0", "motion-reduce:not-data-[visible]:blur-none motion-reduce:not-data-[visible]:scale-100", "@sm/media-root:pt-10 @sm/media-root:px-3 @sm/media-root:pb-3", "@sm/media-root:gap-3.5"),
121
+ "data-controls": "",
122
+ className: controls,
139
123
  children: [
140
124
  /* @__PURE__ */ jsxs("span", {
141
- className: cn("flex items-center gap-[0.075rem]", "@2xl/media-root:gap-0.5"),
125
+ className: buttonGroup,
142
126
  children: [
143
- /* @__PURE__ */ jsx(PlayButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
127
+ /* @__PURE__ */ jsx(PlayButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
144
128
  variant: "icon",
145
129
  ...props,
146
- children: /* @__PURE__ */ jsx(PlayButtonIcon, {
147
- state,
148
- className: icon
149
- })
130
+ className: iconState.play.button,
131
+ children: [
132
+ /* @__PURE__ */ jsx(RestartIcon, { className: cn(icon, iconState.play.restart) }),
133
+ /* @__PURE__ */ jsx(PlayIcon, { className: cn(icon, iconState.play.play) }),
134
+ /* @__PURE__ */ jsx(PauseIcon, { className: cn(icon, iconState.play.pause) })
135
+ ]
150
136
  }) }),
151
137
  /* @__PURE__ */ jsx(SeekButton, {
152
138
  seconds: -SEEK_TIME,
153
139
  render: (props) => /* @__PURE__ */ jsx(Button, {
154
140
  variant: "icon",
155
141
  ...props,
156
- className: "@max-md/media-controls:hidden",
142
+ className: seek.button,
157
143
  children: /* @__PURE__ */ jsxs("span", {
158
- className: "relative",
159
- children: [/* @__PURE__ */ jsx(SeekIcon, { className: cn(icon, "[scale:-1_1]") }), /* @__PURE__ */ jsx("span", {
160
- className: "absolute left-0 -bottom-0.75 text-[0.75em] font-[480] tabular-nums",
144
+ className: iconContainer,
145
+ children: [/* @__PURE__ */ jsx(SeekIcon, { className: cn(icon, iconFlipped) }), /* @__PURE__ */ jsx("span", {
146
+ className: cn(seek.label, seek.labelBackward),
161
147
  children: SEEK_TIME
162
148
  })]
163
149
  })
@@ -168,11 +154,11 @@ function MinimalVideoSkinTailwind(props) {
168
154
  render: (props) => /* @__PURE__ */ jsx(Button, {
169
155
  variant: "icon",
170
156
  ...props,
171
- className: "@max-md/media-controls:hidden",
157
+ className: seek.button,
172
158
  children: /* @__PURE__ */ jsxs("span", {
173
- className: "relative",
159
+ className: iconContainer,
174
160
  children: [/* @__PURE__ */ jsx(SeekIcon, { className: icon }), /* @__PURE__ */ jsx("span", {
175
- className: "absolute right-0 -bottom-0.75 text-[0.75em] font-[480] tabular-nums",
161
+ className: cn(seek.label, seek.labelForward),
176
162
  children: SEEK_TIME
177
163
  })]
178
164
  })
@@ -181,59 +167,92 @@ function MinimalVideoSkinTailwind(props) {
181
167
  ]
182
168
  }),
183
169
  /* @__PURE__ */ jsxs("span", {
184
- className: cn("flex flex-row-reverse items-center flex-1 gap-3", "@md/media-controls:flex-row"),
170
+ className: time.controls,
185
171
  children: [/* @__PURE__ */ jsxs(Group, {
186
- className: "flex items-center gap-1",
172
+ className: time.group,
187
173
  children: [
188
174
  /* @__PURE__ */ jsx(Value, {
189
175
  type: "current",
190
- className: cn("hidden tabular-nums text-shadow-2xs text-shadow-black/25", "@md/media-controls:inline")
176
+ className: time.current
191
177
  }),
192
- /* @__PURE__ */ jsx(Separator, { className: cn("hidden", "@md/media-controls:inline @md/media-controls:text-white/50") }),
178
+ /* @__PURE__ */ jsx(Separator, { className: time.separator }),
193
179
  /* @__PURE__ */ jsx(Value, {
194
180
  type: "duration",
195
- className: cn("tabular-nums text-shadow-2xs text-shadow-black/25", "@md/media-controls:text-white/50")
181
+ className: time.duration
196
182
  })
197
183
  ]
198
- }), /* @__PURE__ */ jsx("span", { className: "flex-1 h-[3px] rounded-full bg-white/20" })]
184
+ }), /* @__PURE__ */ jsxs(TimeSliderRoot, {
185
+ render: (props) => /* @__PURE__ */ jsx(SliderRoot, { ...props }),
186
+ children: [/* @__PURE__ */ jsxs(SliderTrack$1, {
187
+ render: (props) => /* @__PURE__ */ jsx(SliderTrack, { ...props }),
188
+ children: [/* @__PURE__ */ jsx(SliderFill$1, { render: (props) => /* @__PURE__ */ jsx(SliderFill, { ...props }) }), /* @__PURE__ */ jsx(SliderBuffer, { render: (props) => /* @__PURE__ */ jsx(SliderFill, {
189
+ type: "buffer",
190
+ ...props
191
+ }) })]
192
+ }), /* @__PURE__ */ jsx(SliderThumb$1, { render: (props) => /* @__PURE__ */ jsx(SliderThumb, { ...props }) })]
193
+ })]
199
194
  }),
200
195
  /* @__PURE__ */ jsxs("span", {
201
- className: cn("flex items-center gap-[0.075rem]", "@2xl/media-root:gap-0.5"),
196
+ className: buttonGroup,
202
197
  children: [
203
- /* @__PURE__ */ jsx(MuteButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
198
+ /* @__PURE__ */ jsx(PlaybackRateButton, { render: (props) => /* @__PURE__ */ jsx(Button, {
204
199
  variant: "icon",
205
200
  ...props,
206
- children: /* @__PURE__ */ jsx(MuteButtonIcon, {
207
- state,
208
- className: icon
209
- })
201
+ className: playbackRate.button
210
202
  }) }),
211
- /* @__PURE__ */ jsx(CaptionsButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
203
+ /* @__PURE__ */ jsxs(PopoverRoot, {
204
+ openOnHover: true,
205
+ delay: 200,
206
+ closeDelay: 100,
207
+ side: "top",
208
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, { render: /* @__PURE__ */ jsx(MuteButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
209
+ variant: "icon",
210
+ ...props,
211
+ className: iconState.mute.button,
212
+ children: [
213
+ /* @__PURE__ */ jsx(VolumeOffIcon, { className: cn(icon, iconState.mute.volumeOff) }),
214
+ /* @__PURE__ */ jsx(VolumeLowIcon, { className: cn(icon, iconState.mute.volumeLow) }),
215
+ /* @__PURE__ */ jsx(VolumeHighIcon, { className: cn(icon, iconState.mute.volumeHigh) })
216
+ ]
217
+ }) }) }), /* @__PURE__ */ jsx(PopoverPopup, {
218
+ className: cn(popup.base, popup.volume),
219
+ children: /* @__PURE__ */ jsxs(VolumeSliderRoot, {
220
+ orientation: "vertical",
221
+ thumbAlignment: "edge",
222
+ render: (props) => /* @__PURE__ */ jsx(SliderRoot, { ...props }),
223
+ children: [/* @__PURE__ */ jsx(SliderTrack$1, {
224
+ render: (props) => /* @__PURE__ */ jsx(SliderTrack, { ...props }),
225
+ children: /* @__PURE__ */ jsx(SliderFill$1, { render: (props) => /* @__PURE__ */ jsx(SliderFill, { ...props }) })
226
+ }), /* @__PURE__ */ jsx(SliderThumb$1, { render: (props) => /* @__PURE__ */ jsx(SliderThumb, {
227
+ persistent: true,
228
+ ...props
229
+ }) })]
230
+ })
231
+ })]
232
+ }),
233
+ /* @__PURE__ */ jsx(CaptionsButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
212
234
  variant: "icon",
213
235
  ...props,
214
- children: /* @__PURE__ */ jsx(CaptionsButtonIcon, {
215
- state,
216
- className: icon
217
- })
236
+ className: iconState.captions.button,
237
+ children: [/* @__PURE__ */ jsx(CaptionsOffIcon, { className: cn(icon, iconState.captions.off) }), /* @__PURE__ */ jsx(CaptionsOnIcon, { className: cn(icon, iconState.captions.on) })]
218
238
  }) }),
219
239
  /* @__PURE__ */ jsx(PiPButton, { render: (props) => /* @__PURE__ */ jsx(Button, {
220
240
  variant: "icon",
221
241
  ...props,
222
242
  children: /* @__PURE__ */ jsx(PipIcon, { className: icon })
223
243
  }) }),
224
- /* @__PURE__ */ jsx(FullscreenButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
244
+ /* @__PURE__ */ jsx(FullscreenButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
225
245
  variant: "icon",
226
246
  ...props,
227
- children: /* @__PURE__ */ jsx(FullscreenButtonIcon, {
228
- state,
229
- className: icon
230
- })
247
+ className: iconState.fullscreen.button,
248
+ children: [/* @__PURE__ */ jsx(FullscreenEnterIcon, { className: cn(icon, iconState.fullscreen.enter) }), /* @__PURE__ */ jsx(FullscreenExitIcon, { className: cn(icon, iconState.fullscreen.exit) })]
231
249
  }) })
232
250
  ]
233
251
  })
234
252
  ]
235
253
  }),
236
- /* @__PURE__ */ jsx("div", { className: cn("absolute inset-0 flex flex-col items-start", "pointer-events-none rounded-[inherit]", "opacity-0", "bg-gradient-to-t from-black/70 via-black/50 via-[7.5rem] to-transparent", "backdrop-blur-[0px] backdrop-saturate-120 backdrop-brightness-90", "transition-[opacity,backdrop-filter] ease-out", "duration-500 delay-500", "peer-data-[visible]/controls:opacity-100", "peer-data-[visible]/controls:duration-150", "peer-data-[visible]/controls:delay-0", "peer-data-[visible]/error:opacity-100", "peer-data-[visible]/error:duration-150", "peer-data-[visible]/error:delay-0", "peer-data-[visible]/error:backdrop-blur-[8px]", "motion-reduce:duration-100") })
254
+ /* @__PURE__ */ jsx("div", { className: overlay }),
255
+ children
237
256
  ]
238
257
  });
239
258
  }