@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
@@ -1 +1 @@
1
- {"version":3,"file":"skin.tailwind.d.ts","names":[],"sources":["../../../../src/presets/video/skin.tailwind.tsx"],"mappings":";;;;iBA2IgB,iBAAA,CAAkB,KAAA,EAAO,cAAA,GAAiB,SAAA"}
1
+ {"version":3,"file":"skin.tailwind.d.ts","names":[],"sources":["../../../../src/presets/video/skin.tailwind.tsx"],"mappings":";;;;iBA4GgB,iBAAA,CAAkB,KAAA,EAAO,cAAA,GAAiB,SAAA"}
@@ -5,119 +5,112 @@ 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 { Value } from "../../ui/time/time-value.js";
19
+ import { TimeSliderRoot } from "../../ui/time-slider/time-slider-root.js";
20
+ import { VolumeSliderRoot } from "../../ui/volume-slider/volume-slider-root.js";
11
21
  import { CaptionsButton } from "../../ui/captions-button/captions-button.js";
12
22
  import { ErrorDialog } from "../../ui/error-dialog/error-dialog.js";
23
+ import { bufferingIndicator, button, controls, error, icon, iconContainer, iconFlipped, iconState, overlay, playbackRate, popup, root, seek, slider, time } from "../../skins/dist/default/video/default.tailwind.js";
24
+ import CaptionsOffIcon from "../../icons/dist/react/default/captions-off.js";
25
+ import CaptionsOnIcon from "../../icons/dist/react/default/captions-on.js";
26
+ import FullscreenEnterIcon from "../../icons/dist/react/default/fullscreen-enter.js";
27
+ import FullscreenExitIcon from "../../icons/dist/react/default/fullscreen-exit.js";
28
+ import PauseIcon from "../../icons/dist/react/default/pause.js";
29
+ import PipIcon from "../../icons/dist/react/default/pip.js";
30
+ import PlayIcon from "../../icons/dist/react/default/play.js";
31
+ import RestartIcon from "../../icons/dist/react/default/restart.js";
32
+ import SeekIcon from "../../icons/dist/react/default/seek.js";
33
+ import SpinnerIcon from "../../icons/dist/react/default/spinner.js";
34
+ import VolumeHighIcon from "../../icons/dist/react/default/volume-high.js";
35
+ import VolumeLowIcon from "../../icons/dist/react/default/volume-low.js";
36
+ import VolumeOffIcon from "../../icons/dist/react/default/volume-off.js";
13
37
  import { forwardRef } from "react";
14
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
38
+ import { jsx, jsxs } from "react/jsx-runtime";
15
39
  import { cn } from "@videojs/utils/style";
16
- import { CaptionsOffIcon, CaptionsOnIcon, FullscreenEnterIcon, FullscreenExitIcon, PauseIcon, PipIcon, PlayIcon, RestartIcon, SeekIcon, SpinnerIcon, VolumeHighIcon, VolumeLowIcon, VolumeOffIcon } from "@videojs/icons/react";
17
40
 
18
41
  //#region src/presets/video/skin.tailwind.tsx
19
42
  const SEEK_TIME = 10;
