@videojs/html 10.0.1 → 10.2.0

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 (455) hide show
  1. package/README.md +2 -2
  2. package/dist/default/define/audio/compat-skin.css +86 -60
  3. package/dist/default/define/audio/compat-skin2.js +1 -1
  4. package/dist/default/define/audio/neutral-skin.css +2 -11
  5. package/dist/default/define/audio/neutral-skin2.js +1 -1
  6. package/dist/default/define/audio/scaffold-skin.css +1754 -0
  7. package/dist/default/define/audio/scaffold-skin.js +6 -0
  8. package/dist/default/define/audio/scaffold-skin2.js +4 -0
  9. package/dist/default/define/audio/skin.css +0 -1
  10. package/dist/default/define/audio/skin2.js +1 -1
  11. package/dist/default/define/live-audio/compat-skin.css +86 -60
  12. package/dist/default/define/live-audio/compat-skin2.js +1 -1
  13. package/dist/default/define/live-audio/neutral-skin.css +0 -1
  14. package/dist/default/define/live-audio/neutral-skin2.js +1 -1
  15. package/dist/default/define/live-audio/scaffold-skin.css +1574 -0
  16. package/dist/default/define/live-audio/scaffold-skin.js +6 -0
  17. package/dist/default/define/live-audio/scaffold-skin2.js +4 -0
  18. package/dist/default/define/live-audio/skin.css +0 -1
  19. package/dist/default/define/live-audio/skin2.js +1 -1
  20. package/dist/default/define/live-video/compat-skin.css +75 -31
  21. package/dist/default/define/live-video/compat-skin2.js +1 -1
  22. package/dist/default/define/live-video/neutral-skin.css +20 -9
  23. package/dist/default/define/live-video/neutral-skin2.js +1 -1
  24. package/dist/default/define/live-video/scaffold-skin.css +1975 -0
  25. package/dist/default/define/live-video/scaffold-skin.js +6 -0
  26. package/dist/default/define/live-video/scaffold-skin2.js +4 -0
  27. package/dist/default/define/live-video/skin.css +18 -7
  28. package/dist/default/define/live-video/skin2.js +1 -1
  29. package/dist/default/define/media/playerjs-video.js +11 -0
  30. package/dist/default/define/video/compat-skin.css +75 -31
  31. package/dist/default/define/video/compat-skin2.js +1 -1
  32. package/dist/default/define/video/neutral-skin.css +28 -19
  33. package/dist/default/define/video/neutral-skin2.js +1 -1
  34. package/dist/default/define/video/scaffold-skin.css +2215 -0
  35. package/dist/default/define/video/scaffold-skin.js +6 -0
  36. package/dist/default/define/video/scaffold-skin2.js +4 -0
  37. package/dist/default/define/video/skin.css +24 -7
  38. package/dist/default/define/video/skin2.js +1 -1
  39. package/dist/default/extensions/mux-data/extension.js +1 -1
  40. package/dist/default/icons/dist/element/compat/icons.js +1 -1
  41. package/dist/default/icons/dist/element/index.js +1 -0
  42. package/dist/default/icons/dist/element/scaffold/icons.js +30 -0
  43. package/dist/default/icons/dist/element/scaffold/index.js +8 -0
  44. package/dist/default/icons/dist/html/compat/play.js +1 -1
  45. package/dist/default/icons/dist/html/scaffold/airplay-enter.js +4 -0
  46. package/dist/default/icons/dist/html/scaffold/airplay-exit.js +4 -0
  47. package/dist/default/icons/dist/html/scaffold/captions-off.js +4 -0
  48. package/dist/default/icons/dist/html/scaffold/captions-on.js +4 -0
  49. package/dist/default/icons/dist/html/scaffold/cast-enter.js +4 -0
  50. package/dist/default/icons/dist/html/scaffold/cast-exit.js +4 -0
  51. package/dist/default/icons/dist/html/scaffold/check.js +4 -0
  52. package/dist/default/icons/dist/html/scaffold/chevron.js +4 -0
  53. package/dist/default/icons/dist/html/scaffold/fullscreen-enter.js +4 -0
  54. package/dist/default/icons/dist/html/scaffold/fullscreen-exit.js +4 -0
  55. package/dist/default/icons/dist/html/scaffold/gear.js +4 -0
  56. package/dist/default/icons/dist/html/scaffold/pause.js +4 -0
  57. package/dist/default/icons/dist/html/scaffold/pip-enter.js +4 -0
  58. package/dist/default/icons/dist/html/scaffold/pip-exit.js +4 -0
  59. package/dist/default/icons/dist/html/scaffold/play.js +4 -0
  60. package/dist/default/icons/dist/html/scaffold/quality.js +4 -0
  61. package/dist/default/icons/dist/html/scaffold/restart.js +4 -0
  62. package/dist/default/icons/dist/html/scaffold/seek.js +4 -0
  63. package/dist/default/icons/dist/html/scaffold/speech.js +4 -0
  64. package/dist/default/icons/dist/html/scaffold/speed.js +4 -0
  65. package/dist/default/icons/dist/html/scaffold/spinner.js +4 -0
  66. package/dist/default/icons/dist/html/scaffold/switches.js +4 -0
  67. package/dist/default/icons/dist/html/scaffold/volume-high.js +4 -0
  68. package/dist/default/icons/dist/html/scaffold/volume-low.js +4 -0
  69. package/dist/default/icons/dist/html/scaffold/volume-off.js +4 -0
  70. package/dist/default/icons/element/scaffold/index.js +1 -0
  71. package/dist/default/icons/scaffold/index.js +26 -0
  72. package/dist/default/internal/skins/compat-audio/register.js +1 -10
  73. package/dist/default/internal/skins/compat-audio/skin.css +86 -60
  74. package/dist/default/internal/skins/compat-audio/template.js +26 -48
  75. package/dist/default/internal/skins/compat-live-audio/register.js +1 -10
  76. package/dist/default/internal/skins/compat-live-audio/skin.css +86 -60
  77. package/dist/default/internal/skins/compat-live-audio/template.js +7 -29
  78. package/dist/default/internal/skins/compat-live-video/skin.css +75 -31
  79. package/dist/default/internal/skins/compat-live-video/template.js +20 -18
  80. package/dist/default/internal/skins/compat-video/skin.css +75 -31
  81. package/dist/default/internal/skins/compat-video/template.js +34 -32
  82. package/dist/default/internal/skins/default-audio/skin.css +0 -1
  83. package/dist/default/internal/skins/default-audio/template.js +12 -12
  84. package/dist/default/internal/skins/default-live-audio/skin.css +0 -1
  85. package/dist/default/internal/skins/default-live-audio/template.js +5 -5
  86. package/dist/default/internal/skins/default-live-video/skin.css +18 -7
  87. package/dist/default/internal/skins/default-live-video/template.js +16 -16
  88. package/dist/default/internal/skins/default-video/skin.css +24 -7
  89. package/dist/default/internal/skins/default-video/template.js +26 -26
  90. package/dist/default/internal/skins/neutral-audio/skin.css +2 -11
  91. package/dist/default/internal/skins/neutral-audio/template.js +13 -13
  92. package/dist/default/internal/skins/neutral-live-audio/skin.css +0 -1
  93. package/dist/default/internal/skins/neutral-live-audio/template.js +5 -5
  94. package/dist/default/internal/skins/neutral-live-video/skin.css +20 -9
  95. package/dist/default/internal/skins/neutral-live-video/template.js +16 -16
  96. package/dist/default/internal/skins/neutral-video/skin.css +28 -19
  97. package/dist/default/internal/skins/neutral-video/template.js +27 -27
  98. package/dist/default/internal/skins/scaffold-audio/register.js +63 -0
  99. package/dist/default/internal/skins/scaffold-audio/skin.css +1722 -0
  100. package/dist/default/internal/skins/scaffold-audio/template.js +197 -0
  101. package/dist/default/internal/skins/scaffold-live-audio/register.js +43 -0
  102. package/dist/default/internal/skins/scaffold-live-audio/skin.css +1542 -0
  103. package/dist/default/internal/skins/scaffold-live-audio/template.js +94 -0
  104. package/dist/default/internal/skins/scaffold-live-video/register.js +86 -0
  105. package/dist/default/internal/skins/scaffold-live-video/skin.css +1943 -0
  106. package/dist/default/internal/skins/scaffold-live-video/template.js +241 -0
  107. package/dist/default/internal/skins/scaffold-video/register.js +115 -0
  108. package/dist/default/internal/skins/scaffold-video/skin.css +2183 -0
  109. package/dist/default/internal/skins/scaffold-video/template.js +461 -0
  110. package/dist/default/media/hls-audio/adapter.js +1 -1
  111. package/dist/default/media/hls-background-video/adapter.js +1 -1
  112. package/dist/default/media/hls-video/adapter.js +1 -1
  113. package/dist/default/media/playerjs-video/adapter.js +25 -0
  114. package/dist/default/presets/audio/index.js +2 -1
  115. package/dist/default/presets/audio/scaffold-skin.js +19 -0
  116. package/dist/default/presets/background/skin.js +0 -2
  117. package/dist/default/presets/live-audio/index.js +2 -1
  118. package/dist/default/presets/live-audio/scaffold-skin.js +19 -0
  119. package/dist/default/presets/live-video/index.js +2 -1
  120. package/dist/default/presets/live-video/scaffold-skin.js +19 -0
  121. package/dist/default/presets/skin.js +0 -11
  122. package/dist/default/presets/video/index.js +2 -1
  123. package/dist/default/presets/video/scaffold-skin.js +19 -0
  124. package/dist/default/ui/slider/element.js +3 -1
  125. package/dist/default/ui/time-slider/element.js +45 -9
  126. package/dist/default/ui/volume-slider/element.js +3 -1
  127. package/dist/default/version.js +1 -1
  128. package/dist/dev/define/audio/compat-skin.css +86 -60
  129. package/dist/dev/define/audio/compat-skin2.js +1 -1
  130. package/dist/dev/define/audio/compat-skin2.js.map +1 -1
  131. package/dist/dev/define/audio/neutral-skin.css +2 -11
  132. package/dist/dev/define/audio/neutral-skin2.js +1 -1
  133. package/dist/dev/define/audio/neutral-skin2.js.map +1 -1
  134. package/dist/dev/define/audio/scaffold-skin.css +1754 -0
  135. package/dist/dev/define/audio/scaffold-skin.d.ts +1 -0
  136. package/dist/dev/define/audio/scaffold-skin.js +8 -0
  137. package/dist/dev/define/audio/scaffold-skin.js.map +1 -0
  138. package/dist/dev/define/audio/scaffold-skin2.js +6 -0
  139. package/dist/dev/define/audio/scaffold-skin2.js.map +1 -0
  140. package/dist/dev/define/audio/skin.css +0 -1
  141. package/dist/dev/define/audio/skin2.js +1 -1
  142. package/dist/dev/define/audio/skin2.js.map +1 -1
  143. package/dist/dev/define/global.js.map +1 -1
  144. package/dist/dev/define/live-audio/compat-skin.css +86 -60
  145. package/dist/dev/define/live-audio/compat-skin2.js +1 -1
  146. package/dist/dev/define/live-audio/compat-skin2.js.map +1 -1
  147. package/dist/dev/define/live-audio/neutral-skin.css +0 -1
  148. package/dist/dev/define/live-audio/neutral-skin2.js +1 -1
  149. package/dist/dev/define/live-audio/neutral-skin2.js.map +1 -1
  150. package/dist/dev/define/live-audio/scaffold-skin.css +1574 -0
  151. package/dist/dev/define/live-audio/scaffold-skin.d.ts +1 -0
  152. package/dist/dev/define/live-audio/scaffold-skin.js +8 -0
  153. package/dist/dev/define/live-audio/scaffold-skin.js.map +1 -0
  154. package/dist/dev/define/live-audio/scaffold-skin2.js +6 -0
  155. package/dist/dev/define/live-audio/scaffold-skin2.js.map +1 -0
  156. package/dist/dev/define/live-audio/skin.css +0 -1
  157. package/dist/dev/define/live-audio/skin2.js +1 -1
  158. package/dist/dev/define/live-audio/skin2.js.map +1 -1
  159. package/dist/dev/define/live-video/compat-skin.css +75 -31
  160. package/dist/dev/define/live-video/compat-skin2.js +1 -1
  161. package/dist/dev/define/live-video/compat-skin2.js.map +1 -1
  162. package/dist/dev/define/live-video/neutral-skin.css +20 -9
  163. package/dist/dev/define/live-video/neutral-skin2.js +1 -1
  164. package/dist/dev/define/live-video/neutral-skin2.js.map +1 -1
  165. package/dist/dev/define/live-video/scaffold-skin.css +1975 -0
  166. package/dist/dev/define/live-video/scaffold-skin.d.ts +1 -0
  167. package/dist/dev/define/live-video/scaffold-skin.js +8 -0
  168. package/dist/dev/define/live-video/scaffold-skin.js.map +1 -0
  169. package/dist/dev/define/live-video/scaffold-skin2.js +6 -0
  170. package/dist/dev/define/live-video/scaffold-skin2.js.map +1 -0
  171. package/dist/dev/define/live-video/skin.css +18 -7
  172. package/dist/dev/define/live-video/skin2.js +1 -1
  173. package/dist/dev/define/live-video/skin2.js.map +1 -1
  174. package/dist/dev/define/media/playerjs-video.d.ts +15 -0
  175. package/dist/dev/define/media/playerjs-video.js +13 -0
  176. package/dist/dev/define/media/playerjs-video.js.map +1 -0
  177. package/dist/dev/define/video/compat-skin.css +75 -31
  178. package/dist/dev/define/video/compat-skin2.js +1 -1
  179. package/dist/dev/define/video/compat-skin2.js.map +1 -1
  180. package/dist/dev/define/video/neutral-skin.css +28 -19
  181. package/dist/dev/define/video/neutral-skin2.js +1 -1
  182. package/dist/dev/define/video/neutral-skin2.js.map +1 -1
  183. package/dist/dev/define/video/scaffold-skin.css +2215 -0
  184. package/dist/dev/define/video/scaffold-skin.d.ts +1 -0
  185. package/dist/dev/define/video/scaffold-skin.js +8 -0
  186. package/dist/dev/define/video/scaffold-skin.js.map +1 -0
  187. package/dist/dev/define/video/scaffold-skin2.js +6 -0
  188. package/dist/dev/define/video/scaffold-skin2.js.map +1 -0
  189. package/dist/dev/define/video/skin.css +24 -7
  190. package/dist/dev/define/video/skin2.js +1 -1
  191. package/dist/dev/define/video/skin2.js.map +1 -1
  192. package/dist/dev/extensions/mux-data/extension.d.ts +1 -1
  193. package/dist/dev/extensions/mux-data/extension.js +1 -1
  194. package/dist/dev/extensions/mux-data/extension.js.map +1 -1
  195. package/dist/dev/icons/dist/element/compat/icons.js +1 -1
  196. package/dist/dev/icons/dist/element/compat/icons.js.map +1 -1
  197. package/dist/dev/icons/dist/element/index.js +1 -0
  198. package/dist/dev/icons/dist/element/index.js.map +1 -1
  199. package/dist/dev/icons/dist/element/scaffold/icons.js +32 -0
  200. package/dist/dev/icons/dist/element/scaffold/icons.js.map +1 -0
  201. package/dist/dev/icons/dist/element/scaffold/index.d.ts +1 -0
  202. package/dist/dev/icons/dist/element/scaffold/index.js +10 -0
  203. package/dist/dev/icons/dist/element/scaffold/index.js.map +1 -0
  204. package/dist/dev/icons/dist/html/compat/play.js +1 -1
  205. package/dist/dev/icons/dist/html/compat/play.js.map +1 -1
  206. package/dist/dev/icons/dist/html/scaffold/airplay-enter.js +6 -0
  207. package/dist/dev/icons/dist/html/scaffold/airplay-enter.js.map +1 -0
  208. package/dist/dev/icons/dist/html/scaffold/airplay-exit.js +6 -0
  209. package/dist/dev/icons/dist/html/scaffold/airplay-exit.js.map +1 -0
  210. package/dist/dev/icons/dist/html/scaffold/captions-off.js +6 -0
  211. package/dist/dev/icons/dist/html/scaffold/captions-off.js.map +1 -0
  212. package/dist/dev/icons/dist/html/scaffold/captions-on.js +6 -0
  213. package/dist/dev/icons/dist/html/scaffold/captions-on.js.map +1 -0
  214. package/dist/dev/icons/dist/html/scaffold/cast-enter.js +6 -0
  215. package/dist/dev/icons/dist/html/scaffold/cast-enter.js.map +1 -0
  216. package/dist/dev/icons/dist/html/scaffold/cast-exit.js +6 -0
  217. package/dist/dev/icons/dist/html/scaffold/cast-exit.js.map +1 -0
  218. package/dist/dev/icons/dist/html/scaffold/check.js +6 -0
  219. package/dist/dev/icons/dist/html/scaffold/check.js.map +1 -0
  220. package/dist/dev/icons/dist/html/scaffold/chevron.js +6 -0
  221. package/dist/dev/icons/dist/html/scaffold/chevron.js.map +1 -0
  222. package/dist/dev/icons/dist/html/scaffold/fullscreen-enter.js +6 -0
  223. package/dist/dev/icons/dist/html/scaffold/fullscreen-enter.js.map +1 -0
  224. package/dist/dev/icons/dist/html/scaffold/fullscreen-exit.js +6 -0
  225. package/dist/dev/icons/dist/html/scaffold/fullscreen-exit.js.map +1 -0
  226. package/dist/dev/icons/dist/html/scaffold/gear.js +6 -0
  227. package/dist/dev/icons/dist/html/scaffold/gear.js.map +1 -0
  228. package/dist/dev/icons/dist/html/scaffold/index.d.ts +28 -0
  229. package/dist/dev/icons/dist/html/scaffold/pause.js +6 -0
  230. package/dist/dev/icons/dist/html/scaffold/pause.js.map +1 -0
  231. package/dist/dev/icons/dist/html/scaffold/pip-enter.js +6 -0
  232. package/dist/dev/icons/dist/html/scaffold/pip-enter.js.map +1 -0
  233. package/dist/dev/icons/dist/html/scaffold/pip-exit.js +6 -0
  234. package/dist/dev/icons/dist/html/scaffold/pip-exit.js.map +1 -0
  235. package/dist/dev/icons/dist/html/scaffold/play.js +6 -0
  236. package/dist/dev/icons/dist/html/scaffold/play.js.map +1 -0
  237. package/dist/dev/icons/dist/html/scaffold/quality.js +6 -0
  238. package/dist/dev/icons/dist/html/scaffold/quality.js.map +1 -0
  239. package/dist/dev/icons/dist/html/scaffold/restart.js +6 -0
  240. package/dist/dev/icons/dist/html/scaffold/restart.js.map +1 -0
  241. package/dist/dev/icons/dist/html/scaffold/seek.js +6 -0
  242. package/dist/dev/icons/dist/html/scaffold/seek.js.map +1 -0
  243. package/dist/dev/icons/dist/html/scaffold/speech.js +6 -0
  244. package/dist/dev/icons/dist/html/scaffold/speech.js.map +1 -0
  245. package/dist/dev/icons/dist/html/scaffold/speed.js +6 -0
  246. package/dist/dev/icons/dist/html/scaffold/speed.js.map +1 -0
  247. package/dist/dev/icons/dist/html/scaffold/spinner.js +6 -0
  248. package/dist/dev/icons/dist/html/scaffold/spinner.js.map +1 -0
  249. package/dist/dev/icons/dist/html/scaffold/switches.js +6 -0
  250. package/dist/dev/icons/dist/html/scaffold/switches.js.map +1 -0
  251. package/dist/dev/icons/dist/html/scaffold/volume-high.js +6 -0
  252. package/dist/dev/icons/dist/html/scaffold/volume-high.js.map +1 -0
  253. package/dist/dev/icons/dist/html/scaffold/volume-low.js +6 -0
  254. package/dist/dev/icons/dist/html/scaffold/volume-low.js.map +1 -0
  255. package/dist/dev/icons/dist/html/scaffold/volume-off.js +6 -0
  256. package/dist/dev/icons/dist/html/scaffold/volume-off.js.map +1 -0
  257. package/dist/dev/icons/element/scaffold/index.d.ts +1 -0
  258. package/dist/dev/icons/element/scaffold/index.js +1 -0
  259. package/dist/dev/icons/scaffold/index.d.ts +2 -0
  260. package/dist/dev/icons/scaffold/index.js +26 -0
  261. package/dist/dev/index.d.ts +3 -3
  262. package/dist/dev/internal/skins/compat-audio/register.d.ts +4 -5
  263. package/dist/dev/internal/skins/compat-audio/register.js +1 -10
  264. package/dist/dev/internal/skins/compat-audio/register.js.map +1 -1
  265. package/dist/dev/internal/skins/compat-audio/skin.css +86 -60
  266. package/dist/dev/internal/skins/compat-audio/template.js +26 -48
  267. package/dist/dev/internal/skins/compat-audio/template.js.map +1 -1
  268. package/dist/dev/internal/skins/compat-live-audio/register.d.ts +1 -2
  269. package/dist/dev/internal/skins/compat-live-audio/register.js +1 -10
  270. package/dist/dev/internal/skins/compat-live-audio/register.js.map +1 -1
  271. package/dist/dev/internal/skins/compat-live-audio/skin.css +86 -60
  272. package/dist/dev/internal/skins/compat-live-audio/template.js +7 -29
  273. package/dist/dev/internal/skins/compat-live-audio/template.js.map +1 -1
  274. package/dist/dev/internal/skins/compat-live-video/register.d.ts +3 -3
  275. package/dist/dev/internal/skins/compat-live-video/skin.css +75 -31
  276. package/dist/dev/internal/skins/compat-live-video/template.js +20 -18
  277. package/dist/dev/internal/skins/compat-live-video/template.js.map +1 -1
  278. package/dist/dev/internal/skins/compat-video/register.d.ts +6 -6
  279. package/dist/dev/internal/skins/compat-video/skin.css +75 -31
  280. package/dist/dev/internal/skins/compat-video/template.js +34 -32
  281. package/dist/dev/internal/skins/compat-video/template.js.map +1 -1
  282. package/dist/dev/internal/skins/default-audio/register.d.ts +3 -3
  283. package/dist/dev/internal/skins/default-audio/skin.css +0 -1
  284. package/dist/dev/internal/skins/default-audio/template.js +12 -12
  285. package/dist/dev/internal/skins/default-audio/template.js.map +1 -1
  286. package/dist/dev/internal/skins/default-live-audio/register.d.ts +1 -1
  287. package/dist/dev/internal/skins/default-live-audio/skin.css +0 -1
  288. package/dist/dev/internal/skins/default-live-audio/template.js +5 -5
  289. package/dist/dev/internal/skins/default-live-audio/template.js.map +1 -1
  290. package/dist/dev/internal/skins/default-live-video/register.d.ts +3 -3
  291. package/dist/dev/internal/skins/default-live-video/skin.css +18 -7
  292. package/dist/dev/internal/skins/default-live-video/template.js +16 -16
  293. package/dist/dev/internal/skins/default-live-video/template.js.map +1 -1
  294. package/dist/dev/internal/skins/default-video/register.d.ts +4 -4
  295. package/dist/dev/internal/skins/default-video/skin.css +24 -7
  296. package/dist/dev/internal/skins/default-video/template.js +26 -26
  297. package/dist/dev/internal/skins/default-video/template.js.map +1 -1
  298. package/dist/dev/internal/skins/neutral-audio/register.d.ts +5 -5
  299. package/dist/dev/internal/skins/neutral-audio/skin.css +2 -11
  300. package/dist/dev/internal/skins/neutral-audio/template.js +13 -13
  301. package/dist/dev/internal/skins/neutral-audio/template.js.map +1 -1
  302. package/dist/dev/internal/skins/neutral-live-audio/register.d.ts +1 -1
  303. package/dist/dev/internal/skins/neutral-live-audio/skin.css +0 -1
  304. package/dist/dev/internal/skins/neutral-live-audio/template.js +5 -5
  305. package/dist/dev/internal/skins/neutral-live-audio/template.js.map +1 -1
  306. package/dist/dev/internal/skins/neutral-live-video/register.d.ts +3 -3
  307. package/dist/dev/internal/skins/neutral-live-video/skin.css +20 -9
  308. package/dist/dev/internal/skins/neutral-live-video/template.js +16 -16
  309. package/dist/dev/internal/skins/neutral-live-video/template.js.map +1 -1
  310. package/dist/dev/internal/skins/neutral-video/register.d.ts +6 -6
  311. package/dist/dev/internal/skins/neutral-video/skin.css +28 -19
  312. package/dist/dev/internal/skins/neutral-video/template.js +27 -27
  313. package/dist/dev/internal/skins/neutral-video/template.js.map +1 -1
  314. package/dist/dev/internal/skins/scaffold-audio/register.d.ts +42 -0
  315. package/dist/dev/internal/skins/scaffold-audio/register.js +65 -0
  316. package/dist/dev/internal/skins/scaffold-audio/register.js.map +1 -0
  317. package/dist/dev/internal/skins/scaffold-audio/skin.css +1722 -0
  318. package/dist/dev/internal/skins/scaffold-audio/template.js +199 -0
  319. package/dist/dev/internal/skins/scaffold-audio/template.js.map +1 -0
  320. package/dist/dev/internal/skins/scaffold-live-audio/register.d.ts +26 -0
  321. package/dist/dev/internal/skins/scaffold-live-audio/register.js +45 -0
  322. package/dist/dev/internal/skins/scaffold-live-audio/register.js.map +1 -0
  323. package/dist/dev/internal/skins/scaffold-live-audio/skin.css +1542 -0
  324. package/dist/dev/internal/skins/scaffold-live-audio/template.js +96 -0
  325. package/dist/dev/internal/skins/scaffold-live-audio/template.js.map +1 -0
  326. package/dist/dev/internal/skins/scaffold-live-video/register.d.ts +45 -0
  327. package/dist/dev/internal/skins/scaffold-live-video/register.js +88 -0
  328. package/dist/dev/internal/skins/scaffold-live-video/register.js.map +1 -0
  329. package/dist/dev/internal/skins/scaffold-live-video/skin.css +1943 -0
  330. package/dist/dev/internal/skins/scaffold-live-video/template.js +243 -0
  331. package/dist/dev/internal/skins/scaffold-live-video/template.js.map +1 -0
  332. package/dist/dev/internal/skins/scaffold-video/register.d.ts +62 -0
  333. package/dist/dev/internal/skins/scaffold-video/register.js +117 -0
  334. package/dist/dev/internal/skins/scaffold-video/register.js.map +1 -0
  335. package/dist/dev/internal/skins/scaffold-video/skin.css +2183 -0
  336. package/dist/dev/internal/skins/scaffold-video/template.js +463 -0
  337. package/dist/dev/internal/skins/scaffold-video/template.js.map +1 -0
  338. package/dist/dev/media/hls-audio/adapter.d.ts +1 -1
  339. package/dist/dev/media/hls-audio/adapter.js +1 -1
  340. package/dist/dev/media/hls-audio/adapter.js.map +1 -1
  341. package/dist/dev/media/hls-background-video/adapter.d.ts +1 -1
  342. package/dist/dev/media/hls-background-video/adapter.js +1 -1
  343. package/dist/dev/media/hls-background-video/adapter.js.map +1 -1
  344. package/dist/dev/media/hls-video/adapter.d.ts +1 -1
  345. package/dist/dev/media/hls-video/adapter.js +1 -1
  346. package/dist/dev/media/hls-video/adapter.js.map +1 -1
  347. package/dist/dev/media/playerjs-video/adapter.d.ts +11 -0
  348. package/dist/dev/media/playerjs-video/adapter.js +61 -0
  349. package/dist/dev/media/playerjs-video/adapter.js.map +1 -0
  350. package/dist/dev/media/playerjs-video/index.d.ts +2 -0
  351. package/dist/dev/presets/audio/index.d.ts +2 -1
  352. package/dist/dev/presets/audio/index.js +2 -1
  353. package/dist/dev/presets/audio/scaffold-skin.d.ts +15 -0
  354. package/dist/dev/presets/audio/scaffold-skin.js +21 -0
  355. package/dist/dev/presets/audio/scaffold-skin.js.map +1 -0
  356. package/dist/dev/presets/background/skin.js +0 -2
  357. package/dist/dev/presets/background/skin.js.map +1 -1
  358. package/dist/dev/presets/live-audio/index.d.ts +2 -1
  359. package/dist/dev/presets/live-audio/index.js +2 -1
  360. package/dist/dev/presets/live-audio/scaffold-skin.d.ts +15 -0
  361. package/dist/dev/presets/live-audio/scaffold-skin.js +21 -0
  362. package/dist/dev/presets/live-audio/scaffold-skin.js.map +1 -0
  363. package/dist/dev/presets/live-video/index.d.ts +2 -1
  364. package/dist/dev/presets/live-video/index.js +2 -1
  365. package/dist/dev/presets/live-video/scaffold-skin.d.ts +15 -0
  366. package/dist/dev/presets/live-video/scaffold-skin.js +21 -0
  367. package/dist/dev/presets/live-video/scaffold-skin.js.map +1 -0
  368. package/dist/dev/presets/skin.js +0 -11
  369. package/dist/dev/presets/skin.js.map +1 -1
  370. package/dist/dev/presets/video/index.d.ts +2 -1
  371. package/dist/dev/presets/video/index.js +2 -1
  372. package/dist/dev/presets/video/scaffold-skin.d.ts +15 -0
  373. package/dist/dev/presets/video/scaffold-skin.js +21 -0
  374. package/dist/dev/presets/video/scaffold-skin.js.map +1 -0
  375. package/dist/dev/ui/slider/element.js +3 -1
  376. package/dist/dev/ui/slider/element.js.map +1 -1
  377. package/dist/dev/ui/time-slider/element.js +45 -9
  378. package/dist/dev/ui/time-slider/element.js.map +1 -1
  379. package/dist/dev/ui/volume-slider/element.js +3 -1
  380. package/dist/dev/ui/volume-slider/element.js.map +1 -1
  381. package/dist/dev/version.js +1 -1
  382. package/docs/README.md +1 -1
  383. package/docs/guides/browser-support.md +11 -11
  384. package/docs/guides/build-with-ai.md +1 -1
  385. package/docs/guides/build-your-own-skin.md +381 -0
  386. package/docs/guides/cdn.md +9 -9
  387. package/docs/guides/customize-skins.md +2 -1
  388. package/docs/guides/installation-cdn.md +4 -4
  389. package/docs/guides/installation-shadcn.md +3 -3
  390. package/docs/guides/installation-svelte.md +5 -5
  391. package/docs/guides/installation-vue.md +5 -5
  392. package/docs/guides/installation.md +5 -5
  393. package/docs/guides/internationalization.md +5 -5
  394. package/docs/guides/llms.txt +3 -2
  395. package/docs/guides/media-sources.md +1 -0
  396. package/docs/guides/migrate-from-media-chrome.md +4 -4
  397. package/docs/guides/migrate-from-mux-player.md +6 -6
  398. package/docs/guides/migrate-from-plyr.md +7 -7
  399. package/docs/guides/migrate-from-video-js-8.md +15 -7
  400. package/docs/guides/migrate-from-vidstack.md +3 -3
  401. package/docs/guides/migrate.md +2 -1
  402. package/docs/guides/presets.md +4 -4
  403. package/docs/guides/self-hosting.md +11 -8
  404. package/docs/guides/skins.md +6 -5
  405. package/docs/guides/v10-roadmap.md +2 -2
  406. package/docs/guides/why-videojs.md +3 -3
  407. package/docs/llms.txt +9 -3
  408. package/docs/reference/api/error-codes.md +1 -1
  409. package/docs/reference/api/llms.txt +1 -1
  410. package/docs/reference/api/preset-audio.md +1 -1
  411. package/docs/reference/api/preset-background.md +1 -1
  412. package/docs/reference/api/preset-live-audio.md +1 -1
  413. package/docs/reference/api/preset-live-video.md +1 -1
  414. package/docs/reference/api/preset-video.md +1 -1
  415. package/docs/reference/api/vjs8-legacy-init.md +2 -2
  416. package/docs/reference/components/audio-neutral-skin.md +1 -1
  417. package/docs/reference/components/audio-scaffold-skin.md +39 -0
  418. package/docs/reference/components/audio-skin.md +1 -1
  419. package/docs/reference/components/background-video-skin.md +1 -1
  420. package/docs/reference/components/background-video.md +1 -1
  421. package/docs/reference/components/cloudflare-video.md +1 -1
  422. package/docs/reference/components/dash-video.md +1 -1
  423. package/docs/reference/components/google-cast.md +1 -1
  424. package/docs/reference/components/hls-audio.md +2 -47
  425. package/docs/reference/components/hls-background-video.md +1 -1
  426. package/docs/reference/components/hls-video.md +7 -60
  427. package/docs/reference/components/hlsjs-video.md +11 -1
  428. package/docs/reference/components/icons.md +2 -1
  429. package/docs/reference/components/live-audio-neutral-skin.md +1 -1
  430. package/docs/reference/components/live-audio-scaffold-skin.md +41 -0
  431. package/docs/reference/components/live-audio-skin.md +1 -1
  432. package/docs/reference/components/live-video-neutral-skin.md +1 -1
  433. package/docs/reference/components/live-video-scaffold-skin.md +47 -0
  434. package/docs/reference/components/live-video-skin.md +1 -1
  435. package/docs/reference/components/llms.txt +6 -1
  436. package/docs/reference/components/mux-audio.md +1 -1
  437. package/docs/reference/components/mux-background-video.md +1 -1
  438. package/docs/reference/components/mux-data.md +4 -2
  439. package/docs/reference/components/mux-video.md +1 -1
  440. package/docs/reference/components/native-hls-video.md +1 -1
  441. package/docs/reference/components/playerjs-video.md +197 -0
  442. package/docs/reference/components/shaka-video.md +1 -1
  443. package/docs/reference/components/slider.md +2 -0
  444. package/docs/reference/components/spotify-audio.md +1 -1
  445. package/docs/reference/components/tiktok-video.md +1 -1
  446. package/docs/reference/components/time-slider.md +7 -5
  447. package/docs/reference/components/twitch-video.md +1 -1
  448. package/docs/reference/components/video-neutral-skin.md +1 -1
  449. package/docs/reference/components/video-scaffold-skin.md +51 -0
  450. package/docs/reference/components/video-skin.md +1 -1
  451. package/docs/reference/components/vimeo-video.md +1 -1
  452. package/docs/reference/components/volume-slider.md +8 -6
  453. package/docs/reference/components/wistia-video.md +5 -1
  454. package/docs/reference/components/youtube-video.md +2 -2
  455. package/package.json +46 -42
