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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. package/dist/default/_virtual/_rolldown/runtime.js +1 -19
  2. package/dist/default/index.js +10 -33
  3. package/dist/default/player/context.js +11 -1
  4. package/dist/default/player/context.js.map +1 -1
  5. package/dist/default/presets/audio/index.js +2 -8
  6. package/dist/default/presets/audio/skin.css +1 -0
  7. package/dist/default/presets/background/index.js +2 -8
  8. package/dist/default/presets/background/skin.css +1 -0
  9. package/dist/default/presets/video/index.js +2 -8
  10. package/dist/default/presets/video/minimal-skin.css +178 -53
  11. package/dist/default/presets/video/minimal-skin.js +63 -90
  12. package/dist/default/presets/video/minimal-skin.js.map +1 -1
  13. package/dist/default/presets/video/minimal-skin.tailwind.js +126 -107
  14. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -1
  15. package/dist/default/presets/video/skin.css +179 -54
  16. package/dist/default/presets/video/skin.js +61 -88
  17. package/dist/default/presets/video/skin.js.map +1 -1
  18. package/dist/default/presets/video/skin.tailwind.js +121 -104
  19. package/dist/default/presets/video/skin.tailwind.js.map +1 -1
  20. package/dist/default/skins/dist/default/video/default.tailwind.js +90 -0
  21. package/dist/default/skins/dist/default/video/default.tailwind.js.map +1 -0
  22. package/dist/default/skins/dist/default/video/minimal.tailwind.js +86 -0
  23. package/dist/default/skins/dist/default/video/minimal.tailwind.js.map +1 -0
  24. package/dist/default/ui/captions-button/captions-button.js +1 -16
  25. package/dist/default/ui/captions-button/captions-button.js.map +1 -1
  26. package/dist/default/ui/controls/context.js +16 -0
  27. package/dist/default/ui/controls/context.js.map +1 -0
  28. package/dist/default/ui/controls/controls-group.js +4 -1
  29. package/dist/default/ui/controls/controls-group.js.map +1 -1
  30. package/dist/default/ui/controls/controls-root.js +19 -10
  31. package/dist/default/ui/controls/controls-root.js.map +1 -1
  32. package/dist/default/ui/create-context-part.js +29 -0
  33. package/dist/default/ui/create-context-part.js.map +1 -0
  34. package/dist/default/ui/create-media-button.js +52 -0
  35. package/dist/default/ui/create-media-button.js.map +1 -0
  36. package/dist/default/ui/fullscreen-button/fullscreen-button.js +8 -33
  37. package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  38. package/dist/default/ui/hooks/use-slider.js +75 -0
  39. package/dist/default/ui/hooks/use-slider.js.map +1 -0
  40. package/dist/default/ui/mute-button/mute-button.js +8 -36
  41. package/dist/default/ui/mute-button/mute-button.js.map +1 -1
  42. package/dist/default/ui/pip-button/pip-button.js +8 -33
  43. package/dist/default/ui/pip-button/pip-button.js.map +1 -1
  44. package/dist/default/ui/play-button/play-button.js +7 -33
  45. package/dist/default/ui/play-button/play-button.js.map +1 -1
  46. package/dist/default/ui/playback-rate-button/index.js +3 -0
  47. package/dist/default/ui/playback-rate-button/playback-rate-button.js +34 -0
  48. package/dist/default/ui/playback-rate-button/playback-rate-button.js.map +1 -0
  49. package/dist/default/ui/popover/context.js +16 -0
  50. package/dist/default/ui/popover/context.js.map +1 -0
  51. package/dist/default/ui/popover/index.js +4 -0
  52. package/dist/default/ui/popover/index.parts.js +17 -0
  53. package/dist/default/ui/popover/index.parts.js.map +1 -0
  54. package/dist/default/ui/popover/popover-arrow.js +17 -0
  55. package/dist/default/ui/popover/popover-arrow.js.map +1 -0
  56. package/dist/default/ui/popover/popover-popup.js +94 -0
  57. package/dist/default/ui/popover/popover-popup.js.map +1 -0
  58. package/dist/default/ui/popover/popover-root.js +69 -0
  59. package/dist/default/ui/popover/popover-root.js.map +1 -0
  60. package/dist/default/ui/popover/popover-trigger.js +43 -0
  61. package/dist/default/ui/popover/popover-trigger.js.map +1 -0
  62. package/dist/default/ui/poster/poster.js +2 -1
  63. package/dist/default/ui/poster/poster.js.map +1 -1
  64. package/dist/default/ui/seek-button/seek-button.js +7 -34
  65. package/dist/default/ui/seek-button/seek-button.js.map +1 -1
  66. package/dist/default/ui/slider/context.js +22 -0
  67. package/dist/default/ui/slider/context.js.map +1 -0
  68. package/dist/default/ui/slider/index.js +3 -0
  69. package/dist/default/ui/slider/index.parts.js +21 -0
  70. package/dist/default/ui/slider/index.parts.js.map +1 -0
  71. package/dist/default/ui/slider/slider-buffer.js +16 -0
  72. package/dist/default/ui/slider/slider-buffer.js.map +1 -0
  73. package/dist/default/ui/slider/slider-fill.js +16 -0
  74. package/dist/default/ui/slider/slider-fill.js.map +1 -0
  75. package/dist/default/ui/slider/slider-root.js +71 -0
  76. package/dist/default/ui/slider/slider-root.js.map +1 -0
  77. package/dist/default/ui/slider/slider-thumb.js +32 -0
  78. package/dist/default/ui/slider/slider-thumb.js.map +1 -0
  79. package/dist/default/ui/slider/slider-track.js +16 -0
  80. package/dist/default/ui/slider/slider-track.js.map +1 -0
  81. package/dist/default/ui/slider/slider-value.js +32 -0
  82. package/dist/default/ui/slider/slider-value.js.map +1 -0
  83. package/dist/default/ui/thumbnail/thumbnail.js +87 -0
  84. package/dist/default/ui/thumbnail/thumbnail.js.map +1 -0
  85. package/dist/default/ui/time/time-value.js +2 -1
  86. package/dist/default/ui/time/time-value.js.map +1 -1
  87. package/dist/default/ui/time-slider/index.js +3 -0
  88. package/dist/default/ui/time-slider/index.parts.js +21 -0
  89. package/dist/default/ui/time-slider/index.parts.js.map +1 -0
  90. package/dist/default/ui/time-slider/time-slider-root.js +96 -0
  91. package/dist/default/ui/time-slider/time-slider-root.js.map +1 -0
  92. package/dist/default/ui/volume-slider/index.js +3 -0
  93. package/dist/default/ui/volume-slider/index.parts.js +19 -0
  94. package/dist/default/ui/volume-slider/index.parts.js.map +1 -0
  95. package/dist/default/ui/volume-slider/volume-slider-root.js +86 -0
  96. package/dist/default/ui/volume-slider/volume-slider-root.js.map +1 -0
  97. package/dist/default/utils/use-force-render.js +13 -0
  98. package/dist/default/utils/use-force-render.js.map +1 -0
  99. package/dist/default/utils/use-latest-ref.js +20 -0
  100. package/dist/default/utils/use-latest-ref.js.map +1 -0
  101. package/dist/default/utils/use-safe-id.js +22 -0
  102. package/dist/default/utils/use-safe-id.js.map +1 -0
  103. package/dist/dev/_virtual/_rolldown/runtime.js +1 -19
  104. package/dist/dev/index.d.ts +20 -2
  105. package/dist/dev/index.js +10 -33
  106. package/dist/dev/player/context.d.ts.map +1 -1
  107. package/dist/dev/player/context.js +11 -1
  108. package/dist/dev/player/context.js.map +1 -1
  109. package/dist/dev/presets/audio/index.d.ts +2 -9
  110. package/dist/dev/presets/audio/index.js +2 -8
  111. package/dist/dev/presets/audio/skin.css +1 -0
  112. package/dist/dev/presets/background/index.d.ts +2 -9
  113. package/dist/dev/presets/background/index.js +2 -8
  114. package/dist/dev/presets/background/skin.css +1 -0
  115. package/dist/dev/presets/video/index.d.ts +2 -9
  116. package/dist/dev/presets/video/index.js +2 -8
  117. package/dist/dev/presets/video/minimal-skin.css +178 -53
  118. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -1
  119. package/dist/dev/presets/video/minimal-skin.js +61 -88
  120. package/dist/dev/presets/video/minimal-skin.js.map +1 -1
  121. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -1
  122. package/dist/dev/presets/video/minimal-skin.tailwind.js +124 -105
  123. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -1
  124. package/dist/dev/presets/video/skin.css +179 -54
  125. package/dist/dev/presets/video/skin.d.ts.map +1 -1
  126. package/dist/dev/presets/video/skin.js +61 -88
  127. package/dist/dev/presets/video/skin.js.map +1 -1
  128. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -1
  129. package/dist/dev/presets/video/skin.tailwind.js +121 -104
  130. package/dist/dev/presets/video/skin.tailwind.js.map +1 -1
  131. package/dist/dev/skins/dist/default/video/default.tailwind.js +90 -0
  132. package/dist/dev/skins/dist/default/video/default.tailwind.js.map +1 -0
  133. package/dist/dev/skins/dist/default/video/minimal.tailwind.js +86 -0
  134. package/dist/dev/skins/dist/default/video/minimal.tailwind.js.map +1 -0
  135. package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -1
  136. package/dist/dev/ui/captions-button/captions-button.js +1 -16
  137. package/dist/dev/ui/captions-button/captions-button.js.map +1 -1
  138. package/dist/dev/ui/controls/context.js +16 -0
  139. package/dist/dev/ui/controls/context.js.map +1 -0
  140. package/dist/dev/ui/controls/controls-group.d.ts +2 -2
  141. package/dist/dev/ui/controls/controls-group.d.ts.map +1 -1
  142. package/dist/dev/ui/controls/controls-group.js +4 -1
  143. package/dist/dev/ui/controls/controls-group.js.map +1 -1
  144. package/dist/dev/ui/controls/controls-root.d.ts.map +1 -1
  145. package/dist/dev/ui/controls/controls-root.js +19 -10
  146. package/dist/dev/ui/controls/controls-root.js.map +1 -1
  147. package/dist/dev/ui/create-context-part.js +29 -0
  148. package/dist/dev/ui/create-context-part.js.map +1 -0
  149. package/dist/dev/ui/create-media-button.js +55 -0
  150. package/dist/dev/ui/create-media-button.js.map +1 -0
  151. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts +2 -1
  152. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -1
  153. package/dist/dev/ui/fullscreen-button/fullscreen-button.js +9 -37
  154. package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -1
  155. package/dist/dev/ui/hooks/use-slider.d.ts +36 -0
  156. package/dist/dev/ui/hooks/use-slider.d.ts.map +1 -0
  157. package/dist/dev/ui/hooks/use-slider.js +75 -0
  158. package/dist/dev/ui/hooks/use-slider.js.map +1 -0
  159. package/dist/dev/ui/mute-button/mute-button.d.ts +2 -4
  160. package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -1
  161. package/dist/dev/ui/mute-button/mute-button.js +9 -40
  162. package/dist/dev/ui/mute-button/mute-button.js.map +1 -1
  163. package/dist/dev/ui/pip-button/pip-button.d.ts +2 -1
  164. package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -1
  165. package/dist/dev/ui/pip-button/pip-button.js +9 -37
  166. package/dist/dev/ui/pip-button/pip-button.js.map +1 -1
  167. package/dist/dev/ui/play-button/play-button.d.ts +1 -1
  168. package/dist/dev/ui/play-button/play-button.d.ts.map +1 -1
  169. package/dist/dev/ui/play-button/play-button.js +8 -37
  170. package/dist/dev/ui/play-button/play-button.js.map +1 -1
  171. package/dist/dev/ui/playback-rate-button/index.d.ts +2 -0
  172. package/dist/dev/ui/playback-rate-button/index.js +3 -0
  173. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts +30 -0
  174. package/dist/dev/ui/playback-rate-button/playback-rate-button.d.ts.map +1 -0
  175. package/dist/dev/ui/playback-rate-button/playback-rate-button.js +34 -0
  176. package/dist/dev/ui/playback-rate-button/playback-rate-button.js.map +1 -0
  177. package/dist/dev/ui/popover/context.d.ts +17 -0
  178. package/dist/dev/ui/popover/context.d.ts.map +1 -0
  179. package/dist/dev/ui/popover/context.js +16 -0
  180. package/dist/dev/ui/popover/context.js.map +1 -0
  181. package/dist/dev/ui/popover/index.d.ts +3 -0
  182. package/dist/dev/ui/popover/index.js +4 -0
  183. package/dist/dev/ui/popover/index.parts.d.ts +12 -0
  184. package/dist/dev/ui/popover/index.parts.d.ts.map +1 -0
  185. package/dist/dev/ui/popover/index.parts.js +17 -0
  186. package/dist/dev/ui/popover/index.parts.js.map +1 -0
  187. package/dist/dev/ui/popover/popover-arrow.d.ts +15 -0
  188. package/dist/dev/ui/popover/popover-arrow.d.ts.map +1 -0
  189. package/dist/dev/ui/popover/popover-arrow.js +17 -0
  190. package/dist/dev/ui/popover/popover-arrow.js.map +1 -0
  191. package/dist/dev/ui/popover/popover-popup.d.ts +15 -0
  192. package/dist/dev/ui/popover/popover-popup.d.ts.map +1 -0
  193. package/dist/dev/ui/popover/popover-popup.js +94 -0
  194. package/dist/dev/ui/popover/popover-popup.js.map +1 -0
  195. package/dist/dev/ui/popover/popover-root.d.ts +29 -0
  196. package/dist/dev/ui/popover/popover-root.d.ts.map +1 -0
  197. package/dist/dev/ui/popover/popover-root.js +69 -0
  198. package/dist/dev/ui/popover/popover-root.js.map +1 -0
  199. package/dist/dev/ui/popover/popover-trigger.d.ts +15 -0
  200. package/dist/dev/ui/popover/popover-trigger.d.ts.map +1 -0
  201. package/dist/dev/ui/popover/popover-trigger.js +43 -0
  202. package/dist/dev/ui/popover/popover-trigger.js.map +1 -0
  203. package/dist/dev/ui/poster/poster.d.ts.map +1 -1
  204. package/dist/dev/ui/poster/poster.js +2 -1
  205. package/dist/dev/ui/poster/poster.js.map +1 -1
  206. package/dist/dev/ui/seek-button/seek-button.d.ts +1 -1
  207. package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -1
  208. package/dist/dev/ui/seek-button/seek-button.js +8 -38
  209. package/dist/dev/ui/seek-button/seek-button.js.map +1 -1
  210. package/dist/dev/ui/slider/context.js +22 -0
  211. package/dist/dev/ui/slider/context.js.map +1 -0
  212. package/dist/dev/ui/slider/index.d.ts +2 -0
  213. package/dist/dev/ui/slider/index.js +3 -0
  214. package/dist/dev/ui/slider/index.parts.d.ts +14 -0
  215. package/dist/dev/ui/slider/index.parts.d.ts.map +1 -0
  216. package/dist/dev/ui/slider/index.parts.js +21 -0
  217. package/dist/dev/ui/slider/index.parts.js.map +1 -0
  218. package/dist/dev/ui/slider/slider-buffer.d.ts +14 -0
  219. package/dist/dev/ui/slider/slider-buffer.d.ts.map +1 -0
  220. package/dist/dev/ui/slider/slider-buffer.js +16 -0
  221. package/dist/dev/ui/slider/slider-buffer.js.map +1 -0
  222. package/dist/dev/ui/slider/slider-fill.d.ts +14 -0
  223. package/dist/dev/ui/slider/slider-fill.d.ts.map +1 -0
  224. package/dist/dev/ui/slider/slider-fill.js +16 -0
  225. package/dist/dev/ui/slider/slider-fill.js.map +1 -0
  226. package/dist/dev/ui/slider/slider-root.d.ts +19 -0
  227. package/dist/dev/ui/slider/slider-root.d.ts.map +1 -0
  228. package/dist/dev/ui/slider/slider-root.js +71 -0
  229. package/dist/dev/ui/slider/slider-root.js.map +1 -0
  230. package/dist/dev/ui/slider/slider-thumb.d.ts +14 -0
  231. package/dist/dev/ui/slider/slider-thumb.d.ts.map +1 -0
  232. package/dist/dev/ui/slider/slider-thumb.js +32 -0
  233. package/dist/dev/ui/slider/slider-thumb.js.map +1 -0
  234. package/dist/dev/ui/slider/slider-track.d.ts +14 -0
  235. package/dist/dev/ui/slider/slider-track.d.ts.map +1 -0
  236. package/dist/dev/ui/slider/slider-track.js +16 -0
  237. package/dist/dev/ui/slider/slider-track.js.map +1 -0
  238. package/dist/dev/ui/slider/slider-value.d.ts +19 -0
  239. package/dist/dev/ui/slider/slider-value.d.ts.map +1 -0
  240. package/dist/dev/ui/slider/slider-value.js +32 -0
  241. package/dist/dev/ui/slider/slider-value.js.map +1 -0
  242. package/dist/dev/ui/thumbnail/thumbnail.d.ts +17 -0
  243. package/dist/dev/ui/thumbnail/thumbnail.d.ts.map +1 -0
  244. package/dist/dev/ui/thumbnail/thumbnail.js +87 -0
  245. package/dist/dev/ui/thumbnail/thumbnail.js.map +1 -0
  246. package/dist/dev/ui/time/time-value.d.ts.map +1 -1
  247. package/dist/dev/ui/time/time-value.js +2 -1
  248. package/dist/dev/ui/time/time-value.js.map +1 -1
  249. package/dist/dev/ui/time-slider/index.d.ts +2 -0
  250. package/dist/dev/ui/time-slider/index.js +3 -0
  251. package/dist/dev/ui/time-slider/index.parts.d.ts +15 -0
  252. package/dist/dev/ui/time-slider/index.parts.d.ts.map +1 -0
  253. package/dist/dev/ui/time-slider/index.parts.js +21 -0
  254. package/dist/dev/ui/time-slider/index.parts.js.map +1 -0
  255. package/dist/dev/ui/time-slider/time-slider-root.d.ts +17 -0
  256. package/dist/dev/ui/time-slider/time-slider-root.d.ts.map +1 -0
  257. package/dist/dev/ui/time-slider/time-slider-root.js +99 -0
  258. package/dist/dev/ui/time-slider/time-slider-root.js.map +1 -0
  259. package/dist/dev/ui/volume-slider/index.d.ts +2 -0
  260. package/dist/dev/ui/volume-slider/index.js +3 -0
  261. package/dist/dev/ui/volume-slider/index.parts.d.ts +14 -0
  262. package/dist/dev/ui/volume-slider/index.parts.d.ts.map +1 -0
  263. package/dist/dev/ui/volume-slider/index.parts.js +19 -0
  264. package/dist/dev/ui/volume-slider/index.parts.js.map +1 -0
  265. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts +17 -0
  266. package/dist/dev/ui/volume-slider/volume-slider-root.d.ts.map +1 -0
  267. package/dist/dev/ui/volume-slider/volume-slider-root.js +89 -0
  268. package/dist/dev/ui/volume-slider/volume-slider-root.js.map +1 -0
  269. package/dist/dev/utils/use-force-render.js +13 -0
  270. package/dist/dev/utils/use-force-render.js.map +1 -0
  271. package/dist/dev/utils/use-latest-ref.js +20 -0
  272. package/dist/dev/utils/use-latest-ref.js.map +1 -0
  273. package/dist/dev/utils/use-safe-id.js +22 -0
  274. package/dist/dev/utils/use-safe-id.js.map +1 -0
  275. package/package.json +6 -5
  276. package/dist/default/index.js.map +0 -1
  277. package/dist/default/presets/audio/index.js.map +0 -1
  278. package/dist/default/presets/background/index.js.map +0 -1
  279. package/dist/default/presets/video/index.js.map +0 -1
  280. package/dist/dev/index.js.map +0 -1
  281. package/dist/dev/presets/audio/index.d.ts.map +0 -1
  282. package/dist/dev/presets/audio/index.js.map +0 -1
  283. package/dist/dev/presets/background/index.d.ts.map +0 -1
  284. package/dist/dev/presets/background/index.js.map +0 -1
  285. package/dist/dev/presets/video/index.d.ts.map +0 -1
  286. package/dist/dev/presets/video/index.js.map +0 -1
