@videojs/react 10.0.0-alpha.3 → 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 (382) hide show
  1. package/dist/default/icons/dist/react/default/captions-off.js +66 -0
  2. package/dist/default/icons/dist/react/default/captions-off.js.map +1 -0
  3. package/dist/default/icons/dist/react/default/captions-on.js +19 -0
  4. package/dist/default/icons/dist/react/default/captions-on.js.map +1 -0
  5. package/dist/default/icons/dist/react/default/fullscreen-enter.js +19 -0
  6. package/dist/default/icons/dist/react/default/fullscreen-enter.js.map +1 -0
  7. package/dist/default/icons/dist/react/default/fullscreen-exit.js +19 -0
  8. package/dist/default/icons/dist/react/default/fullscreen-exit.js.map +1 -0
  9. package/dist/default/icons/dist/react/default/pause.js +30 -0
  10. package/dist/default/icons/dist/react/default/pause.js.map +1 -0
  11. package/dist/default/icons/dist/react/default/pip.js +26 -0
  12. package/dist/default/icons/dist/react/default/pip.js.map +1 -0
  13. package/dist/default/icons/dist/react/default/play.js +19 -0
  14. package/dist/default/icons/dist/react/default/play.js.map +1 -0
  15. package/dist/default/icons/dist/react/default/restart.js +22 -0
  16. package/dist/default/icons/dist/react/default/restart.js.map +1 -0
  17. package/dist/default/icons/dist/react/default/seek.js +19 -0
  18. package/dist/default/icons/dist/react/default/seek.js.map +1 -0
  19. package/dist/default/icons/dist/react/default/spinner.js +149 -0
  20. package/dist/default/icons/dist/react/default/spinner.js.map +1 -0
  21. package/dist/default/icons/dist/react/default/volume-high.js +22 -0
  22. package/dist/default/icons/dist/react/default/volume-high.js.map +1 -0
  23. package/dist/default/icons/dist/react/default/volume-low.js +19 -0
  24. package/dist/default/icons/dist/react/default/volume-low.js.map +1 -0
  25. package/dist/default/icons/dist/react/default/volume-off.js +19 -0
  26. package/dist/default/icons/dist/react/default/volume-off.js.map +1 -0
  27. package/dist/default/icons/dist/react/minimal/captions-off.js +66 -0
  28. package/dist/default/icons/dist/react/minimal/captions-off.js.map +1 -0
  29. package/dist/default/icons/dist/react/minimal/captions-on.js +19 -0
  30. package/dist/default/icons/dist/react/minimal/captions-on.js.map +1 -0
  31. package/dist/default/icons/dist/react/minimal/fullscreen-enter.js +29 -0
  32. package/dist/default/icons/dist/react/minimal/fullscreen-enter.js.map +1 -0
  33. package/dist/default/icons/dist/react/minimal/fullscreen-exit.js +29 -0
  34. package/dist/default/icons/dist/react/minimal/fullscreen-exit.js.map +1 -0
  35. package/dist/default/icons/dist/react/minimal/pause.js +30 -0
  36. package/dist/default/icons/dist/react/minimal/pause.js.map +1 -0
  37. package/dist/default/icons/dist/react/minimal/pip.js +26 -0
  38. package/dist/default/icons/dist/react/minimal/pip.js.map +1 -0
  39. package/dist/default/icons/dist/react/minimal/play.js +19 -0
  40. package/dist/default/icons/dist/react/minimal/play.js.map +1 -0
  41. package/dist/default/icons/dist/react/minimal/restart.js +22 -0
  42. package/dist/default/icons/dist/react/minimal/restart.js.map +1 -0
  43. package/dist/default/icons/dist/react/minimal/seek.js +19 -0
  44. package/dist/default/icons/dist/react/minimal/seek.js.map +1 -0
  45. package/dist/default/icons/dist/react/minimal/spinner.js +149 -0
  46. package/dist/default/icons/dist/react/minimal/spinner.js.map +1 -0
  47. package/dist/default/icons/dist/react/minimal/volume-high.js +22 -0
  48. package/dist/default/icons/dist/react/minimal/volume-high.js.map +1 -0
  49. package/dist/default/icons/dist/react/minimal/volume-low.js +19 -0
  50. package/dist/default/icons/dist/react/minimal/volume-low.js.map +1 -0
  51. package/dist/default/icons/dist/react/minimal/volume-off.js +19 -0
  52. package/dist/default/icons/dist/react/minimal/volume-off.js.map +1 -0
  53. package/dist/default/index.js +10 -2
  54. package/dist/default/player/context.js +11 -1
  55. package/dist/default/player/context.js.map +1 -1
  56. package/dist/default/presets/audio/index.js +2 -1
  57. package/dist/default/presets/audio/skin.css +1 -0
  58. package/dist/default/presets/background/index.js +2 -1
  59. package/dist/default/presets/background/skin.css +21 -2
  60. package/dist/default/presets/background/skin.js +7 -2
  61. package/dist/default/presets/background/skin.js.map +1 -1
  62. package/dist/default/presets/video/index.js +2 -1
  63. package/dist/default/presets/video/minimal-skin.css +178 -53
  64. package/dist/default/presets/video/minimal-skin.js +74 -89
  65. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  66. package/dist/default/presets/video/minimal-skin.tailwind.js +137 -106
  67. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  68. package/dist/default/presets/video/skin.css +179 -54
  69. package/dist/default/presets/video/skin.js +74 -89
  70. package/dist/default/presets/video/skin.js.map +1 -1
  71. package/dist/default/presets/video/skin.tailwind.js +134 -105
  72. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  73. package/dist/default/skins/dist/default/video/default.tailwind.js +90 -0
  74. package/dist/default/skins/dist/default/video/default.tailwind.js.map +1 -0
  75. package/dist/default/skins/dist/default/video/minimal.tailwind.js +86 -0
  76. package/dist/default/skins/dist/default/video/minimal.tailwind.js.map +1 -0
  77. package/dist/default/ui/captions-button/captions-button.js +1 -16
  78. package/dist/default/ui/captions-button/captions-button.js.map +1 -1
  79. package/dist/default/ui/controls/context.js +16 -0
  80. package/dist/default/ui/controls/context.js.map +1 -0
  81. package/dist/default/ui/controls/controls-group.js +4 -1
  82. package/dist/default/ui/controls/controls-group.js.map +1 -1
  83. package/dist/default/ui/controls/controls-root.js +19 -10
  84. package/dist/default/ui/controls/controls-root.js.map +1 -1
  85. package/dist/default/ui/create-context-part.js +29 -0
  86. package/dist/default/ui/create-context-part.js.map +1 -0
  87. package/dist/default/ui/create-media-button.js +52 -0
  88. package/dist/default/ui/create-media-button.js.map +1 -0
  89. package/dist/default/ui/fullscreen-button/fullscreen-button.js +8 -33
  90. package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  91. package/dist/default/ui/hooks/use-slider.js +75 -0
  92. package/dist/default/ui/hooks/use-slider.js.map +1 -0
  93. package/dist/default/ui/mute-button/mute-button.js +8 -36
  94. package/dist/default/ui/mute-button/mute-button.js.map +1 -1
  95. package/dist/default/ui/pip-button/pip-button.js +8 -33
  96. package/dist/default/ui/pip-button/pip-button.js.map +1 -1
  97. package/dist/default/ui/play-button/play-button.js +7 -33
  98. package/dist/default/ui/play-button/play-button.js.map +1 -1
  99. package/dist/default/ui/playback-rate-button/index.js +3 -0
  100. package/dist/default/ui/playback-rate-button/playback-rate-button.js +34 -0
  101. package/dist/default/ui/playback-rate-button/playback-rate-button.js.map +1 -0
  102. package/dist/default/ui/popover/context.js +16 -0
  103. package/dist/default/ui/popover/context.js.map +1 -0
  104. package/dist/default/ui/popover/index.js +4 -0
  105. package/dist/default/ui/popover/index.parts.js +17 -0
  106. package/dist/default/ui/popover/index.parts.js.map +1 -0
  107. package/dist/default/ui/popover/popover-arrow.js +17 -0
  108. package/dist/default/ui/popover/popover-arrow.js.map +1 -0
  109. package/dist/default/ui/popover/popover-popup.js +94 -0
  110. package/dist/default/ui/popover/popover-popup.js.map +1 -0
  111. package/dist/default/ui/popover/popover-root.js +69 -0
  112. package/dist/default/ui/popover/popover-root.js.map +1 -0
  113. package/dist/default/ui/popover/popover-trigger.js +43 -0
  114. package/dist/default/ui/popover/popover-trigger.js.map +1 -0
  115. package/dist/default/ui/poster/poster.js +2 -1
  116. package/dist/default/ui/poster/poster.js.map +1 -1
  117. package/dist/default/ui/seek-button/seek-button.js +7 -34
  118. package/dist/default/ui/seek-button/seek-button.js.map +1 -1
  119. package/dist/default/ui/slider/context.js +22 -0
  120. package/dist/default/ui/slider/context.js.map +1 -0
  121. package/dist/default/ui/slider/index.js +3 -0
  122. package/dist/default/ui/slider/index.parts.js +21 -0
  123. package/dist/default/ui/slider/index.parts.js.map +1 -0
  124. package/dist/default/ui/slider/slider-buffer.js +16 -0
  125. package/dist/default/ui/slider/slider-buffer.js.map +1 -0
  126. package/dist/default/ui/slider/slider-fill.js +16 -0
  127. package/dist/default/ui/slider/slider-fill.js.map +1 -0
  128. package/dist/default/ui/slider/slider-root.js +71 -0
  129. package/dist/default/ui/slider/slider-root.js.map +1 -0
  130. package/dist/default/ui/slider/slider-thumb.js +32 -0
  131. package/dist/default/ui/slider/slider-thumb.js.map +1 -0
  132. package/dist/default/ui/slider/slider-track.js +16 -0
  133. package/dist/default/ui/slider/slider-track.js.map +1 -0
  134. package/dist/default/ui/slider/slider-value.js +32 -0
  135. package/dist/default/ui/slider/slider-value.js.map +1 -0
  136. package/dist/default/ui/thumbnail/thumbnail.js +87 -0
  137. package/dist/default/ui/thumbnail/thumbnail.js.map +1 -0
  138. package/dist/default/ui/time/time-value.js +2 -1
  139. package/dist/default/ui/time/time-value.js.map +1 -1
  140. package/dist/default/ui/time-slider/index.js +3 -0
  141. package/dist/default/ui/time-slider/index.parts.js +21 -0
  142. package/dist/default/ui/time-slider/index.parts.js.map +1 -0
  143. package/dist/default/ui/time-slider/time-slider-root.js +96 -0
  144. package/dist/default/ui/time-slider/time-slider-root.js.map +1 -0
  145. package/dist/default/ui/volume-slider/index.js +3 -0
  146. package/dist/default/ui/volume-slider/index.parts.js +19 -0
  147. package/dist/default/ui/volume-slider/index.parts.js.map +1 -0
  148. package/dist/default/ui/volume-slider/volume-slider-root.js +86 -0
  149. package/dist/default/ui/volume-slider/volume-slider-root.js.map +1 -0
  150. package/dist/default/utils/use-force-render.js +13 -0
  151. package/dist/default/utils/use-force-render.js.map +1 -0
  152. package/dist/default/utils/use-latest-ref.js +20 -0
  153. package/dist/default/utils/use-latest-ref.js.map +1 -0
  154. package/dist/default/utils/use-safe-id.js +22 -0
  155. package/dist/default/utils/use-safe-id.js.map +1 -0
  156. package/dist/dev/icons/dist/react/default/captions-off.js +66 -0
  157. package/dist/dev/icons/dist/react/default/captions-off.js.map +1 -0
  158. package/dist/dev/icons/dist/react/default/captions-on.js +19 -0
  159. package/dist/dev/icons/dist/react/default/captions-on.js.map +1 -0
  160. package/dist/dev/icons/dist/react/default/fullscreen-enter.js +19 -0
  161. package/dist/dev/icons/dist/react/default/fullscreen-enter.js.map +1 -0
  162. package/dist/dev/icons/dist/react/default/fullscreen-exit.js +19 -0
  163. package/dist/dev/icons/dist/react/default/fullscreen-exit.js.map +1 -0
  164. package/dist/dev/icons/dist/react/default/pause.js +30 -0
  165. package/dist/dev/icons/dist/react/default/pause.js.map +1 -0
  166. package/dist/dev/icons/dist/react/default/pip.js +26 -0
  167. package/dist/dev/icons/dist/react/default/pip.js.map +1 -0
  168. package/dist/dev/icons/dist/react/default/play.js +19 -0
  169. package/dist/dev/icons/dist/react/default/play.js.map +1 -0
  170. package/dist/dev/icons/dist/react/default/restart.js +22 -0
  171. package/dist/dev/icons/dist/react/default/restart.js.map +1 -0
  172. package/dist/dev/icons/dist/react/default/seek.js +19 -0
  173. package/dist/dev/icons/dist/react/default/seek.js.map +1 -0
  174. package/dist/dev/icons/dist/react/default/spinner.js +149 -0
  175. package/dist/dev/icons/dist/react/default/spinner.js.map +1 -0
  176. package/dist/dev/icons/dist/react/default/volume-high.js +22 -0
  177. package/dist/dev/icons/dist/react/default/volume-high.js.map +1 -0
  178. package/dist/dev/icons/dist/react/default/volume-low.js +19 -0
  179. package/dist/dev/icons/dist/react/default/volume-low.js.map +1 -0
  180. package/dist/dev/icons/dist/react/default/volume-off.js +19 -0
  181. package/dist/dev/icons/dist/react/default/volume-off.js.map +1 -0
  182. package/dist/dev/icons/dist/react/minimal/captions-off.js +66 -0
  183. package/dist/dev/icons/dist/react/minimal/captions-off.js.map +1 -0
  184. package/dist/dev/icons/dist/react/minimal/captions-on.js +19 -0
  185. package/dist/dev/icons/dist/react/minimal/captions-on.js.map +1 -0
  186. package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js +29 -0
  187. package/dist/dev/icons/dist/react/minimal/fullscreen-enter.js.map +1 -0
  188. package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js +29 -0
  189. package/dist/dev/icons/dist/react/minimal/fullscreen-exit.js.map +1 -0
  190. package/dist/dev/icons/dist/react/minimal/pause.js +30 -0
  191. package/dist/dev/icons/dist/react/minimal/pause.js.map +1 -0
  192. package/dist/dev/icons/dist/react/minimal/pip.js +26 -0
  193. package/dist/dev/icons/dist/react/minimal/pip.js.map +1 -0
  194. package/dist/dev/icons/dist/react/minimal/play.js +19 -0
  195. package/dist/dev/icons/dist/react/minimal/play.js.map +1 -0
  196. package/dist/dev/icons/dist/react/minimal/restart.js +22 -0
  197. package/dist/dev/icons/dist/react/minimal/restart.js.map +1 -0
  198. package/dist/dev/icons/dist/react/minimal/seek.js +19 -0
  199. package/dist/dev/icons/dist/react/minimal/seek.js.map +1 -0
  200. package/dist/dev/icons/dist/react/minimal/spinner.js +149 -0
  201. package/dist/dev/icons/dist/react/minimal/spinner.js.map +1 -0
  202. package/dist/dev/icons/dist/react/minimal/volume-high.js +22 -0
  203. package/dist/dev/icons/dist/react/minimal/volume-high.js.map +1 -0
  204. package/dist/dev/icons/dist/react/minimal/volume-low.js +19 -0
  205. package/dist/dev/icons/dist/react/minimal/volume-low.js.map +1 -0
  206. package/dist/dev/icons/dist/react/minimal/volume-off.js +19 -0
  207. package/dist/dev/icons/dist/react/minimal/volume-off.js.map +1 -0
  208. package/dist/dev/index.d.ts +20 -2
  209. package/dist/dev/index.js +10 -2
  210. package/dist/dev/player/context.d.ts.map +1 -1
  211. package/dist/dev/player/context.js +11 -1
  212. package/dist/dev/player/context.js.map +1 -1
  213. package/dist/dev/presets/audio/index.d.ts +2 -1
  214. package/dist/dev/presets/audio/index.js +2 -1
  215. package/dist/dev/presets/audio/skin.css +1 -0
  216. package/dist/dev/presets/background/index.d.ts +2 -1
  217. package/dist/dev/presets/background/index.js +2 -1
  218. package/dist/dev/presets/background/skin.css +21 -2
  219. package/dist/dev/presets/background/skin.d.ts.map +1 -1
  220. package/dist/dev/presets/background/skin.js +7 -2
  221. package/dist/dev/presets/background/skin.js.map +1 -1
  222. package/dist/dev/presets/video/index.d.ts +2 -1
  223. package/dist/dev/presets/video/index.js +2 -1
  224. package/dist/dev/presets/video/minimal-skin.css +178 -53
  225. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
  226. package/dist/dev/presets/video/minimal-skin.js +74 -89
  227. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  228. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
  229. package/dist/dev/presets/video/minimal-skin.tailwind.js +137 -106
  230. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  231. package/dist/dev/presets/video/skin.css +179 -54
  232. package/dist/dev/presets/video/skin.d.ts.map +1 -1
  233. package/dist/dev/presets/video/skin.js +74 -89
  234. package/dist/dev/presets/video/skin.js.map +1 -1
  235. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
  236. package/dist/dev/presets/video/skin.tailwind.js +134 -105
  237. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  238. package/dist/dev/skins/dist/default/video/default.tailwind.js +90 -0
  239. package/dist/dev/skins/dist/default/video/default.tailwind.js.map +1 -0
  240. package/dist/dev/skins/dist/default/video/minimal.tailwind.js +86 -0
  241. package/dist/dev/skins/dist/default/video/minimal.tailwind.js.map +1 -0
  242. package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -1
  243. package/dist/dev/ui/captions-button/captions-button.js +1 -16
  244. package/dist/dev/ui/captions-button/captions-button.js.map +1 -1
  245. package/dist/dev/ui/controls/context.js +16 -0
  246. package/dist/dev/ui/controls/context.js.map +1 -0
  247. package/dist/dev/ui/controls/controls-group.d.ts +2 -2
  248. package/dist/dev/ui/controls/controls-group.d.ts.map +1 -1
  249. package/dist/dev/ui/controls/controls-group.js +4 -1
  250. package/dist/dev/ui/controls/controls-group.js.map +1 -1
  251. package/dist/dev/ui/controls/controls-root.d.ts.map +1 -1
  252. package/dist/dev/ui/controls/controls-root.js +19 -10
  253. package/dist/dev/ui/controls/controls-root.js.map +1 -1
  254. package/dist/dev/ui/create-context-part.js +29 -0
  255. package/dist/dev/ui/create-context-part.js.map +1 -0
  256. package/dist/dev/ui/create-media-button.js +55 -0
  257. package/dist/dev/ui/create-media-button.js.map +1 -0
  258. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts +2 -1
  259. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -1
  260. package/dist/dev/ui/fullscreen-button/fullscreen-button.js +9 -37
  261. package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  262. package/dist/dev/ui/hooks/use-slider.d.ts +36 -0
  263. package/dist/dev/ui/hooks/use-slider.d.ts.map +1 -0
  264. package/dist/dev/ui/hooks/use-slider.js +75 -0
  265. package/dist/dev/ui/hooks/use-slider.js.map +1 -0
  266. package/dist/dev/ui/mute-button/mute-button.d.ts +2 -4
  267. package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -1
  268. package/dist/dev/ui/mute-button/mute-button.js +9 -40
  269. package/dist/dev/ui/mute-button/mute-button.js.map +1 -1
  270. package/dist/dev/ui/pip-button/pip-button.d.ts +2 -1
  271. package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -1
  272. package/dist/dev/ui/pip-button/pip-button.js +9 -37
  273. package/dist/dev/ui/pip-button/pip-button.js.map +1 -1
  274. package/dist/dev/ui/play-button/play-button.d.ts +1 -1
  275. package/dist/dev/ui/play-button/play-button.d.ts.map +1 -1
  276. package/dist/dev/ui/play-button/play-button.js +8 -37
  277. package/dist/dev/ui/play-button/play-button.js.map +1 -1
  278. package/dist/dev/ui/playback-rate-button/index.d.ts +2 -0
  279. package/dist/dev/ui/playback-rate-button/index.js +3 -0
  280. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts +30 -0
  281. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts.map +1 -0
  282. package/dist/dev/ui/playback-rate-button/playback-rate-button.js +34 -0
  283. package/dist/dev/ui/playback-rate-button/playback-rate-button.js.map +1 -0
  284. package/dist/dev/ui/popover/context.d.ts +17 -0
  285. package/dist/dev/ui/popover/context.d.ts.map +1 -0
  286. package/dist/dev/ui/popover/context.js +16 -0
  287. package/dist/dev/ui/popover/context.js.map +1 -0
  288. package/dist/dev/ui/popover/index.d.ts +3 -0
  289. package/dist/dev/ui/popover/index.js +4 -0
  290. package/dist/dev/ui/popover/index.parts.d.ts +12 -0
  291. package/dist/dev/ui/popover/index.parts.d.ts.map +1 -0
  292. package/dist/dev/ui/popover/index.parts.js +17 -0
  293. package/dist/dev/ui/popover/index.parts.js.map +1 -0
  294. package/dist/dev/ui/popover/popover-arrow.d.ts +15 -0
  295. package/dist/dev/ui/popover/popover-arrow.d.ts.map +1 -0
  296. package/dist/dev/ui/popover/popover-arrow.js +17 -0
  297. package/dist/dev/ui/popover/popover-arrow.js.map +1 -0
  298. package/dist/dev/ui/popover/popover-popup.d.ts +15 -0
  299. package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -0
  300. package/dist/dev/ui/popover/popover-popup.js +94 -0
  301. package/dist/dev/ui/popover/popover-popup.js.map +1 -0
  302. package/dist/dev/ui/popover/popover-root.d.ts +29 -0
  303. package/dist/dev/ui/popover/popover-root.d.ts.map +1 -0
  304. package/dist/dev/ui/popover/popover-root.js +69 -0
  305. package/dist/dev/ui/popover/popover-root.js.map +1 -0
  306. package/dist/dev/ui/popover/popover-trigger.d.ts +15 -0
  307. package/dist/dev/ui/popover/popover-trigger.d.ts.map +1 -0
  308. package/dist/dev/ui/popover/popover-trigger.js +43 -0
  309. package/dist/dev/ui/popover/popover-trigger.js.map +1 -0
  310. package/dist/dev/ui/poster/poster.d.ts.map +1 -1
  311. package/dist/dev/ui/poster/poster.js +2 -1
  312. package/dist/dev/ui/poster/poster.js.map +1 -1
  313. package/dist/dev/ui/seek-button/seek-button.d.ts +1 -1
  314. package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -1
  315. package/dist/dev/ui/seek-button/seek-button.js +8 -38
  316. package/dist/dev/ui/seek-button/seek-button.js.map +1 -1
  317. package/dist/dev/ui/slider/context.js +22 -0
  318. package/dist/dev/ui/slider/context.js.map +1 -0
  319. package/dist/dev/ui/slider/index.d.ts +2 -0
  320. package/dist/dev/ui/slider/index.js +3 -0
  321. package/dist/dev/ui/slider/index.parts.d.ts +14 -0
  322. package/dist/dev/ui/slider/index.parts.d.ts.map +1 -0
  323. package/dist/dev/ui/slider/index.parts.js +21 -0
  324. package/dist/dev/ui/slider/index.parts.js.map +1 -0
  325. package/dist/dev/ui/slider/slider-buffer.d.ts +14 -0
  326. package/dist/dev/ui/slider/slider-buffer.d.ts.map +1 -0
  327. package/dist/dev/ui/slider/slider-buffer.js +16 -0
  328. package/dist/dev/ui/slider/slider-buffer.js.map +1 -0
  329. package/dist/dev/ui/slider/slider-fill.d.ts +14 -0
  330. package/dist/dev/ui/slider/slider-fill.d.ts.map +1 -0
  331. package/dist/dev/ui/slider/slider-fill.js +16 -0
  332. package/dist/dev/ui/slider/slider-fill.js.map +1 -0
  333. package/dist/dev/ui/slider/slider-root.d.ts +19 -0
  334. package/dist/dev/ui/slider/slider-root.d.ts.map +1 -0
  335. package/dist/dev/ui/slider/slider-root.js +71 -0
  336. package/dist/dev/ui/slider/slider-root.js.map +1 -0
  337. package/dist/dev/ui/slider/slider-thumb.d.ts +14 -0
  338. package/dist/dev/ui/slider/slider-thumb.d.ts.map +1 -0
  339. package/dist/dev/ui/slider/slider-thumb.js +32 -0
  340. package/dist/dev/ui/slider/slider-thumb.js.map +1 -0
  341. package/dist/dev/ui/slider/slider-track.d.ts +14 -0
  342. package/dist/dev/ui/slider/slider-track.d.ts.map +1 -0
  343. package/dist/dev/ui/slider/slider-track.js +16 -0
  344. package/dist/dev/ui/slider/slider-track.js.map +1 -0
  345. package/dist/dev/ui/slider/slider-value.d.ts +19 -0
  346. package/dist/dev/ui/slider/slider-value.d.ts.map +1 -0
  347. package/dist/dev/ui/slider/slider-value.js +32 -0
  348. package/dist/dev/ui/slider/slider-value.js.map +1 -0
  349. package/dist/dev/ui/thumbnail/thumbnail.d.ts +17 -0
  350. package/dist/dev/ui/thumbnail/thumbnail.d.ts.map +1 -0
  351. package/dist/dev/ui/thumbnail/thumbnail.js +87 -0
  352. package/dist/dev/ui/thumbnail/thumbnail.js.map +1 -0
  353. package/dist/dev/ui/time/time-value.d.ts.map +1 -1
  354. package/dist/dev/ui/time/time-value.js +2 -1
  355. package/dist/dev/ui/time/time-value.js.map +1 -1
  356. package/dist/dev/ui/time-slider/index.d.ts +2 -0
  357. package/dist/dev/ui/time-slider/index.js +3 -0
  358. package/dist/dev/ui/time-slider/index.parts.d.ts +15 -0
  359. package/dist/dev/ui/time-slider/index.parts.d.ts.map +1 -0
  360. package/dist/dev/ui/time-slider/index.parts.js +21 -0
  361. package/dist/dev/ui/time-slider/index.parts.js.map +1 -0
  362. package/dist/dev/ui/time-slider/time-slider-root.d.ts +17 -0
  363. package/dist/dev/ui/time-slider/time-slider-root.d.ts.map +1 -0
  364. package/dist/dev/ui/time-slider/time-slider-root.js +99 -0
  365. package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -0
  366. package/dist/dev/ui/volume-slider/index.d.ts +2 -0
  367. package/dist/dev/ui/volume-slider/index.js +3 -0
  368. package/dist/dev/ui/volume-slider/index.parts.d.ts +14 -0
  369. package/dist/dev/ui/volume-slider/index.parts.d.ts.map +1 -0
  370. package/dist/dev/ui/volume-slider/index.parts.js +19 -0
  371. package/dist/dev/ui/volume-slider/index.parts.js.map +1 -0
  372. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts +17 -0
  373. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts.map +1 -0
  374. package/dist/dev/ui/volume-slider/volume-slider-root.js +89 -0
  375. package/dist/dev/ui/volume-slider/volume-slider-root.js.map +1 -0
  376. package/dist/dev/utils/use-force-render.js +13 -0
  377. package/dist/dev/utils/use-force-render.js.map +1 -0
  378. package/dist/dev/utils/use-latest-ref.js +20 -0
  379. package/dist/dev/utils/use-latest-ref.js.map +1 -0
  380. package/dist/dev/utils/use-safe-id.js +22 -0
  381. package/dist/dev/utils/use-safe-id.js.map +1 -0
  382. package/package.json +11 -20