@@ -13,7 +13,7 @@ import '@videojs/html/live-audio/skin';
13
13
  The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
14
14
 
15
15
  ```html
16
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/live-audio.js"></script>
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/live-audio.js"></script>
17
17
  ```
18
18
 
19
19
  ## Anatomy
@@ -13,7 +13,7 @@ import '@videojs/html/live-video/neutral-skin';
13
13
  The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
14
14
 
15
15
  ```html
16
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/live-video-neutral.js"></script>
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/live-video-neutral.js"></script>
17
17
  ```
18
18
 
19
19
  ## Anatomy
@@ -0,0 +1,47 @@
1
+ # live-video-scaffold-skin
2
+
3
+ A live video skin with minimal styling for custom skins
4
+
5
+ The Scaffold skin of the live video preset provides functional controls with minimal styling and no transitions. It is a starting point for a custom skin, intended to be restyled before use. It shows a Live button in place of time controls. See [Customize skins](../../guides/customize-skins.md) to install and edit its source.
6
+
7
+ ## Import
8
+
9
+ ```ts
10
+ import '@videojs/html/live-video/scaffold-skin';
11
+ ```
12
+
13
+ The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
14
+
15
+ ```html
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/live-video-scaffold.js"></script>
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ The skin goes between the player and the media element. It renders its controls around the media.
22
+
23
+ ```html
24
+ <live-video-player>
25
+ <live-video-scaffold-skin>
26
+ <hls-video src="live.m3u8"></hls-video>
27
+ </live-video-scaffold-skin>
28
+ </live-video-player>
29
+ ```
30
+
31
+ The examples use the lightweight [HLS video element](./hls-video.md) because most browsers can’t play HLS streams with a plain `<video>`. See [Play live streams](../../guides/live-streams.md).
32
+
33
+ ## Poster
34
+
35
+ The skin renders a poster image before playback starts. An element with `slot="poster"` replaces it.
36
+
37
+ See [Add a poster and loading placeholder](../../guides/poster.md) for complete examples.
38
+
39
+ ## Styling
40
+
41
+ Packaged skins style themselves and expose a small set of public CSS custom properties. Everything else inside the skin is private and may change between releases. [Customize skins](../../guides/customize-skins.md#style-a-packaged-skin) documents the properties. For deeper changes, the Video.js registry provides the skin files.
42
+
43
+ ## Own the UI
44
+
45
+ Packaged skins keep their controls and layout inside Video.js. When you need to add, remove, rearrange, or deeply restyle controls, use Shadcn to add the skin source to your project. Its components, layout, styles, and interactions become local files you can change.
46
+
47
+ - [Install Video.js with Shadcn](../../guides/installation-shadcn.md#choose-how-to-install): Add editable skin source and build a working React or HTML player
@@ -13,7 +13,7 @@ import '@videojs/html/live-video/skin';
13
13
  The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
14
14
 
15
15
  ```html