20
- const surface = cn("bg-white/10", "backdrop-blur-3xl backdrop-brightness-90 backdrop-saturate-150", "ring ring-white/5 ring-inset shadow-sm shadow-black/15", "after:absolute after:inset-0 after:ring after:rounded-[inherit] after:ring-black/15 after:pointer-events-none after:z-10", "[@media(prefers-reduced-transparency:reduce)]:bg-black/70 [@media(prefers-reduced-transparency:reduce)]:ring-black [@media(prefers-reduced-transparency:reduce)]:after:ring-white/20", "contrast-more:bg-black/90 contrast-more:ring-black contrast-more:after:ring-white/20");
21
- const icon = cn("[grid-area:1/1] size-4.5 shrink-0", "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
43
  const Button = forwardRef(function Button({ className, variant, ...props }, ref) {
24
44
  return /* @__PURE__ */ jsx("button", {
25
45
  ref,
26
46
  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 bg-transparent rounded-full", "text-white/90", "text-shadow-2xs text-shadow-black/25", "hover:bg-white/10 hover:text-white hover:no-underline", "focus-visible:bg-white/10 focus-visible:text-white", "focus-visible:outline-blue-500 focus-visible:outline-offset-2", "aria-expanded:bg-white/10 aria-expanded:text-white") : cn("flex items-center justify-center py-2 px-4 bg-white rounded-full", "text-black font-medium", "focus-visible:outline-blue-500 focus-visible:outline-offset-2"), className),
47
+ className: cn(button.base, variant === "icon" ? button.icon : button.default, className),
48
+ ...props
49
+ });
50
+ });
51
+ const SliderRoot = forwardRef(function SliderRoot({ className, ...props }, ref) {
52
+ return /* @__PURE__ */ jsx("div", {
53
+ ref,
54
+ className: cn(slider.root, className),
55
+ ...props
56
+ });
57
+ });
58
+ const SliderTrack = forwardRef(function SliderTrack({ className, ...props }, ref) {
59
+ return /* @__PURE__ */ jsx("div", {
60
+ ref,
61
+ className: cn(slider.track, className),
62
+ ...props
63
+ });
64
+ });
65
+ const SliderFill = forwardRef(function SliderFill({ type = "fill", className, ...props }, ref) {
66
+ return /* @__PURE__ */ jsx("div", {
67
+ ref,
68
+ className: cn(slider.fill.base, type === "fill" ? slider.fill.fill : slider.fill.buffer, className),
69
+ ...props
70
+ });
71
+ });
72
+ const SliderThumb = forwardRef(function SliderThumb({ persistent, className, ...props }, ref) {
73
+ return /* @__PURE__ */ jsx("div", {
74
+ ref,
75
+ className: cn(slider.thumb.base, persistent ? slider.thumb.persistent : slider.thumb.interactive, className),
28
76
  ...props
29
77
  });
30
78
  });
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
79
  function VideoSkinTailwind(props) {
86
80
  const { children, className, ...rest } = props;
87
81
  return /* @__PURE__ */ jsxs(Container, {
88
- className: cn("relative isolate overflow-clip @container/media-root", "rounded-[var(--media-border-radius,2rem)] 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]", "before:absolute before:pointer-events-none before:rounded-[inherit] before:z-10", "before:inset-px before:ring-1 before:ring-inset before:ring-white/15", "after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10", "after:inset-0 after:ring-1 after:ring-inset after:ring-black/10", "[&>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),
82
+ className: cn(root, className),
89
83
  ...rest,
90
84
  children: [
91
- children,
92
- /* @__PURE__ */ jsx(BufferingIndicator, { render: (props, state) => state.visible ? /* @__PURE__ */ jsx("div", {
85
+ /* @__PURE__ */ jsx(BufferingIndicator, { render: (props) => /* @__PURE__ */ jsx("div", {
93
86
  ...props,
94
- className: "absolute inset-0 flex items-center justify-center pointer-events-none z-10 text-white",
87
+ className: bufferingIndicator.root,
95
88
  children: /* @__PURE__ */ jsx("div", {
96
- className: cn("p-1 rounded-full", surface),
89
+ className: bufferingIndicator.container,
97
90
  children: /* @__PURE__ */ jsx(SpinnerIcon, { className: icon })
98
91
  })
99
- }) : null }),
92
+ }) }),
100
93
  /* @__PURE__ */ jsx(ErrorDialog, {
101
94
  "aria-labelledby": "media-error-title",
102
95
  "aria-describedby": "media-error-description",
103
96
  render: (props, { onDismiss }) => /* @__PURE__ */ jsx("div", {
104
97
  ...props,
105
- className: "peer/error group/error absolute inset-0 z-20 items-center justify-center pointer-events-none hidden data-[visible]:flex",
98
+ className: error.root,
106
99
  children: /* @__PURE__ */ jsxs("div", {
107
- className: cn("hidden flex-col gap-3 max-w-72 p-3 rounded-[1.75rem] text-white text-sm pointer-events-auto", "group-data-[visible]/error:flex", "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)]", surface),
100
+ className: error.dialog,
108
101
  children: [/* @__PURE__ */ jsxs("div", {
109
- className: "flex flex-col gap-2 px-2 pt-2 pb-1.5",
102
+ className: error.content,
110
103
  children: [/* @__PURE__ */ jsx("p", {
111
104
  id: "media-error-title",
112
- className: "font-semibold leading-tight",
105
+ className: error.title,
113
106
  children: "Something went wrong."
114
107
  }), /* @__PURE__ */ jsx("p", {
115
108
  id: "media-error-description",
116
- className: "opacity-70",
109
+ className: error.description,
117
110
  children: "An error occurred while trying to play the video. Please try again."
118
111
  })]
119
112
  }), /* @__PURE__ */ jsx("div", {
120
- className: "flex gap-2 *:flex-1",
113
+ className: error.actions,
121
114
  children: /* @__PURE__ */ jsx(Button, {
122
115
  onClick: onDismiss,
123
116
  children: "OK"
@@ -127,26 +120,29 @@ function VideoSkinTailwind(props) {
127
120
  })
128
121
  }),
129
122
  /* @__PURE__ */ jsxs(ControlsRoot, {
130
- className: cn("peer/controls", surface, "absolute @container/media-controls bottom-3 inset-x-3", "p-[0.175rem] flex items-center gap-[0.075rem]", "text-white rounded-full z-10", "will-change-[scale,transform,filter,opacity]", "transition-[scale,transform,filter,opacity] ease-out", "delay-0 duration-100 origin-bottom", "not-data-[visible]:pointer-events-none not-data-[visible]:blur-[8px]", "not-data-[visible]:scale-90 not-data-[visible]:opacity-0", "not-data-[visible]:delay-500 not-data-[visible]:duration-300", "motion-reduce:not-data-[visible]:duration-100", "motion-reduce:not-data-[visible]:blur-none", "motion-reduce:not-data-[visible]:scale-100", "@2xl/media-root:p-1 @2xl/media-root:gap-0.5"),
123
+ "data-controls": "",
124
+ className: controls,
131
125
  children: [
132
- /* @__PURE__ */ jsx(PlayButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
126
+ /* @__PURE__ */ jsx(PlayButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
133
127
  variant: "icon",
134
128
  ...props,
135
- children: /* @__PURE__ */ jsx(PlayButtonIcon, {
136
- state,
137
- className: icon
138
- })
129
+ className: iconState.play.button,
130
+ children: [
131
+ /* @__PURE__ */ jsx(RestartIcon, { className: cn(icon, iconState.play.restart) }),
132
+ /* @__PURE__ */ jsx(PlayIcon, { className: cn(icon, iconState.play.play) }),
133
+ /* @__PURE__ */ jsx(PauseIcon, { className: cn(icon, iconState.play.pause) })
134
+ ]
139
135
  }) }),
140
136
  /* @__PURE__ */ jsx(SeekButton, {
141
137
  seconds: -SEEK_TIME,
142
138
  render: (props) => /* @__PURE__ */ jsx(Button, {
143
139
  variant: "icon",
144
140
  ...props,
145
- className: "@max-md/media-controls:hidden",
141
+ className: seek.button,
146
142
  children: /* @__PURE__ */ jsxs("span", {
147
- className: "relative",
148
- children: [/* @__PURE__ */ jsx(SeekIcon, { className: cn(icon, "[scale:-1_1]") }), /* @__PURE__ */ jsx("span", {
149
- className: "absolute left-0 -bottom-0.75 text-[0.75em] font-[480] tabular-nums",
143
+ className: iconContainer,
144
+ children: [/* @__PURE__ */ jsx(SeekIcon, { className: cn(icon, iconFlipped) }), /* @__PURE__ */ jsx("span", {
145
+ className: cn(seek.label, seek.labelBackward),
150
146
  children: SEEK_TIME
151
147
  })]
152
148
  })
@@ -157,62 +153,95 @@ function VideoSkinTailwind(props) {
157
153
  render: (props) => /* @__PURE__ */ jsx(Button, {
158
154
  variant: "icon",
159
155
  ...props,
160
- className: "@max-md/media-controls:hidden",
156
+ className: seek.button,
161
157
  children: /* @__PURE__ */ jsxs("span", {
162
- className: "relative",
158
+ className: iconContainer,
163
159
  children: [/* @__PURE__ */ jsx(SeekIcon, { className: icon }), /* @__PURE__ */ jsx("span", {
164
- className: "absolute right-0 -bottom-0.75 text-[0.75em] font-[480] tabular-nums",
160
+ className: cn(seek.label, seek.labelForward),
165
161
  children: SEEK_TIME
166
162
  })]
167
163
  })
168
164
  })
169
165
  }),
170
166
  /* @__PURE__ */ jsxs(Group, {
171
- className: "@container/media-time flex items-center flex-1 gap-3 px-2",
167
+ className: time.group,
172
168
  children: [
173
169
  /* @__PURE__ */ jsx(Value, {
174
170
  type: "current",
175
- className: "hidden @2xs/media-time:block text-shadow-2xs text-shadow-black/25 tabular-nums"
171
+ className: time.current
172
+ }),
173
+ /* @__PURE__ */ jsxs(TimeSliderRoot, {
174
+ render: (props) => /* @__PURE__ */ jsx(SliderRoot, { ...props }),
175
+ children: [/* @__PURE__ */ jsxs(SliderTrack$1, {
176
+ render: (props) => /* @__PURE__ */ jsx(SliderTrack, { ...props }),
177
+ children: [/* @__PURE__ */ jsx(SliderFill$1, { render: (props) => /* @__PURE__ */ jsx(SliderFill, { ...props }) }), /* @__PURE__ */ jsx(SliderBuffer, { render: (props) => /* @__PURE__ */ jsx(SliderFill, {
178
+ type: "buffer",
179
+ ...props
180
+ }) })]
181
+ }), /* @__PURE__ */ jsx(SliderThumb$1, { render: (props) => /* @__PURE__ */ jsx(SliderThumb, { ...props }) })]
176
182
  }),
177
- /* @__PURE__ */ jsx("div", { className: "flex-1 h-1 rounded-full bg-white/20" }),
178
183
  /* @__PURE__ */ jsx(Value, {
179
184
  type: "duration",
180
- className: "text-shadow-2xs text-shadow-black/25 tabular-nums"
185
+ className: time.duration
181
186
  })
182
187
  ]
183
188
  }),
184
- /* @__PURE__ */ jsx(CaptionsButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
189
+ /* @__PURE__ */ jsx(PlaybackRateButton, { render: (props) => /* @__PURE__ */ jsx(Button, {
185
190
  variant: "icon",
186
191
  ...props,
187
- children: /* @__PURE__ */ jsx(CaptionsButtonIcon, {
188
- state,
189
- className: icon
190
- })
192
+ className: playbackRate.button
191
193
  }) }),
192
- /* @__PURE__ */ jsx(MuteButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
194
+ /* @__PURE__ */ jsxs(PopoverRoot, {
195
+ openOnHover: true,
196
+ delay: 200,
197
+ closeDelay: 100,
198
+ side: "top",
199
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, { render: /* @__PURE__ */ jsx(MuteButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
200
+ variant: "icon",
201
+ ...props,
202
+ className: iconState.mute.button,
203
+ children: [
204
+ /* @__PURE__ */ jsx(VolumeOffIcon, { className: cn(icon, iconState.mute.volumeOff) }),
205
+ /* @__PURE__ */ jsx(VolumeLowIcon, { className: cn(icon, iconState.mute.volumeLow) }),
206
+ /* @__PURE__ */ jsx(VolumeHighIcon, { className: cn(icon, iconState.mute.volumeHigh) })
207
+ ]
208
+ }) }) }), /* @__PURE__ */ jsx(PopoverPopup, {
209
+ className: cn(popup.base, popup.volume),
210
+ children: /* @__PURE__ */ jsxs(VolumeSliderRoot, {
211
+ orientation: "vertical",
212
+ thumbAlignment: "edge",
213
+ render: (props) => /* @__PURE__ */ jsx(SliderRoot, { ...props }),
214
+ children: [/* @__PURE__ */ jsx(SliderTrack$1, {
215
+ render: (props) => /* @__PURE__ */ jsx(SliderTrack, { ...props }),
216
+ children: /* @__PURE__ */ jsx(SliderFill$1, { render: (props) => /* @__PURE__ */ jsx(SliderFill, { ...props }) })
217
+ }), /* @__PURE__ */ jsx(SliderThumb$1, { render: (props) => /* @__PURE__ */ jsx(SliderThumb, {
218
+ persistent: true,
219
+ ...props
220
+ }) })]
221
+ })
222
+ })]
223
+ }),
224
+ /* @__PURE__ */ jsx(CaptionsButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
193
225
  variant: "icon",
194
226
  ...props,
195
- children: /* @__PURE__ */ jsx(MuteButtonIcon, {
196
- state,
197
- className: icon
198
- })
227
+ className: iconState.captions.button,
228
+ children: [/* @__PURE__ */ jsx(CaptionsOffIcon, { className: cn(icon, iconState.captions.off) }), /* @__PURE__ */ jsx(CaptionsOnIcon, { className: cn(icon, iconState.captions.on) })]
199
229
  }) }),
200
230
  /* @__PURE__ */ jsx(PiPButton, { render: (props) => /* @__PURE__ */ jsx(Button, {
201
231
  variant: "icon",
202
232
  ...props,
203
233
  children: /* @__PURE__ */ jsx(PipIcon, { className: icon })
204
234
  }) }),
205
- /* @__PURE__ */ jsx(FullscreenButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
235
+ /* @__PURE__ */ jsx(FullscreenButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
206
236
  variant: "icon",
207
237
  ...props,
208
- children: /* @__PURE__ */ jsx(FullscreenButtonIcon, {
209
- state,
210
- className: icon
211
- })
238
+ className: iconState.fullscreen.button,
239
+ children: [/* @__PURE__ */ jsx(FullscreenEnterIcon, { className: cn(icon, iconState.fullscreen.enter) }), /* @__PURE__ */ jsx(FullscreenExitIcon, { className: cn(icon, iconState.fullscreen.exit) })]
212
240
  }) })
213
241
  ]
214
242
  }),
215
- /* @__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/50 via-black/30 to-transparent", "backdrop-blur-[0px] backdrop-saturate-120 backdrop-brightness-90", "transition-[opacity,backdrop-filter] ease-out", "duration-300 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") })
243
+ /* @__PURE__ */ jsx("div", { className: overlay }),
244
+ children
216
245
  ]
217
246
  });
218
247
  }
@@ -1 +1 @@
1
- {"version":3,"file":"skin.tailwind.js","names":["Controls.Root","Time.Group","Time.Value"],"sources":["../../../../src/presets/video/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';\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 { VideoSkinProps } from './skin';\n\nconst SEEK_TIME = 10;\n\n/* ------------------------------------ Reused fragments ------------------------------------- */\n\nconst surface = cn(\n 'bg-white/10',\n 'backdrop-blur-3xl backdrop-brightness-90 backdrop-saturate-150',\n // Border and shadow\n 'ring ring-white/5 ring-inset shadow-sm shadow-black/15',\n // Border to enhance contrast on lighter videos\n 'after:absolute after:inset-0 after:ring after:rounded-[inherit] after:ring-black/15 after:pointer-events-none after:z-10',\n // Reduced transparency for users with preference\n '[@media(prefers-reduced-transparency:reduce)]:bg-black/70 [@media(prefers-reduced-transparency:reduce)]:ring-black [@media(prefers-reduced-transparency:reduce)]:after:ring-white/20',\n // High contrast mode\n 'contrast-more:bg-black/90 contrast-more:ring-black contrast-more:after:ring-white/20'\n);\n\nconst icon = cn(\n '[grid-area:1/1] size-4.5 shrink-0',\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 bg-transparent rounded-full',\n 'text-white/90',\n 'text-shadow-2xs text-shadow-black/25',\n 'hover:bg-white/10 hover:text-white hover:no-underline',\n 'focus-visible:bg-white/10 focus-visible:text-white',\n 'focus-visible:outline-blue-500 focus-visible:outline-offset-2',\n 'aria-expanded:bg-white/10 aria-expanded:text-white'\n )\n : cn(\n 'flex items-center justify-center py-2 px-4 bg-white rounded-full',\n 'text-black font-medium',\n 'focus-visible:outline-blue-500 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 VideoSkinTailwind(props: VideoSkinProps): 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,2rem)] 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 // Inner highlight ring (::before)\n 'before:absolute before:pointer-events-none before:rounded-[inherit] before:z-10',\n 'before:inset-px before:ring-1 before:ring-inset before:ring-white/15',\n // Outer border ring (::after)\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/10',\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 <div className={cn('p-1 rounded-full', surface)}>\n <SpinnerIcon className={icon} />\n </div>\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-72 p-3 rounded-[1.75rem] text-white text-sm pointer-events-auto',\n 'group-data-[visible]/error:flex',\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 surface\n )}\n >\n <div className=\"flex flex-col gap-2 px-2 pt-2 pb-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\" className=\"opacity-70\">\n An error occurred while trying to play the video. Please try again.\n </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 // Surface\n surface,\n // Layout\n 'absolute @container/media-controls bottom-3 inset-x-3',\n 'p-[0.175rem] flex items-center gap-[0.075rem]',\n 'text-white rounded-full z-10',\n // Transitions\n 'will-change-[scale,transform,filter,opacity]',\n 'transition-[scale,transform,filter,opacity] ease-out',\n 'delay-0 duration-100 origin-bottom',\n // Hidden state\n 'not-data-[visible]:pointer-events-none not-data-[visible]:blur-[8px]',\n 'not-data-[visible]:scale-90 not-data-[visible]:opacity-0',\n 'not-data-[visible]:delay-500 not-data-[visible]:duration-300',\n // Reduced motion + hidden\n 'motion-reduce:not-data-[visible]:duration-100',\n 'motion-reduce:not-data-[visible]:blur-none',\n 'motion-reduce:not-data-[visible]:scale-100',\n // Wider container\n '@2xl/media-root:p-1 @2xl/media-root:gap-0.5'\n )}\n >\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\">{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=\"@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\">{SEEK_TIME}</span>\n </span>\n </Button>\n )}\n />\n\n <Time.Group className=\"@container/media-time flex items-center flex-1 gap-3 px-2\">\n <Time.Value\n type=\"current\"\n className=\"hidden @2xs/media-time:block text-shadow-2xs text-shadow-black/25 tabular-nums\"\n />\n {/* Temporary spacer */}\n <div className=\"flex-1 h-1 rounded-full bg-white/20\" />\n <Time.Value type=\"duration\" className=\"text-shadow-2xs text-shadow-black/25 tabular-nums\" />\n </Time.Group>\n\n <CaptionsButton\n render={(props, state) => (\n <Button variant=\"icon\" {...props}>\n <CaptionsButtonIcon state={state} className={icon} />\n </Button>\n )}\n />\n\n <MuteButton\n render={(props, state) => (\n <Button variant=\"icon\" {...props}>\n <MuteButtonIcon 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 </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-12 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/50 via-black/30 to-transparent',\n 'backdrop-blur-[0px] backdrop-saturate-120 backdrop-brightness-90',\n // Transitions\n 'transition-[opacity,backdrop-filter] ease-out',\n 'duration-300 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":"skin.tailwind.js","names":["Controls.Root","Time.Group","Time.Value","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/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';\nimport {\n bufferingIndicator,\n button,\n controls,\n error,\n icon,\n iconContainer,\n iconFlipped,\n iconState,\n overlay,\n playbackRate,\n popup,\n root,\n seek,\n slider,\n time,\n} from '@videojs/skins/video/default.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 { VideoSkinProps } from './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 ? slider.thumb.persistent : slider.thumb.interactive, className)}\n {...props}\n />\n );\n});\n\n/* ------------------------------------------ Skin ------------------------------------------- */\n\nexport function VideoSkinTailwind(props: VideoSkinProps): 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.root}>\n <div className={bufferingIndicator.container}>\n <SpinnerIcon className={icon} />\n </div>\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\" className={error.description}>\n An error occurred while trying to play the video. Please try again.\n </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 <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\n <Time.Group className={time.group}>\n <Time.Value type=\"current\" className={time.current} />\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 <Time.Value type=\"duration\" className={time.duration} />\n </Time.Group>\n\n <PlaybackRateButton render={(props) => <Button variant=\"icon\" {...props} className={playbackRate.button} />} />\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 </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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"}
@@ -0,0 +1,90 @@
1
+ import { cn } from "@videojs/utils/style";
2
+
3
+ //#region ../skins/dist/default/video/default.tailwind.js
4
+ const surface = cn("bg-white/10", "backdrop-blur-3xl backdrop-brightness-90 backdrop-saturate-150", "ring ring-white/5 ring-inset shadow-sm shadow-black/15", "after:absolute after:inset-0 after:ring after:rounded-[inherit] after:ring-black/15 after:pointer-events-none after:z-10", "[@media(prefers-reduced-transparency:reduce)]:bg-black/70 [@media(prefers-reduced-transparency:reduce)]:ring-black [@media(prefers-reduced-transparency:reduce)]:after:ring-white/20", "contrast-more:bg-black/90 contrast-more:ring-black contrast-more:after:ring-white/20");
5
+ const icon = cn("block [grid-area:1/1] size-4.5 shrink-0", "drop-shadow-[0_1px_0_var(--tw-drop-shadow-color)] drop-shadow-black/25", "transition-discrete transition-[display,opacity] duration-150 ease-out");
6
+ const iconFlipped = "[scale:-1_1]";
7
+ const iconContainer = "relative";
8
+ const button = {
9
+ base: cn("items-center justify-center shrink-0 border-none cursor-pointer select-none text-center", "font-medium", "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", "focus-visible:outline-blue-500 focus-visible:outline-offset-2"),
10
+ icon: cn("grid w-[2.125rem] aspect-square bg-transparent rounded-full", "text-white/90", "text-shadow-2xs text-shadow-black/25", "hover:bg-white/10 hover:text-white hover:no-underline", "focus-visible:bg-white/10 focus-visible:text-white", "aria-expanded:bg-white/10 aria-expanded:text-white"),
11
+ default: cn("flex py-2 px-4 bg-white rounded-full", "text-black")
12
+ };
13
+ const slider = {
14
+ root: cn("group/slider relative flex flex-1 items-center justify-center rounded-full outline-none", "data-[orientation=horizontal]:min-w-20 data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-5", "data-[orientation=vertical]:w-5 data-[orientation=vertical]:h-20"),
15
+ track: cn("relative isolate overflow-hidden bg-white/20 rounded-[inherit]", "shadow-[0_0_0_1px_oklch(0_0_0/0.05)] select-none", "data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-1", "data-[orientation=vertical]:w-1 data-[orientation=vertical]:h-full"),
16
+ fill: {
17
+ base: "absolute rounded-[inherit] pointer-events-none",
18
+ fill: cn("bg-white", "data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0", "data-[orientation=horizontal]:w-(--media-slider-fill)", "data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0", "data-[orientation=vertical]:h-(--media-slider-fill)"),
19
+ buffer: cn("bg-white/20 duration-250 ease-out", "data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0", "data-[orientation=horizontal]:transition-[width] data-[orientation=horizontal]:w-(--media-slider-buffer)", "data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0", "data-[orientation=vertical]:transition-[height] data-[orientation=vertical]:h-(--media-slider-buffer)")
20
+ },
21
+ thumb: {
22
+ base: cn("z-10 absolute -translate-x-1/2 -translate-y-1/2", "bg-white rounded-full", "ring ring-black/10 shadow-sm shadow-black/15", "transition-[opacity,height,width,outline-offset] duration-150 ease-out select-none", "outline-2 outline-transparent -outline-offset-2", "focus-visible:outline-blue-500 focus-visible:outline-offset-2", "data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:left-(--media-slider-fill)", "data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:top-[calc(100%-var(--media-slider-fill))]"),
23
+ persistent: "size-3",
24
+ interactive: cn("size-2.5", "opacity-0 focus-visible:opacity-100 group-hover/slider:opacity-100", "group-active/slider:size-3")
25
+ }
26
+ };
27
+ const root = cn("block relative isolate overflow-clip @container/media-root", "rounded-(--media-border-radius,2rem) 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]", "before:absolute before:pointer-events-none before:rounded-[inherit] before:z-10", "before:inset-px before:ring-1 before:ring-inset before:ring-white/15", "after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10", "after:inset-0 after:ring-1 after:ring-inset after:ring-black/10", "[&>video]:block [&>video]:w-full [&>video]:h-full [&>video]:rounded-[inherit]", "[&>img]:absolute [&>img]:inset-0 [&>img]:w-full [&>img]:h-full [&>img]:rounded-[inherit]", "[&>img]:object-cover [&>img]:pointer-events-none", "[&>img]:transition-opacity [&>img]:duration-250", "[&>img:not([data-visible])]:opacity-0", "[--media-caption-track-delay:600ms]", "[--media-caption-track-y:-0.5rem]", "has-[[data-controls][data-visible]]:[--media-caption-track-delay:25ms]", "has-[[data-controls][data-visible]]:[--media-caption-track-y:-3.5rem]", "[&_video::-webkit-media-text-track-container]:transition-transform", "[&_video::-webkit-media-text-track-container]:duration-150", "[&_video::-webkit-media-text-track-container]:ease-out", "[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)", "[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)", "[&_video::-webkit-media-text-track-container]:scale-98", "[&_video::-webkit-media-text-track-container]:z-1", "[&_video::-webkit-media-text-track-container]:font-[inherit]", "motion-reduce:[&_video::-webkit-media-text-track-container]:duration-50", "[&:fullscreen]:rounded-none");
28
+ const controls = cn("peer/controls", surface, "absolute @container/media-controls bottom-3 inset-x-3", "p-[0.175rem] flex items-center gap-[0.075rem]", "text-white rounded-full z-10", "will-change-[scale,transform,filter,opacity]", "transition-[scale,transform,filter,opacity] ease-out", "delay-0 duration-100 origin-bottom", "not-data-visible:pointer-events-none not-data-visible:blur-sm", "not-data-visible:scale-90 not-data-visible:opacity-0", "not-data-visible:delay-500 not-data-visible:duration-300", "motion-reduce:not-data-visible:duration-100", "motion-reduce:not-data-visible:blur-none", "motion-reduce:not-data-visible:scale-100", "@2xl/media-root:p-1 @2xl/media-root:gap-0.5");
29
+ const overlay = cn("absolute inset-0 flex flex-col items-start", "pointer-events-none rounded-[inherit]", "opacity-0", "bg-linear-to-t from-black/50 via-black/30 to-transparent", "backdrop-blur-none backdrop-saturate-120 backdrop-brightness-90", "transition-[opacity,backdrop-filter] ease-out", "duration-300 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-sm", "motion-reduce:duration-100");
30
+ const bufferingIndicator = {
31
+ root: "absolute inset-0 hidden items-center justify-center pointer-events-none z-10 text-white data-visible:flex",
32
+ container: cn("p-1 rounded-full", surface)
33
+ };
34
+ const error = {
35
+ root: "peer/error group/error absolute inset-0 z-20 items-center justify-center pointer-events-none hidden data-[visible]:flex",
36
+ dialog: cn("hidden flex-col gap-3 max-w-72 p-3 rounded-[1.75rem] text-white text-sm pointer-events-auto", "group-data-visible/error:flex", "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)]", surface),
37
+ content: "flex flex-col gap-2 px-2 pt-2 pb-1.5",
38
+ title: "font-semibold leading-tight",
39
+ description: "opacity-70",
40
+ actions: "flex gap-2 *:flex-1"
41
+ };
42
+ const time = {
43
+ group: "@container/media-time flex items-center flex-1 gap-3 px-2",
44
+ current: "hidden @2xs/media-time:block text-shadow-2xs text-shadow-black/25 tabular-nums",
45
+ duration: "text-shadow-2xs text-shadow-black/25 tabular-nums"
46
+ };
47
+ const popup = {
48
+ base: cn("m-0 border-0 [--media-popover-side-offset:0.5rem]", surface, "opacity-100 scale-100 origin-bottom blur-none", "transition-[transform,scale,opacity,filter] duration-200", "data-starting-style:opacity-0 data-starting-style:scale-0 data-starting-style:blur-sm", "data-ending-style:opacity-0 data-ending-style:scale-0 data-ending-style:blur-sm", "data-instant:duration-0"),
49
+ volume: "py-2.5 px-1 rounded-full"
50
+ };
51
+ const seek = {
52
+ button: "@max-md/media-controls:hidden",
53
+ label: "text-[0.75em] font-[480] tabular-nums",
54
+ labelForward: "absolute -right-px -bottom-0.75",
55
+ labelBackward: "absolute -left-px -bottom-0.75"
56
+ };
57
+ const playbackRate = { button: `after:content-[attr(data-rate)_'×'] after:w-[4ch] after:tabular-nums` };
58
+ const iconState = {
59
+ play: {
60
+ button: "group",
61
+ restart: "hidden opacity-0 group-data-ended:block group-data-ended:opacity-100",
62
+ play: "hidden opacity-0 group-not-data-ended:group-data-paused:block group-not-data-ended:group-data-paused:opacity-100",
63
+ pause: "hidden opacity-0 group-not-data-paused:group-not-data-ended:block group-not-data-paused:group-not-data-ended:opacity-100"
64
+ },
65
+ mute: {
66
+ button: "group",
67
+ volumeOff: "hidden opacity-0 group-data-muted:block group-data-muted:opacity-100",
68
+ volumeLow: "hidden opacity-0 group-not-data-muted:group-data-[volume-level=low]:block group-not-data-muted:group-data-[volume-level=low]:opacity-100",
69
+ volumeHigh: "hidden opacity-0 group-not-data-muted:group-not-data-[volume-level=low]:block group-not-data-muted:group-not-data-[volume-level=low]:opacity-100"
70
+ },
71
+ fullscreen: {
72
+ button: "group",
73
+ enter: "hidden opacity-0 group-not-data-fullscreen:block group-not-data-fullscreen:opacity-100",
74
+ exit: "hidden opacity-0 group-data-fullscreen:block group-data-fullscreen:opacity-100"
75
+ },
76
+ captions: {
77
+ button: "group",
78
+ off: "hidden opacity-0 group-not-data-active:block group-not-data-active:opacity-100",
79
+ on: "hidden opacity-0 group-data-active:block group-data-active:opacity-100"
80
+ }
81
+ };
82
+ const captions = {
83
+ root: cn("absolute z-20 pointer-events-none text-balance text-base", "inset-x-4 bottom-6", "transition-transform duration-150 ease-out delay-600", "motion-reduce:duration-50", "@xs/media-root:text-2xl", "@3xl/media-root:text-3xl", "@7xl/media-root:text-4xl", "peer-data-visible/controls:-translate-y-12 peer-data-visible/controls:delay-25"),
84
+ container: "max-w-[42ch] mx-auto text-center flex flex-col items-center",
85
+ cue: cn("block py-0.5 px-2 text-white text-center whitespace-pre-wrap leading-1.2", "[text-shadow:0_0_1px_oklab(0_0_0_/_0.7),0_0_8px_oklab(0_0_0_/_0.7)]", "contrast-more:[text-shadow:none] contrast-more:[box-decoration-break:clone] contrast-more:bg-black/70", "*:inline")
86
+ };
87
+
88
+ //#endregion
89
+ export { bufferingIndicator, button, controls, error, icon, iconContainer, iconFlipped, iconState, overlay, playbackRate, popup, root, seek, slider, time };
90
+ //# sourceMappingURL=default.tailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default.tailwind.js","names":[],"sources":["../../../../../../../skins/dist/default/video/default.tailwind.js"],"sourcesContent":["import { cn } from \"@videojs/utils/style\";\n\n//#region src/video/default.tailwind.ts\nconst surface = cn(\"bg-white/10\", \"backdrop-blur-3xl backdrop-brightness-90 backdrop-saturate-150\", \"ring ring-white/5 ring-inset shadow-sm shadow-black/15\", \"after:absolute after:inset-0 after:ring after:rounded-[inherit] after:ring-black/15 after:pointer-events-none after:z-10\", \"[@media(prefers-reduced-transparency:reduce)]:bg-black/70 [@media(prefers-reduced-transparency:reduce)]:ring-black [@media(prefers-reduced-transparency:reduce)]:after:ring-white/20\", \"contrast-more:bg-black/90 contrast-more:ring-black contrast-more:after:ring-white/20\");\nconst icon = cn(\"block [grid-area:1/1] size-4.5 shrink-0\", \"drop-shadow-[0_1px_0_var(--tw-drop-shadow-color)] drop-shadow-black/25\", \"transition-discrete transition-[display,opacity] duration-150 ease-out\");\nconst iconHidden = \"hidden opacity-0\";\nconst iconFlipped = \"[scale:-1_1]\";\nconst iconContainer = \"relative\";\nconst button = {\n\tbase: cn(\"items-center justify-center shrink-0 border-none cursor-pointer select-none text-center\", \"font-medium\", \"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\", \"focus-visible:outline-blue-500 focus-visible:outline-offset-2\"),\n\ticon: cn(\"grid w-[2.125rem] aspect-square bg-transparent rounded-full\", \"text-white/90\", \"text-shadow-2xs text-shadow-black/25\", \"hover:bg-white/10 hover:text-white hover:no-underline\", \"focus-visible:bg-white/10 focus-visible:text-white\", \"aria-expanded:bg-white/10 aria-expanded:text-white\"),\n\tdefault: cn(\"flex py-2 px-4 bg-white rounded-full\", \"text-black\")\n};\nconst slider = {\n\troot: cn(\"group/slider relative flex flex-1 items-center justify-center rounded-full outline-none\", \"data-[orientation=horizontal]:min-w-20 data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-5\", \"data-[orientation=vertical]:w-5 data-[orientation=vertical]:h-20\"),\n\ttrack: cn(\"relative isolate overflow-hidden bg-white/20 rounded-[inherit]\", \"shadow-[0_0_0_1px_oklch(0_0_0/0.05)] select-none\", \"data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-1\", \"data-[orientation=vertical]:w-1 data-[orientation=vertical]:h-full\"),\n\tfill: {\n\t\tbase: \"absolute rounded-[inherit] pointer-events-none\",\n\t\tfill: cn(\"bg-white\", \"data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0\", \"data-[orientation=horizontal]:w-(--media-slider-fill)\", \"data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0\", \"data-[orientation=vertical]:h-(--media-slider-fill)\"),\n\t\tbuffer: cn(\"bg-white/20 duration-250 ease-out\", \"data-[orientation=horizontal]:inset-y-0 data-[orientation=horizontal]:left-0\", \"data-[orientation=horizontal]:transition-[width] data-[orientation=horizontal]:w-(--media-slider-buffer)\", \"data-[orientation=vertical]:inset-x-0 data-[orientation=vertical]:bottom-0\", \"data-[orientation=vertical]:transition-[height] data-[orientation=vertical]:h-(--media-slider-buffer)\")\n\t},\n\tthumb: {\n\t\tbase: cn(\"z-10 absolute -translate-x-1/2 -translate-y-1/2\", \"bg-white rounded-full\", \"ring ring-black/10 shadow-sm shadow-black/15\", \"transition-[opacity,height,width,outline-offset] duration-150 ease-out select-none\", \"outline-2 outline-transparent -outline-offset-2\", \"focus-visible:outline-blue-500 focus-visible:outline-offset-2\", \"data-[orientation=horizontal]:top-1/2 data-[orientation=horizontal]:left-(--media-slider-fill)\", \"data-[orientation=vertical]:left-1/2 data-[orientation=vertical]:top-[calc(100%-var(--media-slider-fill))]\"),\n\t\tpersistent: \"size-3\",\n\t\tinteractive: cn(\"size-2.5\", \"opacity-0 focus-visible:opacity-100 group-hover/slider:opacity-100\", \"group-active/slider:size-3\")\n\t}\n};\nconst root = cn(\"block relative isolate overflow-clip @container/media-root\", \"rounded-(--media-border-radius,2rem) 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]\", \"before:absolute before:pointer-events-none before:rounded-[inherit] before:z-10\", \"before:inset-px before:ring-1 before:ring-inset before:ring-white/15\", \"after:absolute after:pointer-events-none after:rounded-[inherit] after:z-10\", \"after:inset-0 after:ring-1 after:ring-inset after:ring-black/10\", \"[&>video]:block [&>video]:w-full [&>video]:h-full [&>video]:rounded-[inherit]\", \"[&>img]:absolute [&>img]:inset-0 [&>img]:w-full [&>img]:h-full [&>img]:rounded-[inherit]\", \"[&>img]:object-cover [&>img]:pointer-events-none\", \"[&>img]:transition-opacity [&>img]:duration-250\", \"[&>img:not([data-visible])]:opacity-0\", \"[--media-caption-track-delay:600ms]\", \"[--media-caption-track-y:-0.5rem]\", \"has-[[data-controls][data-visible]]:[--media-caption-track-delay:25ms]\", \"has-[[data-controls][data-visible]]:[--media-caption-track-y:-3.5rem]\", \"[&_video::-webkit-media-text-track-container]:transition-transform\", \"[&_video::-webkit-media-text-track-container]:duration-150\", \"[&_video::-webkit-media-text-track-container]:ease-out\", \"[&_video::-webkit-media-text-track-container]:delay-(--media-caption-track-delay)\", \"[&_video::-webkit-media-text-track-container]:translate-y-(--media-caption-track-y)\", \"[&_video::-webkit-media-text-track-container]:scale-98\", \"[&_video::-webkit-media-text-track-container]:z-1\", \"[&_video::-webkit-media-text-track-container]:font-[inherit]\", \"motion-reduce:[&_video::-webkit-media-text-track-container]:duration-50\", \"[&:fullscreen]:rounded-none\");\nconst controls = cn(\"peer/controls\", surface, \"absolute @container/media-controls bottom-3 inset-x-3\", \"p-[0.175rem] flex items-center gap-[0.075rem]\", \"text-white rounded-full z-10\", \"will-change-[scale,transform,filter,opacity]\", \"transition-[scale,transform,filter,opacity] ease-out\", \"delay-0 duration-100 origin-bottom\", \"not-data-visible:pointer-events-none not-data-visible:blur-sm\", \"not-data-visible:scale-90 not-data-visible:opacity-0\", \"not-data-visible:delay-500 not-data-visible:duration-300\", \"motion-reduce:not-data-visible:duration-100\", \"motion-reduce:not-data-visible:blur-none\", \"motion-reduce:not-data-visible:scale-100\", \"@2xl/media-root:p-1 @2xl/media-root:gap-0.5\");\nconst overlay = cn(\"absolute inset-0 flex flex-col items-start\", \"pointer-events-none rounded-[inherit]\", \"opacity-0\", \"bg-linear-to-t from-black/50 via-black/30 to-transparent\", \"backdrop-blur-none backdrop-saturate-120 backdrop-brightness-90\", \"transition-[opacity,backdrop-filter] ease-out\", \"duration-300 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-sm\", \"motion-reduce:duration-100\");\nconst bufferingIndicator = {\n\troot: \"absolute inset-0 hidden items-center justify-center pointer-events-none z-10 text-white data-visible:flex\",\n\tcontainer: cn(\"p-1 rounded-full\", surface)\n};\nconst error = {\n\troot: \"peer/error group/error absolute inset-0 z-20 items-center justify-center pointer-events-none hidden data-[visible]:flex\",\n\tdialog: cn(\"hidden flex-col gap-3 max-w-72 p-3 rounded-[1.75rem] text-white text-sm pointer-events-auto\", \"group-data-visible/error:flex\", \"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)]\", surface),\n\tcontent: \"flex flex-col gap-2 px-2 pt-2 pb-1.5\",\n\ttitle: \"font-semibold leading-tight\",\n\tdescription: \"opacity-70\",\n\tactions: \"flex gap-2 *:flex-1\"\n};\nconst time = {\n\tgroup: \"@container/media-time flex items-center flex-1 gap-3 px-2\",\n\tcurrent: \"hidden @2xs/media-time:block text-shadow-2xs text-shadow-black/25 tabular-nums\",\n\tduration: \"text-shadow-2xs text-shadow-black/25 tabular-nums\"\n};\nconst popup = {\n\tbase: cn(\"m-0 border-0 [--media-popover-side-offset:0.5rem]\", surface, \"opacity-100 scale-100 origin-bottom blur-none\", \"transition-[transform,scale,opacity,filter] duration-200\", \"data-starting-style:opacity-0 data-starting-style:scale-0 data-starting-style:blur-sm\", \"data-ending-style:opacity-0 data-ending-style:scale-0 data-ending-style:blur-sm\", \"data-instant:duration-0\"),\n\tvolume: \"py-2.5 px-1 rounded-full\"\n};\nconst seek = {\n\tbutton: \"@max-md/media-controls:hidden\",\n\tlabel: \"text-[0.75em] font-[480] tabular-nums\",\n\tlabelForward: \"absolute -right-px -bottom-0.75\",\n\tlabelBackward: \"absolute -left-px -bottom-0.75\"\n};\nconst playbackRate = { button: `after:content-[attr(data-rate)_'×'] after:w-[4ch] after:tabular-nums` };\nconst iconState = {\n\tplay: {\n\t\tbutton: \"group\",\n\t\trestart: \"hidden opacity-0 group-data-ended:block group-data-ended:opacity-100\",\n\t\tplay: \"hidden opacity-0 group-not-data-ended:group-data-paused:block group-not-data-ended:group-data-paused:opacity-100\",\n\t\tpause: \"hidden opacity-0 group-not-data-paused:group-not-data-ended:block group-not-data-paused:group-not-data-ended:opacity-100\"\n\t},\n\tmute: {\n\t\tbutton: \"group\",\n\t\tvolumeOff: \"hidden opacity-0 group-data-muted:block group-data-muted:opacity-100\",\n\t\tvolumeLow: \"hidden opacity-0 group-not-data-muted:group-data-[volume-level=low]:block group-not-data-muted:group-data-[volume-level=low]:opacity-100\",\n\t\tvolumeHigh: \"hidden opacity-0 group-not-data-muted:group-not-data-[volume-level=low]:block group-not-data-muted:group-not-data-[volume-level=low]:opacity-100\"\n\t},\n\tfullscreen: {\n\t\tbutton: \"group\",\n\t\tenter: \"hidden opacity-0 group-not-data-fullscreen:block group-not-data-fullscreen:opacity-100\",\n\t\texit: \"hidden opacity-0 group-data-fullscreen:block group-data-fullscreen:opacity-100\"\n\t},\n\tcaptions: {\n\t\tbutton: \"group\",\n\t\toff: \"hidden opacity-0 group-not-data-active:block group-not-data-active:opacity-100\",\n\t\ton: \"hidden opacity-0 group-data-active:block group-data-active:opacity-100\"\n\t}\n};\nconst captions = {\n\troot: cn(\"absolute z-20 pointer-events-none text-balance text-base\", \"inset-x-4 bottom-6\", \"transition-transform duration-150 ease-out delay-600\", \"motion-reduce:duration-50\", \"@xs/media-root:text-2xl\", \"@3xl/media-root:text-3xl\", \"@7xl/media-root:text-4xl\", \"peer-data-visible/controls:-translate-y-12 peer-data-visible/controls:delay-25\"),\n\tcontainer: \"max-w-[42ch] mx-auto text-center flex flex-col items-center\",\n\tcue: cn(\"block py-0.5 px-2 text-white text-center whitespace-pre-wrap leading-1.2\", \"[text-shadow:0_0_1px_oklab(0_0_0_/_0.7),0_0_8px_oklab(0_0_0_/_0.7)]\", \"contrast-more:[text-shadow:none] contrast-more:[box-decoration-break:clone] contrast-more:bg-black/70\", \"*:inline\")\n};\n\n//#endregion\nexport { bufferingIndicator, button, captions, controls, error, icon, iconContainer, iconFlipped, iconHidden, iconState, overlay, playbackRate, popup, root, seek, slider, time };\n//# sourceMappingURL=default.tailwind.js.map"],"mappings":";;;AAGA,MAAM,UAAU,GAAG,eAAe,kEAAkE,0DAA0D,4HAA4H,wLAAwL,uFAAuF;AACziB,MAAM,OAAO,GAAG,2CAA2C,0EAA0E,yEAAyE;AAE9M,MAAM,cAAc;AACpB,MAAM,gBAAgB;AACtB,MAAM,SAAS;CACd,MAAM,GAAG,2FAA2F,eAAe,mDAAmD,4EAA4E,sEAAsE,gEAAgE;CACxX,MAAM,GAAG,+DAA+D,iBAAiB,wCAAwC,yDAAyD,sDAAsD,qDAAqD;CACrS,SAAS,GAAG,wCAAwC,aAAa;CACjE;AACD,MAAM,SAAS;CACd,MAAM,GAAG,2FAA2F,iHAAiH,mEAAmE;CACxR,OAAO,GAAG,kEAAkE,oDAAoD,0EAA0E,qEAAqE;CAC/Q,MAAM;EACL,MAAM;EACN,MAAM,GAAG,YAAY,gFAAgF,yDAAyD,8EAA8E,sDAAsD;EAClS,QAAQ,GAAG,qCAAqC,gFAAgF,4GAA4G,8EAA8E,wGAAwG;EACla;CACD,OAAO;EACN,MAAM,GAAG,mDAAmD,yBAAyB,gDAAgD,sFAAsF,mDAAmD,iEAAiE,kGAAkG,6GAA6G;EAC9hB,YAAY;EACZ,aAAa,GAAG,YAAY,sEAAsE,6BAA6B;EAC/H;CACD;AACD,MAAM,OAAO,GAAG,8DAA8D,iDAAiD,uHAAuH,wBAAwB,6BAA6B,iDAAiD,mFAAmF,wEAAwE,+EAA+E,mEAAmE,iFAAiF,4FAA4F,oDAAoD,mDAAmD,yCAAyC,uCAAuC,qCAAqC,0EAA0E,yEAAyE,sEAAsE,8DAA8D,0DAA0D,qFAAqF,uFAAuF,0DAA0D,qDAAqD,gEAAgE,2EAA2E,8BAA8B;AACvyD,MAAM,WAAW,GAAG,iBAAiB,SAAS,yDAAyD,iDAAiD,gCAAgC,gDAAgD,wDAAwD,sCAAsC,iEAAiE,wDAAwD,4DAA4D,+CAA+C,4CAA4C,4CAA4C,8CAA8C;AAChrB,MAAM,UAAU,GAAG,8CAA8C,yCAAyC,aAAa,4DAA4D,mEAAmE,iDAAiD,0BAA0B,0CAA0C,2CAA2C,sCAAsC,uCAAuC,wCAAwC,mCAAmC,4CAA4C,6BAA6B;AACvnB,MAAM,qBAAqB;CAC1B,MAAM;CACN,WAAW,GAAG,oBAAoB,QAAQ;CAC1C;AACD,MAAM,QAAQ;CACb,MAAM;CACN,QAAQ,GAAG,+FAA+F,iCAAiC,2FAA2F,wCAAwC,wGAAwG,QAAQ;CAC9X,SAAS;CACT,OAAO;CACP,aAAa;CACb,SAAS;CACT;AACD,MAAM,OAAO;CACZ,OAAO;CACP,SAAS;CACT,UAAU;CACV;AACD,MAAM,QAAQ;CACb,MAAM,GAAG,qDAAqD,SAAS,iDAAiD,4DAA4D,yFAAyF,mFAAmF,0BAA0B;CAC1X,QAAQ;CACR;AACD,MAAM,OAAO;CACZ,QAAQ;CACR,OAAO;CACP,cAAc;CACd,eAAe;CACf;AACD,MAAM,eAAe,EAAE,QAAQ,wEAAwE;AACvG,MAAM,YAAY;CACjB,MAAM;EACL,QAAQ;EACR,SAAS;EACT,MAAM;EACN,OAAO;EACP;CACD,MAAM;EACL,QAAQ;EACR,WAAW;EACX,WAAW;EACX,YAAY;EACZ;CACD,YAAY;EACX,QAAQ;EACR,OAAO;EACP,MAAM;EACN;CACD,UAAU;EACT,QAAQ;EACR,KAAK;EACL,IAAI;EACJ;CACD;AACD,MAAM,WAAW;CAChB,MAAM,GAAG,4DAA4D,sBAAsB,wDAAwD,6BAA6B,2BAA2B,4BAA4B,4BAA4B,iFAAiF;CACpV,WAAW;CACX,KAAK,GAAG,4EAA4E,uEAAuE,yGAAyG,WAAW;CAC/Q"}