@@ -5,11 +5,22 @@ 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";
13
24
  import CaptionsOffIcon from "../../icons/dist/react/default/captions-off.js";
14
25
  import CaptionsOnIcon from "../../icons/dist/react/default/captions-on.js";
15
26
  import FullscreenEnterIcon from "../../icons/dist/react/default/fullscreen-enter.js";
@@ -24,112 +35,82 @@ import VolumeHighIcon from "../../icons/dist/react/default/volume-high.js";
24
35
  import VolumeLowIcon from "../../icons/dist/react/default/volume-low.js";
25
36
  import VolumeOffIcon from "../../icons/dist/react/default/volume-off.js";
26
37
  import { forwardRef } from "react";
27
- import { Fragment, jsx, jsxs } from "react/jsx-runtime";
38
+ import { jsx, jsxs } from "react/jsx-runtime";
28
39
  import { cn } from "@videojs/utils/style";
29
40
 
30
41
  //#region src/presets/video/skin.tailwind.tsx
31
42
  const SEEK_TIME = 10;
32
- 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");
33
- 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");
34
- const iconHidden = "hidden opacity-0";
35
43
  const Button = forwardRef(function Button({ className, variant, ...props }, ref) {
36
44
  return /* @__PURE__ */ jsx("button", {
37
45
  ref,
38
46
  type: "button",
39
- className: cn("shrink-0 border-none cursor-pointer select-none", "outline-2 outline-transparent -outline-offset-2", "transition-[background-color,color,outline-offset] duration-150 ease-out", "disabled:cursor-not-allowed disabled:opacity-50 disabled:grayscale", variant === "icon" ? cn("grid p-2 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),
40
76
  ...props
41
77
  });
42
78
  });
43
- function PlayButtonIcon({ state, className, ...rest }) {
44
- const { ended, paused } = state;
45
- return /* @__PURE__ */ jsxs(Fragment, { children: [
46
- /* @__PURE__ */ jsx(RestartIcon, {
47
- ...rest,
48
- className: cn(className, { [iconHidden]: !ended })
49
- }),
50
- /* @__PURE__ */ jsx(PlayIcon, {
51
- ...rest,
52
- className: cn(className, { [iconHidden]: ended || !paused })
53
- }),
54
- /* @__PURE__ */ jsx(PauseIcon, {
55
- ...rest,
56
- className: cn(className, { [iconHidden]: paused })
57
- })
58
- ] });
59
- }
60
- function MuteButtonIcon({ state, className, ...rest }) {
61
- const { muted, volumeLevel } = state;
62
- return /* @__PURE__ */ jsxs(Fragment, { children: [
63
- /* @__PURE__ */ jsx(VolumeOffIcon, {
64
- ...rest,
65
- className: cn(className, { [iconHidden]: !muted })
66
- }),
67
- /* @__PURE__ */ jsx(VolumeLowIcon, {
68
- ...rest,
69
- className: cn(className, { [iconHidden]: muted || volumeLevel !== "low" })
70
- }),
71
- /* @__PURE__ */ jsx(VolumeHighIcon, {
72
- ...rest,
73
- className: cn(className, { [iconHidden]: muted || volumeLevel === "low" })
74
- })
75
- ] });
76
- }
77
- function CaptionsButtonIcon({ state, className, ...rest }) {
78
- const { active } = state;
79
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(CaptionsOffIcon, {
80
- ...rest,
81
- className: cn(className, { [iconHidden]: active })
82
- }), /* @__PURE__ */ jsx(CaptionsOnIcon, {
83
- ...rest,
84
- className: cn(className, { [iconHidden]: !active })
85
- })] });
86
- }
87
- function FullscreenButtonIcon({ state, className, ...rest }) {
88
- const { fullscreen } = state;
89
- return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx(FullscreenExitIcon, {
90
- ...rest,
91
- className: cn(className, { [iconHidden]: !fullscreen })
92
- }), /* @__PURE__ */ jsx(FullscreenEnterIcon, {
93
- ...rest,
94
- className: cn(className, { [iconHidden]: fullscreen })
95
- })] });
96
- }
97
79
  function VideoSkinTailwind(props) {
98
80
  const { children, className, ...rest } = props;
99
81
  return /* @__PURE__ */ jsxs(Container, {
100
- 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),
101
83
  ...rest,
102
84
  children: [
103
- children,
104
- /* @__PURE__ */ jsx(BufferingIndicator, { render: (props, state) => state.visible ? /* @__PURE__ */ jsx("div", {
85
+ /* @__PURE__ */ jsx(BufferingIndicator, { render: (props) => /* @__PURE__ */ jsx("div", {
105
86
  ...props,
106
- className: "absolute inset-0 flex items-center justify-center pointer-events-none z-10 text-white",
87
+ className: bufferingIndicator.root,
107
88
  children: /* @__PURE__ */ jsx("div", {
108
- className: cn("p-1 rounded-full", surface),
89
+ className: bufferingIndicator.container,
109
90
  children: /* @__PURE__ */ jsx(SpinnerIcon, { className: icon })
110
91
  })
111
- }) : null }),
92
+ }) }),
112
93
  /* @__PURE__ */ jsx(ErrorDialog, {
113
94
  "aria-labelledby": "media-error-title",
114
95
  "aria-describedby": "media-error-description",
115
96
  render: (props, { onDismiss }) => /* @__PURE__ */ jsx("div", {
116
97
  ...props,
117
- 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,
118
99
  children: /* @__PURE__ */ jsxs("div", {
119
- 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,
120
101
  children: [/* @__PURE__ */ jsxs("div", {
121
- className: "flex flex-col gap-2 px-2 pt-2 pb-1.5",
102
+ className: error.content,
122
103
  children: [/* @__PURE__ */ jsx("p", {
123
104
  id: "media-error-title",
124
- className: "font-semibold leading-tight",
105
+ className: error.title,
125
106
  children: "Something went wrong."
126
107
  }), /* @__PURE__ */ jsx("p", {
127
108
  id: "media-error-description",
128
- className: "opacity-70",
109
+ className: error.description,
129
110
  children: "An error occurred while trying to play the video. Please try again."
130
111
  })]
131
112
  }), /* @__PURE__ */ jsx("div", {
132
- className: "flex gap-2 *:flex-1",
113
+ className: error.actions,
133
114
  children: /* @__PURE__ */ jsx(Button, {
134
115
  onClick: onDismiss,
135
116
  children: "OK"
@@ -139,26 +120,29 @@ function VideoSkinTailwind(props) {
139
120
  })
140
121
  }),
141
122
  /* @__PURE__ */ jsxs(ControlsRoot, {
142
- 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,
143
125
  children: [
144
- /* @__PURE__ */ jsx(PlayButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
126
+ /* @__PURE__ */ jsx(PlayButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
145
127
  variant: "icon",
146
128
  ...props,
147
- children: /* @__PURE__ */ jsx(PlayButtonIcon, {
148
- state,
149
- className: icon
150
- })
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
+ ]
151
135
  }) }),
152
136
  /* @__PURE__ */ jsx(SeekButton, {
153
137
  seconds: -SEEK_TIME,
154
138
  render: (props) => /* @__PURE__ */ jsx(Button, {
155
139
  variant: "icon",
156
140
  ...props,
157
- className: "@max-md/media-controls:hidden",
141
+ className: seek.button,
158
142
  children: /* @__PURE__ */ jsxs("span", {
159
- className: "relative",
160
- children: [/* @__PURE__ */ jsx(SeekIcon, { className: cn(icon, "[scale:-1_1]") }), /* @__PURE__ */ jsx("span", {
161
- 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),
162
146
  children: SEEK_TIME
163
147
  })]
164
148
  })
@@ -169,62 +153,95 @@ function VideoSkinTailwind(props) {
169
153
  render: (props) => /* @__PURE__ */ jsx(Button, {
170
154
  variant: "icon",
171
155
  ...props,
172
- className: "@max-md/media-controls:hidden",
156
+ className: seek.button,
173
157
  children: /* @__PURE__ */ jsxs("span", {
174
- className: "relative",
158
+ className: iconContainer,
175
159
  children: [/* @__PURE__ */ jsx(SeekIcon, { className: icon }), /* @__PURE__ */ jsx("span", {
176
- className: "absolute right-0 -bottom-0.75 text-[0.75em] font-[480] tabular-nums",
160
+ className: cn(seek.label, seek.labelForward),
177
161
  children: SEEK_TIME
178
162
  })]
179
163
  })
180
164
  })
181
165
  }),
182
166
  /* @__PURE__ */ jsxs(Group, {
183
- className: "@container/media-time flex items-center flex-1 gap-3 px-2",
167
+ className: time.group,
184
168
  children: [
185
169
  /* @__PURE__ */ jsx(Value, {
186
170
  type: "current",
187
- 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 }) })]
188
182
  }),
189
- /* @__PURE__ */ jsx("div", { className: "flex-1 h-1 rounded-full bg-white/20" }),
190
183
  /* @__PURE__ */ jsx(Value, {
191
184
  type: "duration",
192
- className: "text-shadow-2xs text-shadow-black/25 tabular-nums"
185
+ className: time.duration
193
186
  })
194
187
  ]
195
188
  }),
196
- /* @__PURE__ */ jsx(CaptionsButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
189
+ /* @__PURE__ */ jsx(PlaybackRateButton, { render: (props) => /* @__PURE__ */ jsx(Button, {
197
190
  variant: "icon",
198
191
  ...props,
199
- children: /* @__PURE__ */ jsx(CaptionsButtonIcon, {
200
- state,
201
- className: icon
202
- })
192
+ className: playbackRate.button
203
193
  }) }),
204
- /* @__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, {
205
225
  variant: "icon",
206
226
  ...props,
207
- children: /* @__PURE__ */ jsx(MuteButtonIcon, {
208
- state,
209
- className: icon
210
- })
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) })]
211
229
  }) }),
212
230
  /* @__PURE__ */ jsx(PiPButton, { render: (props) => /* @__PURE__ */ jsx(Button, {
213
231
  variant: "icon",
214
232
  ...props,
215
233
  children: /* @__PURE__ */ jsx(PipIcon, { className: icon })
216
234
  }) }),
217
- /* @__PURE__ */ jsx(FullscreenButton, { render: (props, state) => /* @__PURE__ */ jsx(Button, {
235
+ /* @__PURE__ */ jsx(FullscreenButton, { render: (props) => /* @__PURE__ */ jsxs(Button, {
218
236
  variant: "icon",
219
237
  ...props,
220
- children: /* @__PURE__ */ jsx(FullscreenButtonIcon, {
221
- state,
222
- className: icon
223
- })
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) })]
224
240
  }) })
225
241
  ]
226
242
  }),
227
- /* @__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
228
245
  ]
229
246
  });
230
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"}