16
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/live-video.js"></script>
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/live-video.js"></script>
17
17
  ```
18
18
 
19
19
  ## Anatomy
@@ -1,6 +1,6 @@
1
1
  # Video.js v10 — HTML Components
2
2
 
3
- > API reference for skins, media components, extensions, and interface components. Bundled with `@videojs/html` v10.0.1. Links are relative paths to files in this directory.
3
+ > API reference for skins, media components, extensions, and interface components. Bundled with `@videojs/html` v10.2.0. Links are relative paths to files in this directory.
4
4
 
5
5
  ## Layout
6
6
 
@@ -17,15 +17,19 @@ API reference for the packaged skins each preset ships.
17
17
  - [video-skin](./video-skin.md): The video preset's default skin with the modern, frosted look
18
18
  - [video-neutral-skin](./video-neutral-skin.md): The video preset's visually lighter skin, closer to a classic control bar
19
19
  - [video-compat-skin](./video-compat-skin.md): A video skin designed for broader browser compatibility
20
+ - [video-scaffold-skin](./video-scaffold-skin.md): A video skin with minimal styling for custom skins
20
21
  - [audio-skin](./audio-skin.md): The audio preset's default skin with the modern, frosted look
21
22
  - [audio-neutral-skin](./audio-neutral-skin.md): The audio preset's visually lighter skin, closer to a classic control bar
22
23
  - [audio-compat-skin](./audio-compat-skin.md): An audio skin designed for broader browser compatibility
24
+ - [audio-scaffold-skin](./audio-scaffold-skin.md): An audio skin with minimal styling for custom skins
23
25
  - [live-video-skin](./live-video-skin.md): The live video preset's default skin, which swaps time controls for a Live button
24
26
  - [live-video-neutral-skin](./live-video-neutral-skin.md): The live video preset's visually lighter skin, closer to a classic control bar
25
27
  - [live-video-compat-skin](./live-video-compat-skin.md): A live video skin designed for broader browser compatibility
28
+ - [live-video-scaffold-skin](./live-video-scaffold-skin.md): A live video skin with minimal styling for custom skins
26
29
  - [live-audio-skin](./live-audio-skin.md): The live audio preset's default skin, which swaps time controls for a Live button
27
30
  - [live-audio-neutral-skin](./live-audio-neutral-skin.md): The live audio preset's visually lighter skin, closer to a classic control bar
28
31
  - [live-audio-compat-skin](./live-audio-compat-skin.md): A live audio skin designed for broader browser compatibility
32
+ - [live-audio-scaffold-skin](./live-audio-scaffold-skin.md): A live audio skin with minimal styling for custom skins
29
33
  - [background-video-skin](./background-video-skin.md): The background preset's chrome-less skin for ambient video
30
34
 
31
35
  ## Media
@@ -44,6 +48,7 @@ API reference for media components that handle streaming protocols and playback.
44
48
  - [mux-background-video](./mux-background-video.md): Mux-specific name for the HLS background video component
45
49
  - [mux-video](./mux-video.md): Video element for Mux-hosted HLS streams
46
50
  - [native-hls-video](./native-hls-video.md): HLS video element using the browser's built-in HLS support
51
+ - [playerjs-video](./playerjs-video.md): Video component that plays any embed implementing the player.js protocol, such as Mux Player, Gumlet, FrameRate, Livid, Bunny Stream, and Streamable
47
52
  - [shaka-video](./shaka-video.md): Video element powered by Shaka Player for DASH, HLS, and progressive playback with DRM
48
53
  - [spotify-audio](./spotify-audio.md): Audio component that plays Spotify tracks, episodes, playlists, and shows through the Spotify embed
49
54
  - [tiktok-video](./tiktok-video.md): Video component that plays TikTok videos through the TikTok embed player
@@ -17,7 +17,7 @@ import '@videojs/html/media/mux-audio';
17
17
  Or load it from the [CDN](../../guides/cdn.md):
18
18
 
19
19
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/mux-audio.js"></script>
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/mux-audio.js"></script>
21
21
  ```
