@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
@@ -0,0 +1,94 @@
1
+ 'use client';
2
+
3
+ import { useComposedRefs } from "../../utils/use-composed-refs.js";
4
+ import { renderElement } from "../../utils/use-render.js";
5
+ import { usePopoverContext } from "./context.js";
6
+ import { getAnchorPositionStyle, resolveOffsets } from "@videojs/core/dom";
7
+ import { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from "react";
8
+ import { supportsAnchorPositioning } from "@videojs/utils/dom";
9
+
10
+ //#region src/ui/popover/popover-popup.tsx
11
+ const POPOVER_RESET = {
12
+ position: "fixed",
13
+ inset: "auto",
14
+ margin: 0
15
+ };
16
+ /** Container for the popover content. Positioned relative to the trigger using CSS anchor positioning with a JavaScript fallback. */
17
+ const PopoverPopup = forwardRef(function PopoverPopup({ render, className, style, ...elementProps }, forwardedRef) {
18
+ const { core, popover, state, stateAttrMap, anchorName, popupId } = usePopoverContext();
19
+ const internalRef = useRef(null);
20
+ const composedRef = useComposedRefs(forwardedRef, useCallback((el) => {
21
+ popover.setPopupElement(el);
22
+ }, [popover]), internalRef);
23
+ const posOpts = useMemo(() => ({
24
+ side: state.side,
25
+ align: state.align
26
+ }), [state.side, state.align]);
27
+ const anchorStyle = useMemo(() => {
28
+ if (!supportsAnchorPositioning()) return null;
29
+ return getAnchorPositionStyle(anchorName, posOpts);
30
+ }, [anchorName, posOpts]);
31
+ const [manualStyle, setManualStyle] = useState(null);
32
+ useLayoutEffect(() => {
33
+ if (supportsAnchorPositioning()) return;
34
+ if (!state.open) {
35
+ setManualStyle(null);
36
+ return;
37
+ }
38
+ function measure() {
39
+ const triggerEl = popover.triggerElement;
40
+ const popupEl = internalRef.current;
41
+ if (!triggerEl || !popupEl) return;
42
+ setManualStyle(getAnchorPositionStyle(anchorName, posOpts, triggerEl.getBoundingClientRect(), popupEl.getBoundingClientRect(), document.documentElement.getBoundingClientRect(), resolveOffsets(popupEl)));
43
+ }
44
+ measure();
45
+ let rafId = 0;
46
+ function reposition() {
47
+ cancelAnimationFrame(rafId);
48
+ rafId = requestAnimationFrame(measure);
49
+ }
50
+ window.addEventListener("scroll", reposition, {
51
+ capture: true,
52
+ passive: true
53
+ });
54
+ window.addEventListener("resize", reposition);
55
+ return () => {
56
+ cancelAnimationFrame(rafId);
57
+ window.removeEventListener("scroll", reposition, true);
58
+ window.removeEventListener("resize", reposition);
59
+ };
60
+ }, [
61
+ state.open,
62
+ anchorName,
63
+ posOpts,
64
+ popover
65
+ ]);
66
+ const positioningStyle = anchorStyle ?? manualStyle ?? POPOVER_RESET;
67
+ if (!state.open) return null;
68
+ const { onFocusOut, ...restPopupProps } = popover.popupProps;
69
+ return renderElement("div", {
70
+ render,
71
+ className,
72
+ style
73
+ }, {
74
+ state,
75
+ stateAttrMap,
76
+ ref: composedRef,
77
+ props: [
78
+ {
79
+ id: popupId,
80
+ style: positioningStyle,
81
+ ...core.getPopupAttrs(state)
82
+ },
83
+ {
84
+ ...restPopupProps,
85
+ onBlur: onFocusOut
86
+ },
87
+ elementProps
88
+ ]
89
+ });
90
+ });
91
+
92
+ //#endregion
93
+ export { PopoverPopup };
94
+ //# sourceMappingURL=popover-popup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover-popup.js","names":[],"sources":["../../../../src/ui/popover/popover-popup.tsx"],"sourcesContent":["'use client';\n\nimport type { PopoverState } from '@videojs/core';\nimport { getAnchorPositionStyle, resolveOffsets } from '@videojs/core/dom';\nimport { supportsAnchorPositioning } from '@videojs/utils/dom';\nimport type { CSSProperties } from 'react';\nimport { forwardRef, useCallback, useLayoutEffect, useMemo, useRef, useState } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { useComposedRefs } from '../../utils/use-composed-refs';\nimport { renderElement } from '../../utils/use-render';\nimport { usePopoverContext } from './context';\n\nexport interface PopoverPopupProps extends UIComponentProps<'div', PopoverState> {}\n\nconst POPOVER_RESET: CSSProperties = { position: 'fixed', inset: 'auto', margin: 0 };\n\n/** Container for the popover content. Positioned relative to the trigger using CSS anchor positioning with a JavaScript fallback. */\nexport const PopoverPopup = forwardRef<HTMLDivElement, PopoverPopupProps>(function PopoverPopup(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { core, popover, state, stateAttrMap, anchorName, popupId } = usePopoverContext();\n const internalRef = useRef<HTMLDivElement>(null);\n\n const popupRef = useCallback(\n (el: HTMLDivElement | null) => {\n popover.setPopupElement(el);\n },\n [popover]\n );\n\n const composedRef = useComposedRefs(forwardedRef, popupRef, internalRef);\n\n // --- Positioning ---\n\n const posOpts = useMemo(() => ({ side: state.side, align: state.align }), [state.side, state.align]);\n\n // CSS Anchor Positioning — computed from state, no measurement needed.\n // getAnchorPositionStyle returns camelCase keys, directly compatible\n // with React's style prop.\n const anchorStyle = useMemo(() => {\n if (!supportsAnchorPositioning()) return null;\n return getAnchorPositionStyle(anchorName, posOpts) as CSSProperties;\n }, [anchorName, posOpts]);\n\n // Manual fallback — measure rects after layout, before paint.\n const [manualStyle, setManualStyle] = useState<CSSProperties | null>(null);\n\n useLayoutEffect(() => {\n if (supportsAnchorPositioning()) return;\n if (!state.open) {\n setManualStyle(null);\n return;\n }\n\n function measure(): void {\n const triggerEl = popover.triggerElement;\n const popupEl = internalRef.current;\n if (!triggerEl || !popupEl) return;\n\n const triggerRect = triggerEl.getBoundingClientRect();\n const popupRect = popupEl.getBoundingClientRect();\n const boundaryRect = document.documentElement.getBoundingClientRect();\n const offsets = resolveOffsets(popupEl);\n\n setManualStyle(\n getAnchorPositionStyle(anchorName, posOpts, triggerRect, popupRect, boundaryRect, offsets) as CSSProperties\n );\n }\n\n measure();\n\n // Recompute on scroll/resize so the popover tracks its trigger.\n let rafId = 0;\n function reposition(): void {\n cancelAnimationFrame(rafId);\n rafId = requestAnimationFrame(measure);\n }\n\n window.addEventListener('scroll', reposition, { capture: true, passive: true });\n window.addEventListener('resize', reposition);\n\n return () => {\n cancelAnimationFrame(rafId);\n window.removeEventListener('scroll', reposition, true);\n window.removeEventListener('resize', reposition);\n };\n }, [state.open, anchorName, posOpts, popover]);\n\n // Anchor path uses computed styles; manual path uses measured styles;\n // fallback resets UA [popover] defaults until positioning is computed.\n const positioningStyle = anchorStyle ?? manualStyle ?? POPOVER_RESET;\n\n // --- Visibility ---\n\n if (!state.open) {\n return null;\n }\n\n // Remap DOM focus events to React synthetic event names.\n const { onFocusOut, ...restPopupProps } = popover.popupProps;\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: composedRef,\n props: [\n {\n id: popupId,\n style: positioningStyle,\n ...core.getPopupAttrs(state),\n },\n { ...restPopupProps, onBlur: onFocusOut },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace PopoverPopup {\n export type Props = PopoverPopupProps;\n export type State = PopoverState;\n}\n"],"mappings":";;;;;;;;;;AAeA,MAAM,gBAA+B;CAAE,UAAU;CAAS,OAAO;CAAQ,QAAQ;CAAG;;AAGpF,MAAa,eAAe,WAA8C,SAAS,aACjF,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,MAAM,SAAS,OAAO,cAAc,YAAY,YAAY,mBAAmB;CACvF,MAAM,cAAc,OAAuB,KAAK;CAShD,MAAM,cAAc,gBAAgB,cAPnB,aACd,OAA8B;AAC7B,UAAQ,gBAAgB,GAAG;IAE7B,CAAC,QAAQ,CACV,EAE2D,YAAY;CAIxE,MAAM,UAAU,eAAe;EAAE,MAAM,MAAM;EAAM,OAAO,MAAM;EAAO,GAAG,CAAC,MAAM,MAAM,MAAM,MAAM,CAAC;CAKpG,MAAM,cAAc,cAAc;AAChC,MAAI,CAAC,2BAA2B,CAAE,QAAO;AACzC,SAAO,uBAAuB,YAAY,QAAQ;IACjD,CAAC,YAAY,QAAQ,CAAC;CAGzB,MAAM,CAAC,aAAa,kBAAkB,SAA+B,KAAK;AAE1E,uBAAsB;AACpB,MAAI,2BAA2B,CAAE;AACjC,MAAI,CAAC,MAAM,MAAM;AACf,kBAAe,KAAK;AACpB;;EAGF,SAAS,UAAgB;GACvB,MAAM,YAAY,QAAQ;GAC1B,MAAM,UAAU,YAAY;AAC5B,OAAI,CAAC,aAAa,CAAC,QAAS;AAO5B,kBACE,uBAAuB,YAAY,SANjB,UAAU,uBAAuB,EACnC,QAAQ,uBAAuB,EAC5B,SAAS,gBAAgB,uBAAuB,EACrD,eAAe,QAAQ,CAGqD,CAC3F;;AAGH,WAAS;EAGT,IAAI,QAAQ;EACZ,SAAS,aAAmB;AAC1B,wBAAqB,MAAM;AAC3B,WAAQ,sBAAsB,QAAQ;;AAGxC,SAAO,iBAAiB,UAAU,YAAY;GAAE,SAAS;GAAM,SAAS;GAAM,CAAC;AAC/E,SAAO,iBAAiB,UAAU,WAAW;AAE7C,eAAa;AACX,wBAAqB,MAAM;AAC3B,UAAO,oBAAoB,UAAU,YAAY,KAAK;AACtD,UAAO,oBAAoB,UAAU,WAAW;;IAEjD;EAAC,MAAM;EAAM;EAAY;EAAS;EAAQ,CAAC;CAI9C,MAAM,mBAAmB,eAAe,eAAe;AAIvD,KAAI,CAAC,MAAM,KACT,QAAO;CAIT,MAAM,EAAE,YAAY,GAAG,mBAAmB,QAAQ;AAElD,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK;EACL,OAAO;GACL;IACE,IAAI;IACJ,OAAO;IACP,GAAG,KAAK,cAAc,MAAM;IAC7B;GACD;IAAE,GAAG;IAAgB,QAAQ;IAAY;GACzC;GACD;EACF,CACF;EACD"}
@@ -0,0 +1,29 @@
1
+ import { PopoverChangeDetails } from "@videojs/core/dom";
2
+ import { ReactNode } from "react";
3
+ import { PopoverProps } from "@videojs/core";
4
+
5
+ //#region src/ui/popover/popover-root.d.ts
6
+ interface PopoverRootProps extends PopoverProps {
7
+ /** Called when the popover open state changes (fires immediately, before animations). */
8
+ onOpenChange?: (open: boolean, details: PopoverChangeDetails) => void;
9
+ /** Called after open/close animations complete. */
10
+ onOpenChangeComplete?: (open: boolean) => void;
11
+ children?: ReactNode;
12
+ }
13
+ declare function PopoverRoot({
14
+ open: controlledOpen,
15
+ defaultOpen,
16
+ onOpenChange: onOpenChangeProp,
17
+ onOpenChangeComplete: onOpenChangeCompleteProp,
18
+ openOnHover,
19
+ delay,
20
+ closeDelay,
21
+ children,
22
+ ...coreProps
23
+ }: PopoverRootProps): ReactNode;
24
+ declare namespace PopoverRoot {
25
+ type Props = PopoverRootProps;
26
+ }
27
+ //#endregion
28
+ export { PopoverRoot, PopoverRootProps };
29
+ //# sourceMappingURL=popover-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover-root.d.ts","names":[],"sources":["../../../../src/ui/popover/popover-root.tsx"],"mappings":";;;;;UAYiB,gBAAA,SAAyB,YAAA;;EAExC,YAAA,IAAgB,IAAA,WAAe,OAAA,EAAS,oBAAA;EAFR;EAIhC,oBAAA,IAAwB,IAAA;EACxB,QAAA,GAAW,SAAA;AAAA;AAAA,iBAGG,WAAA,CAAA;EACd,IAAA,EAAM,cAAA;EACN,WAAA;EACA,YAAA,EAAc,gBAAA;EACd,oBAAA,EAAsB,wBAAA;EACtB,WAAA;EACA,KAAA;EACA,UAAA;EACA,QAAA;EAAA,GACG;AAAA,GACF,gBAAA,GAAmB,SAAA;AAAA,kBAuEL,WAAA;EAAA,KACH,KAAA,GAAQ,gBAAA;AAAA"}
@@ -0,0 +1,69 @@
1
+ 'use client';
2
+
3
+ import { useLatestRef } from "../../utils/use-latest-ref.js";
4
+ import { PopoverContextProvider } from "./context.js";
5
+ import { useSafeId } from "../../utils/use-safe-id.js";
6
+ import { createPopover, createTransition } from "@videojs/core/dom";
7
+ import { useSnapshot } from "@videojs/store/react";
8
+ import { useEffect, useState } from "react";
9
+ import { jsx } from "react/jsx-runtime";
10
+ import { PopoverCore, PopoverDataAttrs } from "@videojs/core";
11
+
12
+ //#region src/ui/popover/popover-root.tsx
13
+ function PopoverRoot({ open: controlledOpen, defaultOpen = PopoverCore.defaultProps.defaultOpen, onOpenChange: onOpenChangeProp, onOpenChangeComplete: onOpenChangeCompleteProp, openOnHover = PopoverCore.defaultProps.openOnHover, delay = PopoverCore.defaultProps.delay, closeDelay = PopoverCore.defaultProps.closeDelay, children, ...coreProps }) {
14
+ const [core] = useState(() => new PopoverCore(coreProps));
15
+ core.setProps(coreProps);
16
+ const isControlled = controlledOpen !== void 0;
17
+ const onOpenChangeRef = useLatestRef(onOpenChangeProp);
18
+ const onOpenChangeCompleteRef = useLatestRef(onOpenChangeCompleteProp);
19
+ const closeOnEscapeRef = useLatestRef(coreProps.closeOnEscape);
20
+ const closeOnOutsideClickRef = useLatestRef(coreProps.closeOnOutsideClick);
21
+ const openOnHoverRef = useLatestRef(openOnHover);
22
+ const delayRef = useLatestRef(delay);
23
+ const closeDelayRef = useLatestRef(closeDelay);
24
+ const [popover] = useState(() => {
25
+ const instance = createPopover({
26
+ transition: createTransition(),
27
+ onOpenChange: (nextOpen, details) => {
28
+ onOpenChangeRef.current?.(nextOpen, details);
29
+ },
30
+ onOpenChangeComplete: (nextOpen) => {
31
+ onOpenChangeCompleteRef.current?.(nextOpen);
32
+ },
33
+ closeOnEscape: () => closeOnEscapeRef.current ?? PopoverCore.defaultProps.closeOnEscape,
34
+ closeOnOutsideClick: () => closeOnOutsideClickRef.current ?? PopoverCore.defaultProps.closeOnOutsideClick,
35
+ openOnHover: () => openOnHoverRef.current,
36
+ delay: () => delayRef.current,
37
+ closeDelay: () => closeDelayRef.current
38
+ });
39
+ if (!isControlled && defaultOpen) instance.open("click");
40
+ return instance;
41
+ });
42
+ const anchorName = useSafeId();
43
+ const popupId = useSafeId("popup-");
44
+ useEffect(() => {
45
+ if (controlledOpen === void 0) return;
46
+ const { active: inputOpen } = popover.input.current;
47
+ if (controlledOpen === inputOpen) return;
48
+ if (controlledOpen) popover.open("click");
49
+ else popover.close("click");
50
+ }, [controlledOpen, popover]);
51
+ useEffect(() => () => popover.destroy(), [popover]);
52
+ const input = useSnapshot(popover.input);
53
+ core.setInput(input);
54
+ return /* @__PURE__ */ jsx(PopoverContextProvider, {
55
+ value: {
56
+ core,
57
+ popover,
58
+ state: core.getState(),
59
+ stateAttrMap: PopoverDataAttrs,
60
+ anchorName,
61
+ popupId
62
+ },
63
+ children
64
+ });
65
+ }
66
+
67
+ //#endregion
68
+ export { PopoverRoot };
69
+ //# sourceMappingURL=popover-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover-root.js","names":[],"sources":["../../../../src/ui/popover/popover-root.tsx"],"sourcesContent":["'use client';\n\nimport { type PopoverProps as CorePopoverProps, PopoverCore, PopoverDataAttrs } from '@videojs/core';\nimport { createPopover, createTransition, type PopoverChangeDetails } from '@videojs/core/dom';\nimport { useSnapshot } from '@videojs/store/react';\nimport type { ReactNode } from 'react';\nimport { useEffect, useState } from 'react';\n\nimport { useLatestRef } from '../../utils/use-latest-ref';\nimport { useSafeId } from '../../utils/use-safe-id';\nimport { PopoverContextProvider } from './context';\n\nexport interface PopoverRootProps extends CorePopoverProps {\n /** Called when the popover open state changes (fires immediately, before animations). */\n onOpenChange?: (open: boolean, details: PopoverChangeDetails) => void;\n /** Called after open/close animations complete. */\n onOpenChangeComplete?: (open: boolean) => void;\n children?: ReactNode;\n}\n\nexport function PopoverRoot({\n open: controlledOpen,\n defaultOpen = PopoverCore.defaultProps.defaultOpen,\n onOpenChange: onOpenChangeProp,\n onOpenChangeComplete: onOpenChangeCompleteProp,\n openOnHover = PopoverCore.defaultProps.openOnHover,\n delay = PopoverCore.defaultProps.delay,\n closeDelay = PopoverCore.defaultProps.closeDelay,\n children,\n ...coreProps\n}: PopoverRootProps): ReactNode {\n const [core] = useState(() => new PopoverCore(coreProps));\n core.setProps(coreProps);\n\n const isControlled = controlledOpen !== undefined;\n\n // Keep refs that always point to the latest values so the\n // createPopover closure never reads stale props.\n const onOpenChangeRef = useLatestRef(onOpenChangeProp);\n const onOpenChangeCompleteRef = useLatestRef(onOpenChangeCompleteProp);\n const closeOnEscapeRef = useLatestRef(coreProps.closeOnEscape);\n const closeOnOutsideClickRef = useLatestRef(coreProps.closeOnOutsideClick);\n const openOnHoverRef = useLatestRef(openOnHover);\n const delayRef = useLatestRef(delay);\n const closeDelayRef = useLatestRef(closeDelay);\n\n const [popover] = useState(() => {\n const instance = createPopover({\n transition: createTransition(),\n onOpenChange: (nextOpen: boolean, details: PopoverChangeDetails) => {\n onOpenChangeRef.current?.(nextOpen, details);\n },\n onOpenChangeComplete: (nextOpen: boolean) => {\n onOpenChangeCompleteRef.current?.(nextOpen);\n },\n closeOnEscape: () => closeOnEscapeRef.current ?? PopoverCore.defaultProps.closeOnEscape,\n closeOnOutsideClick: () => closeOnOutsideClickRef.current ?? PopoverCore.defaultProps.closeOnOutsideClick,\n openOnHover: () => openOnHoverRef.current,\n delay: () => delayRef.current,\n closeDelay: () => closeDelayRef.current,\n });\n\n // Apply defaultOpen on creation (uncontrolled only)\n if (!isControlled && defaultOpen) {\n instance.open('click');\n }\n\n return instance;\n });\n\n const anchorName = useSafeId();\n const popupId = useSafeId('popup-');\n\n // Sync controlled open prop -> internal input state.\n useEffect(() => {\n if (controlledOpen === undefined) return;\n\n const { active: inputOpen } = popover.input.current;\n if (controlledOpen === inputOpen) return;\n\n if (controlledOpen) {\n popover.open('click');\n } else {\n popover.close('click');\n }\n }, [controlledOpen, popover]);\n\n // Cleanup on unmount\n useEffect(() => () => popover.destroy(), [popover]);\n\n const input = useSnapshot(popover.input);\n core.setInput(input);\n const state = core.getState();\n\n return (\n <PopoverContextProvider value={{ core, popover, state, stateAttrMap: PopoverDataAttrs, anchorName, popupId }}>\n {children}\n </PopoverContextProvider>\n );\n}\n\nexport namespace PopoverRoot {\n export type Props = PopoverRootProps;\n}\n"],"mappings":";;;;;;;;;;;;AAoBA,SAAgB,YAAY,EAC1B,MAAM,gBACN,cAAc,YAAY,aAAa,aACvC,cAAc,kBACd,sBAAsB,0BACtB,cAAc,YAAY,aAAa,aACvC,QAAQ,YAAY,aAAa,OACjC,aAAa,YAAY,aAAa,YACtC,UACA,GAAG,aAC2B;CAC9B,MAAM,CAAC,QAAQ,eAAe,IAAI,YAAY,UAAU,CAAC;AACzD,MAAK,SAAS,UAAU;CAExB,MAAM,eAAe,mBAAmB;CAIxC,MAAM,kBAAkB,aAAa,iBAAiB;CACtD,MAAM,0BAA0B,aAAa,yBAAyB;CACtE,MAAM,mBAAmB,aAAa,UAAU,cAAc;CAC9D,MAAM,yBAAyB,aAAa,UAAU,oBAAoB;CAC1E,MAAM,iBAAiB,aAAa,YAAY;CAChD,MAAM,WAAW,aAAa,MAAM;CACpC,MAAM,gBAAgB,aAAa,WAAW;CAE9C,MAAM,CAAC,WAAW,eAAe;EAC/B,MAAM,WAAW,cAAc;GAC7B,YAAY,kBAAkB;GAC9B,eAAe,UAAmB,YAAkC;AAClE,oBAAgB,UAAU,UAAU,QAAQ;;GAE9C,uBAAuB,aAAsB;AAC3C,4BAAwB,UAAU,SAAS;;GAE7C,qBAAqB,iBAAiB,WAAW,YAAY,aAAa;GAC1E,2BAA2B,uBAAuB,WAAW,YAAY,aAAa;GACtF,mBAAmB,eAAe;GAClC,aAAa,SAAS;GACtB,kBAAkB,cAAc;GACjC,CAAC;AAGF,MAAI,CAAC,gBAAgB,YACnB,UAAS,KAAK,QAAQ;AAGxB,SAAO;GACP;CAEF,MAAM,aAAa,WAAW;CAC9B,MAAM,UAAU,UAAU,SAAS;AAGnC,iBAAgB;AACd,MAAI,mBAAmB,OAAW;EAElC,MAAM,EAAE,QAAQ,cAAc,QAAQ,MAAM;AAC5C,MAAI,mBAAmB,UAAW;AAElC,MAAI,eACF,SAAQ,KAAK,QAAQ;MAErB,SAAQ,MAAM,QAAQ;IAEvB,CAAC,gBAAgB,QAAQ,CAAC;AAG7B,uBAAsB,QAAQ,SAAS,EAAE,CAAC,QAAQ,CAAC;CAEnD,MAAM,QAAQ,YAAY,QAAQ,MAAM;AACxC,MAAK,SAAS,MAAM;AAGpB,QACE,oBAAC;EAAuB,OAAO;GAAE;GAAM;GAAS,OAHpC,KAAK,UAAU;GAG4B,cAAc;GAAkB;GAAY;GAAS;EACzG;GACsB"}
@@ -0,0 +1,15 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as react from "react";
3
+ import { PopoverState } from "@videojs/core";
4
+
5
+ //#region src/ui/popover/popover-trigger.d.ts
6
+ interface PopoverTriggerProps extends UIComponentProps<'button', PopoverState> {}
7
+ /** Button that toggles the popover visibility. Renders a `<button>` element. */
8
+ declare const PopoverTrigger: react.ForwardRefExoticComponent<Omit<PopoverTriggerProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
9
+ declare namespace PopoverTrigger {
10
+ type Props = PopoverTriggerProps;
11
+ type State = PopoverState;
12
+ }
13
+ //#endregion
14
+ export { PopoverTrigger, PopoverTriggerProps };
15
+ //# sourceMappingURL=popover-trigger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover-trigger.d.ts","names":[],"sources":["../../../../src/ui/popover/popover-trigger.tsx"],"mappings":";;;;;UAUiB,mBAAA,SAA4B,gBAAA,WAA2B,YAAA;;cAG3D,cAAA,EAAc,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,mBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,iBAAA;AAAA,kBAwCV,cAAA;EAAA,KACH,KAAA,GAAQ,mBAAA;EAAA,KACR,KAAA,GAAQ,YAAA;AAAA"}
@@ -0,0 +1,43 @@
1
+ 'use client';
2
+
3
+ import { renderElement } from "../../utils/use-render.js";
4
+ import { usePopoverContext } from "./context.js";
5
+ import { getAnchorNameStyle } from "@videojs/core/dom";
6
+ import { forwardRef, useCallback, useMemo } from "react";
7
+
8
+ //#region src/ui/popover/popover-trigger.tsx
9
+ /** Button that toggles the popover visibility. Renders a `<button>` element. */
10
+ const PopoverTrigger = forwardRef(function PopoverTrigger({ render, className, style, ...elementProps }, forwardedRef) {
11
+ const { core, popover, state, stateAttrMap, anchorName, popupId } = usePopoverContext();
12
+ const triggerRef = useCallback((el) => {
13
+ popover.setTriggerElement(el);
14
+ }, [popover]);
15
+ const anchorStyle = useMemo(() => getAnchorNameStyle(anchorName), [anchorName]);
16
+ const { onFocusIn, onFocusOut, ...restTriggerProps } = popover.triggerProps;
17
+ return renderElement("button", {
18
+ render,
19
+ className,
20
+ style
21
+ }, {
22
+ state,
23
+ stateAttrMap,
24
+ ref: [forwardedRef, triggerRef],
25
+ props: [
26
+ {
27
+ type: "button",
28
+ style: anchorStyle,
29
+ ...core.getTriggerAttrs(state, popupId)
30
+ },
31
+ {
32
+ ...restTriggerProps,
33
+ onFocus: onFocusIn,
34
+ onBlur: onFocusOut
35
+ },
36
+ elementProps
37
+ ]
38
+ });
39
+ });
40
+
41
+ //#endregion
42
+ export { PopoverTrigger };
43
+ //# sourceMappingURL=popover-trigger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"popover-trigger.js","names":[],"sources":["../../../../src/ui/popover/popover-trigger.tsx"],"sourcesContent":["'use client';\n\nimport type { PopoverState } from '@videojs/core';\nimport { getAnchorNameStyle } from '@videojs/core/dom';\nimport { forwardRef, useCallback, useMemo } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { usePopoverContext } from './context';\n\nexport interface PopoverTriggerProps extends UIComponentProps<'button', PopoverState> {}\n\n/** Button that toggles the popover visibility. Renders a `<button>` element. */\nexport const PopoverTrigger = forwardRef<HTMLButtonElement, PopoverTriggerProps>(function PopoverTrigger(\n { render, className, style, ...elementProps },\n forwardedRef\n) {\n const { core, popover, state, stateAttrMap, anchorName, popupId } = usePopoverContext();\n\n const triggerRef = useCallback(\n (el: HTMLButtonElement | null) => {\n popover.setTriggerElement(el);\n },\n [popover]\n );\n\n const anchorStyle = useMemo(() => getAnchorNameStyle(anchorName), [anchorName]);\n\n // Remap DOM focus events to React synthetic event names.\n // createPopover() uses onFocusIn/onFocusOut (matching DOM focusin/focusout),\n // but React maps those to onFocus/onBlur.\n const { onFocusIn, onFocusOut, ...restTriggerProps } = popover.triggerProps;\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap,\n ref: [forwardedRef, triggerRef],\n props: [\n {\n type: 'button' as const,\n style: anchorStyle,\n ...core.getTriggerAttrs(state, popupId),\n },\n { ...restTriggerProps, onFocus: onFocusIn, onBlur: onFocusOut },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace PopoverTrigger {\n export type Props = PopoverTriggerProps;\n export type State = PopoverState;\n}\n"],"mappings":";;;;;;;;;AAaA,MAAa,iBAAiB,WAAmD,SAAS,eACxF,EAAE,QAAQ,WAAW,OAAO,GAAG,gBAC/B,cACA;CACA,MAAM,EAAE,MAAM,SAAS,OAAO,cAAc,YAAY,YAAY,mBAAmB;CAEvF,MAAM,aAAa,aAChB,OAAiC;AAChC,UAAQ,kBAAkB,GAAG;IAE/B,CAAC,QAAQ,CACV;CAED,MAAM,cAAc,cAAc,mBAAmB,WAAW,EAAE,CAAC,WAAW,CAAC;CAK/E,MAAM,EAAE,WAAW,YAAY,GAAG,qBAAqB,QAAQ;AAE/D,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA;EACA,KAAK,CAAC,cAAc,WAAW;EAC/B,OAAO;GACL;IACE,MAAM;IACN,OAAO;IACP,GAAG,KAAK,gBAAgB,OAAO,QAAQ;IACxC;GACD;IAAE,GAAG;IAAkB,SAAS;IAAW,QAAQ;IAAY;GAC/D;GACD;EACF,CACF;EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"poster.d.ts","names":[],"sources":["../../../../src/ui/poster/poster.tsx"],"mappings":";;;;;UAWiB,WAAA,SAAoB,gBAAA,QAAwB,UAAA,CAAW,KAAA;;AAAxE;;;;;;;;;AAgBA;;;;cAAa,MAAA,EAAM,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,WAAA,WAAA,KAAA,CAAA,aAAA,CAAA,gBAAA;AAAA,kBA2BF,MAAA;EAAA,KACH,KAAA,GAAQ,WAAA;EAAA,KACR,KAAA,GAAQ,UAAA,CAAW,KAAA;AAAA"}
1
+ {"version":3,"file":"poster.d.ts","names":[],"sources":["../../../../src/ui/poster/poster.tsx"],"mappings":";;;;;UAWiB,WAAA,SAAoB,gBAAA,QAAwB,UAAA,CAAW,KAAA;;AAAxE;;;;;;;;;AAgBA;;;;cAAa,MAAA,EAAM,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,WAAA,WAAA,KAAA,CAAA,aAAA,CAAA,gBAAA;AAAA,kBA6BF,MAAA;EAAA,KACH,KAAA,GAAQ,WAAA;EAAA,KACR,KAAA,GAAQ,UAAA,CAAW,KAAA;AAAA"}
@@ -29,12 +29,13 @@ const Poster = forwardRef(function Poster(componentProps, forwardedRef) {
29
29
  logMissingFeature("Poster", "playback");
30
30
  return null;
31
31
  }
32
+ core.setMedia(playback);
32
33
  return renderElement("img", {
33
34
  render,
34
35
  className,
35
36
  style
36
37
  }, {
37
- state: core.getState(playback),
38
+ state: core.getState(),
38
39
  stateAttrMap: PosterDataAttrs,
39
40
  ref: [forwardedRef],
40
41
  props: [elementProps]
@@ -1 +1 @@
1
- {"version":3,"file":"poster.js","names":[],"sources":["../../../../src/ui/poster/poster.tsx"],"sourcesContent":["'use client';\n\nimport { PosterCore, PosterDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectPlayback } from '@videojs/core/dom';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\n\nexport interface PosterProps extends UIComponentProps<'img', PosterCore.State> {}\n\n/**\n * Displays the video poster image. Shows before playback starts, hides after.\n *\n * @example\n * ```tsx\n * <Poster src=\"poster.jpg\" alt=\"Video description\" />\n *\n * <Poster\n * src=\"poster.jpg\"\n * alt=\"Video description\"\n * className={(state) => state.visible ? 'visible' : 'hidden'}\n * />\n * ```\n */\nexport const Poster = forwardRef(function Poster(\n componentProps: PosterProps,\n forwardedRef: ForwardedRef<HTMLImageElement>\n) {\n const { render, className, style, ...elementProps } = componentProps;\n\n const playback = usePlayer(selectPlayback);\n\n const [core] = useState(() => new PosterCore());\n\n if (!playback) {\n if (__DEV__) logMissingFeature('Poster', 'playback');\n return null;\n }\n\n return renderElement(\n 'img',\n { render, className, style },\n {\n state: core.getState(playback),\n stateAttrMap: PosterDataAttrs,\n ref: [forwardedRef],\n props: [elementProps],\n }\n );\n});\n\nexport namespace Poster {\n export type Props = PosterProps;\n export type State = PosterCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAa,SAAS,WAAW,SAAS,OACxC,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,GAAG,iBAAiB;CAEtD,MAAM,WAAW,UAAU,eAAe;CAE1C,MAAM,CAAC,QAAQ,eAAe,IAAI,YAAY,CAAC;AAE/C,KAAI,CAAC,UAAU;AACA,oBAAkB,UAAU,WAAW;AACpD,SAAO;;AAGT,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OAAO,KAAK,SAAS,SAAS;EAC9B,cAAc;EACd,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,aAAa;EACtB,CACF;EACD"}
1
+ {"version":3,"file":"poster.js","names":[],"sources":["../../../../src/ui/poster/poster.tsx"],"sourcesContent":["'use client';\n\nimport { PosterCore, PosterDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectPlayback } from '@videojs/core/dom';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\n\nexport interface PosterProps extends UIComponentProps<'img', PosterCore.State> {}\n\n/**\n * Displays the video poster image. Shows before playback starts, hides after.\n *\n * @example\n * ```tsx\n * <Poster src=\"poster.jpg\" alt=\"Video description\" />\n *\n * <Poster\n * src=\"poster.jpg\"\n * alt=\"Video description\"\n * className={(state) => state.visible ? 'visible' : 'hidden'}\n * />\n * ```\n */\nexport const Poster = forwardRef(function Poster(\n componentProps: PosterProps,\n forwardedRef: ForwardedRef<HTMLImageElement>\n) {\n const { render, className, style, ...elementProps } = componentProps;\n\n const playback = usePlayer(selectPlayback);\n\n const [core] = useState(() => new PosterCore());\n\n if (!playback) {\n if (__DEV__) logMissingFeature('Poster', 'playback');\n return null;\n }\n\n core.setMedia(playback);\n\n return renderElement(\n 'img',\n { render, className, style },\n {\n state: core.getState(),\n stateAttrMap: PosterDataAttrs,\n ref: [forwardedRef],\n props: [elementProps],\n }\n );\n});\n\nexport namespace Poster {\n export type Props = PosterProps;\n export type State = PosterCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAa,SAAS,WAAW,SAAS,OACxC,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,GAAG,iBAAiB;CAEtD,MAAM,WAAW,UAAU,eAAe;CAE1C,MAAM,CAAC,QAAQ,eAAe,IAAI,YAAY,CAAC;AAE/C,KAAI,CAAC,UAAU;AACA,oBAAkB,UAAU,WAAW;AACpD,SAAO;;AAGT,MAAK,SAAS,SAAS;AAEvB,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OAAO,KAAK,UAAU;EACtB,cAAc;EACd,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,aAAa;EACtB,CACF;EACD"}
@@ -21,7 +21,7 @@ interface SeekButtonProps extends UIComponentProps<'button', SeekButtonCore.Stat
21
21
  * />
22
22
  * ```
23
23
  */
24
- declare const SeekButton: react.ForwardRefExoticComponent<Omit<SeekButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
24
+ declare const SeekButton: react.ForwardRefExoticComponent<SeekButtonProps & react.RefAttributes<HTMLButtonElement>>;
25
25
  declare namespace SeekButton {
26
26
  type Props = SeekButtonProps;
27
27
  type State = SeekButtonCore.State;
@@ -1 +1 @@
1
- {"version":3,"file":"seek-button.d.ts","names":[],"sources":["../../../../src/ui/seek-button/seek-button.tsx"],"mappings":";;;;;UAYiB,eAAA,SAAwB,gBAAA,WAA2B,cAAA,CAAe,KAAA,GAAQ,cAAA,CAAe,KAAA;;AAA1G;;;;;;;;;;;;;;;AAmBA;cAAa,UAAA,EAAU,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,eAAA,WAAA,KAAA,CAAA,aAAA,CAAA,iBAAA;AAAA,kBAoCN,UAAA;EAAA,KACH,KAAA,GAAQ,eAAA;EAAA,KACR,KAAA,GAAQ,cAAA,CAAe,KAAA;AAAA"}
1
+ {"version":3,"file":"seek-button.d.ts","names":[],"sources":["../../../../src/ui/seek-button/seek-button.tsx"],"mappings":";;;;;UAQiB,eAAA,SAAwB,gBAAA,WAA2B,cAAA,CAAe,KAAA,GAAQ,cAAA,CAAe,KAAA;;AAA1G;;;;;;;;;;;;;;;AAmBA;cAAa,UAAA,EAAU,KAAA,CAAA,yBAAA,CAAA,eAAA,GAAA,KAAA,CAAA,aAAA,CAAA,iBAAA;AAAA,kBAQN,UAAA;EAAA,KACH,KAAA,GAAQ,eAAA;EAAA,KACR,KAAA,GAAQ,cAAA,CAAe,KAAA;AAAA"}
@@ -1,10 +1,7 @@
1
1
  'use client';
2
2
 
3
- import { usePlayer } from "../../player/context.js";
4
- import { renderElement } from "../../utils/use-render.js";
5
- import { useButton } from "../hooks/use-button.js";
6
- import { logMissingFeature, selectTime } from "@videojs/core/dom";
7
- import { forwardRef, useState } from "react";
3
+ import { createMediaButton } from "../create-media-button.js";
4
+ import { selectTime } from "@videojs/core/dom";
8
5
  import { SeekButtonCore, SeekButtonDataAttrs } from "@videojs/core";
9
6
 
10
7
  //#region src/ui/seek-button/seek-button.tsx
@@ -25,39 +22,12 @@ import { SeekButtonCore, SeekButtonDataAttrs } from "@videojs/core";
25
22
  * />
26
23
  * ```
27
24
  */
28
- const SeekButton = forwardRef(function SeekButton(componentProps, forwardedRef) {
29
- const { render, className, style, seconds, label, disabled, ...elementProps } = componentProps;
30
- const time = usePlayer(selectTime);
31
- const [core] = useState(() => new SeekButtonCore());
32
- core.setProps({
33
- seconds,
34
- label,
35
- disabled
36
- });
37
- const { getButtonProps, buttonRef } = useButton({
38
- displayName: "SeekButton",
39
- onActivate: () => core.seek(time),
40
- isDisabled: () => disabled || !time
41
- });
42
- if (!time) {
43
- logMissingFeature("SeekButton", "time");
44
- return null;
45
- }
46
- const state = core.getState(time);
47
- return renderElement("button", {
48
- render,
49
- className,
50
- style
51
- }, {
52
- state,
53
- stateAttrMap: SeekButtonDataAttrs,
54
- ref: [forwardedRef, buttonRef],
55
- props: [
56
- core.getAttrs(state),
57
- elementProps,
58
- getButtonProps()
59
- ]
60
- });
25
+ const SeekButton = createMediaButton({
26
+ displayName: "SeekButton",
27
+ core: SeekButtonCore,
28
+ stateAttrMap: SeekButtonDataAttrs,
29
+ selector: selectTime,
30
+ action: (core, state) => core.seek(state)
61
31
  });
62
32
 
63
33
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"seek-button.js","names":[],"sources":["../../../../src/ui/seek-button/seek-button.tsx"],"sourcesContent":["'use client';\n\nimport { SeekButtonCore, SeekButtonDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectTime } from '@videojs/core/dom';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport { usePlayer } from '../../player/context';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useButton } from '../hooks/use-button';\n\nexport interface SeekButtonProps extends UIComponentProps<'button', SeekButtonCore.State>, SeekButtonCore.Props {}\n\n/**\n * A button that seeks forward or backward by a configurable number of seconds.\n *\n * @example\n * ```tsx\n * <SeekButton seconds={-10} />\n *\n * <SeekButton\n * seconds={30}\n * render={(props, state) => (\n * <button {...props}>\n * {state.direction === 'backward' ? <RewindIcon /> : <FastForwardIcon />}\n * </button>\n * )}\n * />\n * ```\n */\nexport const SeekButton = forwardRef(function SeekButton(\n componentProps: SeekButtonProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const { render, className, style, seconds, label, disabled, ...elementProps } = componentProps;\n\n const time = usePlayer(selectTime);\n\n const [core] = useState(() => new SeekButtonCore());\n core.setProps({ seconds, label, disabled });\n\n const { getButtonProps, buttonRef } = useButton({\n displayName: 'SeekButton',\n onActivate: () => core.seek(time!),\n isDisabled: () => disabled || !time,\n });\n\n if (!time) {\n if (__DEV__) logMissingFeature('SeekButton', 'time');\n return null;\n }\n\n const state = core.getState(time);\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap: SeekButtonDataAttrs,\n ref: [forwardedRef, buttonRef],\n props: [core.getAttrs(state), elementProps, getButtonProps()],\n }\n );\n});\n\nexport namespace SeekButton {\n export type Props = SeekButtonProps;\n export type State = SeekButtonCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA+BA,MAAa,aAAa,WAAW,SAAS,WAC5C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,SAAS,OAAO,UAAU,GAAG,iBAAiB;CAEhF,MAAM,OAAO,UAAU,WAAW;CAElC,MAAM,CAAC,QAAQ,eAAe,IAAI,gBAAgB,CAAC;AACnD,MAAK,SAAS;EAAE;EAAS;EAAO;EAAU,CAAC;CAE3C,MAAM,EAAE,gBAAgB,cAAc,UAAU;EAC9C,aAAa;EACb,kBAAkB,KAAK,KAAK,KAAM;EAClC,kBAAkB,YAAY,CAAC;EAChC,CAAC;AAEF,KAAI,CAAC,MAAM;AACI,oBAAkB,cAAc,OAAO;AACpD,SAAO;;CAGT,MAAM,QAAQ,KAAK,SAAS,KAAK;AAEjC,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,cAAc;EACd,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO;GAAC,KAAK,SAAS,MAAM;GAAE;GAAc,gBAAgB;GAAC;EAC9D,CACF;EACD"}
1
+ {"version":3,"file":"seek-button.js","names":[],"sources":["../../../../src/ui/seek-button/seek-button.tsx"],"sourcesContent":["'use client';\n\nimport { SeekButtonCore, SeekButtonDataAttrs } from '@videojs/core';\nimport { selectTime } from '@videojs/core/dom';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createMediaButton } from '../create-media-button';\n\nexport interface SeekButtonProps extends UIComponentProps<'button', SeekButtonCore.State>, SeekButtonCore.Props {}\n\n/**\n * A button that seeks forward or backward by a configurable number of seconds.\n *\n * @example\n * ```tsx\n * <SeekButton seconds={-10} />\n *\n * <SeekButton\n * seconds={30}\n * render={(props, state) => (\n * <button {...props}>\n * {state.direction === 'backward' ? <RewindIcon /> : <FastForwardIcon />}\n * </button>\n * )}\n * />\n * ```\n */\nexport const SeekButton = createMediaButton<SeekButtonCore, SeekButtonProps>({\n displayName: 'SeekButton',\n core: SeekButtonCore,\n stateAttrMap: SeekButtonDataAttrs,\n selector: selectTime,\n action: (core, state) => core.seek(state),\n});\n\nexport namespace SeekButton {\n export type Props = SeekButtonProps;\n export type State = SeekButtonCore.State;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AA2BA,MAAa,aAAa,kBAAmD;CAC3E,aAAa;CACb,MAAM;CACN,cAAc;CACd,UAAU;CACV,SAAS,MAAM,UAAU,KAAK,KAAK,MAAM;CAC1C,CAAC"}
@@ -0,0 +1,22 @@
1
+ 'use client';
2
+
3
+ import { createContext, useContext } from "react";
4
+ import { jsx } from "react/jsx-runtime";
5
+
6
+ //#region src/ui/slider/context.tsx
7
+ const SliderContext = createContext(null);
8
+ function SliderProvider({ value, children }) {
9
+ return /* @__PURE__ */ jsx(SliderContext.Provider, {
10
+ value,
11
+ children
12
+ });
13
+ }
14
+ function useSliderContext() {
15
+ const ctx = useContext(SliderContext);
16
+ if (!ctx) throw new Error("Slider compound components must be used within a Slider.Root");
17
+ return ctx;
18
+ }
19
+
20
+ //#endregion
21
+ export { SliderProvider, useSliderContext };
22
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../../../src/ui/slider/context.tsx"],"sourcesContent":["'use client';\n\nimport type { SliderState, StateAttrMap } from '@videojs/core';\nimport type { SliderThumbProps } from '@videojs/core/dom';\nimport type { RefCallback } from 'react';\nimport { createContext, useContext } from 'react';\n\nexport interface SliderContextValue {\n state: SliderState;\n /** Pointer position converted to the value domain (not 0–100 percent). */\n pointerValue: number;\n thumbRef: RefCallback<HTMLElement>;\n thumbProps: SliderThumbProps;\n stateAttrMap: StateAttrMap<SliderState>;\n getAttrs: (state: SliderState) => object;\n formatValue?: ((value: number, type: 'current' | 'pointer') => string) | undefined;\n}\n\nconst SliderContext = createContext<SliderContextValue | null>(null);\n\nexport function SliderProvider({ value, children }: { value: SliderContextValue; children: React.ReactNode }) {\n return <SliderContext.Provider value={value}>{children}</SliderContext.Provider>;\n}\n\nexport function useSliderContext(): SliderContextValue {\n const ctx = useContext(SliderContext);\n if (!ctx) throw new Error('Slider compound components must be used within a Slider.Root');\n return ctx;\n}\n"],"mappings":";;;;;;AAkBA,MAAM,gBAAgB,cAAyC,KAAK;AAEpE,SAAgB,eAAe,EAAE,OAAO,YAAsE;AAC5G,QAAO,oBAAC,cAAc;EAAgB;EAAQ;GAAkC;;AAGlF,SAAgB,mBAAuC;CACrD,MAAM,MAAM,WAAW,cAAc;AACrC,KAAI,CAAC,IAAK,OAAM,IAAI,MAAM,+DAA+D;AACzF,QAAO"}
@@ -0,0 +1,2 @@
1
+ import { index_parts_d_exports } from "./index.parts.js";
2
+ export { index_parts_d_exports as Slider };
@@ -0,0 +1,3 @@
1
+ import { index_parts_exports } from "./index.parts.js";
2
+
3
+ export { index_parts_exports as Slider };
@@ -0,0 +1,14 @@
1
+ import { SliderBuffer, SliderBufferProps } from "./slider-buffer.js";
2
+ import { SliderFill, SliderFillProps } from "./slider-fill.js";
3
+ import { SliderRoot, SliderRootProps } from "./slider-root.js";
4
+ import { SliderThumb, SliderThumbProps } from "./slider-thumb.js";
5
+ import { SliderTrack, SliderTrackProps } from "./slider-track.js";
6
+ import { SliderValue, SliderValueProps } from "./slider-value.js";
7
+
8
+ //#region src/ui/slider/index.parts.d.ts
9
+ declare namespace index_parts_d_exports {
10
+ export { SliderBuffer as Buffer, SliderBufferProps as BufferProps, SliderFill as Fill, SliderFillProps as FillProps, SliderRoot as Root, SliderRootProps as RootProps, SliderThumb as Thumb, SliderThumbProps as ThumbProps, SliderTrack as Track, SliderTrackProps as TrackProps, SliderValue as Value, SliderValueProps as ValueProps };
11
+ }
12
+ //#endregion
13
+ export { index_parts_d_exports };
14
+ //# sourceMappingURL=index.parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.parts.d.ts","names":[],"sources":["../../../../src/ui/slider/index.parts.ts"],"mappings":""}
@@ -0,0 +1,21 @@
1
+ import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
+ import { SliderBuffer } from "./slider-buffer.js";
3
+ import { SliderFill } from "./slider-fill.js";
4
+ import { SliderRoot } from "./slider-root.js";
5
+ import { SliderThumb } from "./slider-thumb.js";
6
+ import { SliderTrack } from "./slider-track.js";
7
+ import { SliderValue } from "./slider-value.js";
8
+
9
+ //#region src/ui/slider/index.parts.ts
10
+ var index_parts_exports = /* @__PURE__ */ __exportAll({
11
+ Buffer: () => SliderBuffer,
12
+ Fill: () => SliderFill,
13
+ Root: () => SliderRoot,
14
+ Thumb: () => SliderThumb,
15
+ Track: () => SliderTrack,
16
+ Value: () => SliderValue
17
+ });
18
+
19
+ //#endregion
20
+ export { index_parts_exports };
21
+ //# sourceMappingURL=index.parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.parts.js","names":[],"sources":["../../../../src/ui/slider/index.parts.ts"],"sourcesContent":["export { SliderBuffer as Buffer, type SliderBufferProps as BufferProps } from './slider-buffer';\nexport { SliderFill as Fill, type SliderFillProps as FillProps } from './slider-fill';\nexport { SliderRoot as Root, type SliderRootProps as RootProps } from './slider-root';\nexport { SliderThumb as Thumb, type SliderThumbProps as ThumbProps } from './slider-thumb';\nexport { SliderTrack as Track, type SliderTrackProps as TrackProps } from './slider-track';\nexport { SliderValue as Value, type SliderValueProps as ValueProps } from './slider-value';\n"],"mappings":""}
@@ -0,0 +1,14 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as react from "react";
3
+ import { SliderState } from "@videojs/core";
4
+
5
+ //#region src/ui/slider/slider-buffer.d.ts
6
+ interface SliderBufferProps extends UIComponentProps<'div', SliderState> {}
7
+ /** Displays the buffered range on the slider track. */
8
+ declare const SliderBuffer: react.ForwardRefExoticComponent<SliderBufferProps>;
9
+ declare namespace SliderBuffer {
10
+ type Props = SliderBufferProps;
11
+ }
12
+ //#endregion
13
+ export { SliderBuffer, SliderBufferProps };
14
+ //# sourceMappingURL=slider-buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider-buffer.d.ts","names":[],"sources":["../../../../src/ui/slider/slider-buffer.tsx"],"mappings":";;;;;UAQiB,iBAAA,SAA0B,gBAAA,QAAwB,WAAA;;cAGtD,YAAA,EAAY,KAAA,CAAA,yBAAA,CAAA,iBAAA;AAAA,kBAMR,YAAA;EAAA,KACH,KAAA,GAAQ,iBAAA;AAAA"}
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+
3
+ import { createContextPart } from "../create-context-part.js";
4
+ import { useSliderContext } from "./context.js";
5
+
6
+ //#region src/ui/slider/slider-buffer.tsx
7
+ /** Displays the buffered range on the slider track. */
8
+ const SliderBuffer = createContextPart({
9
+ displayName: "SliderBuffer",
10
+ tag: "div",
11
+ useContext: useSliderContext
12
+ });
13
+
14
+ //#endregion
15
+ export { SliderBuffer };
16
+ //# sourceMappingURL=slider-buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider-buffer.js","names":[],"sources":["../../../../src/ui/slider/slider-buffer.tsx"],"sourcesContent":["'use client';\n\nimport type { SliderState } from '@videojs/core';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createContextPart } from '../create-context-part';\nimport { useSliderContext } from './context';\n\nexport interface SliderBufferProps extends UIComponentProps<'div', SliderState> {}\n\n/** Displays the buffered range on the slider track. */\nexport const SliderBuffer = createContextPart<SliderBufferProps, SliderState>({\n displayName: 'SliderBuffer',\n tag: 'div',\n useContext: useSliderContext,\n});\n\nexport namespace SliderBuffer {\n export type Props = SliderBufferProps;\n}\n"],"mappings":";;;;;;;AAWA,MAAa,eAAe,kBAAkD;CAC5E,aAAa;CACb,KAAK;CACL,YAAY;CACb,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as react from "react";
3
+ import { SliderState } from "@videojs/core";
4
+
5
+ //#region src/ui/slider/slider-fill.d.ts
6
+ interface SliderFillProps extends UIComponentProps<'div', SliderState> {}
7
+ /** Displays the filled portion from start to the current value. */
8
+ declare const SliderFill: react.ForwardRefExoticComponent<SliderFillProps>;
9
+ declare namespace SliderFill {
10
+ type Props = SliderFillProps;
11
+ }
12
+ //#endregion
13
+ export { SliderFill, SliderFillProps };
14
+ //# sourceMappingURL=slider-fill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider-fill.d.ts","names":[],"sources":["../../../../src/ui/slider/slider-fill.tsx"],"mappings":";;;;;UAQiB,eAAA,SAAwB,gBAAA,QAAwB,WAAA;;cAGpD,UAAA,EAAU,KAAA,CAAA,yBAAA,CAAA,eAAA;AAAA,kBAMN,UAAA;EAAA,KACH,KAAA,GAAQ,eAAA;AAAA"}
@@ -0,0 +1,16 @@
1
+ 'use client';
2
+
3
+ import { createContextPart } from "../create-context-part.js";
4
+ import { useSliderContext } from "./context.js";
5
+
6
+ //#region src/ui/slider/slider-fill.tsx
7
+ /** Displays the filled portion from start to the current value. */
8
+ const SliderFill = createContextPart({
9
+ displayName: "SliderFill",
10
+ tag: "div",
11
+ useContext: useSliderContext
12
+ });
13
+
14
+ //#endregion
15
+ export { SliderFill };
16
+ //# sourceMappingURL=slider-fill.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider-fill.js","names":[],"sources":["../../../../src/ui/slider/slider-fill.tsx"],"sourcesContent":["'use client';\n\nimport type { SliderState } from '@videojs/core';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { createContextPart } from '../create-context-part';\nimport { useSliderContext } from './context';\n\nexport interface SliderFillProps extends UIComponentProps<'div', SliderState> {}\n\n/** Displays the filled portion from start to the current value. */\nexport const SliderFill = createContextPart<SliderFillProps, SliderState>({\n displayName: 'SliderFill',\n tag: 'div',\n useContext: useSliderContext,\n});\n\nexport namespace SliderFill {\n export type Props = SliderFillProps;\n}\n"],"mappings":";;;;;;;AAWA,MAAa,aAAa,kBAAgD;CACxE,aAAa;CACb,KAAK;CACL,YAAY;CACb,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as react from "react";
3
+ import { SliderCore } from "@videojs/core";
4
+
5
+ //#region src/ui/slider/slider-root.d.ts
6
+ interface SliderRootProps extends UIComponentProps<'div', SliderCore.State>, SliderCore.Props {
7
+ onValueChange?: ((value: number) => void) | undefined;
8
+ onValueCommit?: ((value: number) => void) | undefined;
9
+ onDragStart?: (() => void) | undefined;
10
+ onDragEnd?: (() => void) | undefined;
11
+ }
12
+ declare const SliderRoot: react.ForwardRefExoticComponent<Omit<SliderRootProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
13
+ declare namespace SliderRoot {
14
+ type Props = SliderRootProps;
15
+ type State = SliderCore.State;
16
+ }
17
+ //#endregion
18
+ export { SliderRoot, SliderRootProps };
19
+ //# sourceMappingURL=slider-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slider-root.d.ts","names":[],"sources":["../../../../src/ui/slider/slider-root.tsx"],"mappings":";;;;;UAYiB,eAAA,SAAwB,gBAAA,QAAwB,UAAA,CAAW,KAAA,GAAQ,UAAA,CAAW,KAAA;EAC7F,aAAA,KAAkB,KAAA;EAClB,aAAA,KAAkB,KAAA;EAClB,WAAA;EACA,SAAA;AAAA;AAAA,cAGW,UAAA,EAAU,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,eAAA,WAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBA+EN,UAAA;EAAA,KACH,KAAA,GAAQ,eAAA;EAAA,KACR,KAAA,GAAQ,UAAA,CAAW,KAAA;AAAA"}