@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
@@ -1,12 +0,0 @@
1
- import * as React from 'react';
2
-
3
- /* -------------------------------------------------------------------------------------------------
4
- * DefaultControlsSpacer
5
- * -----------------------------------------------------------------------------------------------*/
6
-
7
- function DefaultControlsSpacer() {
8
- return <div className="vds-controls-spacer" />;
9
- }
10
-
11
- DefaultControlsSpacer.displayName = 'DefaultControlsSpacer';
12
- export { DefaultControlsSpacer };
@@ -1,132 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { useContext } from 'maverick.js';
4
- import { useSignal } from 'maverick.js/react';
5
- import { camelToKebabCase } from 'maverick.js/std';
6
- import { mediaContext } from 'vidstack';
7
-
8
- import { useMediaState } from '../../../../hooks/use-media-state';
9
- import { createComputed, createEffect } from '../../../../hooks/use-signals';
10
- import { Primitive, type PrimitivePropsWithRef } from '../../../primitives/nodes';
11
- import type { DefaultKeyboardDisplayIcons } from '../icons';
12
-
13
- export interface DefaultKeyboardDisplayProps
14
- extends Omit<PrimitivePropsWithRef<'div'>, 'disabled'> {
15
- icons: Partial<DefaultKeyboardDisplayIcons>;
16
- }
17
-
18
- const DefaultKeyboardDisplay = React.forwardRef<HTMLElement, DefaultKeyboardDisplayProps>(
19
- ({ icons: Icons, ...props }, forwardRef) => {
20
- const [visible, setVisible] = React.useState(false),
21
- [Icon, setIcon] = React.useState<any>(null),
22
- [count, setCount] = React.useState(0),
23
- $lastKeyboardAction = useMediaState('lastKeyboardAction');
24
-
25
- React.useEffect(() => {
26
- setCount((n) => n + 1);
27
- }, [$lastKeyboardAction]);
28
-
29
- const actionDataAttr = React.useMemo(() => {
30
- const action = $lastKeyboardAction?.action;
31
- return action && visible ? camelToKebabCase(action) : null;
32
- }, [visible, $lastKeyboardAction]);
33
-
34
- const className = React.useMemo(
35
- () =>
36
- `vds-kb-action${!visible ? ' hidden' : ''}${props.className ? ` ${props.className}` : ''}`,
37
- [visible],
38
- );
39
-
40
- const $$text = createComputed(getText),
41
- $text = useSignal($$text);
42
-
43
- createEffect(() => {
44
- const Icon = getIcon(Icons);
45
- setIcon(() => Icon);
46
- }, [Icons]);
47
-
48
- React.useEffect(() => {
49
- setVisible(!!$lastKeyboardAction);
50
- const id = setTimeout(() => setVisible(false), 500);
51
- return () => {
52
- setVisible(false);
53
- window.clearTimeout(id);
54
- };
55
- }, [$lastKeyboardAction]);
56
-
57
- return Icon ? (
58
- <Primitive.div
59
- {...props}
60
- className={className}
61
- data-action={actionDataAttr}
62
- ref={forwardRef as React.Ref<any>}
63
- >
64
- <div className="vds-kb-text-wrapper">
65
- <div className="vds-kb-text">{$text}</div>
66
- </div>
67
- <div className="vds-kb-bezel" key={count}>
68
- <div className="vds-kb-icon">
69
- <Icon />
70
- </div>
71
- </div>
72
- </Primitive.div>
73
- ) : null;
74
- },
75
- );
76
-
77
- DefaultKeyboardDisplay.displayName = 'DefaultKeyboardDisplay';
78
- export { DefaultKeyboardDisplay };
79
-
80
- function getText() {
81
- const { $state } = useContext(mediaContext),
82
- action = $state.lastKeyboardAction()?.action,
83
- audioGain = $state.audioGain() ?? 1;
84
- switch (action) {
85
- case 'toggleMuted':
86
- return $state.muted() ? '0%' : getVolumeText($state.volume(), audioGain);
87
- case 'volumeUp':
88
- case 'volumeDown':
89
- return getVolumeText($state.volume(), audioGain);
90
- default:
91
- return '';
92
- }
93
- }
94
-
95
- function getVolumeText(volume: number, gain: number) {
96
- return `${Math.round(volume * gain * 100)}%`;
97
- }
98
-
99
- function getIcon(Icons: Partial<DefaultKeyboardDisplayIcons>) {
100
- const { $state } = useContext(mediaContext),
101
- action = $state.lastKeyboardAction()?.action;
102
- switch (action) {
103
- case 'togglePaused':
104
- return !$state.paused() ? Icons.Play : Icons.Pause;
105
- case 'toggleMuted':
106
- return $state.muted() || $state.volume() === 0
107
- ? Icons.Mute
108
- : $state.volume() >= 0.5
109
- ? Icons.VolumeUp
110
- : Icons.VolumeDown;
111
- case 'toggleFullscreen':
112
- return $state.fullscreen() ? Icons.EnterFullscreen : Icons.ExitFullscreen;
113
- case 'togglePictureInPicture':
114
- return $state.pictureInPicture() ? Icons.EnterPiP : Icons.ExitPiP;
115
- case 'toggleCaptions':
116
- return $state.hasCaptions()
117
- ? $state.textTrack()
118
- ? Icons.CaptionsOn
119
- : Icons.CaptionsOff
120
- : null;
121
- case 'volumeUp':
122
- return Icons.VolumeUp;
123
- case 'volumeDown':
124
- return Icons.VolumeDown;
125
- case 'seekForward':
126
- return Icons.SeekForward;
127
- case 'seekBackward':
128
- return Icons.SeekBackward;
129
- default:
130
- return null;
131
- }
132
- }
@@ -1,100 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { useMediaState } from '../../../../../hooks/use-media-state';
4
- import * as Menu from '../../../../ui/menu';
5
- import { useDefaultLayoutContext, useDefaultLayoutWord } from '../../context';
6
- import { slot, type DefaultLayoutMenuSlotName, type Slots } from '../../slots';
7
- import { DefaultFontMenu } from './font-menu';
8
- import { DefaultMenuCheckbox } from './items/menu-checkbox';
9
- import { DefaultMenuButton, DefaultMenuItem, DefaultMenuSection } from './items/menu-items';
10
-
11
- /* -------------------------------------------------------------------------------------------------
12
- * DefaultAccessibilityMenu
13
- * -----------------------------------------------------------------------------------------------*/
14
-
15
- interface DefaultAccessibilityMenuProps {
16
- slots?: Slots<DefaultLayoutMenuSlotName>;
17
- }
18
-
19
- function DefaultAccessibilityMenu({ slots }: DefaultAccessibilityMenuProps) {
20
- const label = useDefaultLayoutWord('Accessibility'),
21
- { icons: Icons } = useDefaultLayoutContext();
22
-
23
- return (
24
- <Menu.Root className="vds-accessibility-menu vds-menu">
25
- <DefaultMenuButton label={label} Icon={Icons.Menu.Accessibility} />
26
- <Menu.Content className="vds-menu-items">
27
- {slot(slots, 'accessibilityMenuItemsStart', null)}
28
-
29
- <DefaultMenuSection>
30
- <DefaultAnnouncementsMenuCheckbox />
31
- <DefaultKeyboardAnimationsMenuCheckbox />
32
- </DefaultMenuSection>
33
-
34
- <DefaultMenuSection>
35
- <DefaultFontMenu />
36
- </DefaultMenuSection>
37
-
38
- {slot(slots, 'accessibilityMenuItemsEnd', null)}
39
- </Menu.Content>
40
- </Menu.Root>
41
- );
42
- }
43
-
44
- DefaultAccessibilityMenu.displayName = 'DefaultAccessibilityMenu';
45
- export { DefaultAccessibilityMenu };
46
-
47
- /* -------------------------------------------------------------------------------------------------
48
- * DefaultAnnouncementsMenuCheckbox
49
- * -----------------------------------------------------------------------------------------------*/
50
-
51
- function DefaultAnnouncementsMenuCheckbox() {
52
- const { userPrefersAnnouncements } = useDefaultLayoutContext(),
53
- label = useDefaultLayoutWord('Announcements');
54
-
55
- function onChange(checked: boolean) {
56
- userPrefersAnnouncements.set(checked);
57
- }
58
-
59
- return (
60
- <DefaultMenuItem label={label}>
61
- <DefaultMenuCheckbox
62
- label={label}
63
- defaultChecked
64
- storageKey="vds-player::announcements"
65
- onChange={onChange}
66
- />
67
- </DefaultMenuItem>
68
- );
69
- }
70
-
71
- DefaultAnnouncementsMenuCheckbox.displayName = 'DefaultAnnouncementsMenuCheckbox';
72
-
73
- /* -------------------------------------------------------------------------------------------------
74
- * DefaultKeyboardAnimationsMenuCheckbox
75
- * -----------------------------------------------------------------------------------------------*/
76
-
77
- function DefaultKeyboardAnimationsMenuCheckbox() {
78
- const $viewType = useMediaState('viewType'),
79
- { userPrefersKeyboardAnimations, noKeyboardAnimations } = useDefaultLayoutContext(),
80
- label = useDefaultLayoutWord('Keyboard Animations');
81
-
82
- if ($viewType !== 'video' || noKeyboardAnimations) return null;
83
-
84
- function onChange(checked: boolean) {
85
- userPrefersKeyboardAnimations.set(checked);
86
- }
87
-
88
- return (
89
- <DefaultMenuItem label={label}>
90
- <DefaultMenuCheckbox
91
- label={label}
92
- defaultChecked
93
- storageKey="vds-player::keyboard-animations"
94
- onChange={onChange}
95
- />
96
- </DefaultMenuItem>
97
- );
98
- }
99
-
100
- DefaultKeyboardAnimationsMenuCheckbox.displayName = 'DefaultKeyboardAnimationsMenuCheckbox';
@@ -1,167 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { isArray } from 'maverick.js/std';
4
-
5
- import { useAudioOptions } from '../../../../../hooks/options/use-audio-options';
6
- import { useMediaState } from '../../../../../hooks/use-media-state';
7
- import * as Menu from '../../../../ui/menu';
8
- import * as AudioGainSlider from '../../../../ui/sliders/audio-gain-slider';
9
- import { useDefaultLayoutContext, useDefaultLayoutWord } from '../../context';
10
- import { slot, type DefaultLayoutMenuSlotName, type Slots } from '../../slots';
11
- import { DefaultMenuButton, DefaultMenuSection } from './items/menu-items';
12
- import { DefaultMenuSliderItem, DefaultSliderParts, DefaultSliderSteps } from './items/menu-slider';
13
-
14
- /* -------------------------------------------------------------------------------------------------
15
- * DefaultAudioMenu
16
- * -----------------------------------------------------------------------------------------------*/
17
-
18
- interface DefaultAudioMenuProps {
19
- slots?: Slots<DefaultLayoutMenuSlotName>;
20
- }
21
-
22
- function DefaultAudioMenu({ slots }: DefaultAudioMenuProps) {
23
- const label = useDefaultLayoutWord('Audio'),
24
- $canSetAudioGain = useMediaState('canSetAudioGain'),
25
- $audioTracks = useMediaState('audioTracks'),
26
- { noAudioGain, icons: Icons } = useDefaultLayoutContext(),
27
- hasGainSlider = $canSetAudioGain && !noAudioGain,
28
- $disabled = !hasGainSlider && $audioTracks.length <= 1;
29
-
30
- if ($disabled) return null;
31
-
32
- return (
33
- <Menu.Root className="vds-audio-menu vds-menu">
34
- <DefaultMenuButton label={label} Icon={Icons.Menu.Audio} />
35
- <Menu.Content className="vds-menu-items">
36
- {slot(slots, 'audioMenuItemsStart', null)}
37
- <DefaultAudioTracksMenu />
38
- {hasGainSlider ? <DefaultAudioBoostMenuSection /> : null}
39
- {slot(slots, 'audioMenuItemsEnd', null)}
40
- </Menu.Content>
41
- </Menu.Root>
42
- );
43
- }
44
-
45
- DefaultAudioMenu.displayName = 'DefaultAudioMenu';
46
- export { DefaultAudioMenu };
47
-
48
- /* -------------------------------------------------------------------------------------------------
49
- * DefaultAudioBoostSection
50
- * -----------------------------------------------------------------------------------------------*/
51
-
52
- function DefaultAudioBoostMenuSection() {
53
- const $audioGain = useMediaState('audioGain'),
54
- label = useDefaultLayoutWord('Boost'),
55
- value = Math.round((($audioGain ?? 1) - 1) * 100) + '%',
56
- $canSetAudioGain = useMediaState('canSetAudioGain'),
57
- { noAudioGain, icons: Icons } = useDefaultLayoutContext(),
58
- $disabled = !$canSetAudioGain || noAudioGain,
59
- min = useGainMin(),
60
- max = useGainMax();
61
-
62
- if ($disabled) return null;
63
-
64
- return (
65
- <DefaultMenuSection label={label} value={value}>
66
- <DefaultMenuSliderItem
67
- UpIcon={Icons.Menu.AudioBoostUp}
68
- DownIcon={Icons.Menu.AudioBoostDown}
69
- isMin={(($audioGain ?? 1) - 1) * 100 <= min}
70
- isMax={(($audioGain ?? 1) - 1) * 100 === max}
71
- >
72
- <DefaultAudioGainSlider />
73
- </DefaultMenuSliderItem>
74
- </DefaultMenuSection>
75
- );
76
- }
77
-
78
- DefaultAudioBoostMenuSection.displayName = 'DefaultAudioBoostMenuSection';
79
-
80
- function useGainMin() {
81
- const { audioGains } = useDefaultLayoutContext(),
82
- min = isArray(audioGains) ? audioGains[0] : audioGains?.min;
83
- return min ?? 0;
84
- }
85
-
86
- function useGainMax() {
87
- const { audioGains } = useDefaultLayoutContext(),
88
- max = isArray(audioGains) ? audioGains[audioGains.length - 1] : audioGains?.max;
89
- return max ?? 300;
90
- }
91
-
92
- function useGainStep() {
93
- const { audioGains } = useDefaultLayoutContext(),
94
- step = isArray(audioGains) ? audioGains[1] - audioGains[0] : audioGains?.step;
95
- return step || 25;
96
- }
97
-
98
- /* -------------------------------------------------------------------------------------------------
99
- * DefaultAudioGainSlider
100
- * -----------------------------------------------------------------------------------------------*/
101
-
102
- function DefaultAudioGainSlider() {
103
- const label = useDefaultLayoutWord('Audio Boost'),
104
- min = useGainMin(),
105
- max = useGainMax(),
106
- step = useGainStep();
107
- return (
108
- <AudioGainSlider.Root
109
- className="vds-audio-gain-slider vds-slider"
110
- aria-label={label}
111
- min={min}
112
- max={max}
113
- step={step}
114
- keyStep={step}
115
- >
116
- <DefaultSliderParts />
117
- <DefaultSliderSteps />
118
- </AudioGainSlider.Root>
119
- );
120
- }
121
-
122
- DefaultAudioGainSlider.displayName = 'DefaultAudioGainSlider';
123
-
124
- /* -------------------------------------------------------------------------------------------------
125
- * DefaultAudioTracksMenu
126
- * -----------------------------------------------------------------------------------------------*/
127
-
128
- function DefaultAudioTracksMenu() {
129
- const { icons: Icons } = useDefaultLayoutContext(),
130
- label = useDefaultLayoutWord('Track'),
131
- defaultText = useDefaultLayoutWord('Default'),
132
- $track = useMediaState('audioTrack'),
133
- options = useAudioOptions();
134
-
135
- if (options.disabled) return null;
136
-
137
- return (
138
- <Menu.Root className="vds-audio-track-menu vds-menu">
139
- <DefaultMenuButton
140
- label={label}
141
- hint={$track?.label ?? defaultText}
142
- disabled={options.disabled}
143
- Icon={Icons.Menu.Audio}
144
- />
145
- <Menu.Content className="vds-menu-items">
146
- <Menu.RadioGroup
147
- className="vds-audio-radio-group vds-radio-group"
148
- value={options.selectedValue}
149
- >
150
- {options.map(({ label, value, select }) => (
151
- <Menu.Radio
152
- className="vds-audio-radio vds-radio"
153
- value={value}
154
- onSelect={select}
155
- key={value}
156
- >
157
- <Icons.Menu.RadioCheck className="vds-icon" />
158
- <span className="vds-radio-label">{label}</span>
159
- </Menu.Radio>
160
- ))}
161
- </Menu.RadioGroup>
162
- </Menu.Content>
163
- </Menu.Root>
164
- );
165
- }
166
-
167
- DefaultAudioTracksMenu.displayName = 'DefaultAudioTracksMenu';
@@ -1,61 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { useCaptionOptions } from '../../../../../hooks/options/use-caption-options';
4
- import * as Menu from '../../../../ui/menu';
5
- import { useDefaultLayoutContext, useDefaultLayoutWord } from '../../context';
6
- import { slot, type DefaultLayoutMenuSlotName, type Slots } from '../../slots';
7
- import { DefaultMenuButton } from './items/menu-items';
8
-
9
- /* -------------------------------------------------------------------------------------------------
10
- * DefaultCaptionMenu
11
- * -----------------------------------------------------------------------------------------------*/
12
-
13
- interface DefaultCaptionMenuProps {
14
- slots?: Slots<DefaultLayoutMenuSlotName>;
15
- }
16
-
17
- function DefaultCaptionMenu({ slots }: DefaultCaptionMenuProps) {
18
- const { icons: Icons } = useDefaultLayoutContext(),
19
- label = useDefaultLayoutWord('Captions'),
20
- offText = useDefaultLayoutWord('Off'),
21
- options = useCaptionOptions({ off: offText }),
22
- hint = options.selectedTrack?.label ?? offText;
23
-
24
- if (options.disabled) return null;
25
-
26
- return (
27
- <Menu.Root className="vds-captions-menu vds-menu">
28
- <DefaultMenuButton
29
- label={label}
30
- hint={hint}
31
- disabled={options.disabled}
32
- Icon={Icons.Menu.Captions}
33
- />
34
- <Menu.Content className="vds-menu-items">
35
- {slot(slots, 'captionsMenuItemsStart', null)}
36
-
37
- <Menu.RadioGroup
38
- className="vds-captions-radio-group vds-radio-group"
39
- value={options.selectedValue}
40
- >
41
- {options.map(({ label, value, select }) => (
42
- <Menu.Radio
43
- className="vds-caption-radio vds-radio"
44
- value={value}
45
- onSelect={select}
46
- key={value}
47
- >
48
- <Icons.Menu.RadioCheck className="vds-icon" />
49
- <span className="vds-radio-label">{label}</span>
50
- </Menu.Radio>
51
- ))}
52
- </Menu.RadioGroup>
53
-
54
- {slot(slots, 'captionsMenuItemsEnd', null)}
55
- </Menu.Content>
56
- </Menu.Root>
57
- );
58
- }
59
-
60
- DefaultCaptionMenu.displayName = 'DefaultCaptionMenu';
61
- export { DefaultCaptionMenu };
@@ -1,132 +0,0 @@
1
- import * as React from 'react';
2
-
3
- import { useSignal } from 'maverick.js/react';
4
- import { flushSync } from 'react-dom';
5
-
6
- import { useChapterOptions } from '../../../../../hooks/options/use-chapter-options';
7
- import { useMediaState } from '../../../../../hooks/use-media-state';
8
- import { isRemotionSrc } from '../../../../../providers/remotion/type-check';
9
- import * as Menu from '../../../../ui/menu';
10
- import * as Thumbnail from '../../../../ui/thumbnail';
11
- import { RemotionThumbnail } from '../../../remotion-ui';
12
- import { useDefaultLayoutContext, useDefaultLayoutWord } from '../../context';
13
- import { useColorSchemeClass } from '../../hooks';
14
- import { DefaultTooltip } from '../tooltip';
15
- import type { DefaultMediaMenuProps } from './settings-menu';
16
- import { useParentDialogEl } from './utils';
17
-
18
- /* -------------------------------------------------------------------------------------------------
19
- * DefaultChaptersMenu
20
- * -----------------------------------------------------------------------------------------------*/
21
-
22
- function DefaultChaptersMenu({ tooltip, placement, portalClass = '' }: DefaultMediaMenuProps) {
23
- const {
24
- showMenuDelay,
25
- noModal,
26
- isSmallLayout,
27
- icons: Icons,
28
- menuGroup,
29
- menuContainer,
30
- colorScheme,
31
- } = useDefaultLayoutContext(),
32
- chaptersText = useDefaultLayoutWord('Chapters'),
33
- options = useChapterOptions(),
34
- disabled = !options.length,
35
- { thumbnails } = useDefaultLayoutContext(),
36
- $src = useMediaState('currentSrc'),
37
- $viewType = useMediaState('viewType'),
38
- $offset = !isSmallLayout && menuGroup === 'bottom' && $viewType === 'video' ? 26 : 0,
39
- $RemotionThumbnail = useSignal(RemotionThumbnail),
40
- colorSchemeClass = useColorSchemeClass(colorScheme),
41
- [isOpen, setIsOpen] = React.useState(false),
42
- dialogEl = useParentDialogEl();
43
-
44
- if (disabled) return null;
45
-
46
- function onOpen() {
47
- flushSync(() => {
48
- setIsOpen(true);
49
- });
50
- }
51
-
52
- function onClose() {
53
- setIsOpen(false);
54
- }
55
-
56
- const Content = (
57
- <Menu.Content
58
- className="vds-chapters-menu-items vds-menu-items"
59
- placement={placement}
60
- offset={$offset}
61
- >
62
- {isOpen ? (
63
- <Menu.RadioGroup
64
- className="vds-chapters-radio-group vds-radio-group"
65
- value={options.selectedValue}
66
- data-thumbnails={thumbnails ? '' : null}
67
- >
68
- {options.map(
69
- ({ cue, label, value, startTimeText, durationText, select, setProgressVar }) => (
70
- <Menu.Radio
71
- className="vds-chapter-radio vds-radio"
72
- value={value}
73
- key={value}
74
- onSelect={select}
75
- ref={setProgressVar}
76
- >
77
- {thumbnails ? (
78
- <Thumbnail.Root src={thumbnails} className="vds-thumbnail" time={cue.startTime}>
79
- <Thumbnail.Img />
80
- </Thumbnail.Root>
81
- ) : $RemotionThumbnail && isRemotionSrc($src) ? (
82
- <$RemotionThumbnail className="vds-thumbnail" frame={cue.startTime * $src.fps!} />
83
- ) : null}
84
- <div className="vds-chapter-radio-content">
85
- <span className="vds-chapter-radio-label">{label}</span>
86
- <span className="vds-chapter-radio-start-time">{startTimeText}</span>
87
- <span className="vds-chapter-radio-duration">{durationText}</span>
88
- </div>
89
- </Menu.Radio>
90
- ),
91
- )}
92
- </Menu.RadioGroup>
93
- ) : null}
94
- </Menu.Content>
95
- );
96
-
97
- return (
98
- <Menu.Root
99
- className="vds-chapters-menu vds-menu"
100
- showDelay={showMenuDelay}
101
- onOpen={onOpen}
102
- onClose={onClose}
103
- >
104
- <DefaultTooltip content={chaptersText} placement={tooltip}>
105
- <Menu.Button
106
- className="vds-menu-button vds-button"
107
- disabled={disabled}
108
- aria-label={chaptersText}
109
- >
110
- <Icons.Menu.Chapters className="vds-icon" />
111
- </Menu.Button>
112
- </DefaultTooltip>
113
- {noModal || !isSmallLayout ? (
114
- Content
115
- ) : (
116
- <Menu.Portal
117
- container={menuContainer ?? dialogEl}
118
- className={portalClass + (colorSchemeClass ? ` ${colorSchemeClass}` : '')}
119
- disabled="fullscreen"
120
- data-sm={isSmallLayout ? '' : null}
121
- data-lg={!isSmallLayout ? '' : null}
122
- data-size={isSmallLayout ? 'sm' : 'lg'}
123
- >
124
- {Content}
125
- </Menu.Portal>
126
- )}
127
- </Menu.Root>
128
- );
129
- }
130
-
131
- DefaultChaptersMenu.displayName = 'DefaultChaptersMenu';
132
- export { DefaultChaptersMenu };