@videojs/react 0.1.0-preview.9 → 10.0.0-alpha.3

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 (298) hide show
  1. package/README.md +1 -1
  2. package/dist/default/_virtual/_rolldown/runtime.js +18 -0
  3. package/dist/default/index.js +22 -0
  4. package/dist/default/media/audio.js +22 -0
  5. package/dist/default/media/audio.js.map +1 -0
  6. package/dist/default/media/background-video/index.js +28 -0
  7. package/dist/default/media/background-video/index.js.map +1 -0
  8. package/dist/default/media/hls-video/index.js +25 -0
  9. package/dist/default/media/hls-video/index.js.map +1 -0
  10. package/dist/default/media/video.js +22 -0
  11. package/dist/default/media/video.js.map +1 -0
  12. package/dist/default/player/context.js +55 -0
  13. package/dist/default/player/context.js.map +1 -0
  14. package/dist/default/player/create-player.js +38 -0
  15. package/dist/default/player/create-player.js.map +1 -0
  16. package/dist/default/presets/audio/index.js +5 -0
  17. package/dist/default/presets/audio/minimal-skin.css +3 -0
  18. package/dist/default/presets/audio/minimal-skin.js +11 -0
  19. package/dist/default/presets/audio/minimal-skin.js.map +1 -0
  20. package/dist/default/presets/audio/skin.css +3 -0
  21. package/dist/default/presets/audio/skin.js +11 -0
  22. package/dist/default/presets/audio/skin.js.map +1 -0
  23. package/dist/default/presets/background/index.js +4 -0
  24. package/dist/default/presets/background/skin.css +3 -0
  25. package/dist/default/presets/background/skin.js +11 -0
  26. package/dist/default/presets/background/skin.js.map +1 -0
  27. package/dist/default/presets/video/index.js +7 -0
  28. package/dist/default/presets/video/minimal-skin.css +637 -0
  29. package/dist/default/presets/video/minimal-skin.js +234 -0
  30. package/dist/default/presets/video/minimal-skin.js.map +1 -0
  31. package/dist/default/presets/video/minimal-skin.tailwind.js +231 -0
  32. package/dist/default/presets/video/minimal-skin.tailwind.js.map +1 -0
  33. package/dist/default/presets/video/skin.css +638 -0
  34. package/dist/default/presets/video/skin.js +223 -0
  35. package/dist/default/presets/video/skin.js.map +1 -0
  36. package/dist/default/presets/video/skin.tailwind.js +222 -0
  37. package/dist/default/presets/video/skin.tailwind.js.map +1 -0
  38. package/dist/default/ui/buffering-indicator/buffering-indicator.js +50 -0
  39. package/dist/default/ui/buffering-indicator/buffering-indicator.js.map +1 -0
  40. package/dist/default/ui/buffering-indicator/index.js +3 -0
  41. package/dist/default/ui/captions-button/captions-button.js +51 -0
  42. package/dist/default/ui/captions-button/captions-button.js.map +1 -0
  43. package/dist/default/ui/captions-button/index.js +3 -0
  44. package/dist/default/ui/controls/controls-group.js +27 -0
  45. package/dist/default/ui/controls/controls-group.js.map +1 -0
  46. package/dist/default/ui/controls/controls-root.js +31 -0
  47. package/dist/default/ui/controls/controls-root.js.map +1 -0
  48. package/dist/default/ui/controls/index.js +3 -0
  49. package/dist/default/ui/controls/index.parts.js +13 -0
  50. package/dist/default/ui/controls/index.parts.js.map +1 -0
  51. package/dist/default/ui/error-dialog/error-dialog.js +54 -0
  52. package/dist/default/ui/error-dialog/error-dialog.js.map +1 -0
  53. package/dist/default/ui/error-dialog/index.js +3 -0
  54. package/dist/default/ui/fullscreen-button/fullscreen-button.js +44 -0
  55. package/dist/default/ui/fullscreen-button/fullscreen-button.js.map +1 -0
  56. package/dist/default/ui/fullscreen-button/index.js +3 -0
  57. package/dist/default/ui/hooks/use-button.js +44 -0
  58. package/dist/default/ui/hooks/use-button.js.map +1 -0
  59. package/dist/default/ui/mute-button/index.js +3 -0
  60. package/dist/default/ui/mute-button/mute-button.js +47 -0
  61. package/dist/default/ui/mute-button/mute-button.js.map +1 -0
  62. package/dist/default/ui/pip-button/index.js +3 -0
  63. package/dist/default/ui/pip-button/pip-button.js +44 -0
  64. package/dist/default/ui/pip-button/pip-button.js.map +1 -0
  65. package/dist/default/ui/play-button/index.js +3 -0
  66. package/dist/default/ui/play-button/play-button.js +60 -0
  67. package/dist/default/ui/play-button/play-button.js.map +1 -0
  68. package/dist/default/ui/poster/index.js +3 -0
  69. package/dist/default/ui/poster/poster.js +43 -0
  70. package/dist/default/ui/poster/poster.js.map +1 -0
  71. package/dist/default/ui/seek-button/index.js +3 -0
  72. package/dist/default/ui/seek-button/seek-button.js +62 -0
  73. package/dist/default/ui/seek-button/seek-button.js.map +1 -0
  74. package/dist/default/ui/time/index.js +3 -0
  75. package/dist/default/ui/time/index.parts.js +15 -0
  76. package/dist/default/ui/time/index.parts.js.map +1 -0
  77. package/dist/default/ui/time/time-group.js +34 -0
  78. package/dist/default/ui/time/time-group.js.map +1 -0
  79. package/dist/default/ui/time/time-separator.js +34 -0
  80. package/dist/default/ui/time/time-separator.js.map +1 -0
  81. package/dist/default/ui/time/time-value.js +54 -0
  82. package/dist/default/ui/time/time-value.js.map +1 -0
  83. package/dist/default/utils/attach-media-element.js +12 -0
  84. package/dist/default/utils/attach-media-element.js.map +1 -0
  85. package/dist/default/utils/media-props.js +11 -0
  86. package/dist/default/utils/media-props.js.map +1 -0
  87. package/dist/default/utils/merge-props.js +85 -0
  88. package/dist/default/utils/merge-props.js.map +1 -0
  89. package/dist/default/utils/use-composed-refs.js +57 -0
  90. package/dist/default/utils/use-composed-refs.js.map +1 -0
  91. package/dist/default/utils/use-render.js +71 -0
  92. package/dist/default/utils/use-render.js.map +1 -0
  93. package/dist/dev/_virtual/_rolldown/runtime.js +18 -0
  94. package/dist/dev/index.d.ts +23 -0
  95. package/dist/dev/index.js +22 -0
  96. package/dist/dev/media/audio.d.ts +12 -0
  97. package/dist/dev/media/audio.d.ts.map +1 -0
  98. package/dist/dev/media/audio.js +22 -0
  99. package/dist/dev/media/audio.js.map +1 -0
  100. package/dist/dev/media/background-video/index.d.ts +12 -0
  101. package/dist/dev/media/background-video/index.d.ts.map +1 -0
  102. package/dist/dev/media/background-video/index.js +28 -0
  103. package/dist/dev/media/background-video/index.js.map +1 -0
  104. package/dist/dev/media/hls-video/index.d.ts +11 -0
  105. package/dist/dev/media/hls-video/index.d.ts.map +1 -0
  106. package/dist/dev/media/hls-video/index.js +25 -0
  107. package/dist/dev/media/hls-video/index.js.map +1 -0
  108. package/dist/dev/media/video.d.ts +12 -0
  109. package/dist/dev/media/video.d.ts.map +1 -0
  110. package/dist/dev/media/video.js +22 -0
  111. package/dist/dev/media/video.js.map +1 -0
  112. package/dist/dev/player/context.d.ts +40 -0
  113. package/dist/dev/player/context.d.ts.map +1 -0
  114. package/dist/dev/player/context.js +55 -0
  115. package/dist/dev/player/context.js.map +1 -0
  116. package/dist/dev/player/create-player.d.ts +47 -0
  117. package/dist/dev/player/create-player.d.ts.map +1 -0
  118. package/dist/dev/player/create-player.js +39 -0
  119. package/dist/dev/player/create-player.js.map +1 -0
  120. package/dist/dev/presets/audio/index.d.ts +4 -0
  121. package/dist/dev/presets/audio/index.js +5 -0
  122. package/dist/dev/presets/audio/minimal-skin.css +3 -0
  123. package/dist/dev/presets/audio/minimal-skin.d.ts +9 -0
  124. package/dist/dev/presets/audio/minimal-skin.d.ts.map +1 -0
  125. package/dist/dev/presets/audio/minimal-skin.js +11 -0
  126. package/dist/dev/presets/audio/minimal-skin.js.map +1 -0
  127. package/dist/dev/presets/audio/skin.css +3 -0
  128. package/dist/dev/presets/audio/skin.d.ts +9 -0
  129. package/dist/dev/presets/audio/skin.d.ts.map +1 -0
  130. package/dist/dev/presets/audio/skin.js +11 -0
  131. package/dist/dev/presets/audio/skin.js.map +1 -0
  132. package/dist/dev/presets/background/index.d.ts +3 -0
  133. package/dist/dev/presets/background/index.js +4 -0
  134. package/dist/dev/presets/background/skin.css +3 -0
  135. package/dist/dev/presets/background/skin.d.ts +9 -0
  136. package/dist/dev/presets/background/skin.d.ts.map +1 -0
  137. package/dist/dev/presets/background/skin.js +11 -0
  138. package/dist/dev/presets/background/skin.js.map +1 -0
  139. package/dist/dev/presets/types.d.ts +10 -0
  140. package/dist/dev/presets/types.d.ts.map +1 -0
  141. package/dist/dev/presets/video/index.d.ts +6 -0
  142. package/dist/dev/presets/video/index.js +7 -0
  143. package/dist/dev/presets/video/minimal-skin.css +637 -0
  144. package/dist/dev/presets/video/minimal-skin.d.ts +9 -0
  145. package/dist/dev/presets/video/minimal-skin.d.ts.map +1 -0
  146. package/dist/dev/presets/video/minimal-skin.js +234 -0
  147. package/dist/dev/presets/video/minimal-skin.js.map +1 -0
  148. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts +8 -0
  149. package/dist/dev/presets/video/minimal-skin.tailwind.d.ts.map +1 -0
  150. package/dist/dev/presets/video/minimal-skin.tailwind.js +231 -0
  151. package/dist/dev/presets/video/minimal-skin.tailwind.js.map +1 -0
  152. package/dist/dev/presets/video/skin.css +638 -0
  153. package/dist/dev/presets/video/skin.d.ts +9 -0
  154. package/dist/dev/presets/video/skin.d.ts.map +1 -0
  155. package/dist/dev/presets/video/skin.js +223 -0
  156. package/dist/dev/presets/video/skin.js.map +1 -0
  157. package/dist/dev/presets/video/skin.tailwind.d.ts +8 -0
  158. package/dist/dev/presets/video/skin.tailwind.d.ts.map +1 -0
  159. package/dist/dev/presets/video/skin.tailwind.js +222 -0
  160. package/dist/dev/presets/video/skin.tailwind.js.map +1 -0
  161. package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts +32 -0
  162. package/dist/dev/ui/buffering-indicator/buffering-indicator.d.ts.map +1 -0
  163. package/dist/dev/ui/buffering-indicator/buffering-indicator.js +53 -0
  164. package/dist/dev/ui/buffering-indicator/buffering-indicator.js.map +1 -0
  165. package/dist/dev/ui/buffering-indicator/index.d.ts +2 -0
  166. package/dist/dev/ui/buffering-indicator/index.js +3 -0
  167. package/dist/dev/ui/captions-button/captions-button.d.ts +36 -0
  168. package/dist/dev/ui/captions-button/captions-button.d.ts.map +1 -0
  169. package/dist/dev/ui/captions-button/captions-button.js +51 -0
  170. package/dist/dev/ui/captions-button/captions-button.js.map +1 -0
  171. package/dist/dev/ui/captions-button/index.d.ts +2 -0
  172. package/dist/dev/ui/captions-button/index.js +3 -0
  173. package/dist/dev/ui/controls/controls-group.d.ts +17 -0
  174. package/dist/dev/ui/controls/controls-group.d.ts.map +1 -0
  175. package/dist/dev/ui/controls/controls-group.js +27 -0
  176. package/dist/dev/ui/controls/controls-group.js.map +1 -0
  177. package/dist/dev/ui/controls/controls-root.d.ts +18 -0
  178. package/dist/dev/ui/controls/controls-root.d.ts.map +1 -0
  179. package/dist/dev/ui/controls/controls-root.js +34 -0
  180. package/dist/dev/ui/controls/controls-root.js.map +1 -0
  181. package/dist/dev/ui/controls/index.d.ts +2 -0
  182. package/dist/dev/ui/controls/index.js +3 -0
  183. package/dist/dev/ui/controls/index.parts.d.ts +10 -0
  184. package/dist/dev/ui/controls/index.parts.d.ts.map +1 -0
  185. package/dist/dev/ui/controls/index.parts.js +13 -0
  186. package/dist/dev/ui/controls/index.parts.js.map +1 -0
  187. package/dist/dev/ui/error-dialog/error-dialog.d.ts +35 -0
  188. package/dist/dev/ui/error-dialog/error-dialog.d.ts.map +1 -0
  189. package/dist/dev/ui/error-dialog/error-dialog.js +54 -0
  190. package/dist/dev/ui/error-dialog/error-dialog.js.map +1 -0
  191. package/dist/dev/ui/error-dialog/index.d.ts +2 -0
  192. package/dist/dev/ui/error-dialog/index.js +3 -0
  193. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts +14 -0
  194. package/dist/dev/ui/fullscreen-button/fullscreen-button.d.ts.map +1 -0
  195. package/dist/dev/ui/fullscreen-button/fullscreen-button.js +47 -0
  196. package/dist/dev/ui/fullscreen-button/fullscreen-button.js.map +1 -0
  197. package/dist/dev/ui/fullscreen-button/index.d.ts +2 -0
  198. package/dist/dev/ui/fullscreen-button/index.js +3 -0
  199. package/dist/dev/ui/hooks/use-button.d.ts +40 -0
  200. package/dist/dev/ui/hooks/use-button.d.ts.map +1 -0
  201. package/dist/dev/ui/hooks/use-button.js +46 -0
  202. package/dist/dev/ui/hooks/use-button.js.map +1 -0
  203. package/dist/dev/ui/mute-button/index.d.ts +2 -0
  204. package/dist/dev/ui/mute-button/index.js +3 -0
  205. package/dist/dev/ui/mute-button/mute-button.d.ts +17 -0
  206. package/dist/dev/ui/mute-button/mute-button.d.ts.map +1 -0
  207. package/dist/dev/ui/mute-button/mute-button.js +50 -0
  208. package/dist/dev/ui/mute-button/mute-button.js.map +1 -0
  209. package/dist/dev/ui/pip-button/index.d.ts +2 -0
  210. package/dist/dev/ui/pip-button/index.js +3 -0
  211. package/dist/dev/ui/pip-button/pip-button.d.ts +14 -0
  212. package/dist/dev/ui/pip-button/pip-button.d.ts.map +1 -0
  213. package/dist/dev/ui/pip-button/pip-button.js +47 -0
  214. package/dist/dev/ui/pip-button/pip-button.js.map +1 -0
  215. package/dist/dev/ui/play-button/index.d.ts +2 -0
  216. package/dist/dev/ui/play-button/index.js +3 -0
  217. package/dist/dev/ui/play-button/play-button.d.ts +30 -0
  218. package/dist/dev/ui/play-button/play-button.d.ts.map +1 -0
  219. package/dist/dev/ui/play-button/play-button.js +63 -0
  220. package/dist/dev/ui/play-button/play-button.js.map +1 -0
  221. package/dist/dev/ui/poster/index.d.ts +2 -0
  222. package/dist/dev/ui/poster/index.js +3 -0
  223. package/dist/dev/ui/poster/poster.d.ts +28 -0
  224. package/dist/dev/ui/poster/poster.d.ts.map +1 -0
  225. package/dist/dev/ui/poster/poster.js +46 -0
  226. package/dist/dev/ui/poster/poster.js.map +1 -0
  227. package/dist/dev/ui/seek-button/index.d.ts +2 -0
  228. package/dist/dev/ui/seek-button/index.js +3 -0
  229. package/dist/dev/ui/seek-button/seek-button.d.ts +31 -0
  230. package/dist/dev/ui/seek-button/seek-button.d.ts.map +1 -0
  231. package/dist/dev/ui/seek-button/seek-button.js +65 -0
  232. package/dist/dev/ui/seek-button/seek-button.js.map +1 -0
  233. package/dist/dev/ui/time/index.d.ts +2 -0
  234. package/dist/dev/ui/time/index.js +3 -0
  235. package/dist/dev/ui/time/index.parts.d.ts +11 -0
  236. package/dist/dev/ui/time/index.parts.d.ts.map +1 -0
  237. package/dist/dev/ui/time/index.parts.js +15 -0
  238. package/dist/dev/ui/time/index.parts.js.map +1 -0
  239. package/dist/dev/ui/time/time-group.d.ts +29 -0
  240. package/dist/dev/ui/time/time-group.d.ts.map +1 -0
  241. package/dist/dev/ui/time/time-group.js +34 -0
  242. package/dist/dev/ui/time/time-group.js.map +1 -0
  243. package/dist/dev/ui/time/time-separator.d.ts +26 -0
  244. package/dist/dev/ui/time/time-separator.d.ts.map +1 -0
  245. package/dist/dev/ui/time/time-separator.js +34 -0
  246. package/dist/dev/ui/time/time-separator.js.map +1 -0
  247. package/dist/dev/ui/time/time-value.d.ts +24 -0
  248. package/dist/dev/ui/time/time-value.d.ts.map +1 -0
  249. package/dist/dev/ui/time/time-value.js +57 -0
  250. package/dist/dev/ui/time/time-value.js.map +1 -0
  251. package/dist/dev/utils/attach-media-element.js +12 -0
  252. package/dist/dev/utils/attach-media-element.js.map +1 -0
  253. package/dist/dev/utils/media-props.js +11 -0
  254. package/dist/dev/utils/media-props.js.map +1 -0
  255. package/dist/dev/utils/merge-props.d.ts +26 -0
  256. package/dist/dev/utils/merge-props.d.ts.map +1 -0
  257. package/dist/dev/utils/merge-props.js +85 -0
  258. package/dist/dev/utils/merge-props.js.map +1 -0
  259. package/dist/dev/utils/types.d.ts +27 -0
  260. package/dist/dev/utils/types.d.ts.map +1 -0
  261. package/dist/dev/utils/use-composed-refs.js +57 -0
  262. package/dist/dev/utils/use-composed-refs.js.map +1 -0
  263. package/dist/dev/utils/use-render.d.ts +45 -0
  264. package/dist/dev/utils/use-render.d.ts.map +1 -0
  265. package/dist/dev/utils/use-render.js +71 -0
  266. package/dist/dev/utils/use-render.js.map +1 -0
  267. package/package.json +58 -53
  268. package/dist/FrostedSkin-t8edr5LV.d.ts +0 -13
  269. package/dist/FrostedSkin-t8edr5LV.d.ts.map +0 -1
  270. package/dist/MinimalSkin-DzHkJgW-.d.ts +0 -13
  271. package/dist/MinimalSkin-DzHkJgW-.d.ts.map +0 -1
  272. package/dist/VolumeSlider-DBvAU2X3.js +0 -1025
  273. package/dist/VolumeSlider-DBvAU2X3.js.map +0 -1
  274. package/dist/frosted-D2OXDJRV.js +0 -156
  275. package/dist/frosted-D2OXDJRV.js.map +0 -1
  276. package/dist/icons-BqfV81R8.js +0 -316
  277. package/dist/icons-BqfV81R8.js.map +0 -1
  278. package/dist/icons.d.ts +0 -71
  279. package/dist/icons.d.ts.map +0 -1
  280. package/dist/icons.js +0 -3
  281. package/dist/index-CM70WSkA.d.ts +0 -36
  282. package/dist/index-CM70WSkA.d.ts.map +0 -1
  283. package/dist/index.d.ts +0 -331
  284. package/dist/index.d.ts.map +0 -1
  285. package/dist/index.js +0 -89
  286. package/dist/index.js.map +0 -1
  287. package/dist/minimal-CDaU4avz.js +0 -162
  288. package/dist/minimal-CDaU4avz.js.map +0 -1
  289. package/dist/skins/frosted.css +0 -4
  290. package/dist/skins/frosted.d.ts +0 -2
  291. package/dist/skins/frosted.js +0 -9
  292. package/dist/skins/minimal.css +0 -4
  293. package/dist/skins/minimal.d.ts +0 -2
  294. package/dist/skins/minimal.js +0 -9
  295. package/dist/store-hGO5HE2A.js +0 -124
  296. package/dist/store-hGO5HE2A.js.map +0 -1
  297. package/dist/store.d.ts +0 -2
  298. package/dist/store.js +0 -6
