@hanifhan1f/vidstack-react 1.12.13 → 1.12.15

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 (392) hide show
  1. package/dev/chunks/vidstack-B-FM4-oZ.js +668 -0
  2. package/dev/chunks/vidstack-B92UncBI.js +61 -0
  3. package/dev/chunks/vidstack-BDiAEW1N.js +11691 -0
  4. package/dev/chunks/vidstack-BZIhWvGa.js +1371 -0
  5. package/dev/chunks/vidstack-Bfi_jCvb.js +476 -0
  6. package/dev/chunks/vidstack-CBF7iUqu.js +22 -0
  7. package/dev/chunks/vidstack-CFZ0rYJz.js +34 -0
  8. package/dev/chunks/vidstack-CM82l-7o.js +551 -0
  9. package/dev/chunks/vidstack-CvWDiSTs.js +84 -0
  10. package/dev/chunks/vidstack-CzU-uC5f.js +189 -0
  11. package/dev/chunks/vidstack-D-hQD1eE.js +9 -0
  12. package/dev/chunks/vidstack-D6_9yy0x.js +643 -0
  13. package/dev/chunks/vidstack-DJQOTrl6.js +180 -0
  14. package/dev/chunks/vidstack-DNbKNc4R.js +288 -0
  15. package/dev/chunks/vidstack-D_bWd66h.js +2023 -0
  16. package/dev/chunks/vidstack-Dm1xEU9Q.js +36 -0
  17. package/dev/chunks/vidstack-f6WXkmfP.js +375 -0
  18. package/dev/chunks/vidstack-krOAtKMi.js +34 -0
  19. package/dev/chunks/vidstack-lYFZKRUc.js +401 -0
  20. package/dev/chunks/vidstack-vz-aZSfo.js +1497 -0
  21. package/dev/player/vidstack-default-components.js +14 -0
  22. package/dev/player/vidstack-default-icons.js +88 -0
  23. package/dev/player/vidstack-default-layout.js +14 -0
  24. package/dev/player/vidstack-plyr-icons.js +62 -0
  25. package/dev/player/vidstack-plyr-layout.js +636 -0
  26. package/dev/player/vidstack-remotion.js +345 -0
  27. package/dev/vidstack.js +587 -0
  28. package/dom.d.ts +91 -0
  29. package/google-cast.d.ts +1422 -0
  30. package/icons.d.ts +5 -0
  31. package/index.d.ts +8 -0
  32. package/package.json +9 -60
  33. package/player/layouts/default.d.ts +11392 -0
  34. package/player/layouts/plyr.d.ts +5 -0
  35. package/player/remotion.d.ts +5 -0
  36. package/player/styles/base.css +153 -0
  37. package/player/styles/default/buffering.css +55 -0
  38. package/player/styles/default/buttons.css +175 -0
  39. package/player/styles/default/captions.css +181 -0
  40. package/player/styles/default/chapter-title.css +26 -0
  41. package/player/styles/default/controls.css +56 -0
  42. package/player/styles/default/gestures.css +19 -0
  43. package/player/styles/default/icons.css +6 -0
  44. package/player/styles/default/keyboard.css +148 -0
  45. package/player/styles/default/layouts/audio.css +417 -0
  46. package/player/styles/default/layouts/video.css +1082 -0
  47. package/player/styles/default/menus.css +959 -0
  48. package/player/styles/default/poster.css +52 -0
  49. package/player/styles/default/sliders.css +391 -0
  50. package/player/styles/default/theme.css +2461 -0
  51. package/player/styles/default/thumbnail.css +40 -0
  52. package/player/styles/default/time.css +45 -0
  53. package/player/styles/default/tooltips.css +141 -0
  54. package/player/styles/plyr/theme.css +1237 -0
  55. package/prod/chunks/vidstack-0Foyib2F.js +34 -0
  56. package/prod/chunks/vidstack-BbPEqH3g.js +11196 -0
  57. package/prod/chunks/vidstack-Bh7M8kL6.js +663 -0
  58. package/prod/chunks/vidstack-BlPINAXN.js +189 -0
  59. package/prod/chunks/vidstack-C5Rzkyfp.js +375 -0
  60. package/prod/chunks/vidstack-CBF7iUqu.js +22 -0
  61. package/prod/chunks/vidstack-CZNlvfmV.js +288 -0
  62. package/prod/chunks/vidstack-CZgUA94N.js +1979 -0
  63. package/prod/chunks/vidstack-Ce0Qn3e1.js +1497 -0
  64. package/prod/chunks/vidstack-D0XCUWbp.js +159 -0
  65. package/prod/chunks/vidstack-DTyDOhwS.js +504 -0
  66. package/prod/chunks/vidstack-DhC5F6c8.js +470 -0
  67. package/prod/chunks/vidstack-Dm1xEU9Q.js +36 -0
  68. package/prod/chunks/vidstack-Ma9rwtR0.js +386 -0
  69. package/prod/chunks/vidstack-WsodkLQg.js +1371 -0
  70. package/prod/chunks/vidstack-jIPoNqhj.js +545 -0
  71. package/prod/chunks/vidstack-krOAtKMi.js +34 -0
  72. package/prod/chunks/vidstack-vqp2QaHR.js +9 -0
  73. package/prod/chunks/vidstack-xo_SmgiV.js +84 -0
  74. package/prod/chunks/vidstack-xvxeRtaN.js +61 -0
  75. package/prod/player/vidstack-default-components.js +14 -0
  76. package/prod/player/vidstack-default-icons.js +88 -0
  77. package/prod/player/vidstack-default-layout.js +14 -0
  78. package/prod/player/vidstack-plyr-icons.js +62 -0
  79. package/prod/player/vidstack-plyr-layout.js +636 -0
  80. package/prod/player/vidstack-remotion.js +335 -0
  81. package/prod/vidstack-icons.js +435 -0
  82. package/prod/vidstack.js +648 -0
  83. package/server/chunks/vidstack-2zMSe4ym.js +1371 -0
  84. package/server/chunks/vidstack-BtqWstSj.js +375 -0
  85. package/server/chunks/vidstack-C-HdFsZi.js +84 -0
  86. package/server/chunks/vidstack-C4iWXMC-.js +545 -0
  87. package/server/chunks/vidstack-C5zFBMwg.js +386 -0
  88. package/server/chunks/vidstack-CBF7iUqu.js +22 -0
  89. package/server/chunks/vidstack-CEh38XpD.js +288 -0
  90. package/server/chunks/vidstack-CWR0J8Qz.js +1497 -0
  91. package/server/chunks/vidstack-CkMAeO-e.js +34 -0
  92. package/server/chunks/vidstack-Cm0qnRvu.js +11196 -0
  93. package/server/chunks/vidstack-CoGzBr_V.js +663 -0
  94. package/server/chunks/vidstack-CyFwkPiu.js +470 -0
  95. package/server/chunks/vidstack-D-hQD1eE.js +9 -0
  96. package/server/chunks/vidstack-D_bWd66h.js +2023 -0
  97. package/server/chunks/vidstack-Dm1xEU9Q.js +36 -0
  98. package/server/chunks/vidstack-DtQSvsQr.js +189 -0
  99. package/server/chunks/vidstack-jlaBqZq5.js +61 -0
  100. package/server/chunks/vidstack-krOAtKMi.js +34 -0
  101. package/server/chunks/vidstack-rWs25cS9.js +159 -0
  102. package/server/chunks/vidstack-uyCXITen.js +504 -0
  103. package/server/player/vidstack-default-components.js +14 -0
  104. package/server/player/vidstack-default-icons.js +88 -0
  105. package/server/player/vidstack-default-layout.js +14 -0
  106. package/server/player/vidstack-plyr-icons.js +62 -0
  107. package/server/player/vidstack-plyr-layout.js +636 -0
  108. package/server/player/vidstack-remotion.js +335 -0
  109. package/server/vidstack.js +648 -0
  110. package/tailwind.cjs +101 -0
  111. package/tailwind.d.cts +15 -0
  112. package/.templates/sandbox/document.css +0 -27
  113. package/.templates/sandbox/favicon-32x32.png +0 -0
  114. package/.templates/sandbox/index.html +0 -21
  115. package/.templates/sandbox/main.tsx +0 -12
  116. package/.templates/sandbox/player.css +0 -39
  117. package/.templates/sandbox/player.tsx +0 -121
  118. package/.templates/sandbox/tracks.ts +0 -23
  119. package/analyze.config.ts +0 -7
  120. package/build/build-icons.js +0 -62
  121. package/rollup.config.ts +0 -256
  122. package/src/components/announcer.tsx +0 -47
  123. package/src/components/layouts/default/audio-layout.tsx +0 -231
  124. package/src/components/layouts/default/context.ts +0 -28
  125. package/src/components/layouts/default/hooks.ts +0 -13
  126. package/src/components/layouts/default/icons.tsx +0 -225
  127. package/src/components/layouts/default/index.ts +0 -11
  128. package/src/components/layouts/default/media-layout.tsx +0 -259
  129. package/src/components/layouts/default/slots.tsx +0 -98
  130. package/src/components/layouts/default/ui/announcer.tsx +0 -22
  131. package/src/components/layouts/default/ui/buttons.tsx +0 -301
  132. package/src/components/layouts/default/ui/captions.tsx +0 -16
  133. package/src/components/layouts/default/ui/controls.tsx +0 -12
  134. package/src/components/layouts/default/ui/keyboard-display.tsx +0 -132
  135. package/src/components/layouts/default/ui/menus/accessibility-menu.tsx +0 -100
  136. package/src/components/layouts/default/ui/menus/audio-menu.tsx +0 -167
  137. package/src/components/layouts/default/ui/menus/captions-menu.tsx +0 -61
  138. package/src/components/layouts/default/ui/menus/chapters-menu.tsx +0 -132
  139. package/src/components/layouts/default/ui/menus/font-menu.tsx +0 -331
  140. package/src/components/layouts/default/ui/menus/items/menu-checkbox.tsx +0 -72
  141. package/src/components/layouts/default/ui/menus/items/menu-items.tsx +0 -135
  142. package/src/components/layouts/default/ui/menus/items/menu-slider.tsx +0 -92
  143. package/src/components/layouts/default/ui/menus/playback-menu.tsx +0 -232
  144. package/src/components/layouts/default/ui/menus/settings-menu.tsx +0 -114
  145. package/src/components/layouts/default/ui/menus/utils.ts +0 -12
  146. package/src/components/layouts/default/ui/sliders.tsx +0 -136
  147. package/src/components/layouts/default/ui/time.tsx +0 -73
  148. package/src/components/layouts/default/ui/title.tsx +0 -24
  149. package/src/components/layouts/default/ui/tooltip.tsx +0 -27
  150. package/src/components/layouts/default/ui.ts +0 -8
  151. package/src/components/layouts/default/video-layout.tsx +0 -344
  152. package/src/components/layouts/plyr/context.ts +0 -26
  153. package/src/components/layouts/plyr/icons/plyr-airplay.js +0 -1
  154. package/src/components/layouts/plyr/icons/plyr-captions-off.js +0 -1
  155. package/src/components/layouts/plyr/icons/plyr-captions-on.js +0 -1
  156. package/src/components/layouts/plyr/icons/plyr-download.js +0 -1
  157. package/src/components/layouts/plyr/icons/plyr-enter-fullscreen.js +0 -1
  158. package/src/components/layouts/plyr/icons/plyr-exit-fullscreen.js +0 -1
  159. package/src/components/layouts/plyr/icons/plyr-fast-forward.js +0 -1
  160. package/src/components/layouts/plyr/icons/plyr-muted.js +0 -1
  161. package/src/components/layouts/plyr/icons/plyr-pause.js +0 -1
  162. package/src/components/layouts/plyr/icons/plyr-pip.js +0 -1
  163. package/src/components/layouts/plyr/icons/plyr-play.js +0 -1
  164. package/src/components/layouts/plyr/icons/plyr-restart.js +0 -1
  165. package/src/components/layouts/plyr/icons/plyr-rewind.js +0 -1
  166. package/src/components/layouts/plyr/icons/plyr-settings.js +0 -1
  167. package/src/components/layouts/plyr/icons/plyr-volume.js +0 -1
  168. package/src/components/layouts/plyr/icons.tsx +0 -71
  169. package/src/components/layouts/plyr/index.ts +0 -11
  170. package/src/components/layouts/plyr/layout.tsx +0 -1024
  171. package/src/components/layouts/plyr/props.ts +0 -104
  172. package/src/components/layouts/plyr/slots.tsx +0 -52
  173. package/src/components/layouts/remotion-ui.ts +0 -13
  174. package/src/components/layouts/utils.ts +0 -17
  175. package/src/components/player-callbacks.ts +0 -67
  176. package/src/components/player.tsx +0 -67
  177. package/src/components/primitives/instances.ts +0 -92
  178. package/src/components/primitives/nodes.tsx +0 -58
  179. package/src/components/primitives/slot.tsx +0 -132
  180. package/src/components/provider.tsx +0 -187
  181. package/src/components/text-track.tsx +0 -106
  182. package/src/components/ui/buttons/airplay-button.tsx +0 -53
  183. package/src/components/ui/buttons/caption-button.tsx +0 -55
  184. package/src/components/ui/buttons/fullscreen-button.tsx +0 -55
  185. package/src/components/ui/buttons/google-cast-button.tsx +0 -53
  186. package/src/components/ui/buttons/live-button.tsx +0 -56
  187. package/src/components/ui/buttons/mute-button.tsx +0 -60
  188. package/src/components/ui/buttons/pip-button.tsx +0 -54
  189. package/src/components/ui/buttons/play-button.tsx +0 -53
  190. package/src/components/ui/buttons/seek-button.tsx +0 -55
  191. package/src/components/ui/buttons/toggle-button.tsx +0 -51
  192. package/src/components/ui/caption.tsx +0 -70
  193. package/src/components/ui/captions.tsx +0 -41
  194. package/src/components/ui/chapter-title.tsx +0 -40
  195. package/src/components/ui/controls.tsx +0 -90
  196. package/src/components/ui/gesture.tsx +0 -43
  197. package/src/components/ui/menu.tsx +0 -251
  198. package/src/components/ui/poster.tsx +0 -101
  199. package/src/components/ui/radio-group.tsx +0 -88
  200. package/src/components/ui/sliders/audio-gain-slider.tsx +0 -55
  201. package/src/components/ui/sliders/quality-slider.tsx +0 -54
  202. package/src/components/ui/sliders/slider-callbacks.ts +0 -14
  203. package/src/components/ui/sliders/slider-value.tsx +0 -13
  204. package/src/components/ui/sliders/slider.tsx +0 -254
  205. package/src/components/ui/sliders/speed-slider.tsx +0 -54
  206. package/src/components/ui/sliders/time-slider.tsx +0 -379
  207. package/src/components/ui/sliders/volume-slider.tsx +0 -55
  208. package/src/components/ui/spinner.tsx +0 -105
  209. package/src/components/ui/thumbnail.tsx +0 -82
  210. package/src/components/ui/time.tsx +0 -77
  211. package/src/components/ui/title.tsx +0 -32
  212. package/src/components/ui/tooltip.tsx +0 -135
  213. package/src/globals.d.ts +0 -3
  214. package/src/hooks/create-text-track.ts +0 -22
  215. package/src/hooks/options/use-audio-gain-options.ts +0 -75
  216. package/src/hooks/options/use-audio-options.ts +0 -71
  217. package/src/hooks/options/use-caption-options.ts +0 -95
  218. package/src/hooks/options/use-chapter-options.ts +0 -97
  219. package/src/hooks/options/use-playback-rate-options.ts +0 -75
  220. package/src/hooks/options/use-video-quality-options.ts +0 -123
  221. package/src/hooks/use-active-text-cues.ts +0 -28
  222. package/src/hooks/use-active-text-track.ts +0 -19
  223. package/src/hooks/use-chapter-title.ts +0 -12
  224. package/src/hooks/use-dom.ts +0 -121
  225. package/src/hooks/use-media-context.ts +0 -6
  226. package/src/hooks/use-media-player.ts +0 -19
  227. package/src/hooks/use-media-provider.ts +0 -31
  228. package/src/hooks/use-media-remote.ts +0 -37
  229. package/src/hooks/use-media-state.ts +0 -58
  230. package/src/hooks/use-signals.ts +0 -24
  231. package/src/hooks/use-slider-preview.ts +0 -126
  232. package/src/hooks/use-slider-state.ts +0 -63
  233. package/src/hooks/use-state.ts +0 -47
  234. package/src/hooks/use-text-cues.ts +0 -33
  235. package/src/hooks/use-thumbnails.ts +0 -69
  236. package/src/icon.ts +0 -37
  237. package/src/icons.ts +0 -754
  238. package/src/index.ts +0 -181
  239. package/src/providers/remotion/index.ts +0 -10
  240. package/src/providers/remotion/layout-engine.ts +0 -123
  241. package/src/providers/remotion/loader.ts +0 -35
  242. package/src/providers/remotion/playback-engine.ts +0 -142
  243. package/src/providers/remotion/provider.tsx +0 -514
  244. package/src/providers/remotion/type-check.ts +0 -13
  245. package/src/providers/remotion/types.ts +0 -94
  246. package/src/providers/remotion/ui/context.tsx +0 -120
  247. package/src/providers/remotion/ui/error-boundary.tsx +0 -57
  248. package/src/providers/remotion/ui/poster.tsx +0 -33
  249. package/src/providers/remotion/ui/slider-thumbnail.tsx +0 -41
  250. package/src/providers/remotion/ui/thumbnail.tsx +0 -166
  251. package/src/providers/remotion/validate.ts +0 -220
  252. package/src/source.ts +0 -5
  253. package/src/utils.ts +0 -27
  254. package/tsconfig.build.json +0 -10
  255. package/tsconfig.json +0 -11
  256. package/types/react/src/components/announcer.d.ts +0 -16
  257. package/types/react/src/components/layouts/default/audio-layout.d.ts +0 -27
  258. package/types/react/src/components/layouts/default/context.d.ts +0 -14
  259. package/types/react/src/components/layouts/default/hooks.d.ts +0 -2
  260. package/types/react/src/components/layouts/default/icons.d.ts +0 -95
  261. package/types/react/src/components/layouts/default/index.d.ts +0 -5
  262. package/types/react/src/components/layouts/default/media-layout.d.ts +0 -133
  263. package/types/react/src/components/layouts/default/slots.d.ts +0 -22
  264. package/types/react/src/components/layouts/default/ui/announcer.d.ts +0 -6
  265. package/types/react/src/components/layouts/default/ui/buttons.d.ts +0 -54
  266. package/types/react/src/components/layouts/default/ui/captions.d.ts +0 -6
  267. package/types/react/src/components/layouts/default/ui/controls.d.ts +0 -6
  268. package/types/react/src/components/layouts/default/ui/keyboard-display.d.ts +0 -8
  269. package/types/react/src/components/layouts/default/ui/menus/accessibility-menu.d.ts +0 -10
  270. package/types/react/src/components/layouts/default/ui/menus/audio-menu.d.ts +0 -10
  271. package/types/react/src/components/layouts/default/ui/menus/captions-menu.d.ts +0 -10
  272. package/types/react/src/components/layouts/default/ui/menus/chapters-menu.d.ts +0 -7
  273. package/types/react/src/components/layouts/default/ui/menus/font-menu.d.ts +0 -6
  274. package/types/react/src/components/layouts/default/ui/menus/items/menu-checkbox.d.ts +0 -13
  275. package/types/react/src/components/layouts/default/ui/menus/items/menu-items.d.ts +0 -49
  276. package/types/react/src/components/layouts/default/ui/menus/items/menu-slider.d.ts +0 -26
  277. package/types/react/src/components/layouts/default/ui/menus/playback-menu.d.ts +0 -10
  278. package/types/react/src/components/layouts/default/ui/menus/settings-menu.d.ts +0 -15
  279. package/types/react/src/components/layouts/default/ui/menus/utils.d.ts +0 -1
  280. package/types/react/src/components/layouts/default/ui/sliders.d.ts +0 -24
  281. package/types/react/src/components/layouts/default/ui/time.d.ts +0 -30
  282. package/types/react/src/components/layouts/default/ui/title.d.ts +0 -6
  283. package/types/react/src/components/layouts/default/ui/tooltip.d.ts +0 -12
  284. package/types/react/src/components/layouts/default/ui.d.ts +0 -8
  285. package/types/react/src/components/layouts/default/video-layout.d.ts +0 -47
  286. package/types/react/src/components/layouts/plyr/context.d.ts +0 -12
  287. package/types/react/src/components/layouts/plyr/icons/plyr-airplay.d.ts +0 -2
  288. package/types/react/src/components/layouts/plyr/icons/plyr-captions-off.d.ts +0 -2
  289. package/types/react/src/components/layouts/plyr/icons/plyr-captions-on.d.ts +0 -2
  290. package/types/react/src/components/layouts/plyr/icons/plyr-download.d.ts +0 -2
  291. package/types/react/src/components/layouts/plyr/icons/plyr-enter-fullscreen.d.ts +0 -2
  292. package/types/react/src/components/layouts/plyr/icons/plyr-exit-fullscreen.d.ts +0 -2
  293. package/types/react/src/components/layouts/plyr/icons/plyr-fast-forward.d.ts +0 -2
  294. package/types/react/src/components/layouts/plyr/icons/plyr-muted.d.ts +0 -2
  295. package/types/react/src/components/layouts/plyr/icons/plyr-pause.d.ts +0 -2
  296. package/types/react/src/components/layouts/plyr/icons/plyr-pip.d.ts +0 -2
  297. package/types/react/src/components/layouts/plyr/icons/plyr-play.d.ts +0 -2
  298. package/types/react/src/components/layouts/plyr/icons/plyr-restart.d.ts +0 -2
  299. package/types/react/src/components/layouts/plyr/icons/plyr-rewind.d.ts +0 -2
  300. package/types/react/src/components/layouts/plyr/icons/plyr-settings.d.ts +0 -2
  301. package/types/react/src/components/layouts/plyr/icons/plyr-volume.d.ts +0 -2
  302. package/types/react/src/components/layouts/plyr/icons.d.ts +0 -25
  303. package/types/react/src/components/layouts/plyr/index.d.ts +0 -6
  304. package/types/react/src/components/layouts/plyr/layout.d.ts +0 -17
  305. package/types/react/src/components/layouts/plyr/props.d.ts +0 -71
  306. package/types/react/src/components/layouts/plyr/slots.d.ts +0 -9
  307. package/types/react/src/components/layouts/remotion-ui.d.ts +0 -3
  308. package/types/react/src/components/layouts/utils.d.ts +0 -1
  309. package/types/react/src/components/player-callbacks.d.ts +0 -6
  310. package/types/react/src/components/player.d.ts +0 -32
  311. package/types/react/src/components/primitives/instances.d.ts +0 -83
  312. package/types/react/src/components/primitives/nodes.d.ts +0 -15
  313. package/types/react/src/components/primitives/slot.d.ts +0 -11
  314. package/types/react/src/components/provider.d.ts +0 -26
  315. package/types/react/src/components/text-track.d.ts +0 -100
  316. package/types/react/src/components/ui/buttons/airplay-button.d.ts +0 -22
  317. package/types/react/src/components/ui/buttons/caption-button.d.ts +0 -24
  318. package/types/react/src/components/ui/buttons/fullscreen-button.d.ts +0 -24
  319. package/types/react/src/components/ui/buttons/google-cast-button.d.ts +0 -22
  320. package/types/react/src/components/ui/buttons/live-button.d.ts +0 -26
  321. package/types/react/src/components/ui/buttons/mute-button.d.ts +0 -30
  322. package/types/react/src/components/ui/buttons/pip-button.d.ts +0 -24
  323. package/types/react/src/components/ui/buttons/play-button.d.ts +0 -23
  324. package/types/react/src/components/ui/buttons/seek-button.d.ts +0 -25
  325. package/types/react/src/components/ui/buttons/toggle-button.d.ts +0 -22
  326. package/types/react/src/components/ui/caption.d.ts +0 -11
  327. package/types/react/src/components/ui/captions.d.ts +0 -20
  328. package/types/react/src/components/ui/chapter-title.d.ts +0 -20
  329. package/types/react/src/components/ui/controls.d.ts +0 -40
  330. package/types/react/src/components/ui/gesture.d.ts +0 -20
  331. package/types/react/src/components/ui/menu.d.ts +0 -102
  332. package/types/react/src/components/ui/poster.d.ts +0 -25
  333. package/types/react/src/components/ui/radio-group.d.ts +0 -39
  334. package/types/react/src/components/ui/sliders/audio-gain-slider.d.ts +0 -29
  335. package/types/react/src/components/ui/sliders/quality-slider.d.ts +0 -28
  336. package/types/react/src/components/ui/sliders/slider-callbacks.d.ts +0 -6
  337. package/types/react/src/components/ui/sliders/slider-value.d.ts +0 -9
  338. package/types/react/src/components/ui/sliders/slider.d.ts +0 -134
  339. package/types/react/src/components/ui/sliders/speed-slider.d.ts +0 -28
  340. package/types/react/src/components/ui/sliders/time-slider.d.ts +0 -124
  341. package/types/react/src/components/ui/sliders/volume-slider.d.ts +0 -29
  342. package/types/react/src/components/ui/spinner.d.ts +0 -31
  343. package/types/react/src/components/ui/thumbnail.d.ts +0 -26
  344. package/types/react/src/components/ui/time.d.ts +0 -20
  345. package/types/react/src/components/ui/title.d.ts +0 -15
  346. package/types/react/src/components/ui/tooltip.d.ts +0 -63
  347. package/types/react/src/hooks/create-text-track.d.ts +0 -7
  348. package/types/react/src/hooks/options/use-audio-gain-options.d.ts +0 -22
  349. package/types/react/src/hooks/options/use-audio-options.d.ts +0 -17
  350. package/types/react/src/hooks/options/use-caption-options.d.ts +0 -24
  351. package/types/react/src/hooks/options/use-chapter-options.d.ts +0 -18
  352. package/types/react/src/hooks/options/use-playback-rate-options.d.ts +0 -22
  353. package/types/react/src/hooks/options/use-video-quality-options.d.ts +0 -35
  354. package/types/react/src/hooks/use-active-text-cues.d.ts +0 -6
  355. package/types/react/src/hooks/use-active-text-track.d.ts +0 -5
  356. package/types/react/src/hooks/use-chapter-title.d.ts +0 -4
  357. package/types/react/src/hooks/use-dom.d.ts +0 -9
  358. package/types/react/src/hooks/use-media-context.d.ts +0 -1
  359. package/types/react/src/hooks/use-media-player.d.ts +0 -7
  360. package/types/react/src/hooks/use-media-provider.d.ts +0 -7
  361. package/types/react/src/hooks/use-media-remote.d.ts +0 -12
  362. package/types/react/src/hooks/use-media-state.d.ts +0 -15
  363. package/types/react/src/hooks/use-signals.d.ts +0 -5
  364. package/types/react/src/hooks/use-slider-preview.d.ts +0 -27
  365. package/types/react/src/hooks/use-slider-state.d.ts +0 -16
  366. package/types/react/src/hooks/use-state.d.ts +0 -18
  367. package/types/react/src/hooks/use-text-cues.d.ts +0 -6
  368. package/types/react/src/hooks/use-thumbnails.d.ts +0 -16
  369. package/types/react/src/icon.d.ts +0 -17
  370. package/types/react/src/icons.d.ts +0 -215
  371. package/types/react/src/index.d.ts +0 -78
  372. package/types/react/src/providers/remotion/index.d.ts +0 -7
  373. package/types/react/src/providers/remotion/layout-engine.d.ts +0 -8
  374. package/types/react/src/providers/remotion/loader.d.ts +0 -9
  375. package/types/react/src/providers/remotion/playback-engine.d.ts +0 -11
  376. package/types/react/src/providers/remotion/provider.d.ts +0 -26
  377. package/types/react/src/providers/remotion/type-check.d.ts +0 -6
  378. package/types/react/src/providers/remotion/types.d.ts +0 -91
  379. package/types/react/src/providers/remotion/ui/context.d.ts +0 -17
  380. package/types/react/src/providers/remotion/ui/error-boundary.d.ts +0 -21
  381. package/types/react/src/providers/remotion/ui/poster.d.ts +0 -18
  382. package/types/react/src/providers/remotion/ui/slider-thumbnail.d.ts +0 -17
  383. package/types/react/src/providers/remotion/ui/thumbnail.d.ts +0 -32
  384. package/types/react/src/providers/remotion/validate.d.ts +0 -12
  385. package/types/react/src/source.d.ts +0 -3
  386. package/types/react/src/utils.d.ts +0 -3
  387. package/types/vidstack/src/core/api/src-types.d.ts +0 -50
  388. package/types/vidstack/src/utils/mime.d.ts +0 -15
  389. package/types/vidstack/src/utils/network.d.ts +0 -17
  390. package/types/vidstack/src/utils/support.d.ts +0 -72
  391. package/vite.config.ts +0 -23
  392. /package/{npm/analyze.json.d.ts → analyze.json.d.ts} +0 -0