@@ -5,115 +5,110 @@ 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";
20
+ import { TimeSliderRoot } from "../../ui/time-slider/time-slider-root.js";
21
+ import { VolumeSliderRoot } from "../../ui/volume-slider/volume-slider-root.js";
22
+ import CaptionsOffIcon from "../../icons/dist/react/minimal/captions-off.js";
23
+ import CaptionsOnIcon from "../../icons/dist/react/minimal/captions-on.js";
24
+ import FullscreenEnterIcon from "../../icons/dist/react/minimal/fullscreen-enter.js";
25
+ import FullscreenExitIcon from "../../icons/dist/react/minimal/fullscreen-exit.js";
26
+ import PauseIcon from "../../icons/dist/react/minimal/pause.js";
27
+ import PipIcon from "../../icons/dist/react/minimal/pip.js";
28
+ import PlayIcon from "../../icons/dist/react/minimal/play.js";
29
+ import RestartIcon from "../../icons/dist/react/minimal/restart.js";
30
+ import SeekIcon from "../../icons/dist/react/minimal/seek.js";
31
+ import SpinnerIcon from "../../icons/dist/react/minimal/spinner.js";
32
+ import VolumeHighIcon from "../../icons/dist/react/minimal/volume-high.js";
33
+ import VolumeLowIcon from "../../icons/dist/react/minimal/volume-low.js";
34
+ import VolumeOffIcon from "../../icons/dist/react/minimal/volume-off.js";
12
35
  import { CaptionsButton } from "../../ui/captions-button/captions-button.js";