@@ -0,0 +1,36 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as react from "react";
3
+
4
+ //#region src/ui/captions-button/captions-button.d.ts
5
+ type CaptionsButtonState = {
6
+ active: boolean;
7
+ };
8
+ type CaptionButtonCoreProps = {
9
+ /** Custom label for the button. */label?: string | ((state: CaptionsButtonState) => string) | undefined; /** Whether the button is disabled. */
10
+ disabled?: boolean | undefined;
11
+ };
12
+ interface CaptionsButtonProps extends UIComponentProps<'button', CaptionsButtonState>, CaptionButtonCoreProps {}
13
+ /**
14
+ * A button that toggles captions.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * <CaptionsButton />
19
+ *
20
+ * <CaptionsButton
21
+ * render={(props, state) => (
22
+ * <button {...props}>
23
+ * {state.active ? <CaptionsOnIcon /> : <CaptionsOffIcon />}
24
+ * </button>
25
+ * )}
26
+ * />
27
+ * ```
28
+ */
29
+ declare const CaptionsButton: react.ForwardRefExoticComponent<Omit<CaptionsButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
30
+ declare namespace CaptionsButton {
31
+ type Props = CaptionsButtonProps;
32
+ type State = CaptionsButtonState;
33
+ }
34
+ //#endregion
35
+ export { CaptionsButton, CaptionsButtonProps, CaptionsButtonState };
36
+ //# sourceMappingURL=captions-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captions-button.d.ts","names":[],"sources":["../../../../src/ui/captions-button/captions-button.tsx"],"mappings":";;;;KAWY,mBAAA;EACV,MAAA;AAAA;AAAA,KAEG,sBAAA;EAH0B,mCAK7B,KAAA,cAAmB,KAAA,EAAO,mBAAA,0BAJ1B;EAMA,QAAA;AAAA;AAAA,UAOe,mBAAA,SAA4B,gBAAA,WAA2B,mBAAA,GAAsB,sBAAA;;;;;;;;AAA9F;;;;;;;;;cAkBa,cAAA,EAAc,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,mBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,iBAAA;AAAA,kBA2BV,cAAA;EAAA,KACH,KAAA,GAAQ,mBAAA;EAAA,KACR,KAAA,GAAQ,mBAAA;AAAA"}
@@ -0,0 +1,51 @@
1
+ 'use client';
2
+
3
+ import { renderElement } from "../../utils/use-render.js";
4
+ import { useButton } from "../hooks/use-button.js";
5
+ import { forwardRef, useState } from "react";
6
+
7
+ //#region src/ui/captions-button/captions-button.tsx
8
+ const CaptionButtonDataAttrs = { active: "data-active" };
9
+ /**
10
+ * A button that toggles captions.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <CaptionsButton />
15
+ *
16
+ * <CaptionsButton
17
+ * render={(props, state) => (
18
+ * <button {...props}>
19
+ * {state.active ? <CaptionsOnIcon /> : <CaptionsOffIcon />}
20
+ * </button>
21
+ * )}
22
+ * />
23
+ * ```
24
+ */
25
+ const CaptionsButton = forwardRef(function CaptionsButton(componentProps, forwardedRef) {
26
+ const { render, className, style, label, disabled, ...elementProps } = componentProps;
27
+ const [isActive, setIsActive] = useState(false);
28
+ const { getButtonProps, buttonRef } = useButton({
29
+ displayName: "CaptionsButton",
30
+ onActivate: () => setIsActive((active) => !active),
31
+ isDisabled: () => disabled ?? false
32
+ });
33
+ return renderElement("button", {
34
+ render,
35
+ className,
36
+ style
37
+ }, {
38
+ state: { active: isActive },
39
+ stateAttrMap: CaptionButtonDataAttrs,
40
+ ref: [forwardedRef, buttonRef],
41
+ props: [
42
+ elementProps,
43
+ getButtonProps(),
44
+ { "aria-pressed": isActive }
45
+ ]
46
+ });
47
+ });
48
+
49
+ //#endregion
50
+ export { CaptionsButton };
51
+ //# sourceMappingURL=captions-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"captions-button.js","names":[],"sources":["../../../../src/ui/captions-button/captions-button.tsx"],"sourcesContent":["'use client';\n\nimport type { StateAttrMap } from '@videojs/core';\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useState } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\nimport { useButton } from '../hooks/use-button';\n\n// FIXME: Replace with state/props from core.\nexport type CaptionsButtonState = {\n active: boolean;\n};\ntype CaptionButtonCoreProps = {\n /** Custom label for the button. */\n label?: string | ((state: CaptionsButtonState) => string) | undefined;\n /** Whether the button is disabled. */\n disabled?: boolean | undefined;\n};\nconst CaptionButtonDataAttrs = {\n /** Present when the captions are active. */\n active: 'data-active',\n} as const satisfies StateAttrMap<CaptionsButtonState>;\n\nexport interface CaptionsButtonProps extends UIComponentProps<'button', CaptionsButtonState>, CaptionButtonCoreProps {}\n\n/**\n * A button that toggles captions.\n *\n * @example\n * ```tsx\n * <CaptionsButton />\n *\n * <CaptionsButton\n * render={(props, state) => (\n * <button {...props}>\n * {state.active ? <CaptionsOnIcon /> : <CaptionsOffIcon />}\n * </button>\n * )}\n * />\n * ```\n */\nexport const CaptionsButton = forwardRef(function CaptionsButton(\n componentProps: CaptionsButtonProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const { render, className, style, label, disabled, ...elementProps } = componentProps;\n\n // FIXME: Replace with actual captions state\n const [isActive, setIsActive] = useState(false);\n\n const { getButtonProps, buttonRef } = useButton({\n displayName: 'CaptionsButton',\n onActivate: () => setIsActive((active) => !active), // FIXME: Replace with actual toggle logic\n isDisabled: () => disabled ?? false,\n });\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state: { active: isActive }, // FIXME: Replace with actual toggle logic\n stateAttrMap: CaptionButtonDataAttrs,\n ref: [forwardedRef, buttonRef],\n props: [elementProps, getButtonProps(), { 'aria-pressed': isActive }],\n }\n );\n});\n\nexport namespace CaptionsButton {\n export type Props = CaptionsButtonProps;\n export type State = CaptionsButtonState;\n}\n"],"mappings":";;;;;;;AAoBA,MAAM,yBAAyB,EAE7B,QAAQ,eACT;;;;;;;;;;;;;;;;;AAoBD,MAAa,iBAAiB,WAAW,SAAS,eAChD,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,OAAO,UAAU,GAAG,iBAAiB;CAGvE,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;CAE/C,MAAM,EAAE,gBAAgB,cAAc,UAAU;EAC9C,aAAa;EACb,kBAAkB,aAAa,WAAW,CAAC,OAAO;EAClD,kBAAkB,YAAY;EAC/B,CAAC;AAEF,QAAO,cACL,UACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OAAO,EAAE,QAAQ,UAAU;EAC3B,cAAc;EACd,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO;GAAC;GAAc,gBAAgB;GAAE,EAAE,gBAAgB,UAAU;GAAC;EACtE,CACF;EACD"}
@@ -0,0 +1,2 @@
1
+ import { CaptionsButton, CaptionsButtonProps, CaptionsButtonState } from "./captions-button.js";
2
+ export { CaptionsButton, type CaptionsButtonProps, type CaptionsButtonState };
@@ -0,0 +1,3 @@
1
+ import { CaptionsButton } from "./captions-button.js";
2
+
3
+ export { CaptionsButton };
@@ -0,0 +1,17 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as react from "react";
3
+ import { ReactNode } from "react";
4
+
5
+ //#region src/ui/controls/controls-group.d.ts
6
+ type GroupState = Record<string, never>;
7
+ interface ControlsGroupProps extends UIComponentProps<'div', GroupState> {
8
+ children?: ReactNode | undefined;
9
+ }
10
+ /** Layout group for related controls; sets `role="group"` when labeled. */
11
+ declare const ControlsGroup: react.ForwardRefExoticComponent<Omit<ControlsGroupProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
12
+ declare namespace ControlsGroup {
13
+ type Props = ControlsGroupProps;
14
+ }
15
+ //#endregion
16
+ export { ControlsGroup, ControlsGroupProps };
17
+ //# sourceMappingURL=controls-group.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls-group.d.ts","names":[],"sources":["../../../../src/ui/controls/controls-group.tsx"],"mappings":";;;;;KAQK,UAAA,GAAa,MAAA;AAAA,UAED,kBAAA,SAA2B,gBAAA,QAAwB,UAAA;EAClE,QAAA,GAAW,SAAA;AAAA;;cAIA,aAAA,EAAa,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,kBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAqBT,aAAA;EAAA,KACH,KAAA,GAAQ,kBAAA;AAAA"}
@@ -0,0 +1,27 @@
1
+ 'use client';
2
+
3
+ import { renderElement } from "../../utils/use-render.js";
4
+ import { forwardRef } from "react";
5
+
6
+ //#region src/ui/controls/controls-group.tsx
7
+ /** Layout group for related controls; sets `role="group"` when labeled. */
8
+ const ControlsGroup = forwardRef(function ControlsGroup(componentProps, forwardedRef) {
9
+ const { render, className, style, children, ...elementProps } = componentProps;
10
+ const role = elementProps["aria-label"] || elementProps["aria-labelledby"] ? "group" : void 0;
11
+ return renderElement("div", {
12
+ render,
13
+ className,
14
+ style
15
+ }, {
16
+ state: {},
17
+ ref: [forwardedRef],
18
+ props: [{
19
+ role,
20
+ children
21
+ }, elementProps]
22
+ });
23
+ });
24
+
25
+ //#endregion
26
+ export { ControlsGroup };
27
+ //# sourceMappingURL=controls-group.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls-group.js","names":[],"sources":["../../../../src/ui/controls/controls-group.tsx"],"sourcesContent":["'use client';\n\nimport type { ForwardedRef, ReactNode } from 'react';\nimport { forwardRef } from 'react';\n\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\n\ntype GroupState = Record<string, never>;\n\nexport interface ControlsGroupProps extends UIComponentProps<'div', GroupState> {\n children?: ReactNode | undefined;\n}\n\n/** Layout group for related controls; sets `role=\"group\"` when labeled. */\nexport const ControlsGroup = forwardRef(function ControlsGroup(\n componentProps: ControlsGroupProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { render, className, style, children, ...elementProps } = componentProps;\n\n const role = elementProps['aria-label'] || elementProps['aria-labelledby'] ? 'group' : undefined;\n\n const state: GroupState = {};\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n ref: [forwardedRef],\n props: [{ role, children }, elementProps],\n }\n );\n});\n\nexport namespace ControlsGroup {\n export type Props = ControlsGroupProps;\n}\n"],"mappings":";;;;;;;AAeA,MAAa,gBAAgB,WAAW,SAAS,cAC/C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,iBAAiB;CAEhE,MAAM,OAAO,aAAa,iBAAiB,aAAa,qBAAqB,UAAU;AAIvF,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OANsB,EAAE;EAOxB,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC;GAAE;GAAM;GAAU,EAAE,aAAa;EAC1C,CACF;EACD"}
@@ -0,0 +1,18 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as react from "react";
3
+ import { ReactNode } from "react";
4
+ import { ControlsCore } from "@videojs/core";
5
+
6
+ //#region src/ui/controls/controls-root.d.ts
7
+ interface ControlsRootProps extends UIComponentProps<'div', ControlsCore.State> {
8
+ children?: ReactNode | undefined;
9
+ }
10
+ /** Root container for player controls state and rendered control content. */
11
+ declare const ControlsRoot: react.ForwardRefExoticComponent<Omit<ControlsRootProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
12
+ declare namespace ControlsRoot {
13
+ type Props = ControlsRootProps;
14
+ type State = ControlsCore.State;
15
+ }
16
+ //#endregion
17
+ export { ControlsRoot, ControlsRootProps };
18
+ //# sourceMappingURL=controls-root.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls-root.d.ts","names":[],"sources":["../../../../src/ui/controls/controls-root.tsx"],"mappings":";;;;;;UAWiB,iBAAA,SAA0B,gBAAA,QAAwB,YAAA,CAAa,KAAA;EAC9E,QAAA,GAAW,SAAA;AAAA;AADb;AAAA,cAKa,YAAA,EAAY,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,iBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBA6BR,YAAA;EAAA,KACH,KAAA,GAAQ,iBAAA;EAAA,KACR,KAAA,GAAQ,YAAA,CAAa,KAAA;AAAA"}
@@ -0,0 +1,34 @@
1
+ 'use client';
2
+
3
+ import { usePlayer } from "../../player/context.js";
4
+ import { renderElement } from "../../utils/use-render.js";
5
+ import { logMissingFeature, selectControls } from "@videojs/core/dom";
6
+ import { forwardRef, useState } from "react";
7
+ import { ControlsCore, ControlsDataAttrs } from "@videojs/core";
8
+
9
+ //#region src/ui/controls/controls-root.tsx
10
+ /** Root container for player controls state and rendered control content. */
11
+ const ControlsRoot = forwardRef(function ControlsRoot(componentProps, forwardedRef) {
12
+ const { render, className, style, children, ...elementProps } = componentProps;
13
+ const controls = usePlayer(selectControls);
14
+ const [core] = useState(() => new ControlsCore());
15
+ if (!controls) {
16
+ logMissingFeature("Controls.Root", "controls");
17
+ return null;
18
+ }
19
+ const state = core.getState(controls);
20
+ return renderElement("div", {
21
+ render,
22
+ className,
23
+ style
24
+ }, {
25
+ state,
26
+ stateAttrMap: ControlsDataAttrs,
27
+ ref: [forwardedRef],
28
+ props: [{ children }, elementProps]
29
+ });
30
+ });
31
+
32
+ //#endregion
33
+ export { ControlsRoot };
34
+ //# sourceMappingURL=controls-root.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controls-root.js","names":[],"sources":["../../../../src/ui/controls/controls-root.tsx"],"sourcesContent":["'use client';\n\nimport { ControlsCore, ControlsDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectControls } from '@videojs/core/dom';\nimport type { ForwardedRef, ReactNode } 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 ControlsRootProps extends UIComponentProps<'div', ControlsCore.State> {\n children?: ReactNode | undefined;\n}\n\n/** Root container for player controls state and rendered control content. */\nexport const ControlsRoot = forwardRef(function ControlsRoot(\n componentProps: ControlsRootProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { render, className, style, children, ...elementProps } = componentProps;\n\n const controls = usePlayer(selectControls);\n\n const [core] = useState(() => new ControlsCore());\n\n if (!controls) {\n if (__DEV__) logMissingFeature('Controls.Root', 'controls');\n return null;\n }\n\n const state = core.getState(controls);\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state,\n stateAttrMap: ControlsDataAttrs,\n ref: [forwardedRef],\n props: [{ children }, elementProps],\n }\n );\n});\n\nexport namespace ControlsRoot {\n export type Props = ControlsRootProps;\n export type State = ControlsCore.State;\n}\n"],"mappings":";;;;;;;;;;AAgBA,MAAa,eAAe,WAAW,SAAS,aAC9C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,UAAU,GAAG,iBAAiB;CAEhE,MAAM,WAAW,UAAU,eAAe;CAE1C,MAAM,CAAC,QAAQ,eAAe,IAAI,cAAc,CAAC;AAEjD,KAAI,CAAC,UAAU;AACA,oBAAkB,iBAAiB,WAAW;AAC3D,SAAO;;CAGT,MAAM,QAAQ,KAAK,SAAS,SAAS;AAErC,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE;EACA,cAAc;EACd,KAAK,CAAC,aAAa;EACnB,OAAO,CAAC,EAAE,UAAU,EAAE,aAAa;EACpC,CACF;EACD"}
@@ -0,0 +1,2 @@
1
+ import { index_parts_d_exports } from "./index.parts.js";
2
+ export { index_parts_d_exports as Controls };
@@ -0,0 +1,3 @@
1
+ import { index_parts_exports } from "./index.parts.js";
2
+
3
+ export { index_parts_exports as Controls };
@@ -0,0 +1,10 @@
1
+ import { ControlsGroup, ControlsGroupProps } from "./controls-group.js";
2
+ import { ControlsRoot, ControlsRootProps } from "./controls-root.js";
3
+
4
+ //#region src/ui/controls/index.parts.d.ts
5
+ declare namespace index_parts_d_exports {
6
+ export { ControlsGroup as Group, ControlsGroupProps as GroupProps, ControlsRoot as Root, ControlsRootProps as RootProps };
7
+ }
8
+ //#endregion
9
+ export { index_parts_d_exports };
10
+ //# sourceMappingURL=index.parts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.parts.d.ts","names":[],"sources":["../../../../src/ui/controls/index.parts.ts"],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import { __exportAll } from "../../_virtual/_rolldown/runtime.js";
2
+ import { ControlsGroup } from "./controls-group.js";
3
+ import { ControlsRoot } from "./controls-root.js";
4
+
5
+ //#region src/ui/controls/index.parts.ts
6
+ var index_parts_exports = /* @__PURE__ */ __exportAll({
7
+ Group: () => ControlsGroup,
8
+ Root: () => ControlsRoot
9
+ });
10
+
11
+ //#endregion
12
+ export { index_parts_exports };
13
+ //# sourceMappingURL=index.parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.parts.js","names":[],"sources":["../../../../src/ui/controls/index.parts.ts"],"sourcesContent":["export { ControlsGroup as Group, type ControlsGroupProps as GroupProps } from './controls-group';\nexport { ControlsRoot as Root, type ControlsRootProps as RootProps } from './controls-root';\n"],"mappings":""}
@@ -0,0 +1,35 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as react from "react";
3
+
4
+ //#region src/ui/error-dialog/error-dialog.d.ts
5
+ type ErrorDialogState = {
6
+ visible: boolean;
7
+ onDismiss: () => void;
8
+ };
9
+ interface ErrorDialogProps extends UIComponentProps<'div', ErrorDialogState> {
10
+ 'aria-labelledby': string;
11
+ 'aria-describedby'?: string;
12
+ dismiss?: () => void;
13
+ }
14
+ /**
15
+ * Displays an error dialog when media playback encounters an error.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <ErrorDialog />
20
+ *
21
+ * <ErrorDialog
22
+ * render={(props, state) => (
23
+ * <div {...props}>Something went wrong</div>
24
+ * )}
25
+ * />
26
+ * ```
27
+ */
28
+ declare const ErrorDialog: react.ForwardRefExoticComponent<Omit<ErrorDialogProps, "ref"> & react.RefAttributes<HTMLDivElement>>;
29
+ declare namespace ErrorDialog {
30
+ type Props = ErrorDialogProps;
31
+ type State = ErrorDialogState;
32
+ }
33
+ //#endregion
34
+ export { ErrorDialog, ErrorDialogProps };
35
+ //# sourceMappingURL=error-dialog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-dialog.d.ts","names":[],"sources":["../../../../src/ui/error-dialog/error-dialog.tsx"],"mappings":";;;;KAOK,gBAAA;EAAqB,OAAA;EAAkB,SAAA;AAAA;AAAA,UAE3B,gBAAA,SAAyB,gBAAA,QAAwB,gBAAA;EAChE,iBAAA;EACA,kBAAA;EACA,OAAA;AAAA;;;;;;;;;;;AAmBF;;;;cAAa,WAAA,EAAW,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,gBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,cAAA;AAAA,kBAgDP,WAAA;EAAA,KACH,KAAA,GAAQ,gBAAA;EAAA,KACR,KAAA,GAAQ,gBAAA;AAAA"}
@@ -0,0 +1,54 @@
1
+ 'use client';
2
+
3
+ import { renderElement } from "../../utils/use-render.js";
4
+ import { forwardRef, useEffect, useRef, useState } from "react";
5
+
6
+ //#region src/ui/error-dialog/error-dialog.tsx
7
+ /**
8
+ * Displays an error dialog when media playback encounters an error.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * <ErrorDialog />
13
+ *
14
+ * <ErrorDialog
15
+ * render={(props, state) => (
16
+ * <div {...props}>Something went wrong</div>
17
+ * )}
18
+ * />
19
+ * ```
20
+ */
21
+ const ErrorDialog = forwardRef(function ErrorDialog(componentProps, forwardedRef) {
22
+ const { render, className, style, ...elementProps } = componentProps;
23
+ const dialogRef = useRef(null);
24
+ const [hasError, setHasError] = useState(false);
25
+ useEffect(() => {
26
+ const handle = setTimeout(() => {}, 2e3);
27
+ return () => clearTimeout(handle);
28
+ }, []);
29
+ useEffect(() => {
30
+ if (!hasError) return;
31
+ requestAnimationFrame(() => {
32
+ dialogRef.current?.focus();
33
+ });
34
+ }, [hasError]);
35
+ return renderElement("div", {
36
+ render,
37
+ className,
38
+ style
39
+ }, {
40
+ state: {
41
+ visible: hasError,
42
+ onDismiss: () => setHasError(false)
43
+ },
44
+ ref: [forwardedRef, dialogRef],
45
+ props: [{
46
+ role: "alertdialog",
47
+ tabIndex: -1
48
+ }, elementProps]
49
+ });
50
+ });
51
+
52
+ //#endregion
53
+ export { ErrorDialog };
54
+ //# sourceMappingURL=error-dialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-dialog.js","names":[],"sources":["../../../../src/ui/error-dialog/error-dialog.tsx"],"sourcesContent":["'use client';\n\nimport type { ForwardedRef } from 'react';\nimport { forwardRef, useEffect, useRef, useState } from 'react';\nimport type { UIComponentProps } from '../../utils/types';\nimport { renderElement } from '../../utils/use-render';\n\ntype ErrorDialogState = { visible: boolean; onDismiss: () => void };\n\nexport interface ErrorDialogProps extends UIComponentProps<'div', ErrorDialogState> {\n 'aria-labelledby': string;\n 'aria-describedby'?: string;\n dismiss?: () => void;\n}\n\nconst DEBUG = false;\n\n/**\n * Displays an error dialog when media playback encounters an error.\n *\n * @example\n * ```tsx\n * <ErrorDialog />\n *\n * <ErrorDialog\n * render={(props, state) => (\n * <div {...props}>Something went wrong</div>\n * )}\n * />\n * ```\n */\nexport const ErrorDialog = forwardRef(function ErrorDialog(\n componentProps: ErrorDialogProps,\n forwardedRef: ForwardedRef<HTMLDivElement>\n) {\n const { render, className, style, ...elementProps } = componentProps;\n const dialogRef = useRef<HTMLDivElement>(null);\n\n const [hasError, setHasError] = useState(false);\n\n // FIXME: This is just debugging code\n useEffect(() => {\n const handle = setTimeout(() => {\n if (!DEBUG) return;\n setHasError(true);\n }, 2000);\n\n return () => clearTimeout(handle);\n }, []);\n\n // Focus the dialog when it becomes visible to ensure it's announced by screen readers.\n // Wait a frame for the accessibility tree to update with the dialog before focusing.\n useEffect(() => {\n if (!hasError) return;\n requestAnimationFrame(() => {\n dialogRef.current?.focus();\n });\n }, [hasError]);\n\n return renderElement(\n 'div',\n { render, className, style },\n {\n state: {\n visible: hasError,\n onDismiss: () => setHasError(false),\n },\n ref: [forwardedRef, dialogRef],\n props: [\n {\n role: 'alertdialog',\n tabIndex: -1,\n },\n elementProps,\n ],\n }\n );\n});\n\nexport namespace ErrorDialog {\n export type Props = ErrorDialogProps;\n export type State = ErrorDialogState;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA+BA,MAAa,cAAc,WAAW,SAAS,YAC7C,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,GAAG,iBAAiB;CACtD,MAAM,YAAY,OAAuB,KAAK;CAE9C,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;AAG/C,iBAAgB;EACd,MAAM,SAAS,iBAAiB,IAG7B,IAAK;AAER,eAAa,aAAa,OAAO;IAChC,EAAE,CAAC;AAIN,iBAAgB;AACd,MAAI,CAAC,SAAU;AACf,8BAA4B;AAC1B,aAAU,SAAS,OAAO;IAC1B;IACD,CAAC,SAAS,CAAC;AAEd,QAAO,cACL,OACA;EAAE;EAAQ;EAAW;EAAO,EAC5B;EACE,OAAO;GACL,SAAS;GACT,iBAAiB,YAAY,MAAM;GACpC;EACD,KAAK,CAAC,cAAc,UAAU;EAC9B,OAAO,CACL;GACE,MAAM;GACN,UAAU;GACX,EACD,aACD;EACF,CACF;EACD"}
@@ -0,0 +1,2 @@
1
+ import { ErrorDialog, ErrorDialogProps } from "./error-dialog.js";
2
+ export { ErrorDialog, ErrorDialogProps };
@@ -0,0 +1,3 @@
1
+ import { ErrorDialog } from "./error-dialog.js";
2
+
3
+ export { ErrorDialog };
@@ -0,0 +1,14 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as react from "react";
3
+ import { FullscreenButtonCore } from "@videojs/core";
4
+
5
+ //#region src/ui/fullscreen-button/fullscreen-button.d.ts
6
+ interface FullscreenButtonProps extends UIComponentProps<'button', FullscreenButtonCore.State>, FullscreenButtonCore.Props {}
7
+ declare const FullscreenButton: react.ForwardRefExoticComponent<Omit<FullscreenButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
8
+ declare namespace FullscreenButton {
9
+ type Props = FullscreenButtonProps;
10
+ type State = FullscreenButtonCore.State;
11
+ }
12
+ //#endregion
13
+ export { FullscreenButton, FullscreenButtonProps };
14
+ //# sourceMappingURL=fullscreen-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreen-button.d.ts","names":[],"sources":["../../../../src/ui/fullscreen-button/fullscreen-button.tsx"],"mappings":";;;;;UAYiB,qBAAA,SACP,gBAAA,WAA2B,oBAAA,CAAqB,KAAA,GACtD,oBAAA,CAAqB,KAAA;AAAA,cAEZ,gBAAA,EAAgB,KAAA,CAAA,yBAAA,CAAA,IAAA,CAAA,qBAAA,WAAA,KAAA,CAAA,aAAA,CAAA,iBAAA;AAAA,kBAoCZ,gBAAA;EAAA,KACH,KAAA,GAAQ,qBAAA;EAAA,KACR,KAAA,GAAQ,oBAAA,CAAqB,KAAA;AAAA"}
@@ -0,0 +1,47 @@
1
+ 'use client';
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, selectFullscreen } from "@videojs/core/dom";
7
+ import { forwardRef, useState } from "react";
8
+ import { FullscreenButtonCore, FullscreenButtonDataAttrs } from "@videojs/core";
9
+
10
+ //#region src/ui/fullscreen-button/fullscreen-button.tsx
11
+ const FullscreenButton = forwardRef(function FullscreenButton(componentProps, forwardedRef) {
12
+ const { render, className, style, label, disabled, ...elementProps } = componentProps;
13
+ const fullscreen = usePlayer(selectFullscreen);
14
+ const [core] = useState(() => new FullscreenButtonCore());
15
+ core.setProps({
16
+ label,
17
+ disabled
18
+ });
19
+ const { getButtonProps, buttonRef } = useButton({
20
+ displayName: "FullscreenButton",
21
+ onActivate: () => core.toggle(fullscreen),
22
+ isDisabled: () => disabled || !fullscreen
23
+ });
24
+ if (!fullscreen) {
25
+ logMissingFeature("FullscreenButton", "fullscreen");
26
+ return null;
27
+ }
28
+ const state = core.getState(fullscreen);
29
+ return renderElement("button", {
30
+ render,
31
+ className,
32
+ style
33
+ }, {
34
+ state,
35
+ stateAttrMap: FullscreenButtonDataAttrs,
36
+ ref: [forwardedRef, buttonRef],
37
+ props: [
38
+ core.getAttrs(state),
39
+ elementProps,
40
+ getButtonProps()
41
+ ]
42
+ });
43
+ });
44
+
45
+ //#endregion
46
+ export { FullscreenButton };
47
+ //# sourceMappingURL=fullscreen-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreen-button.js","names":[],"sources":["../../../../src/ui/fullscreen-button/fullscreen-button.tsx"],"sourcesContent":["'use client';\n\nimport { FullscreenButtonCore, FullscreenButtonDataAttrs } from '@videojs/core';\nimport { logMissingFeature, selectFullscreen } 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 FullscreenButtonProps\n extends UIComponentProps<'button', FullscreenButtonCore.State>,\n FullscreenButtonCore.Props {}\n\nexport const FullscreenButton = forwardRef(function FullscreenButton(\n componentProps: FullscreenButtonProps,\n forwardedRef: ForwardedRef<HTMLButtonElement>\n) {\n const { render, className, style, label, disabled, ...elementProps } = componentProps;\n\n const fullscreen = usePlayer(selectFullscreen);\n\n const [core] = useState(() => new FullscreenButtonCore());\n core.setProps({ label, disabled });\n\n const { getButtonProps, buttonRef } = useButton({\n displayName: 'FullscreenButton',\n onActivate: () => core.toggle(fullscreen!),\n isDisabled: () => disabled || !fullscreen,\n });\n\n if (!fullscreen) {\n if (__DEV__) logMissingFeature('FullscreenButton', 'fullscreen');\n return null;\n }\n\n const state = core.getState(fullscreen);\n\n return renderElement(\n 'button',\n { render, className, style },\n {\n state,\n stateAttrMap: FullscreenButtonDataAttrs,\n ref: [forwardedRef, buttonRef],\n props: [core.getAttrs(state), elementProps, getButtonProps()],\n }\n );\n});\n\nexport namespace FullscreenButton {\n export type Props = FullscreenButtonProps;\n export type State = FullscreenButtonCore.State;\n}\n"],"mappings":";;;;;;;;;;AAgBA,MAAa,mBAAmB,WAAW,SAAS,iBAClD,gBACA,cACA;CACA,MAAM,EAAE,QAAQ,WAAW,OAAO,OAAO,UAAU,GAAG,iBAAiB;CAEvE,MAAM,aAAa,UAAU,iBAAiB;CAE9C,MAAM,CAAC,QAAQ,eAAe,IAAI,sBAAsB,CAAC;AACzD,MAAK,SAAS;EAAE;EAAO;EAAU,CAAC;CAElC,MAAM,EAAE,gBAAgB,cAAc,UAAU;EAC9C,aAAa;EACb,kBAAkB,KAAK,OAAO,WAAY;EAC1C,kBAAkB,YAAY,CAAC;EAChC,CAAC;AAEF,KAAI,CAAC,YAAY;AACF,oBAAkB,oBAAoB,aAAa;AAChE,SAAO;;CAGT,MAAM,QAAQ,KAAK,SAAS,WAAW;AAEvC,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"}
@@ -0,0 +1,2 @@
1
+ import { FullscreenButton, FullscreenButtonProps } from "./fullscreen-button.js";
2
+ export { FullscreenButton, type FullscreenButtonProps };
@@ -0,0 +1,3 @@
1
+ import { FullscreenButton } from "./fullscreen-button.js";
2
+
3
+ export { FullscreenButton };
@@ -0,0 +1,40 @@
1
+ import { ComponentPropsWithRef, Ref } from "react";
2
+
3
+ //#region src/ui/hooks/use-button.d.ts
4
+ interface UseButtonParameters {
5
+ displayName: string;
6
+ onActivate: () => void;
7
+ isDisabled: () => boolean;
8
+ }
9
+ interface UseButtonReturnValue {
10
+ getButtonProps: (externalProps?: ComponentPropsWithRef<'button'>) => ComponentPropsWithRef<'button'>;
11
+ buttonRef: Ref<HTMLElement>;
12
+ }
13
+ /**
14
+ * Hook for button behavior with keyboard and pointer interaction.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * const { getButtonProps, buttonRef } = useButton({
19
+ * displayName: 'PlayButton',
20
+ * onActivate: () => togglePlayback(),
21
+ * isDisabled: () => disabled,
22
+ * });
23
+ *
24
+ * return useRender('button', componentProps, {
25
+ * state,
26
+ * ref: [forwardedRef, buttonRef],
27
+ * props: [elementProps, getButtonProps],
28
+ * });
29
+ * ```
30
+ *
31
+ * @param params - Button configuration with activation handler and disabled check.
32
+ */
33
+ declare function useButton(params: UseButtonParameters): UseButtonReturnValue;
34
+ declare namespace useButton {
35
+ type Parameters = UseButtonParameters;
36
+ type ReturnValue = UseButtonReturnValue;
37
+ }
38
+ //#endregion
39
+ export { useButton };
40
+ //# sourceMappingURL=use-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-button.d.ts","names":[],"sources":["../../../../src/ui/hooks/use-button.ts"],"mappings":";;;UAOiB,mBAAA;EACf,WAAA;EACA,UAAA;EACA,UAAA;AAAA;AAAA,UAGe,oBAAA;EACf,cAAA,GAAiB,aAAA,GAAgB,qBAAA,eAAoC,qBAAA;EACrE,SAAA,EAAW,GAAA,CAAI,WAAA;AAAA;;;AAFjB;;;;;;;;;;;;;;;;;;iBAyBgB,SAAA,CAAU,MAAA,EAAQ,mBAAA,GAAsB,oBAAA;AAAA,kBAuBvC,SAAA;EAAA,KACH,UAAA,GAAa,mBAAA;EAAA,KACb,WAAA,GAAc,oBAAA;AAAA"}
@@ -0,0 +1,46 @@
1
+ 'use client';
2
+
3
+ import { mergeProps } from "../../utils/merge-props.js";
4
+ import { createButton } from "@videojs/core/dom";
5
+ import { useCallback } from "react";
6
+
7
+ //#region src/ui/hooks/use-button.ts
8
+ /**
9
+ * Hook for button behavior with keyboard and pointer interaction.
10
+ *
11
+ * @example
12
+ * ```tsx
13
+ * const { getButtonProps, buttonRef } = useButton({
14
+ * displayName: 'PlayButton',
15
+ * onActivate: () => togglePlayback(),
16
+ * isDisabled: () => disabled,
17
+ * });
18
+ *
19
+ * return useRender('button', componentProps, {
20
+ * state,
21
+ * ref: [forwardedRef, buttonRef],
22
+ * props: [elementProps, getButtonProps],
23
+ * });
24
+ * ```
25
+ *
26
+ * @param params - Button configuration with activation handler and disabled check.
27
+ */
28
+ function useButton(params) {
29
+ const { displayName, onActivate, isDisabled } = params;
30
+ const buttonRef = useCallback((element) => {
31
+ if (element && element.tagName !== "BUTTON") console.warn(`${displayName} should render a <button> element for accessibility`);
32
+ }, [displayName]);
33
+ return {
34
+ getButtonProps: useCallback((externalProps) => {
35
+ return mergeProps(createButton({
36
+ onActivate,
37
+ isDisabled
38
+ }), externalProps);
39
+ }, [onActivate, isDisabled]),
40
+ buttonRef
41
+ };
42
+ }
43
+
44
+ //#endregion
45
+ export { useButton };
46
+ //# sourceMappingURL=use-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-button.js","names":[],"sources":["../../../../src/ui/hooks/use-button.ts"],"sourcesContent":["'use client';\n\nimport { createButton } from '@videojs/core/dom';\nimport type { ComponentPropsWithRef, Ref } from 'react';\nimport { useCallback } from 'react';\nimport { mergeProps } from '../../utils/merge-props';\n\nexport interface UseButtonParameters {\n displayName: string;\n onActivate: () => void;\n isDisabled: () => boolean;\n}\n\nexport interface UseButtonReturnValue {\n getButtonProps: (externalProps?: ComponentPropsWithRef<'button'>) => ComponentPropsWithRef<'button'>;\n buttonRef: Ref<HTMLElement>;\n}\n\n/**\n * Hook for button behavior with keyboard and pointer interaction.\n *\n * @example\n * ```tsx\n * const { getButtonProps, buttonRef } = useButton({\n * displayName: 'PlayButton',\n * onActivate: () => togglePlayback(),\n * isDisabled: () => disabled,\n * });\n *\n * return useRender('button', componentProps, {\n * state,\n * ref: [forwardedRef, buttonRef],\n * props: [elementProps, getButtonProps],\n * });\n * ```\n *\n * @param params - Button configuration with activation handler and disabled check.\n */\nexport function useButton(params: UseButtonParameters): UseButtonReturnValue {\n const { displayName, onActivate, isDisabled } = params;\n\n const buttonRef = useCallback(\n (element: HTMLElement | null) => {\n if (__DEV__ && element && element.tagName !== 'BUTTON') {\n console.warn(`${displayName} should render a <button> element for accessibility`);\n }\n },\n [displayName]\n );\n\n const getButtonProps = useCallback(\n (externalProps?: ComponentPropsWithRef<'button'>): ComponentPropsWithRef<'button'> => {\n const buttonProps = createButton({ onActivate, isDisabled });\n return mergeProps(buttonProps, externalProps);\n },\n [onActivate, isDisabled]\n );\n\n return { getButtonProps, buttonRef };\n}\n\nexport namespace useButton {\n export type Parameters = UseButtonParameters;\n export type ReturnValue = UseButtonReturnValue;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAsCA,SAAgB,UAAU,QAAmD;CAC3E,MAAM,EAAE,aAAa,YAAY,eAAe;CAEhD,MAAM,YAAY,aACf,YAAgC;AAC/B,MAAe,WAAW,QAAQ,YAAY,SAC5C,SAAQ,KAAK,GAAG,YAAY,qDAAqD;IAGrF,CAAC,YAAY,CACd;AAUD,QAAO;EAAE,gBARc,aACpB,kBAAqF;AAEpF,UAAO,WADa,aAAa;IAAE;IAAY;IAAY,CAAC,EAC7B,cAAc;KAE/C,CAAC,YAAY,WAAW,CACzB;EAEwB;EAAW"}
@@ -0,0 +1,2 @@
1
+ import { MuteButton, MuteButtonProps } from "./mute-button.js";
2
+ export { MuteButton, type MuteButtonProps };
@@ -0,0 +1,3 @@
1
+ import { MuteButton } from "./mute-button.js";
2
+
3
+ export { MuteButton };
@@ -0,0 +1,17 @@
1
+ import { UIComponentProps } from "../../utils/types.js";
2
+ import * as react from "react";
3
+ import { MuteButtonCore } from "@videojs/core";
4
+
5
+ //#region src/ui/mute-button/mute-button.d.ts
6
+ interface MuteButtonProps extends UIComponentProps<'button', MuteButtonCore.State>, MuteButtonCore.Props {}
7
+ /**
8
+ * A button that toggles mute state.
9
+ */
10
+ declare const MuteButton: react.ForwardRefExoticComponent<Omit<MuteButtonProps, "ref"> & react.RefAttributes<HTMLButtonElement>>;
11
+ declare namespace MuteButton {
12
+ type Props = MuteButtonProps;
13
+ type State = MuteButtonCore.State;
14
+ }
15
+ //#endregion
16
+ export { MuteButton, MuteButtonProps };
17
+ //# sourceMappingURL=mute-button.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mute-button.d.ts","names":[],"sources":["../../../../src/ui/mute-button/mute-button.tsx"],"mappings":";;;;;UAYiB,eAAA,SAAwB,gBAAA,WAA2B,cAAA,CAAe,KAAA,GAAQ,cAAA,CAAe,KAAA;;AAA1G;;cAKa,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"}