22
22
 
23
23
  ## Analytics and casting
@@ -15,7 +15,7 @@ import '@videojs/html/media/mux-background-video';
15
15
  Or load it from the [CDN](../../guides/cdn.md):
16
16
 
17
17
  ```html
18
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/mux-background-video.js"></script>
18
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/mux-background-video.js"></script>
19
19
  ```
20
20
 
21
21
  ## Load a Mux source
@@ -17,7 +17,7 @@ import '@videojs/html/extensions/mux-data';
17
17
  Or load it from the [CDN](../../guides/cdn.md):
18
18
 
19
19
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/extensions/mux-data.js"></script>
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/extensions/mux-data.js"></script>
21
21
  ```
22
22
 
23
23
  ## Anatomy
@@ -32,7 +32,7 @@ Or load it from the [CDN](../../guides/cdn.md):
32
32
  | --- | --- | --- |
33
33
  | `env-key` | `envKey` | Mux Data environment key the beacons are sent to. Optional for Mux-hosted playback |
34
34
  | — | `metadata` | Mux Data metadata for the view |
35
- | `player-software-name` | `playerSoftwareName` | Player name reported to Mux Data |
35
+ | `player-software-name` | `playerSoftwareName` | Player name reported to Mux Data. Defaults to `Video.js` |
36
36
  | `player-software-version` | `playerSoftwareVersion` | Player version reported to Mux Data. Defaults to the Video.js version |
37
37
  | `player-init-time` | `playerInitTime` | Epoch milliseconds the player was initialized. Defaults to when the player was created |
38
38
  | `beacon-collection-domain` | `beaconCollectionDomain` | Custom domain the beacons are sent to |
@@ -42,6 +42,8 @@ Or load it from the [CDN](../../guides/cdn.md):
42
42
 
43
43
  `metadata` and `MuxDataSdk` take objects, so they’re properties only, with no matching attribute. Set them on the element, typed as the `MuxDataExtension` class that `@videojs/html/extensions/mux-data` exports.
44
44
 
45
+ Views also report the extension itself as the Mux plugin, so they can be told apart from other Video.js integrations such as `videojs-mux`.
46
+
45
47
  Changing `MuxDataSdk`, `beaconCollectionDomain`, `debug`, or `disableCookies` restarts monitoring, which ends the current view and starts a new one. The rest update the view in place.
46
48
 
47
49
  ## See also
@@ -17,7 +17,7 @@ import '@videojs/html/media/mux-video';
17
17
  Or load it from the [CDN](../../guides/cdn.md):
18
18
 
19
19
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/mux-video.js"></script>
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/mux-video.js"></script>
21
21
  ```