13
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";
14
39
  import { forwardRef } from "react";
15
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
16
- import { CaptionsOffIcon, CaptionsOnIcon, FullscreenEnterIcon, FullscreenExitIcon, PauseIcon, PipIcon, PlayIcon, RestartIcon, SeekIcon, SpinnerIcon, VolumeHighIcon, VolumeLowIcon, VolumeOffIcon } from "@videojs/icons/react/minimal";
40
+ import { jsx, jsxs } from "react/jsx-runtime";
17
41
  import { cn } from "@videojs/utils/style";
18
42
 
19
43
  //#region src/presets/video/minimal-skin.tailwind.tsx
20
44
  const SEEK_TIME = 10;
21
- 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");
22
- const iconHidden = "hidden opacity-0";
23
45
  const Button = forwardRef(function Button({ className, variant, ...props }, ref) {
24
46
  return /* @__PURE__ */ jsx("button", {
25
47
  ref,
26
48
  type: "button",
27
- 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),
28
78
  ...props
29
79
  });
30
80
  });
31
- function PlayButtonIcon({ state, className, ...rest }) {
32
- const { ended, paused } = state;
33
- return /* @__PURE__ */ jsxs(Fragment, { children: [
34
- /* @__PURE__ */ jsx(RestartIcon, {
35
- ...rest,
36
- className: cn(className, { [iconHidden]: !ended })
37
- }),
38
- /* @__PURE__ */ jsx(PlayIcon, {
39
- ...rest,
40
- className: cn(className, { [iconHidden]: ended || !paused })
41
- }),
42
- /* @__PURE__ */ jsx(PauseIcon, {
43
- ...rest,
44
- className: cn(className, { [iconHidden]: paused })
45
- })
46
- ] });
47
- }
48
- function MuteButtonIcon({ state, className, ...rest }) {
49
- const { muted, volumeLevel } = state;
50
- return /* @__PURE__ */ jsxs(Fragment, { children: [
51
- /* @__PURE__ */ jsx(VolumeOffIcon, {
52
- ...rest,
53
- className: cn(className, { [iconHidden]: !muted })
54
- }),
55
- /* @__PURE__ */ jsx(VolumeLowIcon, {
56
- ...rest,
57
- className: cn(className, { [iconHidden]: muted || volumeLevel !== "low" })
58
- }),
59
- /* @__PURE__ */ jsx(VolumeHighIcon, {
60
- ...rest,
61
- className: cn(className, { [iconHidden]: muted || volumeLevel === "low" })
62
- })
63
- ] });
64
- }
65
- function CaptionsButtonIcon({ state, className, ...rest }) {
66
- const { active } = state;
67
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(CaptionsOffIcon, {
68
- ...rest,
69
- className: cn(className, { [iconHidden]: active })
70
- }), /* @__PURE__ */ jsx(CaptionsOnIcon, {
71
- ...rest,
72
- className: cn(className, { [iconHidden]: !active })
73
- })] });
74
- }
75
- function FullscreenButtonIcon({ state, className, ...rest }) {
76
- const { fullscreen } = state;
77
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(FullscreenExitIcon, {
78
- ...rest,
79
- className: cn(className, { [iconHidden]: !fullscreen })
80
- }), /* @__PURE__ */ jsx(FullscreenEnterIcon, {
81
- ...rest,
82
- className: cn(className, { [iconHidden]: fullscreen })
83
- })] });
84
- }
85
81
  function MinimalVideoSkinTailwind(props) {
86
82
  const { children, className, ...rest } = props;
87
83
  return /* @__PURE__ */ jsxs(Container, {
88
- 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),
89
85
  ...rest,
90
86
  children: [
91
- children,
92
- /* @__PURE__ */ jsx(BufferingIndicator, { render: (props, state) => state.visible ? /* @__PURE__ */ jsx("div", {
87
+ /* @__PURE__ */ jsx(BufferingIndicator, { render: (props) => /* @__PURE__ */ jsx("div", {
93
88
  ...props,
94
- className: "absolute inset-0 flex items-center justify-center pointer-events-none z-10 text-white",
89
+ className: bufferingIndicator,
95
90
  children: /* @__PURE__ */ jsx(SpinnerIcon, { className: icon })
96
- }) : null }),
91
+ }) }),
97
92
  /* @__PURE__ */ jsx(ErrorDialog, {
98
93
  "aria-labelledby": "media-error-title",
99
94
  "aria-describedby": "media-error-description",
100
95
  render: (props, { onDismiss }) => /* @__PURE__ */ jsx("div", {
101
96
  ...props,
102
- 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,
103
98
  children: /* @__PURE__ */ jsxs("div", {
104
- 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,
105
100
  children: [/* @__PURE__ */ jsxs("div", {
106
- className: "flex flex-col gap-2 py-1.5",
101
+ className: error.content,
107
102
  children: [/* @__PURE__ */ jsx("p", {
108
103
  id: "media-error-title",
109
- className: "font-semibold leading-tight",
104
+ className: error.title,
110
105
  children: "Something went wrong."
111
106
  }), /* @__PURE__ */ jsx("p", {
112
107
  id: "media-error-description",
113
108
  children: "An error occurred while trying to play the video. Please try again."
114
109
  })]
115
110
  }), /* @__PURE__ */ jsx("div", {
116
- className: "flex gap-2 *:flex-1",
111
+ className: error.actions,
117
112
  children: /* @__PURE__ */ jsx(Button, {
118
113
  onClick: onDismiss,
119
114
  children: "OK"
@@ -123,29 +118,32 @@ function MinimalVideoSkinTailwind(props) {
123
118
  })
124
119
  }),
125
120
  /* @__PURE__ */ jsxs(ControlsRoot, {
126
- 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,
127
123
  children: [
128
124
  /* @__PURE__ */ jsxs("span", {
129
- className: cn("flex items-center gap-[0.075rem]", "@2xl/media-root:gap-0.5"),
125
+ className: buttonGroup,
130
126
  children: [
131
- /* @__PURE__ */ jsx(PlayButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
127
+ /* @__PURE__ */ jsx(PlayButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
132
128
  variant: "icon",
133
129
  ...props,
134
- children: /* @__PURE__ */ jsx(PlayButtonIcon, {
135
- state,
136
- className: icon
137
- })
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
+ ]
138
136
  }) }),
139
137
  /* @__PURE__ */ jsx(SeekButton, {
140
138
  seconds: -SEEK_TIME,
141
139
  render: (props) => /* @__PURE__ */ jsx(Button, {
142
140
  variant: "icon",
143
141
  ...props,
144
- className: "@max-md/media-controls:hidden",
142
+ className: seek.button,
145
143
  children: /* @__PURE__ */ jsxs("span", {
146
- className: "relative",
147
- children: [/* @__PURE__ */ jsx(SeekIcon, { className: cn(icon, "[scale:-1_1]") }), /* @__PURE__ */ jsx("span", {
148
- 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),
149
147
  children: SEEK_TIME
150
148
  })]
151
149
  })
@@ -156,11 +154,11 @@ function MinimalVideoSkinTailwind(props) {
156
154
  render: (props) => /* @__PURE__ */ jsx(Button, {
157
155
  variant: "icon",
158
156
  ...props,
159
- className: "@max-md/media-controls:hidden",
157
+ className: seek.button,
160
158
  children: /* @__PURE__ */ jsxs("span", {
161
- className: "relative",
159
+ className: iconContainer,
162
160
  children: [/* @__PURE__ */ jsx(SeekIcon, { className: icon }), /* @__PURE__ */ jsx("span", {
163
- className: "absolute right-0 -bottom-0.75 text-[0.75em] font-[480] tabular-nums",
161
+ className: cn(seek.label, seek.labelForward),
164
162
  children: SEEK_TIME
165
163
  })]
166
164
  })
@@ -169,59 +167,92 @@ function MinimalVideoSkinTailwind(props) {
169
167
  ]
170
168
  }),
171
169
  /* @__PURE__ */ jsxs("span", {
172
- className: cn("flex flex-row-reverse items-center flex-1 gap-3", "@md/media-controls:flex-row"),
170
+ className: time.controls,
173
171
  children: [/* @__PURE__ */ jsxs(Group, {
174
- className: "flex items-center gap-1",
172
+ className: time.group,
175
173
  children: [
176
174
  /* @__PURE__ */ jsx(Value, {
177
175
  type: "current",
178
- className: cn("hidden tabular-nums text-shadow-2xs text-shadow-black/25", "@md/media-controls:inline")
176
+ className: time.current
179
177
  }),
180
- /* @__PURE__ */ jsx(Separator, { className: cn("hidden", "@md/media-controls:inline @md/media-controls:text-white/50") }),
178
+ /* @__PURE__ */ jsx(Separator, { className: time.separator }),
181
179
  /* @__PURE__ */ jsx(Value, {
182
180
  type: "duration",
183
- className: cn("tabular-nums text-shadow-2xs text-shadow-black/25", "@md/media-controls:text-white/50")
181
+ className: time.duration
184
182
  })
185
183
  ]
186
- }), /* @__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
+ })]
187
194
  }),
188
195
  /* @__PURE__ */ jsxs("span", {
189
- className: cn("flex items-center gap-[0.075rem]", "@2xl/media-root:gap-0.5"),
196
+ className: buttonGroup,
190
197
  children: [
191
- /* @__PURE__ */ jsx(MuteButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
198
+ /* @__PURE__ */ jsx(PlaybackRateButton, { render: (props) => /* @__PURE__ */ jsx(Button, {
192
199
  variant: "icon",
193
200
  ...props,
194
- children: /* @__PURE__ */ jsx(MuteButtonIcon, {
195
- state,
196
- className: icon
197
- })
201
+ className: playbackRate.button
198
202
  }) }),
199
- /* @__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, {
200
234
  variant: "icon",
201
235
  ...props,
202
- children: /* @__PURE__ */ jsx(CaptionsButtonIcon, {
203
- state,
204
- className: icon
205
- })
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) })]
206
238
  }) }),
207
239
  /* @__PURE__ */ jsx(PiPButton, { render: (props) => /* @__PURE__ */ jsx(Button, {
208
240
  variant: "icon",
209
241
  ...props,
210
242
  children: /* @__PURE__ */ jsx(PipIcon, { className: icon })
211
243
  }) }),
212
- /* @__PURE__ */ jsx(FullscreenButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
244
+ /* @__PURE__ */ jsx(FullscreenButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
213
245
  variant: "icon",
214
246
  ...props,
215
- children: /* @__PURE__ */ jsx(FullscreenButtonIcon, {
216
- state,
217
- className: icon
218
- })
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) })]
219
249
  }) })
220
250
  ]
221
251
  })
222
252
  ]
223
253
  }),
224
- /* @__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
225
256
  ]
226
257
  });
227
258
  }
@@ -1 +1 @@
1
- {"version":3,"file":"minimal-skin.tailwind.js","names":["Controls.Root","Time.Group","Time.Value","Time.Separator"],"sources":["../../../../src/presets/video/minimal-skin.tailwind.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 { MinimalVideoSkinProps } from './minimal-skin';\n\nconst SEEK_TIME = 10;\n\n/* ------------------------------------ Reused fragments ------------------------------------- */\n\nconst icon = cn(\n '[grid-area:1/1] size-4.5',\n 'drop-shadow-[0_1px_0_var(--tw-drop-shadow-color)] drop-shadow-black/25',\n 'transition-discrete transition-[display,opacity] duration-150 ease-out'\n);\n\nconst iconHidden = 'hidden opacity-0';\n\n/* --------------------------------------- Components ---------------------------------------- */\n\nconst Button = forwardRef<HTMLButtonElement, ComponentProps<'button'> & { variant?: 'icon' }>(function Button(\n { className, variant, ...props },\n ref\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(\n // Shared\n 'shrink-0 border-none cursor-pointer select-none',\n 'outline-2 outline-transparent -outline-offset-2',\n 'transition-[background-color,color,outline-offset] duration-150 ease-out',\n 'disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale',\n // Variant\n variant === 'icon'\n ? cn(\n 'grid p-2.5 bg-transparent rounded-md',\n 'text-white',\n 'hover:text-white/80 hover:no-underline',\n 'focus-visible:text-white/80',\n 'focus-visible:outline-white focus-visible:outline-offset-2',\n 'aria-expanded:text-white/80'\n )\n : cn(\n 'flex items-center justify-center py-2 px-4 bg-white rounded-lg',\n 'text-black font-medium',\n 'focus-visible:outline-white focus-visible:outline-offset-2'\n ),\n className\n )}\n {...props}\n />\n );\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, { [iconHidden]: !ended })} />\n <PlayIcon {...rest} className={cn(className, { [iconHidden]: ended || !paused })} />\n <PauseIcon {...rest} className={cn(className, { [iconHidden]: 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, { [iconHidden]: !muted })} />\n <VolumeLowIcon {...rest} className={cn(className, { [iconHidden]: muted || volumeLevel !== 'low' })} />\n <VolumeHighIcon {...rest} className={cn(className, { [iconHidden]: 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, { [iconHidden]: active })} />\n <CaptionsOnIcon {...rest} className={cn(className, { [iconHidden]: !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, { [iconHidden]: !fullscreen })} />\n <FullscreenEnterIcon {...rest} className={cn(className, { [iconHidden]: fullscreen })} />\n </>\n );\n}\n\n/* ------------------------------------------ Skin ------------------------------------------- */\n\nexport function MinimalVideoSkinTailwind(props: MinimalVideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container\n className={cn(\n // Layout & containment\n 'relative isolate overflow-clip @container/media-root',\n // Appearance\n 'rounded-[var(--media-border-radius,0.75rem)] bg-black',\n 'font-[Inter_Variable,Inter,ui-sans-serif,system-ui,sans-serif] text-[0.8125rem] leading-normal subpixel-antialiased',\n // Resets\n '**:box-border **:m-0',\n '[&_button]:font-[inherit]',\n 'motion-safe:[interpolate-size:allow-keywords]',\n // Outer border ring (::after only)\n 'after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10',\n 'after:inset-0 after:ring-1 after:ring-inset after:ring-black/15',\n 'dark:after:ring-white/15',\n // Video element\n '[&>video]:block [&>video]:w-full [&>video]:h-full',\n // Poster image\n '[&>img]:absolute [&>img]:inset-0 [&>img]:w-full [&>img]:h-full',\n '[&>img]:object-cover [&>img]:pointer-events-none',\n '[&>img]:transition-opacity [&>img]:duration-[250ms]',\n '[&>img:not([data-visible])]:opacity-0',\n // Fullscreen\n '[&:fullscreen]:rounded-none',\n className\n )}\n {...rest}\n >\n {children}\n\n <BufferingIndicator\n render={(props, state) =>\n state.visible ? (\n <div\n {...props}\n className=\"absolute inset-0 flex items-center justify-center pointer-events-none z-10 text-white\"\n >\n <SpinnerIcon className={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\n {...props}\n className=\"peer/error group/error absolute inset-0 z-20 items-center justify-center pointer-events-none hidden data-[visible]:flex\"\n >\n <div\n className={cn(\n 'hidden flex-col gap-3 max-w-64 p-4 text-white text-sm pointer-events-auto',\n 'group-data-[visible]/error:flex',\n 'text-shadow-2xs text-shadow-black/50',\n 'transition-[display,opacity,scale,transform] duration-500 delay-100 transition-discrete',\n 'starting:opacity-0 starting:scale-50',\n '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)]'\n )}\n >\n <div className=\"flex flex-col gap-2 py-1.5\">\n <p id=\"media-error-title\" className=\"font-semibold leading-tight\">\n Something went wrong.\n </p>\n <p id=\"media-error-description\">An error occurred while trying to play the video. Please try again.</p>\n </div>\n <div className=\"flex gap-2 *:flex-1\">\n <Button onClick={onDismiss}>OK</Button>\n </div>\n </div>\n </div>\n )}\n />\n\n <Controls.Root\n className={cn(\n // Peer marker for overlay/captions\n 'peer/controls',\n // Layout\n 'absolute @container/media-controls bottom-0 inset-x-0',\n 'pt-8 px-1.5 pb-1.5 flex items-center gap-2',\n 'text-white z-10',\n // Transitions\n 'will-change-[translate,filter,opacity]',\n 'transition-[translate,filter,opacity] ease-out',\n 'delay-0 duration-75',\n // Hidden state\n 'not-data-[visible]:opacity-0 not-data-[visible]:translate-y-full',\n 'not-data-[visible]:blur-[8px] not-data-[visible]:pointer-events-none',\n 'not-data-[visible]:delay-500 not-data-[visible]:duration-500',\n // Reduced motion + hidden\n 'motion-reduce:not-data-[visible]:duration-100',\n 'motion-reduce:not-data-[visible]:translate-y-0',\n 'motion-reduce:not-data-[visible]:blur-none motion-reduce:not-data-[visible]:scale-100',\n // Wider container\n '@sm/media-root:pt-10 @sm/media-root:px-3 @sm/media-root:pb-3',\n '@sm/media-root:gap-3.5'\n )}\n >\n <span className={cn('flex items-center gap-[0.075rem]', '@2xl/media-root:gap-0.5')}>\n <PlayButton\n render={(props, state) => (\n <Button variant=\"icon\" {...props}>\n <PlayButtonIcon state={state} className={icon} />\n </Button>\n )}\n />\n\n <SeekButton\n seconds={-SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className=\"@max-md/media-controls:hidden\">\n <span className=\"relative\">\n <SeekIcon className={cn(icon, '[scale:-1_1]')} />\n <span className=\"absolute left-0 -bottom-0.75 text-[0.75em] font-[480] tabular-nums\">\n {SEEK_TIME}\n </span>\n </span>\n </Button>\n )}\n />\n\n <SeekButton\n seconds={SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className=\"@max-md/media-controls:hidden\">\n <span className=\"relative\">\n <SeekIcon className={icon} />\n <span className=\"absolute right-0 -bottom-0.75 text-[0.75em] font-[480] tabular-nums\">\n {SEEK_TIME}\n </span>\n </span>\n </Button>\n )}\n />\n </span>\n\n <span className={cn('flex flex-row-reverse items-center flex-1 gap-3', '@md/media-controls:flex-row')}>\n <Time.Group className=\"flex items-center gap-1\">\n <Time.Value\n type=\"current\"\n className={cn('hidden tabular-nums text-shadow-2xs text-shadow-black/25', '@md/media-controls:inline')}\n />\n <Time.Separator className={cn('hidden', '@md/media-controls:inline @md/media-controls:text-white/50')} />\n <Time.Value\n type=\"duration\"\n className={cn('tabular-nums text-shadow-2xs text-shadow-black/25', '@md/media-controls:text-white/50')}\n />\n </Time.Group>\n\n {/* Temporary spacer */}\n <span className=\"flex-1 h-[3px] rounded-full bg-white/20\" />\n </span>\n\n <span className={cn('flex items-center gap-[0.075rem]', '@2xl/media-root:gap-0.5')}>\n <MuteButton\n render={(props, state) => (\n <Button variant=\"icon\" {...props}>\n <MuteButtonIcon state={state} className={icon} />\n </Button>\n )}\n />\n\n <CaptionsButton\n render={(props, state) => (\n <Button variant=\"icon\" {...props}>\n <CaptionsButtonIcon state={state} className={icon} />\n </Button>\n )}\n />\n\n <PiPButton\n render={(props) => (\n <Button variant=\"icon\" {...props}>\n <PipIcon className={icon} />\n </Button>\n )}\n />\n\n <FullscreenButton\n render={(props, state) => (\n <Button variant=\"icon\" {...props}>\n <FullscreenButtonIcon state={state} className={icon} />\n </Button>\n )}\n />\n </span>\n </Controls.Root>\n\n {/* <div\n className={cn(\n 'absolute z-20 pointer-events-none text-balance text-base',\n 'inset-x-4 bottom-6',\n 'transition-transform duration-150 ease-out delay-600',\n 'motion-reduce:duration-50',\n // Responsive font sizes\n '@xs/media-root:text-2xl',\n '@3xl/media-root:text-3xl',\n '@7xl/media-root:text-4xl',\n // Shift up when controls visible\n 'peer-data-[visible]/controls:-translate-y-10 peer-data-[visible]/controls:delay-25',\n )}\n >\n <div className=\"max-w-[42ch] mx-auto text-center flex flex-col items-center\">\n <span className={cn(\n 'block py-0.5 px-2 text-white text-center whitespace-pre-wrap leading-1.2',\n '[text-shadow:0_0_1px_oklab(0_0_0_/_0.7),0_0_8px_oklab(0_0_0_/_0.7)]',\n 'contrast-more:[text-shadow:none] contrast-more:[box-decoration-break:clone] contrast-more:bg-black/70',\n '*:inline',\n )}>\n An example cue\n </span>\n </div>\n </div> */}\n\n <div\n className={cn(\n // Layout\n 'absolute inset-0 flex flex-col items-start',\n 'pointer-events-none rounded-[inherit]',\n // Default: hidden\n 'opacity-0',\n 'bg-gradient-to-t from-black/70 via-black/50 via-[7.5rem] to-transparent',\n 'backdrop-blur-[0px] backdrop-saturate-120 backdrop-brightness-90',\n // Transitions\n 'transition-[opacity,backdrop-filter] ease-out',\n 'duration-500 delay-500',\n // Shown when controls visible\n 'peer-data-[visible]/controls:opacity-100',\n 'peer-data-[visible]/controls:duration-150',\n 'peer-data-[visible]/controls:delay-0',\n // Shown when error visible (+ blur)\n 'peer-data-[visible]/error:opacity-100',\n 'peer-data-[visible]/error:duration-150',\n 'peer-data-[visible]/error:delay-0',\n 'peer-data-[visible]/error:backdrop-blur-[8px]',\n // Reduced motion\n 'motion-reduce:duration-100'\n )}\n />\n </Container>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"minimal-skin.tailwind.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.tailwind.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 { playbackRate } from '@videojs/skins/video/default.tailwind';\nimport {\n bufferingIndicator,\n button,\n buttonGroup,\n controls,\n error,\n icon,\n iconContainer,\n iconFlipped,\n iconState,\n overlay,\n popup,\n root,\n seek,\n slider,\n time,\n} from '@videojs/skins/video/minimal.tailwind';\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 { MinimalVideoSkinProps } from './minimal-skin';\n\nconst SEEK_TIME = 10;\n\n/* --------------------------------------- Components ---------------------------------------- */\n\nconst Button = forwardRef<HTMLButtonElement, ComponentProps<'button'> & { variant?: 'icon' }>(function Button(\n { className, variant, ...props },\n ref\n) {\n return (\n <button\n ref={ref}\n type=\"button\"\n className={cn(button.base, variant === 'icon' ? button.icon : button.default, className)}\n {...props}\n />\n );\n});\n\nconst SliderRoot = forwardRef<HTMLDivElement, ComponentProps<'div'>>(function SliderRoot({ className, ...props }, ref) {\n return <div ref={ref} className={cn(slider.root, className)} {...props} />;\n});\n\nconst SliderTrack = forwardRef<HTMLDivElement, ComponentProps<'div'>>(function SliderTrack(\n { className, ...props },\n ref\n) {\n return <div ref={ref} className={cn(slider.track, className)} {...props} />;\n});\n\nconst SliderFill = forwardRef<HTMLDivElement, ComponentProps<'div'> & { type?: 'fill' | 'buffer' }>(function SliderFill(\n { type = 'fill', className, ...props },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cn(slider.fill.base, type === 'fill' ? slider.fill.fill : slider.fill.buffer, className)}\n {...props}\n />\n );\n});\n\nconst SliderThumb = forwardRef<HTMLDivElement, ComponentProps<'div'> & { persistent?: boolean }>(function SliderThumb(\n { persistent, className, ...props },\n ref\n) {\n return (\n <div\n ref={ref}\n className={cn(slider.thumb.base, persistent ? undefined : slider.thumb.interactive, className)}\n {...props}\n />\n );\n});\n\n/* ------------------------------------------ Skin ------------------------------------------- */\n\nexport function MinimalVideoSkinTailwind(props: MinimalVideoSkinProps): ReactNode {\n const { children, className, ...rest } = props;\n\n return (\n <Container className={cn(root, className)} {...rest}>\n <BufferingIndicator\n render={(props) => (\n <div {...props} className={bufferingIndicator}>\n <SpinnerIcon className={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={error.root}>\n <div className={error.dialog}>\n <div className={error.content}>\n <p id=\"media-error-title\" className={error.title}>\n Something went wrong.\n </p>\n <p id=\"media-error-description\">An error occurred while trying to play the video. Please try again.</p>\n </div>\n <div className={error.actions}>\n <Button onClick={onDismiss}>OK</Button>\n </div>\n </div>\n </div>\n )}\n />\n\n <Controls.Root\n data-controls=\"\" // Used as a hook for Tailwind has-[] styles\n className={controls}\n >\n <span className={buttonGroup}>\n <PlayButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.play.button}>\n <RestartIcon className={cn(icon, iconState.play.restart)} />\n <PlayIcon className={cn(icon, iconState.play.play)} />\n <PauseIcon className={cn(icon, iconState.play.pause)} />\n </Button>\n )}\n />\n\n <SeekButton\n seconds={-SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className={seek.button}>\n <span className={iconContainer}>\n <SeekIcon className={cn(icon, iconFlipped)} />\n <span className={cn(seek.label, seek.labelBackward)}>{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n\n <SeekButton\n seconds={SEEK_TIME}\n render={(props) => (\n <Button variant=\"icon\" {...props} className={seek.button}>\n <span className={iconContainer}>\n <SeekIcon className={icon} />\n <span className={cn(seek.label, seek.labelForward)}>{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n </span>\n\n <span className={time.controls}>\n <Time.Group className={time.group}>\n <Time.Value type=\"current\" className={time.current} />\n <Time.Separator className={time.separator} />\n <Time.Value type=\"duration\" className={time.duration} />\n </Time.Group>\n\n <TimeSlider.Root render={(props) => <SliderRoot {...props} />}>\n <TimeSlider.Track render={(props) => <SliderTrack {...props} />}>\n <TimeSlider.Fill render={(props) => <SliderFill {...props} />} />\n <TimeSlider.Buffer render={(props) => <SliderFill type=\"buffer\" {...props} />} />\n </TimeSlider.Track>\n <TimeSlider.Thumb render={(props) => <SliderThumb {...props} />} />\n </TimeSlider.Root>\n </span>\n\n <span className={buttonGroup}>\n <PlaybackRateButton\n render={(props) => <Button variant=\"icon\" {...props} className={playbackRate.button} />}\n />\n\n <Popover.Root openOnHover delay={200} closeDelay={100} side=\"top\">\n <Popover.Trigger\n render={\n <MuteButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.mute.button}>\n <VolumeOffIcon className={cn(icon, iconState.mute.volumeOff)} />\n <VolumeLowIcon className={cn(icon, iconState.mute.volumeLow)} />\n <VolumeHighIcon className={cn(icon, iconState.mute.volumeHigh)} />\n </Button>\n )}\n />\n }\n />\n <Popover.Popup className={cn(popup.base, popup.volume)}>\n <VolumeSlider.Root\n orientation=\"vertical\"\n thumbAlignment=\"edge\"\n render={(props) => <SliderRoot {...props} />}\n >\n <VolumeSlider.Track render={(props) => <SliderTrack {...props} />}>\n <VolumeSlider.Fill render={(props) => <SliderFill {...props} />} />\n </VolumeSlider.Track>\n <VolumeSlider.Thumb render={(props) => <SliderThumb persistent {...props} />} />\n </VolumeSlider.Root>\n </Popover.Popup>\n </Popover.Root>\n\n <CaptionsButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.captions.button}>\n <CaptionsOffIcon className={cn(icon, iconState.captions.off)} />\n <CaptionsOnIcon className={cn(icon, iconState.captions.on)} />\n </Button>\n )}\n />\n\n <PiPButton\n render={(props) => (\n <Button variant=\"icon\" {...props}>\n <PipIcon className={icon} />\n </Button>\n )}\n />\n\n <FullscreenButton\n render={(props) => (\n <Button variant=\"icon\" {...props} className={iconState.fullscreen.button}>\n <FullscreenEnterIcon className={cn(icon, iconState.fullscreen.enter)} />\n <FullscreenExitIcon className={cn(icon, iconState.fullscreen.exit)} />\n </Button>\n )}\n />\n </span>\n </Controls.Root>\n\n {/* <div className={captions.root}>\n <div className={captions.container}>\n <span className={captions.cue}>\n An example cue\n </span>\n </div>\n </div> */}\n\n <div className={overlay} />\n\n {children}\n </Container>\n );\n}\n"],"mappings":"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"}