@@ -0,0 +1,587 @@
1
+ "use client"
2
+
3
+ import { TextTrackSymbol, RadioGroupController, useMediaContext, menuContext, Primitive, MediaPlayerInstance, MediaProviderInstance, isRemotionProvider, mediaState, TextTrack, ToggleButtonInstance, PosterInstance, useMediaState, ThumbnailsLoader, updateSliderPreviewPlacement } from './chunks/vidstack-BDiAEW1N.js';
4
+ export { ARIAKeyShortcuts, AUDIO_EXTENSIONS, AUDIO_TYPES, AirPlayButtonInstance, AudioGainSliderInstance, AudioProviderLoader, AudioTrackList, CaptionButtonInstance, CaptionsInstance, ControlsGroupInstance, ControlsInstance, DASHProviderLoader, DASH_VIDEO_EXTENSIONS, DASH_VIDEO_TYPES, FullscreenButtonInstance, FullscreenController, GestureInstance, GoogleCastButtonInstance, HLSProviderLoader, HLS_VIDEO_EXTENSIONS, HLS_VIDEO_TYPES, List, LiveButtonInstance, LocalMediaStorage, Logger, MEDIA_KEY_SHORTCUTS, MediaAnnouncerInstance, MediaControls, MediaRemoteControl, MenuButtonInstance, MenuInstance, MenuItemInstance, MenuItemsInstance, MenuPortalInstance, MuteButtonInstance, PIPButtonInstance, PlayButtonInstance, QualitySliderInstance, RadioGroupInstance, RadioInstance, ScreenOrientationController, SeekButtonInstance, SliderChaptersInstance, SliderInstance, SliderPreviewInstance, SliderThumbnailInstance, SliderValueInstance, SliderVideoInstance, SpeedSliderInstance, TextRenderers, TextTrackList, ThumbnailInstance, TimeInstance, TimeRange, TimeSliderInstance, TooltipContentInstance, TooltipInstance, TooltipTriggerInstance, VIDEO_EXTENSIONS, VIDEO_TYPES, VideoProviderLoader, VideoQualityList, VimeoProviderLoader, VolumeSliderInstance, YouTubeProviderLoader, boundTime, canChangeVolume, canFullscreen, canGoogleCastSrc, canOrientScreen, canPlayHLSNatively, canRotateScreen, canUsePictureInPicture, canUseVideoPresentation, findActiveCue, formatSpokenTime, formatTime, getDownloadFile, getTimeRangesEnd, getTimeRangesStart, isAudioProvider, isAudioSrc, isCueActive, isDASHProvider, isDASHSrc, isGoogleCastProvider, isHLSProvider, isHLSSrc, isHTMLAudioElement, isHTMLIFrameElement, isHTMLMediaElement, isHTMLVideoElement, isMediaStream, isTrackCaptionKind, isVideoProvider, isVideoQualitySrc, isVideoSrc, isVimeoProvider, isYouTubeProvider, mediaContext, normalizeTimeIntervals, parseJSONCaptionsFile, sliderState, softResetMediaState, sortVideoQualities, updateTimeIntervals, useMediaStore, useSliderState, useSliderStore, watchActiveTextTrack, watchCueTextChange } from './chunks/vidstack-BDiAEW1N.js';
5
+ import * as React from 'react';
6
+ import { isString, EventsController, DOMEvent, prop, method, Component, hasProvidedContext, useContext, effect, createReactComponent, useStateContext, useSignal, composeRefs, useSignalRecord, useReactScope, signal } from './chunks/vidstack-D_bWd66h.js';
7
+ export { appendTriggerEvent, findTriggerEvent, hasTriggerEvent, isKeyboardClick, isKeyboardEvent, isPointerEvent, walkTriggerEventChain } from './chunks/vidstack-D_bWd66h.js';
8
+ import { createSignal, useScoped } from './chunks/vidstack-f6WXkmfP.js';
9
+ export { audioGainSlider as AudioGainSlider, Captions, ChapterTitle, controls as Controls, GoogleCastButton, MediaAnnouncer, qualitySlider as QualitySlider, speedSlider as SpeedSlider, spinner as Spinner, Title, tooltip as Tooltip, useActiveTextCues, useActiveTextTrack, useChapterOptions, useChapterTitle, useTextCues } from './chunks/vidstack-f6WXkmfP.js';
10
+ import { useMediaContext as useMediaContext$1 } from './chunks/vidstack-B-FM4-oZ.js';
11
+ export { AirPlayButton, CaptionButton, FullscreenButton, Gesture, LiveButton, menu as Menu, MuteButton, PIPButton, PlayButton, radioGroup as RadioGroup, SeekButton, slider as Slider, thumbnail as Thumbnail, Time, timeSlider as TimeSlider, volumeSlider as VolumeSlider, useAudioOptions, useCaptionOptions, useMediaPlayer } from './chunks/vidstack-B-FM4-oZ.js';
12
+ import { Icon } from './chunks/vidstack-CBF7iUqu.js';
13
+ export { DEFAULT_PLAYBACK_RATES, useMediaRemote, usePlaybackRateOptions, useVideoQualityOptions } from './chunks/vidstack-CzU-uC5f.js';
14
+ import '@floating-ui/dom';
15
+ import 'react-dom';
16
+
17
+ class LibASSTextRenderer {
18
+ constructor(loader, config) {
19
+ this.loader = loader;
20
+ this.config = config;
21
+ }
22
+ priority = 1;
23
+ #instance = null;
24
+ #track = null;
25
+ #typeRE = /(ssa|ass)$/;
26
+ canRender(track, video) {
27
+ return !!video && !!track.src && (isString(track.type) && this.#typeRE.test(track.type) || this.#typeRE.test(track.src));
28
+ }
29
+ attach(video) {
30
+ if (!video) return;
31
+ this.loader().then(async (mod) => {
32
+ this.#instance = new mod.default({
33
+ ...this.config,
34
+ video,
35
+ subUrl: this.#track?.src || ""
36
+ });
37
+ new EventsController(this.#instance).add("ready", () => {
38
+ const canvas = this.#instance?._canvas;
39
+ if (canvas) canvas.style.pointerEvents = "none";
40
+ }).add("error", (event) => {
41
+ if (!this.#track) return;
42
+ this.#track[TextTrackSymbol.readyState] = 3;
43
+ this.#track.dispatchEvent(
44
+ new DOMEvent("error", {
45
+ trigger: event,
46
+ detail: event.error
47
+ })
48
+ );
49
+ });
50
+ });
51
+ }
52
+ changeTrack(track) {
53
+ if (!track || track.readyState === 3) {
54
+ this.#freeTrack();
55
+ } else if (this.#track !== track) {
56
+ this.#instance?.setTrackByUrl(track.src);
57
+ this.#track = track;
58
+ }
59
+ }
60
+ detach() {
61
+ this.#freeTrack();
62
+ }
63
+ #freeTrack() {
64
+ this.#instance?.freeTrack();
65
+ this.#track = null;
66
+ }
67
+ }
68
+
69
+ const DEFAULT_AUDIO_GAINS = [1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4];
70
+ class AudioGainRadioGroup extends Component {
71
+ static props = {
72
+ normalLabel: "Disabled",
73
+ gains: DEFAULT_AUDIO_GAINS
74
+ };
75
+ #media;
76
+ #menu;
77
+ #controller;
78
+ get value() {
79
+ return this.#controller.value;
80
+ }
81
+ get disabled() {
82
+ const { gains } = this.$props, { canSetAudioGain } = this.#media.$state;
83
+ return !canSetAudioGain() || gains().length === 0;
84
+ }
85
+ constructor() {
86
+ super();
87
+ this.#controller = new RadioGroupController();
88
+ this.#controller.onValueChange = this.#onValueChange.bind(this);
89
+ }
90
+ onSetup() {
91
+ this.#media = useMediaContext();
92
+ if (hasProvidedContext(menuContext)) {
93
+ this.#menu = useContext(menuContext);
94
+ }
95
+ }
96
+ onConnect(el) {
97
+ effect(this.#watchValue.bind(this));
98
+ effect(this.#watchHintText.bind(this));
99
+ effect(this.#watchControllerDisabled.bind(this));
100
+ }
101
+ getOptions() {
102
+ const { gains, normalLabel } = this.$props;
103
+ return gains().map((gain) => ({
104
+ label: gain === 1 || gain === null ? normalLabel : String(gain * 100) + "%",
105
+ value: gain.toString()
106
+ }));
107
+ }
108
+ #watchValue() {
109
+ this.#controller.value = this.#getValue();
110
+ }
111
+ #watchHintText() {
112
+ const { normalLabel } = this.$props, { audioGain } = this.#media.$state, gain = audioGain();
113
+ this.#menu?.hint.set(gain === 1 || gain == null ? normalLabel() : String(gain * 100) + "%");
114
+ }
115
+ #watchControllerDisabled() {
116
+ this.#menu?.disable(this.disabled);
117
+ }
118
+ #getValue() {
119
+ const { audioGain } = this.#media.$state;
120
+ return audioGain()?.toString() ?? "1";
121
+ }
122
+ #onValueChange(value, trigger) {
123
+ if (this.disabled) return;
124
+ const gain = +value;
125
+ this.#media.remote.changeAudioGain(gain, trigger);
126
+ this.dispatch("change", { detail: gain, trigger });
127
+ }
128
+ }
129
+ const audiogainradiogroup__proto = AudioGainRadioGroup.prototype;
130
+ prop(audiogainradiogroup__proto, "value");
131
+ prop(audiogainradiogroup__proto, "disabled");
132
+ method(audiogainradiogroup__proto, "getOptions");
133
+
134
+ const playerCallbacks = [
135
+ "onAbort",
136
+ "onAudioTrackChange",
137
+ "onAudioTracksChange",
138
+ "onAutoPlay",
139
+ "onAutoPlayChange",
140
+ "onAutoPlayFail",
141
+ "onCanLoad",
142
+ "onCanPlay",
143
+ "onCanPlayThrough",
144
+ "onControlsChange",
145
+ "onDestroy",
146
+ "onDurationChange",
147
+ "onEmptied",
148
+ "onEnd",
149
+ "onEnded",
150
+ "onError",
151
+ "onFindMediaPlayer",
152
+ "onFullscreenChange",
153
+ "onFullscreenError",
154
+ "onLiveChange",
155
+ "onLiveEdgeChange",
156
+ "onLoadedData",
157
+ "onLoadedMetadata",
158
+ "onLoadStart",
159
+ "onLoopChange",
160
+ "onOrientationChange",
161
+ "onPause",
162
+ "onPictureInPictureChange",
163
+ "onPictureInPictureError",
164
+ "onPlay",
165
+ "onPlayFail",
166
+ "onPlaying",
167
+ "onPlaysInlineChange",
168
+ "onPosterChange",
169
+ "onProgress",
170
+ "onProviderChange",
171
+ "onProviderLoaderChange",
172
+ "onProviderSetup",
173
+ "onQualitiesChange",
174
+ "onQualityChange",
175
+ "onRateChange",
176
+ "onReplay",
177
+ "onSeeked",
178
+ "onSeeking",
179
+ "onSourceChange",
180
+ "onSourceChange",
181
+ "onStalled",
182
+ "onStarted",
183
+ "onStreamTypeChange",
184
+ "onSuspend",
185
+ "onTextTrackChange",
186
+ "onTextTracksChange",
187
+ "onTimeUpdate",
188
+ "onTitleChange",
189
+ "onVdsLog",
190
+ "onVideoPresentationChange",
191
+ "onVolumeChange",
192
+ "onWaiting"
193
+ ];
194
+
195
+ const MediaPlayerBridge = createReactComponent(MediaPlayerInstance, {
196
+ events: playerCallbacks,
197
+ eventsRegex: /^onHls/,
198
+ domEventsRegex: /^onMedia/
199
+ });
200
+ const MediaPlayer = React.forwardRef(
201
+ ({ aspectRatio, children, ...props }, forwardRef) => {
202
+ return /* @__PURE__ */ React.createElement(
203
+ MediaPlayerBridge,
204
+ {
205
+ ...props,
206
+ src: props.src,
207
+ ref: forwardRef,
208
+ style: {
209
+ aspectRatio,
210
+ ...props.style
211
+ }
212
+ },
213
+ (props2) => /* @__PURE__ */ React.createElement(Primitive.div, { ...props2 }, children)
214
+ );
215
+ }
216
+ );
217
+ MediaPlayer.displayName = "MediaPlayer";
218
+
219
+ const MediaProviderBridge = createReactComponent(MediaProviderInstance);
220
+ const MediaProvider = React.forwardRef(
221
+ ({ loaders = [], children, iframeProps, mediaProps, ...props }, forwardRef) => {
222
+ const reactLoaders = React.useMemo(() => loaders.map((Loader) => new Loader()), loaders);
223
+ return /* @__PURE__ */ React.createElement(MediaProviderBridge, { ...props, loaders: reactLoaders, ref: forwardRef }, (props2, instance) => /* @__PURE__ */ React.createElement("div", { ...props2 }, /* @__PURE__ */ React.createElement(MediaOutlet, { provider: instance, mediaProps, iframeProps }), children));
224
+ }
225
+ );
226
+ MediaProvider.displayName = "MediaProvider";
227
+ function MediaOutlet({ provider, mediaProps, iframeProps }) {
228
+ const { sources, crossOrigin, poster, remotePlaybackInfo, nativeControls, viewType } = useStateContext(mediaState), { loader } = provider.$state, { $provider: $$provider, $providerSetup: $$providerSetup } = useMediaContext$1(), $sources = useSignal(sources), $nativeControls = useSignal(nativeControls), $crossOrigin = useSignal(crossOrigin), $poster = useSignal(poster), $loader = useSignal(loader), $provider = useSignal($$provider), $providerSetup = useSignal($$providerSetup), $remoteInfo = useSignal(remotePlaybackInfo), $mediaType = $loader?.mediaType(), $viewType = useSignal(viewType), isAudioView = $viewType === "audio", isYouTubeEmbed = $loader?.name === "youtube", isVimeoEmbed = $loader?.name === "vimeo", isEmbed = isYouTubeEmbed || isVimeoEmbed, isRemotion = $loader?.name === "remotion", isGoogleCast = $loader?.name === "google-cast", [googleCastIconPaths, setGoogleCastIconPaths] = React.useState(""), [hasMounted, setHasMounted] = React.useState(false);
229
+ React.useEffect(() => {
230
+ if (!isGoogleCast || googleCastIconPaths) return;
231
+ import('./chunks/vidstack-D_bWd66h.js').then(function (n) { return n.chromecast; }).then((mod) => {
232
+ setGoogleCastIconPaths(mod.default);
233
+ });
234
+ }, [isGoogleCast]);
235
+ React.useLayoutEffect(() => {
236
+ setHasMounted(true);
237
+ }, []);
238
+ if (isGoogleCast) {
239
+ return /* @__PURE__ */ React.createElement(
240
+ "div",
241
+ {
242
+ className: "vds-google-cast",
243
+ ref: (el) => {
244
+ provider.load(el);
245
+ }
246
+ },
247
+ /* @__PURE__ */ React.createElement(Icon, { paths: googleCastIconPaths }),
248
+ $remoteInfo?.deviceName ? /* @__PURE__ */ React.createElement("span", { className: "vds-google-cast-info" }, "Google Cast on", " ", /* @__PURE__ */ React.createElement("span", { className: "vds-google-cast-device-name" }, $remoteInfo.deviceName)) : null
249
+ );
250
+ }
251
+ if (isRemotion) {
252
+ return /* @__PURE__ */ React.createElement("div", { "data-remotion-canvas": true }, /* @__PURE__ */ React.createElement(
253
+ "div",
254
+ {
255
+ "data-remotion-container": true,
256
+ ref: (el) => {
257
+ provider.load(el);
258
+ }
259
+ },
260
+ isRemotionProvider($provider) && $providerSetup ? React.createElement($provider.render) : null
261
+ ));
262
+ }
263
+ return isEmbed ? React.createElement(
264
+ React.Fragment,
265
+ null,
266
+ React.createElement("iframe", {
267
+ ...iframeProps,
268
+ className: (iframeProps?.className ? `${iframeProps.className} ` : "") + isYouTubeEmbed ? "vds-youtube" : "vds-vimeo",
269
+ suppressHydrationWarning: true,
270
+ tabIndex: !$nativeControls ? -1 : void 0,
271
+ "aria-hidden": "true",
272
+ "data-no-controls": !$nativeControls ? "" : void 0,
273
+ ref(el) {
274
+ provider.load(el);
275
+ }
276
+ }),
277
+ !$nativeControls && !isAudioView ? React.createElement("div", { className: "vds-blocker" }) : null
278
+ ) : $mediaType ? React.createElement($mediaType === "audio" ? "audio" : "video", {
279
+ ...mediaProps,
280
+ controls: $nativeControls ? true : null,
281
+ crossOrigin: typeof $crossOrigin === "boolean" ? "" : $crossOrigin,
282
+ poster: $mediaType === "video" && $nativeControls && $poster ? $poster : null,
283
+ suppressHydrationWarning: true,
284
+ children: !hasMounted ? $sources.map(
285
+ ({ src, type }) => isString(src) ? /* @__PURE__ */ React.createElement("source", { src, type: type !== "?" ? type : void 0, key: src }) : null
286
+ ) : null,
287
+ ref(el) {
288
+ provider.load(el);
289
+ }
290
+ }) : null;
291
+ }
292
+ MediaOutlet.displayName = "MediaOutlet";
293
+
294
+ function createTextTrack(init) {
295
+ const media = useMediaContext$1(), track = React.useMemo(() => new TextTrack(init), Object.values(init));
296
+ React.useEffect(() => {
297
+ media.textTracks.add(track);
298
+ return () => void media.textTracks.remove(track);
299
+ }, [track]);
300
+ return track;
301
+ }
302
+
303
+ function Track({ lang, ...props }) {
304
+ createTextTrack({ language: lang, ...props });
305
+ return null;
306
+ }
307
+ Track.displayName = "Track";
308
+
309
+ const ToggleButtonBridge = createReactComponent(ToggleButtonInstance);
310
+ const ToggleButton = React.forwardRef(
311
+ ({ children, ...props }, forwardRef) => {
312
+ return /* @__PURE__ */ React.createElement(ToggleButtonBridge, { ...props }, (props2) => /* @__PURE__ */ React.createElement(
313
+ Primitive.button,
314
+ {
315
+ ...props2,
316
+ ref: composeRefs(props2.ref, forwardRef)
317
+ },
318
+ children
319
+ ));
320
+ }
321
+ );
322
+ ToggleButton.displayName = "ToggleButton";
323
+
324
+ const PosterBridge = createReactComponent(PosterInstance);
325
+ const Poster = React.forwardRef(
326
+ ({ children, ...props }, forwardRef) => {
327
+ return /* @__PURE__ */ React.createElement(
328
+ PosterBridge,
329
+ {
330
+ src: props.asChild && React.isValidElement(children) ? children.props.src : void 0,
331
+ ...props
332
+ },
333
+ (props2, instance) => /* @__PURE__ */ React.createElement(
334
+ PosterImg,
335
+ {
336
+ ...props2,
337
+ instance,
338
+ ref: composeRefs(props2.ref, forwardRef)
339
+ },
340
+ children
341
+ )
342
+ );
343
+ }
344
+ );
345
+ Poster.displayName = "Poster";
346
+ const PosterImg = React.forwardRef(
347
+ ({ instance, children, ...props }, forwardRef) => {
348
+ const { src, img, alt, crossOrigin, hidden } = instance.$state, $src = useSignal(src), $alt = useSignal(alt), $crossOrigin = useSignal(crossOrigin), $hidden = useSignal(hidden);
349
+ return /* @__PURE__ */ React.createElement(
350
+ Primitive.img,
351
+ {
352
+ ...props,
353
+ src: $src || void 0,
354
+ alt: $alt || void 0,
355
+ crossOrigin: $crossOrigin || void 0,
356
+ ref: composeRefs(img.set, forwardRef),
357
+ style: { display: $hidden ? "none" : void 0 }
358
+ },
359
+ children
360
+ );
361
+ }
362
+ );
363
+ PosterImg.displayName = "PosterImg";
364
+
365
+ const Root = React.forwardRef(({ children, ...props }, forwardRef) => {
366
+ return /* @__PURE__ */ React.createElement(
367
+ Primitive.div,
368
+ {
369
+ translate: "yes",
370
+ "aria-live": "off",
371
+ "aria-atomic": "true",
372
+ ...props,
373
+ ref: forwardRef
374
+ },
375
+ children
376
+ );
377
+ });
378
+ Root.displayName = "Caption";
379
+ const Text = React.forwardRef((props, forwardRef) => {
380
+ const textTrack = useMediaState("textTrack"), [activeCue, setActiveCue] = React.useState();
381
+ React.useEffect(() => {
382
+ if (!textTrack) return;
383
+ function onCueChange() {
384
+ setActiveCue(textTrack?.activeCues[0]);
385
+ }
386
+ textTrack.addEventListener("cue-change", onCueChange);
387
+ return () => {
388
+ textTrack.removeEventListener("cue-change", onCueChange);
389
+ setActiveCue(void 0);
390
+ };
391
+ }, [textTrack]);
392
+ return /* @__PURE__ */ React.createElement(
393
+ Primitive.span,
394
+ {
395
+ ...props,
396
+ "data-part": "cue",
397
+ dangerouslySetInnerHTML: {
398
+ __html: activeCue?.text || ""
399
+ },
400
+ ref: forwardRef
401
+ }
402
+ );
403
+ });
404
+ Text.displayName = "CaptionText";
405
+
406
+ var caption = /*#__PURE__*/Object.freeze({
407
+ __proto__: null,
408
+ Root: Root,
409
+ Text: Text
410
+ });
411
+
412
+ function useState(ctor, prop, ref) {
413
+ const initialValue = React.useMemo(() => ctor.state.record[prop], [ctor, prop]);
414
+ return useSignal(ref.current ? ref.current.$state[prop] : initialValue);
415
+ }
416
+ const storesCache = /* @__PURE__ */ new Map();
417
+ function useStore(ctor, ref) {
418
+ const initialStore = React.useMemo(() => {
419
+ let store = storesCache.get(ctor);
420
+ if (!store) {
421
+ store = new Proxy(ctor.state.record, {
422
+ get: (_, prop) => () => ctor.state.record[prop]
423
+ });
424
+ storesCache.set(ctor, store);
425
+ }
426
+ return store;
427
+ }, [ctor]);
428
+ return useSignalRecord(ref.current ? ref.current.$state : initialStore);
429
+ }
430
+
431
+ function useMediaProvider() {
432
+ const [provider, setProvider] = React.useState(null), context = useMediaContext$1();
433
+ if (!context) {
434
+ throw Error(
435
+ "[vidstack] no media context was found - was this called outside of `<MediaPlayer>`?"
436
+ );
437
+ }
438
+ React.useEffect(() => {
439
+ if (!context) return;
440
+ return effect(() => {
441
+ setProvider(context.$provider());
442
+ });
443
+ }, []);
444
+ return provider;
445
+ }
446
+
447
+ function useThumbnails(src, crossOrigin = null) {
448
+ const scope = useReactScope(), $src = createSignal(src), $crossOrigin = createSignal(crossOrigin), loader = useScoped(() => ThumbnailsLoader.create($src, $crossOrigin));
449
+ if (!scope) {
450
+ console.warn(
451
+ `[vidstack] \`useThumbnails\` must be called inside a child component of \`<MediaPlayer>\``
452
+ );
453
+ }
454
+ React.useEffect(() => {
455
+ $src.set(src);
456
+ }, [src]);
457
+ React.useEffect(() => {
458
+ $crossOrigin.set(crossOrigin);
459
+ }, [crossOrigin]);
460
+ return useSignal(loader.$images);
461
+ }
462
+ function useActiveThumbnail(thumbnails, time) {
463
+ return React.useMemo(() => {
464
+ let activeIndex = -1;
465
+ for (let i = thumbnails.length - 1; i >= 0; i--) {
466
+ const image = thumbnails[i];
467
+ if (time >= image.startTime && (!image.endTime || time < image.endTime)) {
468
+ activeIndex = i;
469
+ break;
470
+ }
471
+ }
472
+ return thumbnails[activeIndex] || null;
473
+ }, [thumbnails, time]);
474
+ }
475
+
476
+ function useSliderPreview({
477
+ clamp = false,
478
+ offset = 0,
479
+ orientation = "horizontal"
480
+ } = {}) {
481
+ const [rootRef, setRootRef] = React.useState(null), [previewRef, setPreviewRef] = React.useState(null), [pointerValue, setPointerValue] = React.useState(0), [isVisible, setIsVisible] = React.useState(false);
482
+ React.useEffect(() => {
483
+ if (!rootRef) return;
484
+ const dragging = signal(false);
485
+ function updatePointerValue(event) {
486
+ if (!rootRef) return;
487
+ setPointerValue(getPointerValue(rootRef, event, orientation));
488
+ }
489
+ return effect(() => {
490
+ if (!dragging()) {
491
+ new EventsController(rootRef).add("pointerenter", () => {
492
+ setIsVisible(true);
493
+ previewRef?.setAttribute("data-visible", "");
494
+ }).add("pointerdown", (event) => {
495
+ dragging.set(true);
496
+ updatePointerValue(event);
497
+ }).add("pointerleave", () => {
498
+ setIsVisible(false);
499
+ previewRef?.removeAttribute("data-visible");
500
+ }).add("pointermove", updatePointerValue);
501
+ }
502
+ previewRef?.setAttribute("data-dragging", "");
503
+ new EventsController(document).add("pointerup", (event) => {
504
+ dragging.set(false);
505
+ previewRef?.removeAttribute("data-dragging");
506
+ updatePointerValue(event);
507
+ }).add("pointermove", updatePointerValue).add("touchmove", (e) => e.preventDefault(), { passive: false });
508
+ });
509
+ }, [rootRef]);
510
+ React.useEffect(() => {
511
+ if (previewRef) {
512
+ previewRef.style.setProperty("--slider-pointer", pointerValue + "%");
513
+ }
514
+ }, [previewRef, pointerValue]);
515
+ React.useEffect(() => {
516
+ if (!previewRef) return;
517
+ const update = () => {
518
+ updateSliderPreviewPlacement(previewRef, {
519
+ offset,
520
+ clamp,
521
+ orientation
522
+ });
523
+ };
524
+ update();
525
+ const resize = new ResizeObserver(update);
526
+ resize.observe(previewRef);
527
+ return () => resize.disconnect();
528
+ }, [previewRef, clamp, offset, orientation]);
529
+ return {
530
+ previewRootRef: setRootRef,
531
+ previewRef: setPreviewRef,
532
+ previewValue: pointerValue,
533
+ isPreviewVisible: isVisible
534
+ };
535
+ }
536
+ function getPointerValue(root, event, orientation) {
537
+ let thumbPositionRate, rect = root.getBoundingClientRect();
538
+ if (orientation === "vertical") {
539
+ const { bottom: trackBottom, height: trackHeight } = rect;
540
+ thumbPositionRate = (trackBottom - event.clientY) / trackHeight;
541
+ } else {
542
+ const { left: trackLeft, width: trackWidth } = rect;
543
+ thumbPositionRate = (event.clientX - trackLeft) / trackWidth;
544
+ }
545
+ return round(Math.max(0, Math.min(100, 100 * thumbPositionRate)));
546
+ }
547
+ function round(num) {
548
+ return Number(num.toFixed(3));
549
+ }
550
+
551
+ function useAudioGainOptions({
552
+ gains = DEFAULT_AUDIO_GAINS,
553
+ disabledLabel = "disabled"
554
+ } = {}) {
555
+ const media = useMediaContext$1(), { audioGain, canSetAudioGain } = media.$state;
556
+ useSignal(audioGain);
557
+ useSignal(canSetAudioGain);
558
+ return React.useMemo(() => {
559
+ const options = gains.map((opt) => {
560
+ const label = typeof opt === "number" ? opt === 1 && disabledLabel ? disabledLabel : opt * 100 + "%" : opt.label, gain = typeof opt === "number" ? opt : opt.gain;
561
+ return {
562
+ label,
563
+ value: gain.toString(),
564
+ gain,
565
+ get selected() {
566
+ return audioGain() === gain;
567
+ },
568
+ select(trigger) {
569
+ media.remote.changeAudioGain(gain, trigger);
570
+ }
571
+ };
572
+ });
573
+ Object.defineProperty(options, "disabled", {
574
+ get() {
575
+ return !canSetAudioGain() || !options.length;
576
+ }
577
+ });
578
+ Object.defineProperty(options, "selectedValue", {
579
+ get() {
580
+ return audioGain()?.toString();
581
+ }
582
+ });
583
+ return options;
584
+ }, [gains]);
585
+ }
586
+
587
+ export { caption as Caption, DEFAULT_AUDIO_GAINS, Icon, LibASSTextRenderer, MediaPlayer, MediaPlayerInstance, MediaProvider, MediaProviderInstance, Poster, PosterInstance, TextTrack, ToggleButton, ToggleButtonInstance, Track, createTextTrack, mediaState, useActiveThumbnail, useAudioGainOptions, useMediaContext$1 as useMediaContext, useMediaProvider, useMediaState, useSliderPreview, useState, useStore, useThumbnails };
package/dom.d.ts ADDED
@@ -0,0 +1,91 @@
1
+ /// <reference lib="dom" />
2
+
3
+ declare global {
4
+ interface Window {
5
+ readonly chrome: boolean;
6
+ readonly safari: any;
7
+ readonly ManagedMediaSource: typeof MediaSource | undefined;
8
+ readonly WebKitMediaSource: typeof MediaSource | undefined;
9
+ readonly WebKitSourceBuffer: typeof SourceBuffer | undefined;
10
+ }
11
+
12
+ type WebKitPresentationMode = 'picture-in-picture' | 'inline' | 'fullscreen';
13
+
14
+ interface HTMLMediaElement {
15
+ /**
16
+ * @see {@link https://developer.apple.com/documentation/webkitjs/htmlmediaelement/1632172-webkitshowplaybacktargetpicker}
17
+ */
18
+ webkitShowPlaybackTargetPicker?(): void;
19
+ }
20
+
21
+ interface HTMLVideoElement {
22
+ disablePictureInPicture: boolean;
23
+
24
+ /**
25
+ * A Boolean value indicating whether the video is displaying in fullscreen mode.
26
+ *
27
+ * @see {@link https://developer.apple.com/documentation/webkitjs/htmlvideoelement/1630493-webkitdisplayingfullscreen}
28
+ */
29
+ readonly webkitDisplayingFullscreen?: boolean;
30
+
31
+ /**
32
+ * A Boolean value indicating whether the video can be played in fullscreen mode.
33
+ *
34
+ * `true` if the device supports fullscreen mode; otherwise, `false`. This property is also
35
+ * `false` if the meta data is `loaded` or the `loadedmetadata` event has not fired, and if
36
+ * the files are audio-only.
37
+ *
38
+ * @see {@link https://developer.apple.com/documentation/webkitjs/htmlvideoelement/1628805-webkitsupportsfullscreen}
39
+ */
40
+ readonly webkitSupportsFullscreen?: boolean;
41
+
42
+ /**
43
+ * A Boolean value indicating whether wireless video playback is disabled.
44
+ */
45
+ readonly webkitWirelessVideoPlaybackDisabled?: boolean;
46
+
47
+ /**
48
+ * A property indicating the presentation mode.
49
+ *
50
+ * @see {@link https://developer.apple.com/documentation/webkitjs/htmlvideoelement/1631913-webkitpresentationmode}
51
+ */
52
+ readonly webkitPresentationMode?: WebKitPresentationMode;
53
+
54
+ /**
55
+ * Enters fullscreen mode.
56
+ *
57
+ * This method throws an exception if the element is not allowed to enter fullscreen—that is,
58
+ * if `webkitSupportsFullscreen` is false.
59
+ *
60
+ * @see {@link https://developer.apple.com/documentation/webkitjs/htmlvideoelement/1633500-webkitenterfullscreen}
61
+ */
62
+ webkitEnterFullscreen?(): void;
63
+
64
+ /**
65
+ * Exits fullscreen mode.
66
+ *
67
+ * @see {@link https://developer.apple.com/documentation/webkitjs/htmlvideoelement/1629468-webkitexitfullscreen}
68
+ */
69
+ webkitExitFullscreen?(): void;
70
+
71
+ /**
72
+ * A Boolean value indicating whether the video can be played in presentation mode.
73
+ *
74
+ * `true` if the device supports presentation mode; otherwise, `false`. This property is also
75
+ * `false` if the meta data is `loaded` or the `loadedmetadata` event has not fired, and if
76
+ * the files are audio-only.
77
+ *
78
+ * @see {@link https://developer.apple.com/documentation/webkitjs/htmlvideoelement/1629816-webkitsupportspresentationmode}
79
+ */
80
+ webkitSupportsPresentationMode?(mode: WebKitPresentationMode): boolean;
81
+
82
+ /**
83
+ * Sets the presentation mode for video playback.
84
+ *
85
+ * @see {@link https://developer.apple.com/documentation/webkitjs/htmlvideoelement/1631224-webkitsetpresentationmode}
86
+ */
87
+ webkitSetPresentationMode?(mode: WebKitPresentationMode): Promise<void>;
88
+ }
89
+ }
90
+
91
+ export {};