22
22
 
23
23
  ## Load a source
@@ -13,7 +13,7 @@ import '@videojs/html/media/native-hls-video';
13
13
  Or load it from the [CDN](../../guides/cdn.md):
14
14
 
15
15
  ```html
16
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/native-hls-video.js"></script>
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/native-hls-video.js"></script>
17
17
  ```
18
18
 
19
19
  ## Examples
@@ -0,0 +1,197 @@
1
+ # playerjs-video
2
+
3
+ Video component that plays any embed implementing the player.js protocol, such as Mux Player, Gumlet, FrameRate, Livid, Bunny Stream, and Streamable
4
+
5
+ [player.js](https://github.com/embedly/player.js/blob/master/SPEC.rst) is a `postMessage` protocol for controlling embedded players, not a video host. Any embed that implements its receiver side plays through this one component: Mux Player’s iframe embed, Gumlet, FrameRate, Livid, Bunny Stream, Streamable, and others. Commands are posted to the embed directly, so no third-party script loads.
6
+
7
+ ## Import
8
+
9
+ ```bash
10
+ pnpm add @videojs/playerjs-video
11
+ ```
12
+
13
+ ```ts
14
+ import '@videojs/html/media/playerjs-video';
15
+ ```
16
+
17
+ Or load it from the [CDN](../../guides/cdn.md):
18
+
19
+ ```html
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/playerjs-video.js"></script>
21
+ ```
22
+
23
+ ## Load a source
24
+
25
+ `src` takes the embed URL of any player.js receiver: an absolute `http` or `https` URL, with protocol-relative URLs (`//host/…`) read as `https`. Nothing inspects the URL to decide whether it speaks player.js; choosing this component is the opt-in. A `src` that isn’t an `http(s)` URL fails with `MEDIA_ERR_SRC_NOT_SUPPORTED`, and an embed that doesn’t implement the protocol never reports ready, so the element stays at `readyState` 0.
26
+
27
+ ```html
28
+ <playerjs-video src="https://play.gumlet.io/embed/64bfb0913ed6e5096d66dc1e"></playerjs-video>
29
+ ```
30
+
31
+ ## Feature detection
32
+
33
+ Embeds implement the spec to different degrees. Each one lists the methods and events it supports in its `ready` message, and every command is checked against that list:
34
+
35
+ - A missing getter leaves its value at the default, such as a `duration` of `NaN`. Some embeds implement a getter but can’t answer it yet: Streamable reports no duration until playback starts.
36
+ - A missing setter is a no-op; the value stays wherever the embed has it.
37
+
38
+ `supports(type, name)` reports whether the embed advertised a method or event. `type` is `'method'` or `'event'`, and `name` is one player.js name or an array of names that must all be supported. It returns `false` until the embed reports ready.
39
+
40
+ The `loadcomplete` event marks the point where the answer is meaningful:
41
+
42
+ ```ts
43
+ const video = document.querySelector('playerjs-video');
44
+
45
+ video.addEventListener('loadcomplete', () => {
46
+ const canSeek = video.supports('method', 'setCurrentTime');
47
+ });
48
+ ```
49
+
50
+ ## Controls
51
+
52
+ Without `controls`, the element ignores pointer events, so a [player skin](../../guides/skins.md) above it receives every click. With `controls`, the embed’s own chrome takes pointer input.
53
+
54
+ player.js itself can’t hide an embed’s chrome, but for the services it recognizes, the element does it through the embed URL, as far as each service allows:
55
+
56
+ | Service | Without `controls` |
57
+ | --- | --- |
58
+ | [Mux Player](https://www.mux.com/docs/guides/player?utm_source=videojs&utm_campaign=vjs10&utm_content=docs-content) (`player.mux.com`) | Nothing: its controls are hidden with the `--controls` CSS property, which the iframe doesn’t expose. Under a skin its control bar still stays out of sight, since the frame never gets the hover that reveals it, but its center play button shows while paused |
59
+ | [Gumlet](https://docs.gumlet.com/video/embed-stream) | `disable_player_controls=true`: only the large center play button stays |
60
+ | FrameRate | `show_controls=0` and `initial_play_btn=0`: no control bar and no large start button |
61
+ | [Livid](https://support.livid.com/article/46-advanced-embedding-parameters) | `controls=0`: no chrome at all, the play button included. Livid applies it to videos on Pro and Premium accounts only |
62
+ | [Bunny Stream](https://bunny.net/docs/stream/embedding) | No parameter hides the control bar, so it’s shrunk instead: `compactControls=true`, `showSpeed=false`, `showHeatmap=false`, `chromecast=false`, `disableAirPlay=true` |
63
+ | Streamable | `nocontrols=1`: no chrome at all |
64
+
65
+ Other services get their URL untouched; pass whatever they offer under [`source.engine.playerJs`](#sourceengineplayerjs).
66
+
67
+ ## URL parameters
68
+
69
+ For the recognized services, `autoplay`, `muted` (either `muted` or `defaultMuted`), `loop`, and `preload` are written onto the embed URL in the service’s own spelling, and turned off explicitly where the service defaults to on: Gumlet and Streamable loop, and Bunny Stream autoplays. Livid and Mux Player also take `preload` as the element’s own value. The embed reads its URL once, so changing these later reaches the embed over the protocol (`autoplay`, `muted`, `loop`) or not until the next source (`controls`, `preload`); rebuilding the frame for them would restart the video.
70
+
71
+ Every other parameter a service documents works too, in either of two places. Written into `src`, a parameter is kept as written, even over one the element would derive. Under `source.engine.playerJs`, it overrides both. A parameter a service reads from the URL hash, like Livid’s start time `#t=25`, goes in `src`.
72
+
73
+ ```html
74
+ <playerjs-video src="https://player.mediadelivery.net/embed/759/eb1c4f77-0cda-46be-b47d-1118ad7c2ffe?t=30s&captions=en"></playerjs-video>
75
+ ```
76
+
77
+ ## Behavior
78
+
79
+ - `autoplay`, `muted` (seeded by `defaultMuted`), and `loop` are also applied over the protocol once the embed reports ready, which is how they reach services the element doesn’t recognize. An embed without `setLoop` is looped by replaying it on `ended`.
80
+ - `volume` (0 to 1, sent as the spec’s 0 to 100), `muted`, and seeking through `currentTime` use the spec’s methods.
81
+ - `playbackRate` reaches only embeds that advertise `setPlaybackRate`, an extension to the spec that Gumlet implements.
82
+ - player.js reports no buffering, so a started embed counts as playing.
83
+ - No text tracks: `textTracks` stays empty.
84
+ - The protocol has no fullscreen command, so the element’s own `requestFullscreen()` fullscreens the iframe.
85
+ - `poster` and `playsInline` are stored but have no effect on the embed. `preload` reaches Livid and Mux Player as is and Bunny Stream as `preload=false` when it’s `"none"`, and no other service.
86
+ - An embed `error` with code 1 surfaces as `MEDIA_ERR_SRC_NOT_SUPPORTED`. Codes 2 and 3 mean a command wasn’t supported; they’re ignored, with a warning in development. Any other code is a fatal error carrying the embed’s message.
87
+
88
+ ## Examples
89
+
90
+ ### Basic Usage
91
+
92
+ **index.html**
93
+
94
+ ```html
95
+ <playerjs-video class="playerjs-video" src="https://play.gumlet.io/embed/64bfb0913ed6e5096d66dc1e" controls></playerjs-video>
96
+ ```
97
+
98
+ **index.css**
99
+
100
+ ```css
101
+ .playerjs-video {
102
+ width: 100%;
103
+ aspect-ratio: 16 / 9;
104
+ }
105
+ ```
106
+
107
+ **index.ts**
108
+
109
+ ```ts
110
+ import '@videojs/html/media/playerjs-video';
111
+ ```
112
+
113
+ ## API Reference
114
+
115
+ ### Attributes
116
+
117
+ These attributes configure the embedded media adapter:
118
+
119
+ | Attribute | Type | Default |
120
+ | --- | --- | --- |
121
+ | `autoplay` | `boolean` | `false` |
122
+ | `controls` | `boolean` | `false` |
123
+ | `loop` | `boolean` | `false` |
124
+ | `muted` | `boolean` | `false` |
125
+ | `playsinline` | `boolean` | `true` |
126
+ | `poster` | `string` | `''` |
127
+ | `preload` | `MediaPreloadType` | `'metadata'` |
128
+ | `src` | `string` | `''` |
129
+
130
+ ### Properties
131
+
132
+ | Property | Type | Default | Description |
133
+ | --- | --- | --- | --- |
134
+ | `autoplay` | `boolean` | `false` | |
135
+ | `buffered` | `TimeRangeLike` | — | Read-only. |
136
+ | `controls` | `boolean` | `false` | |
137
+ | `currentSrc` | `string` | — | Read-only. |
138
+ | `currentTime` | `number` | — | |
139
+ | `defaultMuted` | `boolean` | `false` | |
140
+ | `duration` | `number` | — | Read-only. |
141
+ | `ended` | `boolean` | — | Read-only. |
142
+ | `engine` | `Window \| null` | — | Read-only. The embed's window. player.js publishes no player object; commands are posted to the frame. Null until rendered. |
143
+ | `error` | `MediaError \| null` | — | Read-only. |
144
+ | `isFullscreen` | `boolean` | — | Read-only. |
145
+ | `loop` | `boolean` | `false` | |
146
+ | `muted` | `boolean` | `false` | |
147
+ | `paused` | `boolean` | — | Read-only. |
148
+ | `playbackRate` | `number` | — | Reaches the embed only where it advertises `setPlaybackRate`, an extension to the spec. |
149
+ | `played` | `{ length: number; start(index: number): number; end(index: number): number }` | — | Read-only. |
150
+ | `playsInline` | `boolean` | `true` | |
151
+ | `poster` | `string` | `''` | |
152
+ | `preload` | `MediaPreloadType` | `'metadata'` | |
153
+ | `readyState` | `number` | — | Read-only. |
154
+ | `seekable` | `TimeRangeLike` | — | Read-only. |
155
+ | `seeking` | `boolean` | — | Read-only. |
156
+ | `source` | `{ src?: string; engine?: PlayerJsSourceEngineConfig } \| null` | `null` | Embed URL in `src`, extra URL parameters under `engine.playerJs`. Re-derives `src`; equal sources skip reload. |
157
+ | `src` | `string` | `''` | |
158
+ | `textTracks` | `TextTrackListLike` | — | Read-only. Always empty: player.js has no text track surface. |
159
+ | `volume` | `number` | — | |
160
+
161
+ ### Engine options
162
+
163
+ #### `source.engine.playerJs`
164
+
165
+ player.js standardizes the messages an embed answers, not its URL, so there are no shared parameters. Every key under `source.engine.playerJs` is written onto the embed URL’s query as given, for whichever service serves it — anything in [Gumlet’s](https://docs.gumlet.com/video/embed-stream), [Bunny Stream’s](https://bunny.net/docs/stream/embedding), or [Livid’s](https://support.livid.com/article/46-advanced-embedding-parameters) parameter lists, for example. Values are stringified (`true` becomes `'true'`), an array repeats the parameter once per value, and `null` removes a parameter the URL would otherwise carry. These override both `src` and the parameters the element derives from its props. Changing them reloads the embed. [Media Sources](../../guides/media-sources.md) covers how engine options fit into a structured source.
166
+
167
+ `referrerPolicy` never reaches the URL, and `<playerjs-video>` doesn’t apply it to its iframe either; it takes effect only in the React component.
168
+
169
+ Prefer the `autoplay`, `loop`, `muted`, `controls`, and `preload` props over their URL spellings: the props also reach the embed over the protocol and keep the element’s state in step with it.
170
+
171
+ ```ts
172
+ const video = document.querySelector('playerjs-video');
173
+ video.controls = true;
174
+ video.source = {
175
+ src: 'https://play.gumlet.io/embed/64bfb0913ed6e5096d66dc1e',
176
+ engine: { playerJs: { player_color: '#ff0000', disabled_player_control: ['cast', 'pip'] } },
177
+ };
178
+ ```
179
+
180
+ | Option | Type | Description |
181
+ | --- | --- | --- |
182
+ | `referrerPolicy` | `ReferrerPolicy \| undefined` | `referrerpolicy` for the embed iframe. Not written to the URL. |
183
+
184
+ ### Methods
185
+
186
+ Supports these media methods: `exitFullscreen`, `load`, `pause`, `play`, `requestFullscreen`, `supports`.
187
+
188
+ ### Events
189
+
190
+ Implements these standard media events through the embedded player: `durationchange`, `emptied`, `ended`, `error`, `loadedmetadata`, `loadstart`, `pause`, `play`, `playing`, `progress`, `ratechange`, `seeked`, `seeking`, `timeupdate`, `volumechange`.
191
+
192
+ Also emits these Video.js-specific events:
193
+
194
+ | Event | Description |
195
+ | --- | --- |
196
+ | `loadcomplete` | |
197
+ | `sourcechange` | Fired when `source` changes, either directly or by resolving a new `src`. Read `source` for the new value. |
@@ -21,7 +21,7 @@ import '@videojs/html/media/shaka-video';
21
21
  Or load it from the [CDN](../../guides/cdn.md):
22
22
 
23
23
  ```html
24
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/shaka-video.js"></script>
24
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/shaka-video.js"></script>
25
25
  ```
26
26
 
27
27
  ## Load a source
@@ -73,6 +73,8 @@ Renders with `role="slider"` and automatic ARIA attributes (`aria-valuemin`, `ar
73
73
  - Home: jump to minimum
74
74
  - End: jump to maximum
75
75
 
76
+ Before each keyboard step, the value snaps to the nearest multiple of `step`.
77
+
76
78
  ## Examples
77
79
 
78
80
  ### Basic
@@ -17,7 +17,7 @@ import '@videojs/html/media/spotify-audio';
17
17
  Or load it from the [CDN](../../guides/cdn.md):
18
18
 
19
19
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/spotify-audio.js"></script>
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/spotify-audio.js"></script>
21
21
  ```
22
22
 
23
23
  ## Load a source
@@ -17,7 +17,7 @@ import '@videojs/html/media/tiktok-video';
17
17
  Or load it from the [CDN](../../guides/cdn.md):
18
18
 
19
19
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/tiktok-video.js"></script>
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/tiktok-video.js"></script>
21
21
  ```
22
22
 
23
23
  ## Load a source
@@ -95,6 +95,8 @@ Renders with `role="slider"` and an automatic `aria-label` that resolves to “S
95
95
  - Home: seek to start
96
96
  - End: seek to end
97
97
 
98
+ Before each keyboard seek, the current time snaps to the nearest multiple of `step`. With the default `step` of `1`, pressing Arrow Right at 12.4 seconds seeks to 13 seconds.
99
+
98
100
  `<media-time-slider-chapter-title>` follows the pointer during pointer interaction. While the slider has keyboard focus, it follows the current playback position and announces chapter changes.
99
101
 
100
102
  ## Examples
@@ -422,13 +424,13 @@ import '@videojs/html/ui/slider-value';
422
424
  | Prop | Type | Default | Description |
423
425
  | --- | --- | --- | --- |
424
426
  | `changeThrottle` (attribute `change-throttle`) | `number` | `100` | Leading+trailing throttle (ms) for `onValueChange` during drag. |
425
- | `disabled` | `boolean` | — | Whether the slider is non-interactive. |
427
+ | `disabled` | `boolean` | `false` | Whether the slider is non-interactive. |
426
428
  | `label` | `{ key: string; text: string } \| string \| ((state: SliderState) => Text \| string)` | `''` | Custom label for the slider. |
427
- | `largeStep` (attribute `large-step`) | `number` | — | Large step increment (Page Up/Down keys). |
428
- | `orientation` | `'horizontal' \| 'vertical'` | — | Axis of slider movement. |
429
+ | `largeStep` (attribute `large-step`) | `number` | `10` | Large step increment in seconds (Page Up/Down keys). |
430
+ | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Axis of slider movement. |
429
431
  | `pauseOnDrag` (attribute `pause-on-drag`) | `boolean` | `false` | When true, pause playback while the user is dragging the thumb, resuming on release if it was playing before. |
430
- | `step` | `number` | — | Step increment for value changes (arrow keys). |
431
- | `thumbAlignment` (attribute `thumb-alignment`) | `'center' \| 'edge'` | — | How the thumb aligns at the track edges. `edge` constrains the thumb within track bounds. |
432
+ | `step` | `number` | `1` | Step increment in seconds for value changes (arrow keys). |
433
+ | `thumbAlignment` (attribute `thumb-alignment`) | `'center' \| 'edge'` | `'center'` | How the thumb aligns at the track edges. `edge` constrains the thumb within track bounds. |
432
434
 
433
435
  #### State
434
436
 
@@ -17,7 +17,7 @@ import '@videojs/html/media/twitch-video';
17
17
  Or load it from the [CDN](../../guides/cdn.md):
18
18
 
19
19
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/twitch-video.js"></script>
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/twitch-video.js"></script>
21
21
  ```
22
22
 
23
23
  ## Load a source
@@ -13,7 +13,7 @@ import '@videojs/html/video/neutral-skin';
13
13
  The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
14
14
 
15
15
  ```html
16
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/video-neutral.js"></script>
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/video-neutral.js"></script>
17
17
  ```
18
18
 
19
19
  ## Anatomy
@@ -0,0 +1,51 @@
1
+ # video-scaffold-skin
2
+
3
+ A video skin with minimal styling for custom skins
4
+
5
+ The Scaffold skin of the video preset provides functional controls with minimal styling and no transitions. It is a starting point for a custom skin, intended to be restyled before use. Its time slider supports chapter segments and thumbnail previews. See [Customize skins](../../guides/customize-skins.md) to install and edit its source.
6
+
7
+ ## Import
8
+
9
+ ```ts
10
+ import '@videojs/html/video/scaffold-skin';
11
+ ```
12
+
13
+ The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
14
+
15
+ ```html
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/video-scaffold.js"></script>
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ The skin goes between the player and the media element. It renders its controls around the media.
22
+
23
+ ```html
24
+ <video-player>
25
+ <video-scaffold-skin>
26
+ <video src="video.mp4"></video>
27
+ </video-scaffold-skin>
28
+ </video-player>
29
+ ```
30
+
31
+ ## Poster
32
+
33
+ The skin renders a poster image before playback starts. An element with `slot="poster"` replaces it.
34
+
35
+ See [Add a poster and loading placeholder](../../guides/poster.md) for complete examples.
36
+
37
+ ## Thumbnail
38
+
39
+ The skin renders a storyboard preview image while scrubbing the time slider. An `<img slot="thumbnail">` replaces it, so image attributes such as `crossorigin`, `loading`, and `fetchpriority` go on it.
40
+
41
+ See [Show timeline thumbnail previews](../../guides/thumbnails.md) for complete examples.
42
+
43
+ ## Styling
44
+
45
+ Packaged skins style themselves and expose a small set of public CSS custom properties. Everything else inside the skin is private and may change between releases. [Customize skins](../../guides/customize-skins.md#style-a-packaged-skin) documents the properties. For deeper changes, the Video.js registry provides the skin files.
46
+
47
+ ## Own the UI
48
+
49
+ Packaged skins keep their controls and layout inside Video.js. When you need to add, remove, rearrange, or deeply restyle controls, use Shadcn to add the skin source to your project. Its components, layout, styles, and interactions become local files you can change.
50
+
51
+ - [Install Video.js with Shadcn](../../guides/installation-shadcn.md#choose-how-to-install): Add editable skin source and build a working React or HTML player
@@ -13,7 +13,7 @@ import '@videojs/html/video/skin';
13
13
  The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
14
14
 
15
15
  ```html
16
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/video.js"></script>
16
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/video.js"></script>
17
17
  ```
18
18
 
19
19
  ## Anatomy
@@ -17,7 +17,7 @@ import '@videojs/html/media/vimeo-video';
17
17
  Or load it from the [CDN](../../guides/cdn.md):
18
18
 
19
19
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/vimeo-video.js"></script>
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/vimeo-video.js"></script>
21
21
  ```
22
22
 
23
23
  ## Load a source
@@ -52,6 +52,8 @@ Renders with `role="slider"` and an automatic `aria-label` that resolves to “V
52
52
  - Home: set volume to 0
53
53
  - End: set volume to max
54
54
 
55
+ Before each keyboard step, the volume snaps to the nearest multiple of `step`.
56
+
55
57
  Scroll wheel support:
56
58
 
57
59
  - **Mouse wheel / trackpad scroll**: adjusts volume by `wheelStep` increment (default `5`)
@@ -219,13 +221,13 @@ import '@videojs/html/ui/slider-value';
219
221
 
220
222
  | Prop | Type | Default | Description |
221
223
  | --- | --- | --- | --- |
222
- | `disabled` | `boolean` | — | Whether the slider is non-interactive. |
224
+ | `disabled` | `boolean` | `false` | Whether the slider is non-interactive. |
223
225
  | `label` | `{ key: string; text: string } \| string \| ((state: SliderState) => Text \| string)` | `''` | Custom label for the slider. |
224
- | `largeStep` (attribute `large-step`) | `number` | — | Large step increment (Page Up/Down keys). |
225
- | `orientation` | `'horizontal' \| 'vertical'` | — | Axis of slider movement. |
226
- | `step` | `number` | `DEFAULT_VOLUME_STEP` | Step increment for value changes (arrow keys). |
227
- | `thumbAlignment` (attribute `thumb-alignment`) | `'center' \| 'edge'` | — | How the thumb aligns at the track edges. `edge` constrains the thumb within track bounds. |
228
- | `wheelStep` (attribute `wheel-step`) | `number` | `DEFAULT_VOLUME_STEP` | Step increment for wheel scrolling. |
226
+ | `largeStep` (attribute `large-step`) | `number` | `10` | Large step increment (Page Up/Down keys). |
227
+ | `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Axis of slider movement. |
228
+ | `step` | `number` | `5` | Step increment for value changes (arrow keys). |
229
+ | `thumbAlignment` (attribute `thumb-alignment`) | `'center' \| 'edge'` | `'center'` | How the thumb aligns at the track edges. `edge` constrains the thumb within track bounds. |
230
+ | `wheelStep` (attribute `wheel-step`) | `number` | `5` | Step increment for wheel scrolling. |
229
231
 
230
232
  #### State
231
233
 
@@ -4,6 +4,10 @@ Video component that plays Wistia-hosted videos through Wistia's web component
4
4
 
5
5
  `<wistia-video>` adapts Wistia’s own `<wistia-player>` web component to the Video.js media contract. Wistia’s chrome stays hidden by default so a Video.js player skin can control playback; set `controls` to use Wistia’s UI.
6
6
 
7
+ > **Caution: Wistia loads Sentry when playback fails**
8
+ >
9
+ > Wistia’s player loads the Sentry error-reporting SDK from `browser.sentry-cdn.com` the first time playback errors, then sends the error to a Wistia-owned Sentry project. Video.js has no setting that changes this. Wistia’s [consent API](https://docs.wistia.com/docs/player-privacy-mode) turns it off.
10
+
7
11
  ## Import
8
12
 
9
13
  ```bash
@@ -17,7 +21,7 @@ import '@videojs/html/media/wistia-video';
17
21
  Or load it from the [CDN](../../guides/cdn.md):
18
22
 
19
23
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/wistia-video.js"></script>
24
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/wistia-video.js"></script>
21
25
  ```
22
26
 
23
27
  ## Load a source
@@ -17,7 +17,7 @@ import '@videojs/html/media/youtube-video';
17
17
  Or load it from the [CDN](../../guides/cdn.md):
18
18
 
19
19
  ```html
20
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/youtube-video.js"></script>
20
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.2.0/media/youtube-video.js"></script>
21
21
  ```
22
22
 
23
23
  ## Load a source
@@ -107,7 +107,7 @@ These attributes configure the embedded media adapter:
107
107
  | `seeking` | `boolean` | — | Read-only. |
108
108
  | `source` | `{ src?: string; engine?: YouTubeSourceEngineConfig } \| null` | `null` | YouTube URL or id in `src`, plus player parameters under `engine.youtube`. Replacing it re-derives `src`. |
109
109
  | `src` | `string` | `''` | |
110
- | `textTracks` | `TextTrackListLike` | — | Read-only. |
110
+ | `textTracks` | `{ addEventListener(type: K, listener: ((event: Events[K]) => void), options?: { signal?: AbortSignal }): void; removeEventListener(type: K, listener: ((event: Events[K]) => void)): void; dispatchEvent(event: EventLike): boolean; length: number; readonly [index: number]: TextTrackLike; getTrackById?(id: string): TextTrackLike \| null }` | — | Read-only. |
111
111
  | `volume` | `number` | — | |
112
112
 
113
113
  ### Engine options