@videojs/html 10.0.1 → 10.1.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 (403) hide show
  1. package/README.md +2 -2
  2. package/dist/default/define/audio/compat-skin.css +42 -0
  3. package/dist/default/define/audio/compat-skin2.js +1 -1
  4. package/dist/default/define/audio/scaffold-skin.css +1771 -0
  5. package/dist/default/define/audio/scaffold-skin.js +6 -0
  6. package/dist/default/define/audio/scaffold-skin2.js +4 -0
  7. package/dist/default/define/live-audio/compat-skin.css +42 -0
  8. package/dist/default/define/live-audio/compat-skin2.js +1 -1
  9. package/dist/default/define/live-audio/scaffold-skin.css +1591 -0
  10. package/dist/default/define/live-audio/scaffold-skin.js +6 -0
  11. package/dist/default/define/live-audio/scaffold-skin2.js +4 -0
  12. package/dist/default/define/live-video/compat-skin.css +67 -23
  13. package/dist/default/define/live-video/compat-skin2.js +1 -1
  14. package/dist/default/define/live-video/neutral-skin.css +20 -9
  15. package/dist/default/define/live-video/neutral-skin2.js +1 -1
  16. package/dist/default/define/live-video/scaffold-skin.css +1976 -0
  17. package/dist/default/define/live-video/scaffold-skin.js +6 -0
  18. package/dist/default/define/live-video/scaffold-skin2.js +4 -0
  19. package/dist/default/define/live-video/skin.css +18 -7
  20. package/dist/default/define/live-video/skin2.js +1 -1
  21. package/dist/default/define/media/playerjs-video.js +11 -0
  22. package/dist/default/define/video/compat-skin.css +67 -23
  23. package/dist/default/define/video/compat-skin2.js +1 -1
  24. package/dist/default/define/video/neutral-skin.css +26 -9
  25. package/dist/default/define/video/neutral-skin2.js +1 -1
  26. package/dist/default/define/video/scaffold-skin.css +2216 -0
  27. package/dist/default/define/video/scaffold-skin.js +6 -0
  28. package/dist/default/define/video/scaffold-skin2.js +4 -0
  29. package/dist/default/define/video/skin.css +24 -7
  30. package/dist/default/define/video/skin2.js +1 -1
  31. package/dist/default/icons/dist/element/compat/icons.js +1 -1
  32. package/dist/default/icons/dist/element/index.js +1 -0
  33. package/dist/default/icons/dist/element/scaffold/icons.js +30 -0
  34. package/dist/default/icons/dist/element/scaffold/index.js +8 -0
  35. package/dist/default/icons/dist/html/compat/play.js +1 -1
  36. package/dist/default/icons/dist/html/scaffold/airplay-enter.js +4 -0
  37. package/dist/default/icons/dist/html/scaffold/airplay-exit.js +4 -0
  38. package/dist/default/icons/dist/html/scaffold/captions-off.js +4 -0
  39. package/dist/default/icons/dist/html/scaffold/captions-on.js +4 -0
  40. package/dist/default/icons/dist/html/scaffold/cast-enter.js +4 -0
  41. package/dist/default/icons/dist/html/scaffold/cast-exit.js +4 -0
  42. package/dist/default/icons/dist/html/scaffold/check.js +4 -0
  43. package/dist/default/icons/dist/html/scaffold/chevron.js +4 -0
  44. package/dist/default/icons/dist/html/scaffold/fullscreen-enter.js +4 -0
  45. package/dist/default/icons/dist/html/scaffold/fullscreen-exit.js +4 -0
  46. package/dist/default/icons/dist/html/scaffold/gear.js +4 -0
  47. package/dist/default/icons/dist/html/scaffold/pause.js +4 -0
  48. package/dist/default/icons/dist/html/scaffold/pip-enter.js +4 -0
  49. package/dist/default/icons/dist/html/scaffold/pip-exit.js +4 -0
  50. package/dist/default/icons/dist/html/scaffold/play.js +4 -0
  51. package/dist/default/icons/dist/html/scaffold/quality.js +4 -0
  52. package/dist/default/icons/dist/html/scaffold/restart.js +4 -0
  53. package/dist/default/icons/dist/html/scaffold/seek.js +4 -0
  54. package/dist/default/icons/dist/html/scaffold/speech.js +4 -0
  55. package/dist/default/icons/dist/html/scaffold/speed.js +4 -0
  56. package/dist/default/icons/dist/html/scaffold/spinner.js +4 -0
  57. package/dist/default/icons/dist/html/scaffold/switches.js +4 -0
  58. package/dist/default/icons/dist/html/scaffold/volume-high.js +4 -0
  59. package/dist/default/icons/dist/html/scaffold/volume-low.js +4 -0
  60. package/dist/default/icons/dist/html/scaffold/volume-off.js +4 -0
  61. package/dist/default/icons/element/scaffold/index.js +1 -0
  62. package/dist/default/icons/scaffold/index.js +26 -0
  63. package/dist/default/internal/skins/compat-audio/register.js +1 -0
  64. package/dist/default/internal/skins/compat-audio/skin.css +42 -0
  65. package/dist/default/internal/skins/compat-audio/template.js +18 -16
  66. package/dist/default/internal/skins/compat-live-audio/register.js +1 -0
  67. package/dist/default/internal/skins/compat-live-audio/skin.css +42 -0
  68. package/dist/default/internal/skins/compat-live-audio/template.js +11 -9
  69. package/dist/default/internal/skins/compat-live-video/skin.css +67 -23
  70. package/dist/default/internal/skins/compat-live-video/template.js +20 -18
  71. package/dist/default/internal/skins/compat-video/skin.css +67 -23
  72. package/dist/default/internal/skins/compat-video/template.js +34 -32
  73. package/dist/default/internal/skins/default-audio/template.js +12 -12
  74. package/dist/default/internal/skins/default-live-audio/template.js +5 -5
  75. package/dist/default/internal/skins/default-live-video/skin.css +18 -7
  76. package/dist/default/internal/skins/default-live-video/template.js +16 -16
  77. package/dist/default/internal/skins/default-video/skin.css +24 -7
  78. package/dist/default/internal/skins/default-video/template.js +26 -26
  79. package/dist/default/internal/skins/neutral-audio/template.js +12 -12
  80. package/dist/default/internal/skins/neutral-live-audio/template.js +5 -5
  81. package/dist/default/internal/skins/neutral-live-video/skin.css +20 -9
  82. package/dist/default/internal/skins/neutral-live-video/template.js +16 -16
  83. package/dist/default/internal/skins/neutral-video/skin.css +26 -9
  84. package/dist/default/internal/skins/neutral-video/template.js +26 -26
  85. package/dist/default/internal/skins/scaffold-audio/register.js +73 -0
  86. package/dist/default/internal/skins/scaffold-audio/skin.css +1739 -0
  87. package/dist/default/internal/skins/scaffold-audio/template.js +221 -0
  88. package/dist/default/internal/skins/scaffold-live-audio/register.js +53 -0
  89. package/dist/default/internal/skins/scaffold-live-audio/skin.css +1559 -0
  90. package/dist/default/internal/skins/scaffold-live-audio/template.js +118 -0
  91. package/dist/default/internal/skins/scaffold-live-video/register.js +86 -0
  92. package/dist/default/internal/skins/scaffold-live-video/skin.css +1944 -0
  93. package/dist/default/internal/skins/scaffold-live-video/template.js +241 -0
  94. package/dist/default/internal/skins/scaffold-video/register.js +115 -0
  95. package/dist/default/internal/skins/scaffold-video/skin.css +2184 -0
  96. package/dist/default/internal/skins/scaffold-video/template.js +461 -0
  97. package/dist/default/media/playerjs-video/adapter.js +25 -0
  98. package/dist/default/presets/audio/index.js +2 -1
  99. package/dist/default/presets/audio/scaffold-skin.js +19 -0
  100. package/dist/default/presets/background/skin.js +0 -2
  101. package/dist/default/presets/live-audio/index.js +2 -1
  102. package/dist/default/presets/live-audio/scaffold-skin.js +19 -0
  103. package/dist/default/presets/live-video/index.js +2 -1
  104. package/dist/default/presets/live-video/scaffold-skin.js +19 -0
  105. package/dist/default/presets/skin.js +0 -11
  106. package/dist/default/presets/video/index.js +2 -1
  107. package/dist/default/presets/video/scaffold-skin.js +19 -0
  108. package/dist/default/ui/time-slider/element.js +31 -7
  109. package/dist/default/version.js +1 -1
  110. package/dist/dev/define/audio/compat-skin.css +42 -0
  111. package/dist/dev/define/audio/compat-skin2.js +1 -1
  112. package/dist/dev/define/audio/compat-skin2.js.map +1 -1
  113. package/dist/dev/define/audio/neutral-skin2.js.map +1 -1
  114. package/dist/dev/define/audio/scaffold-skin.css +1771 -0
  115. package/dist/dev/define/audio/scaffold-skin.d.ts +1 -0
  116. package/dist/dev/define/audio/scaffold-skin.js +8 -0
  117. package/dist/dev/define/audio/scaffold-skin.js.map +1 -0
  118. package/dist/dev/define/audio/scaffold-skin2.js +6 -0
  119. package/dist/dev/define/audio/scaffold-skin2.js.map +1 -0
  120. package/dist/dev/define/audio/skin2.js.map +1 -1
  121. package/dist/dev/define/global.js.map +1 -1
  122. package/dist/dev/define/live-audio/compat-skin.css +42 -0
  123. package/dist/dev/define/live-audio/compat-skin2.js +1 -1
  124. package/dist/dev/define/live-audio/compat-skin2.js.map +1 -1
  125. package/dist/dev/define/live-audio/neutral-skin2.js.map +1 -1
  126. package/dist/dev/define/live-audio/scaffold-skin.css +1591 -0
  127. package/dist/dev/define/live-audio/scaffold-skin.d.ts +1 -0
  128. package/dist/dev/define/live-audio/scaffold-skin.js +8 -0
  129. package/dist/dev/define/live-audio/scaffold-skin.js.map +1 -0
  130. package/dist/dev/define/live-audio/scaffold-skin2.js +6 -0
  131. package/dist/dev/define/live-audio/scaffold-skin2.js.map +1 -0
  132. package/dist/dev/define/live-audio/skin2.js.map +1 -1
  133. package/dist/dev/define/live-video/compat-skin.css +67 -23
  134. package/dist/dev/define/live-video/compat-skin2.js +1 -1
  135. package/dist/dev/define/live-video/compat-skin2.js.map +1 -1
  136. package/dist/dev/define/live-video/neutral-skin.css +20 -9
  137. package/dist/dev/define/live-video/neutral-skin2.js +1 -1
  138. package/dist/dev/define/live-video/neutral-skin2.js.map +1 -1
  139. package/dist/dev/define/live-video/scaffold-skin.css +1976 -0
  140. package/dist/dev/define/live-video/scaffold-skin.d.ts +1 -0
  141. package/dist/dev/define/live-video/scaffold-skin.js +8 -0
  142. package/dist/dev/define/live-video/scaffold-skin.js.map +1 -0
  143. package/dist/dev/define/live-video/scaffold-skin2.js +6 -0
  144. package/dist/dev/define/live-video/scaffold-skin2.js.map +1 -0
  145. package/dist/dev/define/live-video/skin.css +18 -7
  146. package/dist/dev/define/live-video/skin2.js +1 -1
  147. package/dist/dev/define/live-video/skin2.js.map +1 -1
  148. package/dist/dev/define/media/playerjs-video.d.ts +15 -0
  149. package/dist/dev/define/media/playerjs-video.js +13 -0
  150. package/dist/dev/define/media/playerjs-video.js.map +1 -0
  151. package/dist/dev/define/video/compat-skin.css +67 -23
  152. package/dist/dev/define/video/compat-skin2.js +1 -1
  153. package/dist/dev/define/video/compat-skin2.js.map +1 -1
  154. package/dist/dev/define/video/neutral-skin.css +26 -9
  155. package/dist/dev/define/video/neutral-skin2.js +1 -1
  156. package/dist/dev/define/video/neutral-skin2.js.map +1 -1
  157. package/dist/dev/define/video/scaffold-skin.css +2216 -0
  158. package/dist/dev/define/video/scaffold-skin.d.ts +1 -0
  159. package/dist/dev/define/video/scaffold-skin.js +8 -0
  160. package/dist/dev/define/video/scaffold-skin.js.map +1 -0
  161. package/dist/dev/define/video/scaffold-skin2.js +6 -0
  162. package/dist/dev/define/video/scaffold-skin2.js.map +1 -0
  163. package/dist/dev/define/video/skin.css +24 -7
  164. package/dist/dev/define/video/skin2.js +1 -1
  165. package/dist/dev/define/video/skin2.js.map +1 -1
  166. package/dist/dev/icons/dist/element/compat/icons.js +1 -1
  167. package/dist/dev/icons/dist/element/compat/icons.js.map +1 -1
  168. package/dist/dev/icons/dist/element/index.js +1 -0
  169. package/dist/dev/icons/dist/element/index.js.map +1 -1
  170. package/dist/dev/icons/dist/element/scaffold/icons.js +32 -0
  171. package/dist/dev/icons/dist/element/scaffold/icons.js.map +1 -0
  172. package/dist/dev/icons/dist/element/scaffold/index.d.ts +1 -0
  173. package/dist/dev/icons/dist/element/scaffold/index.js +10 -0
  174. package/dist/dev/icons/dist/element/scaffold/index.js.map +1 -0
  175. package/dist/dev/icons/dist/html/compat/play.js +1 -1
  176. package/dist/dev/icons/dist/html/compat/play.js.map +1 -1
  177. package/dist/dev/icons/dist/html/scaffold/airplay-enter.js +6 -0
  178. package/dist/dev/icons/dist/html/scaffold/airplay-enter.js.map +1 -0
  179. package/dist/dev/icons/dist/html/scaffold/airplay-exit.js +6 -0
  180. package/dist/dev/icons/dist/html/scaffold/airplay-exit.js.map +1 -0
  181. package/dist/dev/icons/dist/html/scaffold/captions-off.js +6 -0
  182. package/dist/dev/icons/dist/html/scaffold/captions-off.js.map +1 -0
  183. package/dist/dev/icons/dist/html/scaffold/captions-on.js +6 -0
  184. package/dist/dev/icons/dist/html/scaffold/captions-on.js.map +1 -0
  185. package/dist/dev/icons/dist/html/scaffold/cast-enter.js +6 -0
  186. package/dist/dev/icons/dist/html/scaffold/cast-enter.js.map +1 -0
  187. package/dist/dev/icons/dist/html/scaffold/cast-exit.js +6 -0
  188. package/dist/dev/icons/dist/html/scaffold/cast-exit.js.map +1 -0
  189. package/dist/dev/icons/dist/html/scaffold/check.js +6 -0
  190. package/dist/dev/icons/dist/html/scaffold/check.js.map +1 -0
  191. package/dist/dev/icons/dist/html/scaffold/chevron.js +6 -0
  192. package/dist/dev/icons/dist/html/scaffold/chevron.js.map +1 -0
  193. package/dist/dev/icons/dist/html/scaffold/fullscreen-enter.js +6 -0
  194. package/dist/dev/icons/dist/html/scaffold/fullscreen-enter.js.map +1 -0
  195. package/dist/dev/icons/dist/html/scaffold/fullscreen-exit.js +6 -0
  196. package/dist/dev/icons/dist/html/scaffold/fullscreen-exit.js.map +1 -0
  197. package/dist/dev/icons/dist/html/scaffold/gear.js +6 -0
  198. package/dist/dev/icons/dist/html/scaffold/gear.js.map +1 -0
  199. package/dist/dev/icons/dist/html/scaffold/index.d.ts +28 -0
  200. package/dist/dev/icons/dist/html/scaffold/pause.js +6 -0
  201. package/dist/dev/icons/dist/html/scaffold/pause.js.map +1 -0
  202. package/dist/dev/icons/dist/html/scaffold/pip-enter.js +6 -0
  203. package/dist/dev/icons/dist/html/scaffold/pip-enter.js.map +1 -0
  204. package/dist/dev/icons/dist/html/scaffold/pip-exit.js +6 -0
  205. package/dist/dev/icons/dist/html/scaffold/pip-exit.js.map +1 -0
  206. package/dist/dev/icons/dist/html/scaffold/play.js +6 -0
  207. package/dist/dev/icons/dist/html/scaffold/play.js.map +1 -0
  208. package/dist/dev/icons/dist/html/scaffold/quality.js +6 -0
  209. package/dist/dev/icons/dist/html/scaffold/quality.js.map +1 -0
  210. package/dist/dev/icons/dist/html/scaffold/restart.js +6 -0
  211. package/dist/dev/icons/dist/html/scaffold/restart.js.map +1 -0
  212. package/dist/dev/icons/dist/html/scaffold/seek.js +6 -0
  213. package/dist/dev/icons/dist/html/scaffold/seek.js.map +1 -0
  214. package/dist/dev/icons/dist/html/scaffold/speech.js +6 -0
  215. package/dist/dev/icons/dist/html/scaffold/speech.js.map +1 -0
  216. package/dist/dev/icons/dist/html/scaffold/speed.js +6 -0
  217. package/dist/dev/icons/dist/html/scaffold/speed.js.map +1 -0
  218. package/dist/dev/icons/dist/html/scaffold/spinner.js +6 -0
  219. package/dist/dev/icons/dist/html/scaffold/spinner.js.map +1 -0
  220. package/dist/dev/icons/dist/html/scaffold/switches.js +6 -0
  221. package/dist/dev/icons/dist/html/scaffold/switches.js.map +1 -0
  222. package/dist/dev/icons/dist/html/scaffold/volume-high.js +6 -0
  223. package/dist/dev/icons/dist/html/scaffold/volume-high.js.map +1 -0
  224. package/dist/dev/icons/dist/html/scaffold/volume-low.js +6 -0
  225. package/dist/dev/icons/dist/html/scaffold/volume-low.js.map +1 -0
  226. package/dist/dev/icons/dist/html/scaffold/volume-off.js +6 -0
  227. package/dist/dev/icons/dist/html/scaffold/volume-off.js.map +1 -0
  228. package/dist/dev/icons/element/scaffold/index.d.ts +1 -0
  229. package/dist/dev/icons/element/scaffold/index.js +1 -0
  230. package/dist/dev/icons/scaffold/index.d.ts +2 -0
  231. package/dist/dev/icons/scaffold/index.js +26 -0
  232. package/dist/dev/index.d.ts +3 -3
  233. package/dist/dev/internal/skins/compat-audio/register.d.ts +1 -0
  234. package/dist/dev/internal/skins/compat-audio/register.js +1 -0
  235. package/dist/dev/internal/skins/compat-audio/register.js.map +1 -1
  236. package/dist/dev/internal/skins/compat-audio/skin.css +42 -0
  237. package/dist/dev/internal/skins/compat-audio/template.js +18 -16
  238. package/dist/dev/internal/skins/compat-audio/template.js.map +1 -1
  239. package/dist/dev/internal/skins/compat-live-audio/register.d.ts +1 -0
  240. package/dist/dev/internal/skins/compat-live-audio/register.js +1 -0
  241. package/dist/dev/internal/skins/compat-live-audio/register.js.map +1 -1
  242. package/dist/dev/internal/skins/compat-live-audio/skin.css +42 -0
  243. package/dist/dev/internal/skins/compat-live-audio/template.js +11 -9
  244. package/dist/dev/internal/skins/compat-live-audio/template.js.map +1 -1
  245. package/dist/dev/internal/skins/compat-live-video/register.d.ts +1 -1
  246. package/dist/dev/internal/skins/compat-live-video/skin.css +67 -23
  247. package/dist/dev/internal/skins/compat-live-video/template.js +20 -18
  248. package/dist/dev/internal/skins/compat-live-video/template.js.map +1 -1
  249. package/dist/dev/internal/skins/compat-video/register.d.ts +1 -1
  250. package/dist/dev/internal/skins/compat-video/skin.css +67 -23
  251. package/dist/dev/internal/skins/compat-video/template.js +34 -32
  252. package/dist/dev/internal/skins/compat-video/template.js.map +1 -1
  253. package/dist/dev/internal/skins/default-audio/register.d.ts +2 -2
  254. package/dist/dev/internal/skins/default-audio/template.js +12 -12
  255. package/dist/dev/internal/skins/default-audio/template.js.map +1 -1
  256. package/dist/dev/internal/skins/default-live-audio/register.d.ts +1 -1
  257. package/dist/dev/internal/skins/default-live-audio/template.js +5 -5
  258. package/dist/dev/internal/skins/default-live-audio/template.js.map +1 -1
  259. package/dist/dev/internal/skins/default-live-video/register.d.ts +1 -1
  260. package/dist/dev/internal/skins/default-live-video/skin.css +18 -7
  261. package/dist/dev/internal/skins/default-live-video/template.js +16 -16
  262. package/dist/dev/internal/skins/default-live-video/template.js.map +1 -1
  263. package/dist/dev/internal/skins/default-video/register.d.ts +1 -1
  264. package/dist/dev/internal/skins/default-video/skin.css +24 -7
  265. package/dist/dev/internal/skins/default-video/template.js +26 -26
  266. package/dist/dev/internal/skins/default-video/template.js.map +1 -1
  267. package/dist/dev/internal/skins/neutral-audio/register.d.ts +2 -2
  268. package/dist/dev/internal/skins/neutral-audio/template.js +12 -12
  269. package/dist/dev/internal/skins/neutral-audio/template.js.map +1 -1
  270. package/dist/dev/internal/skins/neutral-live-audio/register.d.ts +1 -1
  271. package/dist/dev/internal/skins/neutral-live-audio/template.js +5 -5
  272. package/dist/dev/internal/skins/neutral-live-audio/template.js.map +1 -1
  273. package/dist/dev/internal/skins/neutral-live-video/register.d.ts +1 -1
  274. package/dist/dev/internal/skins/neutral-live-video/skin.css +20 -9
  275. package/dist/dev/internal/skins/neutral-live-video/template.js +16 -16
  276. package/dist/dev/internal/skins/neutral-live-video/template.js.map +1 -1
  277. package/dist/dev/internal/skins/neutral-video/register.d.ts +1 -1
  278. package/dist/dev/internal/skins/neutral-video/skin.css +26 -9
  279. package/dist/dev/internal/skins/neutral-video/template.js +26 -26
  280. package/dist/dev/internal/skins/neutral-video/template.js.map +1 -1
  281. package/dist/dev/internal/skins/scaffold-audio/register.d.ts +44 -0
  282. package/dist/dev/internal/skins/scaffold-audio/register.js +75 -0
  283. package/dist/dev/internal/skins/scaffold-audio/register.js.map +1 -0
  284. package/dist/dev/internal/skins/scaffold-audio/skin.css +1739 -0
  285. package/dist/dev/internal/skins/scaffold-audio/template.js +223 -0
  286. package/dist/dev/internal/skins/scaffold-audio/template.js.map +1 -0
  287. package/dist/dev/internal/skins/scaffold-live-audio/register.d.ts +28 -0
  288. package/dist/dev/internal/skins/scaffold-live-audio/register.js +55 -0
  289. package/dist/dev/internal/skins/scaffold-live-audio/register.js.map +1 -0
  290. package/dist/dev/internal/skins/scaffold-live-audio/skin.css +1559 -0
  291. package/dist/dev/internal/skins/scaffold-live-audio/template.js +120 -0
  292. package/dist/dev/internal/skins/scaffold-live-audio/template.js.map +1 -0
  293. package/dist/dev/internal/skins/scaffold-live-video/register.d.ts +45 -0
  294. package/dist/dev/internal/skins/scaffold-live-video/register.js +88 -0
  295. package/dist/dev/internal/skins/scaffold-live-video/register.js.map +1 -0
  296. package/dist/dev/internal/skins/scaffold-live-video/skin.css +1944 -0
  297. package/dist/dev/internal/skins/scaffold-live-video/template.js +243 -0
  298. package/dist/dev/internal/skins/scaffold-live-video/template.js.map +1 -0
  299. package/dist/dev/internal/skins/scaffold-video/register.d.ts +62 -0
  300. package/dist/dev/internal/skins/scaffold-video/register.js +117 -0
  301. package/dist/dev/internal/skins/scaffold-video/register.js.map +1 -0
  302. package/dist/dev/internal/skins/scaffold-video/skin.css +2184 -0
  303. package/dist/dev/internal/skins/scaffold-video/template.js +463 -0
  304. package/dist/dev/internal/skins/scaffold-video/template.js.map +1 -0
  305. package/dist/dev/media/playerjs-video/adapter.d.ts +11 -0
  306. package/dist/dev/media/playerjs-video/adapter.js +61 -0
  307. package/dist/dev/media/playerjs-video/adapter.js.map +1 -0
  308. package/dist/dev/media/playerjs-video/index.d.ts +2 -0
  309. package/dist/dev/presets/audio/index.d.ts +2 -1
  310. package/dist/dev/presets/audio/index.js +2 -1
  311. package/dist/dev/presets/audio/scaffold-skin.d.ts +15 -0
  312. package/dist/dev/presets/audio/scaffold-skin.js +21 -0
  313. package/dist/dev/presets/audio/scaffold-skin.js.map +1 -0
  314. package/dist/dev/presets/background/skin.js +0 -2
  315. package/dist/dev/presets/background/skin.js.map +1 -1
  316. package/dist/dev/presets/live-audio/index.d.ts +2 -1
  317. package/dist/dev/presets/live-audio/index.js +2 -1
  318. package/dist/dev/presets/live-audio/scaffold-skin.d.ts +15 -0
  319. package/dist/dev/presets/live-audio/scaffold-skin.js +21 -0
  320. package/dist/dev/presets/live-audio/scaffold-skin.js.map +1 -0
  321. package/dist/dev/presets/live-video/index.d.ts +2 -1
  322. package/dist/dev/presets/live-video/index.js +2 -1
  323. package/dist/dev/presets/live-video/scaffold-skin.d.ts +15 -0
  324. package/dist/dev/presets/live-video/scaffold-skin.js +21 -0
  325. package/dist/dev/presets/live-video/scaffold-skin.js.map +1 -0
  326. package/dist/dev/presets/skin.js +0 -11
  327. package/dist/dev/presets/skin.js.map +1 -1
  328. package/dist/dev/presets/video/index.d.ts +2 -1
  329. package/dist/dev/presets/video/index.js +2 -1
  330. package/dist/dev/presets/video/scaffold-skin.d.ts +15 -0
  331. package/dist/dev/presets/video/scaffold-skin.js +21 -0
  332. package/dist/dev/presets/video/scaffold-skin.js.map +1 -0
  333. package/dist/dev/ui/time-slider/element.js +31 -7
  334. package/dist/dev/ui/time-slider/element.js.map +1 -1
  335. package/dist/dev/version.js +1 -1
  336. package/docs/README.md +1 -1
  337. package/docs/guides/build-with-ai.md +1 -1
  338. package/docs/guides/cdn.md +9 -9
  339. package/docs/guides/installation-cdn.md +4 -4
  340. package/docs/guides/installation-shadcn.md +3 -3
  341. package/docs/guides/installation-svelte.md +5 -5
  342. package/docs/guides/installation-vue.md +5 -5
  343. package/docs/guides/installation.md +5 -5
  344. package/docs/guides/internationalization.md +5 -5
  345. package/docs/guides/llms.txt +2 -2
  346. package/docs/guides/media-sources.md +1 -0
  347. package/docs/guides/migrate-from-media-chrome.md +4 -4
  348. package/docs/guides/migrate-from-mux-player.md +6 -6
  349. package/docs/guides/migrate-from-plyr.md +7 -7
  350. package/docs/guides/migrate-from-video-js-8.md +15 -7
  351. package/docs/guides/migrate-from-vidstack.md +2 -2
  352. package/docs/guides/migrate.md +2 -1
  353. package/docs/guides/presets.md +4 -4
  354. package/docs/guides/self-hosting.md +7 -7
  355. package/docs/guides/skins.md +5 -5
  356. package/docs/guides/v10-roadmap.md +2 -2
  357. package/docs/guides/why-videojs.md +3 -3
  358. package/docs/llms.txt +7 -2
  359. package/docs/reference/api/error-codes.md +1 -1
  360. package/docs/reference/api/llms.txt +1 -1
  361. package/docs/reference/api/preset-audio.md +1 -1
  362. package/docs/reference/api/preset-background.md +1 -1
  363. package/docs/reference/api/preset-live-audio.md +1 -1
  364. package/docs/reference/api/preset-live-video.md +1 -1
  365. package/docs/reference/api/preset-video.md +1 -1
  366. package/docs/reference/api/vjs8-legacy-init.md +2 -2
  367. package/docs/reference/components/audio-neutral-skin.md +1 -1
  368. package/docs/reference/components/audio-scaffold-skin.md +39 -0
  369. package/docs/reference/components/audio-skin.md +1 -1
  370. package/docs/reference/components/background-video-skin.md +1 -1
  371. package/docs/reference/components/background-video.md +1 -1
  372. package/docs/reference/components/cloudflare-video.md +1 -1
  373. package/docs/reference/components/dash-video.md +1 -1
  374. package/docs/reference/components/google-cast.md +1 -1
  375. package/docs/reference/components/hls-audio.md +3 -2
  376. package/docs/reference/components/hls-background-video.md +1 -1
  377. package/docs/reference/components/hls-video.md +13 -2
  378. package/docs/reference/components/hlsjs-video.md +11 -1
  379. package/docs/reference/components/icons.md +2 -1
  380. package/docs/reference/components/live-audio-neutral-skin.md +1 -1
  381. package/docs/reference/components/live-audio-scaffold-skin.md +41 -0
  382. package/docs/reference/components/live-audio-skin.md +1 -1
  383. package/docs/reference/components/live-video-neutral-skin.md +1 -1
  384. package/docs/reference/components/live-video-scaffold-skin.md +47 -0
  385. package/docs/reference/components/live-video-skin.md +1 -1
  386. package/docs/reference/components/llms.txt +6 -1
  387. package/docs/reference/components/mux-audio.md +1 -1
  388. package/docs/reference/components/mux-background-video.md +1 -1
  389. package/docs/reference/components/mux-data.md +1 -1
  390. package/docs/reference/components/mux-video.md +1 -1
  391. package/docs/reference/components/native-hls-video.md +1 -1
  392. package/docs/reference/components/playerjs-video.md +197 -0
  393. package/docs/reference/components/shaka-video.md +1 -1
  394. package/docs/reference/components/spotify-audio.md +1 -1
  395. package/docs/reference/components/tiktok-video.md +1 -1
  396. package/docs/reference/components/twitch-video.md +1 -1
  397. package/docs/reference/components/video-neutral-skin.md +1 -1
  398. package/docs/reference/components/video-scaffold-skin.md +51 -0
  399. package/docs/reference/components/video-skin.md +1 -1
  400. package/docs/reference/components/vimeo-video.md +1 -1
  401. package/docs/reference/components/wistia-video.md +5 -1
  402. package/docs/reference/components/youtube-video.md +2 -2
  403. package/package.json +44 -39
@@ -0,0 +1,15 @@
1
+ import { SkinElement } from "../skin.js";
2
+ //#region src/presets/audio/scaffold-skin.d.ts
3
+ /** Packaged scaffold audio UI registered as `<audio-scaffold-skin>`. */
4
+ export declare class ScaffoldAudioSkinElement extends SkinElement {
5
+ static readonly tagName = "audio-scaffold-skin";
6
+ static styles: import("@videojs/utils/dom").ShadowStyle;
7
+ static template: HTMLTemplateElement | null;
8
+ }
9
+ declare global {
10
+ interface HTMLElementTagNameMap {
11
+ [ScaffoldAudioSkinElement.tagName]: ScaffoldAudioSkinElement;
12
+ }
13
+ }
14
+ //#endregion
15
+ //# sourceMappingURL=scaffold-skin.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { SkinElement } from "../skin.js";
2
+ import { template } from "../../internal/skins/scaffold-audio/template.js";
3
+ import scaffold_skin_default from "../../define/audio/scaffold-skin2.js";
4
+ import { createShadowStyle } from "@videojs/utils/dom";
5
+ //#region src/presets/audio/scaffold-skin.ts
6
+ /** Packaged scaffold audio UI registered as `<audio-scaffold-skin>`. */
7
+ var ScaffoldAudioSkinElement = class extends SkinElement {
8
+ static {
9
+ this.tagName = "audio-scaffold-skin";
10
+ }
11
+ static {
12
+ this.styles = createShadowStyle(scaffold_skin_default);
13
+ }
14
+ static {
15
+ this.template = template;
16
+ }
17
+ };
18
+ //#endregion
19
+ export { ScaffoldAudioSkinElement };
20
+
21
+ //# sourceMappingURL=scaffold-skin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-skin.js","names":["styles"],"sources":["../../../../src/presets/audio/scaffold-skin.ts"],"sourcesContent":["import { createShadowStyle } from '@videojs/utils/dom';\n\nimport { template } from '../../internal/skins/scaffold-audio/template';\nimport { SkinElement } from '../skin';\n\nimport styles from '../../define/audio/scaffold-skin.css?inline';\n\n/** Packaged scaffold audio UI registered as `<audio-scaffold-skin>`. */\nexport class ScaffoldAudioSkinElement extends SkinElement {\n static readonly tagName = 'audio-scaffold-skin';\n static styles = createShadowStyle(styles);\n static template = template;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [ScaffoldAudioSkinElement.tagName]: ScaffoldAudioSkinElement;\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,2BAAb,cAA8C,YAAY;;EAC9B,KAAA,UAAA;;;EACV,KAAA,SAAA,kBAAkBA,qBAAM;;;EACtB,KAAA,WAAA;;AACpB"}
@@ -1,5 +1,4 @@
1
1
  import skin_default from "../../define/background/skin2.js";
2
- import { SKIN_HELP_TEXT, SKIN_HELP_URL } from "@videojs/core";
3
2
  import { ReactiveElement } from "@videojs/element";
4
3
  import { ensureGlobalStyle } from "@videojs/utils/dom";
5
4
  //#region src/presets/background/skin.ts
@@ -11,7 +10,6 @@ function getTemplateHTML() {
11
10
  <slot name="media"></slot>
12
11
  <slot></slot>
13
12
  </media-container>
14
- <a rel="help" href="${SKIN_HELP_URL}" hidden>${SKIN_HELP_TEXT}</a>
15
13
  `;
16
14
  }
17
15
  var BackgroundVideoSkinElement = class BackgroundVideoSkinElement extends ReactiveElement {
@@ -1 +1 @@
1
- {"version":3,"file":"skin.js","names":["styles"],"sources":["../../../../src/presets/background/skin.ts"],"sourcesContent":["import { SKIN_HELP_TEXT, SKIN_HELP_URL } from '@videojs/core';\nimport { ReactiveElement } from '@videojs/element';\nimport { ensureGlobalStyle } from '@videojs/utils/dom';\n\nimport styles from '../../define/background/skin.css?inline';\n\nconst STYLES_ID = '__media-background-styles';\n\nfunction getTemplateHTML() {\n return /* html */ `\n <media-container>\n <!-- @deprecated slot=\"media\" is no longer required, use the default slot instead -->\n <slot name=\"media\"></slot>\n <slot></slot>\n </media-container>\n <a rel=\"help\" href=\"${SKIN_HELP_URL}\" hidden>${SKIN_HELP_TEXT}</a>\n `;\n}\n\nexport class BackgroundVideoSkinElement extends ReactiveElement {\n static readonly tagName = 'background-video-skin';\n static shadowRootOptions: ShadowRootInit = { mode: 'open' };\n static getTemplateHTML = getTemplateHTML;\n\n constructor() {\n super();\n\n ensureGlobalStyle(STYLES_ID, styles);\n\n if (!this.shadowRoot) {\n this.attachShadow(BackgroundVideoSkinElement.shadowRootOptions);\n this.shadowRoot!.innerHTML = getTemplateHTML();\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [BackgroundVideoSkinElement.tagName]: BackgroundVideoSkinElement;\n }\n}\n"],"mappings":";;;;;AAMA,MAAM,YAAY;AAElB,SAAS,kBAAkB;CACzB,OAAkB;;;;;;0BAMM,cAAc,WAAW,eAAe;;AAElE;AAEA,IAAa,6BAAb,MAAa,mCAAmC,gBAAgB;;EACpC,KAAA,UAAA;;;EACiB,KAAA,oBAAA,EAAE,MAAM,OAAO;;;EACjC,KAAA,kBAAA;;CAEzB,cAAc;EACZ,MAAM;EAEN,kBAAkB,WAAWA,YAAM;EAEnC,IAAI,CAAC,KAAK,YAAY;GACpB,KAAK,aAAa,2BAA2B,iBAAiB;GAC9D,KAAK,WAAY,YAAY,gBAAgB;EAC/C;CACF;AACF"}
1
+ {"version":3,"file":"skin.js","names":["styles"],"sources":["../../../../src/presets/background/skin.ts"],"sourcesContent":["import { ReactiveElement } from '@videojs/element';\nimport { ensureGlobalStyle } from '@videojs/utils/dom';\n\nimport styles from '../../define/background/skin.css?inline';\n\nconst STYLES_ID = '__media-background-styles';\n\nfunction getTemplateHTML() {\n return /* html */ `\n <media-container>\n <!-- @deprecated slot=\"media\" is no longer required, use the default slot instead -->\n <slot name=\"media\"></slot>\n <slot></slot>\n </media-container>\n `;\n}\n\nexport class BackgroundVideoSkinElement extends ReactiveElement {\n static readonly tagName = 'background-video-skin';\n static shadowRootOptions: ShadowRootInit = { mode: 'open' };\n static getTemplateHTML = getTemplateHTML;\n\n constructor() {\n super();\n\n ensureGlobalStyle(STYLES_ID, styles);\n\n if (!this.shadowRoot) {\n this.attachShadow(BackgroundVideoSkinElement.shadowRootOptions);\n this.shadowRoot!.innerHTML = getTemplateHTML();\n }\n }\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [BackgroundVideoSkinElement.tagName]: BackgroundVideoSkinElement;\n }\n}\n"],"mappings":";;;;AAKA,MAAM,YAAY;AAElB,SAAS,kBAAkB;CACzB,OAAkB;;;;;;;AAOpB;AAEA,IAAa,6BAAb,MAAa,mCAAmC,gBAAgB;;EACpC,KAAA,UAAA;;;EACiB,KAAA,oBAAA,EAAE,MAAM,OAAO;;;EACjC,KAAA,kBAAA;;CAEzB,cAAc;EACZ,MAAM;EAEN,kBAAkB,WAAWA,YAAM;EAEnC,IAAI,CAAC,KAAK,YAAY;GACpB,KAAK,aAAa,2BAA2B,iBAAiB;GAC9D,KAAK,WAAY,YAAY,gBAAgB;EAC/C;CACF;AACF"}
@@ -1,6 +1,7 @@
1
1
  import { CompatLiveAudioSkinElement } from "./compat-skin.js";
2
+ import { ScaffoldLiveAudioSkinElement } from "./scaffold-skin.js";
2
3
  import { LiveAudioPlayerElement, PlayerController } from "./player.js";
3
4
  import { LiveAudioSkinElement } from "./skin.js";
4
5
  import { NeutralLiveAudioSkinElement } from "./neutral-skin.js";
5
6
  import { liveAudioFeatures } from "@videojs/core/dom";
6
- export { CompatLiveAudioSkinElement, LiveAudioPlayerElement, LiveAudioSkinElement, NeutralLiveAudioSkinElement, PlayerController, liveAudioFeatures };
7
+ export { CompatLiveAudioSkinElement, LiveAudioPlayerElement, LiveAudioSkinElement, NeutralLiveAudioSkinElement, PlayerController, ScaffoldLiveAudioSkinElement, liveAudioFeatures };
@@ -1,6 +1,7 @@
1
1
  import { CompatLiveAudioSkinElement } from "./compat-skin.js";
2
2
  import { NeutralLiveAudioSkinElement } from "./neutral-skin.js";
3
3
  import { LiveAudioPlayerElement, PlayerController } from "./player.js";
4
+ import { ScaffoldLiveAudioSkinElement } from "./scaffold-skin.js";
4
5
  import { LiveAudioSkinElement } from "./skin.js";
5
6
  import { liveAudioFeatures } from "@videojs/core/dom";
6
- export { CompatLiveAudioSkinElement, LiveAudioPlayerElement, LiveAudioSkinElement, NeutralLiveAudioSkinElement, PlayerController, liveAudioFeatures };
7
+ export { CompatLiveAudioSkinElement, LiveAudioPlayerElement, LiveAudioSkinElement, NeutralLiveAudioSkinElement, PlayerController, ScaffoldLiveAudioSkinElement, liveAudioFeatures };
@@ -0,0 +1,15 @@
1
+ import { SkinElement } from "../skin.js";
2
+ //#region src/presets/live-audio/scaffold-skin.d.ts
3
+ /** Packaged scaffold live-audio UI registered as `<live-audio-scaffold-skin>`. */
4
+ export declare class ScaffoldLiveAudioSkinElement extends SkinElement {
5
+ static readonly tagName = "live-audio-scaffold-skin";
6
+ static styles: import("@videojs/utils/dom").ShadowStyle;
7
+ static template: HTMLTemplateElement | null;
8
+ }
9
+ declare global {
10
+ interface HTMLElementTagNameMap {
11
+ [ScaffoldLiveAudioSkinElement.tagName]: ScaffoldLiveAudioSkinElement;
12
+ }
13
+ }
14
+ //#endregion
15
+ //# sourceMappingURL=scaffold-skin.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { SkinElement } from "../skin.js";
2
+ import { template } from "../../internal/skins/scaffold-live-audio/template.js";
3
+ import scaffold_skin_default from "../../define/live-audio/scaffold-skin2.js";
4
+ import { createShadowStyle } from "@videojs/utils/dom";
5
+ //#region src/presets/live-audio/scaffold-skin.ts
6
+ /** Packaged scaffold live-audio UI registered as `<live-audio-scaffold-skin>`. */
7
+ var ScaffoldLiveAudioSkinElement = class extends SkinElement {
8
+ static {
9
+ this.tagName = "live-audio-scaffold-skin";
10
+ }
11
+ static {
12
+ this.styles = createShadowStyle(scaffold_skin_default);
13
+ }
14
+ static {
15
+ this.template = template;
16
+ }
17
+ };
18
+ //#endregion
19
+ export { ScaffoldLiveAudioSkinElement };
20
+
21
+ //# sourceMappingURL=scaffold-skin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-skin.js","names":["styles"],"sources":["../../../../src/presets/live-audio/scaffold-skin.ts"],"sourcesContent":["import { createShadowStyle } from '@videojs/utils/dom';\n\nimport { template } from '../../internal/skins/scaffold-live-audio/template';\nimport { SkinElement } from '../skin';\n\nimport styles from '../../define/live-audio/scaffold-skin.css?inline';\n\n/** Packaged scaffold live-audio UI registered as `<live-audio-scaffold-skin>`. */\nexport class ScaffoldLiveAudioSkinElement extends SkinElement {\n static readonly tagName = 'live-audio-scaffold-skin';\n static styles = createShadowStyle(styles);\n static template = template;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [ScaffoldLiveAudioSkinElement.tagName]: ScaffoldLiveAudioSkinElement;\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,+BAAb,cAAkD,YAAY;;EAClC,KAAA,UAAA;;;EACV,KAAA,SAAA,kBAAkBA,qBAAM;;;EACtB,KAAA,WAAA;;AACpB"}
@@ -1,6 +1,7 @@
1
1
  import { CompatLiveVideoSkinElement } from "./compat-skin.js";
2
+ import { ScaffoldLiveVideoSkinElement } from "./scaffold-skin.js";
2
3
  import { LiveVideoPlayerElement, PlayerController } from "./player.js";
3
4
  import { LiveVideoSkinElement } from "./skin.js";
4
5
  import { NeutralLiveVideoSkinElement } from "./neutral-skin.js";
5
6
  import { liveVideoFeatures } from "@videojs/core/dom";
6
- export { CompatLiveVideoSkinElement, LiveVideoPlayerElement, LiveVideoSkinElement, NeutralLiveVideoSkinElement, PlayerController, liveVideoFeatures };
7
+ export { CompatLiveVideoSkinElement, LiveVideoPlayerElement, LiveVideoSkinElement, NeutralLiveVideoSkinElement, PlayerController, ScaffoldLiveVideoSkinElement, liveVideoFeatures };
@@ -1,6 +1,7 @@
1
1
  import { CompatLiveVideoSkinElement } from "./compat-skin.js";
2
2
  import { NeutralLiveVideoSkinElement } from "./neutral-skin.js";
3
3
  import { LiveVideoPlayerElement, PlayerController } from "./player.js";
4
+ import { ScaffoldLiveVideoSkinElement } from "./scaffold-skin.js";
4
5
  import { LiveVideoSkinElement } from "./skin.js";
5
6
  import { liveVideoFeatures } from "@videojs/core/dom";
6
- export { CompatLiveVideoSkinElement, LiveVideoPlayerElement, LiveVideoSkinElement, NeutralLiveVideoSkinElement, PlayerController, liveVideoFeatures };
7
+ export { CompatLiveVideoSkinElement, LiveVideoPlayerElement, LiveVideoSkinElement, NeutralLiveVideoSkinElement, PlayerController, ScaffoldLiveVideoSkinElement, liveVideoFeatures };
@@ -0,0 +1,15 @@
1
+ import { SkinElement } from "../skin.js";
2
+ //#region src/presets/live-video/scaffold-skin.d.ts
3
+ /** Packaged scaffold live-video UI registered as `<live-video-scaffold-skin>`. */
4
+ export declare class ScaffoldLiveVideoSkinElement extends SkinElement {
5
+ static readonly tagName = "live-video-scaffold-skin";
6
+ static styles: import("@videojs/utils/dom").ShadowStyle;
7
+ static template: HTMLTemplateElement | null;
8
+ }
9
+ declare global {
10
+ interface HTMLElementTagNameMap {
11
+ [ScaffoldLiveVideoSkinElement.tagName]: ScaffoldLiveVideoSkinElement;
12
+ }
13
+ }
14
+ //#endregion
15
+ //# sourceMappingURL=scaffold-skin.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { SkinElement } from "../skin.js";
2
+ import { template } from "../../internal/skins/scaffold-live-video/template.js";
3
+ import scaffold_skin_default from "../../define/live-video/scaffold-skin2.js";
4
+ import { createShadowStyle } from "@videojs/utils/dom";
5
+ //#region src/presets/live-video/scaffold-skin.ts
6
+ /** Packaged scaffold live-video UI registered as `<live-video-scaffold-skin>`. */
7
+ var ScaffoldLiveVideoSkinElement = class extends SkinElement {
8
+ static {
9
+ this.tagName = "live-video-scaffold-skin";
10
+ }
11
+ static {
12
+ this.styles = createShadowStyle(scaffold_skin_default);
13
+ }
14
+ static {
15
+ this.template = template;
16
+ }
17
+ };
18
+ //#endregion
19
+ export { ScaffoldLiveVideoSkinElement };
20
+
21
+ //# sourceMappingURL=scaffold-skin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-skin.js","names":["styles"],"sources":["../../../../src/presets/live-video/scaffold-skin.ts"],"sourcesContent":["import { createShadowStyle } from '@videojs/utils/dom';\n\nimport { template } from '../../internal/skins/scaffold-live-video/template';\nimport { SkinElement } from '../skin';\n\nimport styles from '../../define/live-video/scaffold-skin.css?inline';\n\n/** Packaged scaffold live-video UI registered as `<live-video-scaffold-skin>`. */\nexport class ScaffoldLiveVideoSkinElement extends SkinElement {\n static readonly tagName = 'live-video-scaffold-skin';\n static styles = createShadowStyle(styles);\n static template = template;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [ScaffoldLiveVideoSkinElement.tagName]: ScaffoldLiveVideoSkinElement;\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,+BAAb,cAAkD,YAAY;;EAClC,KAAA,UAAA;;;EACV,KAAA,SAAA,kBAAkBA,qBAAM;;;EACtB,KAAA,WAAA;;AACpB"}
@@ -1,6 +1,5 @@
1
1
  import global_default from "../define/global.js";
2
2
  import shadow_default from "../define/shadow.js";
3
- import { SKIN_HELP_TEXT, SKIN_HELP_URL } from "@videojs/core";
4
3
  import { ReactiveElement } from "@videojs/element";
5
4
  import { applyShadowStyles, createShadowStyle, ensureGlobalStyle, renderTemplate } from "@videojs/utils/dom";
6
5
  //#region src/presets/skin.ts
@@ -21,22 +20,12 @@ var SkinElement = class extends ReactiveElement {
21
20
  const ctor = this.constructor;
22
21
  this.attachShadow(ctor.shadowRootOptions);
23
22
  if (ctor.template) renderTemplate(this.shadowRoot, ctor.template);
24
- this.shadowRoot.append(createHelpLink(this.ownerDocument));
25
23
  const sheets = [shadowSheet];
26
24
  if (ctor.styles) sheets.push(ctor.styles);
27
25
  applyShadowStyles(this.shadowRoot, sheets);
28
26
  }
29
27
  }
30
28
  };
31
- /** Every packaged skin links to the page that explains what the player is. See `SKIN_HELP_URL`. */
32
- function createHelpLink(doc) {
33
- const link = doc.createElement("a");
34
- link.rel = "help";
35
- link.href = SKIN_HELP_URL;
36
- link.hidden = true;
37
- link.textContent = SKIN_HELP_TEXT;
38
- return link;
39
- }
40
29
  //#endregion
41
30
  export { SkinElement };
42
31
 
@@ -1 +1 @@
1
- {"version":3,"file":"skin.js","names":["shadowStyles","globalStyles"],"sources":["../../../src/presets/skin.ts"],"sourcesContent":["import { SKIN_HELP_TEXT, SKIN_HELP_URL } from '@videojs/core';\nimport { ReactiveElement } from '@videojs/element';\nimport {\n applyShadowStyles,\n createShadowStyle,\n ensureGlobalStyle,\n renderTemplate,\n type ShadowStyle,\n} from '@videojs/utils/dom';\n\nimport globalStyles from '../define/global.css?inline';\nimport shadowStyles from '../define/shadow.css?inline';\n\nconst STYLES_ID = '__media-styles';\nconst shadowSheet = createShadowStyle(shadowStyles);\n\n/**\n * Base element for skin definitions. Attaches a shadow root, clones `static template` into it, and applies shared +\n * per-skin styles via `adoptedStyleSheets` (or `<style>` fallback).\n */\nexport class SkinElement extends ReactiveElement {\n static shadowRootOptions: ShadowRootInit = { mode: 'open' };\n static styles?: ShadowStyle;\n static template?: HTMLTemplateElement | null;\n\n constructor() {\n super();\n\n ensureGlobalStyle(STYLES_ID, globalStyles);\n\n if (!this.shadowRoot) {\n const ctor = this.constructor as typeof SkinElement;\n\n this.attachShadow(ctor.shadowRootOptions);\n\n if (ctor.template) {\n renderTemplate(this.shadowRoot!, ctor.template);\n }\n\n this.shadowRoot!.append(createHelpLink(this.ownerDocument));\n\n const sheets: ShadowStyle[] = [shadowSheet];\n\n if (ctor.styles) {\n sheets.push(ctor.styles);\n }\n\n applyShadowStyles(this.shadowRoot!, sheets);\n }\n }\n}\n\n/** Every packaged skin links to the page that explains what the player is. See `SKIN_HELP_URL`. */\nfunction createHelpLink(doc: Document): HTMLAnchorElement {\n const link = doc.createElement('a');\n\n link.rel = 'help';\n link.href = SKIN_HELP_URL;\n link.hidden = true;\n link.textContent = SKIN_HELP_TEXT;\n\n return link;\n}\n"],"mappings":";;;;;;AAaA,MAAM,YAAY;AAClB,MAAM,cAAc,kBAAkBA,cAAY;;;;;AAMlD,IAAa,cAAb,cAAiC,gBAAgB;;EACJ,KAAA,oBAAA,EAAE,MAAM,OAAO;;CAI1D,cAAc;EACZ,MAAM;EAEN,kBAAkB,WAAWC,cAAY;EAEzC,IAAI,CAAC,KAAK,YAAY;GACpB,MAAM,OAAO,KAAK;GAElB,KAAK,aAAa,KAAK,iBAAiB;GAExC,IAAI,KAAK,UACP,eAAe,KAAK,YAAa,KAAK,QAAQ;GAGhD,KAAK,WAAY,OAAO,eAAe,KAAK,aAAa,CAAC;GAE1D,MAAM,SAAwB,CAAC,WAAW;GAE1C,IAAI,KAAK,QACP,OAAO,KAAK,KAAK,MAAM;GAGzB,kBAAkB,KAAK,YAAa,MAAM;EAC5C;CACF;AACF;;AAGA,SAAS,eAAe,KAAkC;CACxD,MAAM,OAAO,IAAI,cAAc,GAAG;CAElC,KAAK,MAAM;CACX,KAAK,OAAO;CACZ,KAAK,SAAS;CACd,KAAK,cAAc;CAEnB,OAAO;AACT"}
1
+ {"version":3,"file":"skin.js","names":["shadowStyles","globalStyles"],"sources":["../../../src/presets/skin.ts"],"sourcesContent":["import { ReactiveElement } from '@videojs/element';\nimport {\n applyShadowStyles,\n createShadowStyle,\n ensureGlobalStyle,\n renderTemplate,\n type ShadowStyle,\n} from '@videojs/utils/dom';\n\nimport globalStyles from '../define/global.css?inline';\nimport shadowStyles from '../define/shadow.css?inline';\n\nconst STYLES_ID = '__media-styles';\nconst shadowSheet = createShadowStyle(shadowStyles);\n\n/**\n * Base element for skin definitions. Attaches a shadow root, clones `static template` into it, and applies shared +\n * per-skin styles via `adoptedStyleSheets` (or `<style>` fallback).\n */\nexport class SkinElement extends ReactiveElement {\n static shadowRootOptions: ShadowRootInit = { mode: 'open' };\n static styles?: ShadowStyle;\n static template?: HTMLTemplateElement | null;\n\n constructor() {\n super();\n\n ensureGlobalStyle(STYLES_ID, globalStyles);\n\n if (!this.shadowRoot) {\n const ctor = this.constructor as typeof SkinElement;\n\n this.attachShadow(ctor.shadowRootOptions);\n\n if (ctor.template) {\n renderTemplate(this.shadowRoot!, ctor.template);\n }\n\n const sheets: ShadowStyle[] = [shadowSheet];\n\n if (ctor.styles) {\n sheets.push(ctor.styles);\n }\n\n applyShadowStyles(this.shadowRoot!, sheets);\n }\n }\n}\n"],"mappings":";;;;;AAYA,MAAM,YAAY;AAClB,MAAM,cAAc,kBAAkBA,cAAY;;;;;AAMlD,IAAa,cAAb,cAAiC,gBAAgB;;EACJ,KAAA,oBAAA,EAAE,MAAM,OAAO;;CAI1D,cAAc;EACZ,MAAM;EAEN,kBAAkB,WAAWC,cAAY;EAEzC,IAAI,CAAC,KAAK,YAAY;GACpB,MAAM,OAAO,KAAK;GAElB,KAAK,aAAa,KAAK,iBAAiB;GAExC,IAAI,KAAK,UACP,eAAe,KAAK,YAAa,KAAK,QAAQ;GAGhD,MAAM,SAAwB,CAAC,WAAW;GAE1C,IAAI,KAAK,QACP,OAAO,KAAK,KAAK,MAAM;GAGzB,kBAAkB,KAAK,YAAa,MAAM;EAC5C;CACF;AACF"}
@@ -1,6 +1,7 @@
1
1
  import { CompatVideoSkinElement } from "./compat-skin.js";
2
+ import { ScaffoldVideoSkinElement } from "./scaffold-skin.js";
2
3
  import { NeutralVideoSkinElement } from "./neutral-skin.js";
3
4
  import { PlayerController, VideoPlayerElement } from "./player.js";
4
5
  import { VideoSkinElement } from "./skin.js";
5
6
  import { videoFeatures } from "@videojs/core/dom";
6
- export { CompatVideoSkinElement, NeutralVideoSkinElement, PlayerController, VideoPlayerElement, VideoSkinElement, videoFeatures };
7
+ export { CompatVideoSkinElement, NeutralVideoSkinElement, PlayerController, ScaffoldVideoSkinElement, VideoPlayerElement, VideoSkinElement, videoFeatures };
@@ -1,6 +1,7 @@
1
1
  import { CompatVideoSkinElement } from "./compat-skin.js";
2
2
  import { NeutralVideoSkinElement } from "./neutral-skin.js";
3
3
  import { PlayerController, VideoPlayerElement } from "./player.js";
4
+ import { ScaffoldVideoSkinElement } from "./scaffold-skin.js";
4
5
  import { VideoSkinElement } from "./skin.js";
5
6
  import { videoFeatures } from "@videojs/core/dom";
6
- export { CompatVideoSkinElement, NeutralVideoSkinElement, PlayerController, VideoPlayerElement, VideoSkinElement, videoFeatures };
7
+ export { CompatVideoSkinElement, NeutralVideoSkinElement, PlayerController, ScaffoldVideoSkinElement, VideoPlayerElement, VideoSkinElement, videoFeatures };
@@ -0,0 +1,15 @@
1
+ import { SkinElement } from "../skin.js";
2
+ //#region src/presets/video/scaffold-skin.d.ts
3
+ /** Packaged scaffold video UI registered as `<video-scaffold-skin>`. */
4
+ export declare class ScaffoldVideoSkinElement extends SkinElement {
5
+ static readonly tagName = "video-scaffold-skin";
6
+ static styles: import("@videojs/utils/dom").ShadowStyle;
7
+ static template: HTMLTemplateElement | null;
8
+ }
9
+ declare global {
10
+ interface HTMLElementTagNameMap {
11
+ [ScaffoldVideoSkinElement.tagName]: ScaffoldVideoSkinElement;
12
+ }
13
+ }
14
+ //#endregion
15
+ //# sourceMappingURL=scaffold-skin.d.ts.map
@@ -0,0 +1,21 @@
1
+ import { SkinElement } from "../skin.js";
2
+ import { template } from "../../internal/skins/scaffold-video/template.js";
3
+ import scaffold_skin_default from "../../define/video/scaffold-skin2.js";
4
+ import { createShadowStyle } from "@videojs/utils/dom";
5
+ //#region src/presets/video/scaffold-skin.ts
6
+ /** Packaged scaffold video UI registered as `<video-scaffold-skin>`. */
7
+ var ScaffoldVideoSkinElement = class extends SkinElement {
8
+ static {
9
+ this.tagName = "video-scaffold-skin";
10
+ }
11
+ static {
12
+ this.styles = createShadowStyle(scaffold_skin_default);
13
+ }
14
+ static {
15
+ this.template = template;
16
+ }
17
+ };
18
+ //#endregion
19
+ export { ScaffoldVideoSkinElement };
20
+
21
+ //# sourceMappingURL=scaffold-skin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold-skin.js","names":["styles"],"sources":["../../../../src/presets/video/scaffold-skin.ts"],"sourcesContent":["import { createShadowStyle } from '@videojs/utils/dom';\n\nimport { template } from '../../internal/skins/scaffold-video/template';\nimport { SkinElement } from '../skin';\n\nimport styles from '../../define/video/scaffold-skin.css?inline';\n\n/** Packaged scaffold video UI registered as `<video-scaffold-skin>`. */\nexport class ScaffoldVideoSkinElement extends SkinElement {\n static readonly tagName = 'video-scaffold-skin';\n static styles = createShadowStyle(styles);\n static template = template;\n}\n\ndeclare global {\n interface HTMLElementTagNameMap {\n [ScaffoldVideoSkinElement.tagName]: ScaffoldVideoSkinElement;\n }\n}\n"],"mappings":";;;;;;AAQA,IAAa,2BAAb,cAA8C,YAAY;;EAC9B,KAAA,UAAA;;;EACV,KAAA,SAAA,kBAAkBA,qBAAM;;;EACtB,KAAA,WAAA;;AACpB"}
@@ -4,9 +4,9 @@ import { playerContext } from "../../player/context.js";
4
4
  import { PlayerController } from "../../player/controller.js";
5
5
  import { UIElement } from "../ui-element.js";
6
6
  import { sliderContext } from "../slider/context.js";
7
- import { TimeSliderCore, TimeSliderDataAttrs } from "@videojs/core";
8
- import { applyElementProps, applyStateDataAttrs, createSlider, getTimeSliderCSSVars, logMissingFeature, selectBuffer, selectControls, selectPlayback, selectTime } from "@videojs/core/dom";
9
- import { hasTimeRange } from "@videojs/media";
7
+ import { SliderCSSVars, TimeSliderCore, TimeSliderDataAttrs } from "@videojs/core";
8
+ import { applyElementProps, applyStateDataAttrs, createSlider, createTimeSliderSeek, getTimeSliderCSSVars, logMissingFeature, selectBuffer, selectControls, selectPlayback, selectTime } from "@videojs/core/dom";
9
+ import { hasTimeRange, isMediaPlaying } from "@videojs/media";
10
10
  import { ContextProvider } from "@videojs/element/context";
11
11
  import { translateText } from "@videojs/core/i18n";
12
12
  import { applyStyles } from "@videojs/utils/dom";
@@ -33,7 +33,9 @@ var TimeSliderElement = class extends UIElement {
33
33
  this.#timeState = new PlayerController(this, playerContext, selectTime);
34
34
  this.#bufferState = new PlayerController(this, playerContext, selectBuffer);
35
35
  this.#playbackState = new PlayerController(this, playerContext, selectPlayback);
36
+ this.#seek = createTimeSliderSeek(SliderCSSVars.fill);
36
37
  this.#i18n = new I18nController(this, i18nContext);
38
+ this.#cssVars = {};
37
39
  this.#slider = null;
38
40
  this.#disconnect = null;
39
41
  this.#releaseControlsLock = null;
@@ -71,7 +73,9 @@ var TimeSliderElement = class extends UIElement {
71
73
  #timeState;
72
74
  #bufferState;
73
75
  #playbackState;
76
+ #seek;
74
77
  #i18n;
78
+ #cssVars;
75
79
  #slider;
76
80
  #disconnect;
77
81
  #releaseControlsLock;
@@ -104,7 +108,11 @@ var TimeSliderElement = class extends UIElement {
104
108
  getLargeStepPercent: () => this.#core.getLargeStepPercent(),
105
109
  onValueCommit: (percent) => {
106
110
  const media = this.#timeState.value;
107
- if (media) media.seek(this.#core.rawValueFromPercent(percent));
111
+ if (media) {
112
+ const time = this.#core.rawValueFromPercent(percent);
113
+ this.#seek.seek(percent);
114
+ media.seek(time);
115
+ }
108
116
  },
109
117
  changeThrottle: this.changeThrottle,
110
118
  onPressStart: () => {
@@ -125,11 +133,13 @@ var TimeSliderElement = class extends UIElement {
125
133
  applyElementProps(this, this.#slider.rootProps, { signal });
126
134
  applyStyles(this, this.#slider.rootStyle);
127
135
  this.#slider.input.subscribe(() => this.requestUpdate(), { signal });
136
+ this.#seek.state.subscribe(() => this.requestUpdate(), { signal });
128
137
  if (!this.#timeState.value) logMissingFeature(this.localName, this.#timeState.displayName);
129
138
  }
130
139
  disconnectedCallback() {
131
140
  this.#releaseControlsVisibilityLock();
132
141
  this.#resumeIfDragPaused();
142
+ this.#seek.destroy();
133
143
  super.disconnectedCallback();
134
144
  this.#disconnect?.abort();
135
145
  this.#disconnect = null;
@@ -137,6 +147,7 @@ var TimeSliderElement = class extends UIElement {
137
147
  destroyCallback() {
138
148
  this.#releaseControlsVisibilityLock();
139
149
  this.#resumeIfDragPaused();
150
+ this.#seek.destroy();
140
151
  this.#slider?.destroy();
141
152
  super.destroyCallback();
142
153
  }
@@ -166,7 +177,11 @@ var TimeSliderElement = class extends UIElement {
166
177
  if (!this.#slider) return;
167
178
  const time = this.#timeState.value;
168
179
  const buffer = this.#bufferState.value;
169
- if (!time) return;
180
+ if (!time) {
181
+ this.#seek.destroy();
182
+ this.removeAttribute("data-playing");
183
+ return;
184
+ }
170
185
  this.#core.setInput(this.#slider.input.current);
171
186
  const media = {
172
187
  ...time,
@@ -177,9 +192,18 @@ var TimeSliderElement = class extends UIElement {
177
192
  };
178
193
  this.#core.setMedia(media);
179
194
  const state = this.#core.getState();
180
- const cssVars = getTimeSliderCSSVars(this.#slider.adjustForAlignment(state));
195
+ this.#seek.update(state.seeking, state.fillPercent, this);
196
+ const percent = this.#seek.state.current.percent;
197
+ this.toggleAttribute("data-playing", isMediaPlaying(this.#playbackState.value) && !state.disabled && !state.dragging && !state.seeking && percent === void 0);
198
+ const fill = percent === void 0 || state.dragging || state.disabled ? state : {
199
+ ...state,
200
+ fillPercent: percent
201
+ };
202
+ const cssVars = getTimeSliderCSSVars(this.#slider.adjustForAlignment(fill));
203
+ const styles = Object.fromEntries(Object.entries(cssVars).filter(([name, value]) => this.#cssVars[name] !== value));
204
+ applyStyles(this, styles);
205
+ this.#cssVars = cssVars;
181
206
  const thumbAttrs = this.#core.getAttrs(state);
182
- applyStyles(this, cssVars);
183
207
  applyStateDataAttrs(this, state, TimeSliderDataAttrs);
184
208
  this.#provider.setValue({
185
209
  state,
@@ -1 +1 @@
1
- {"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/time-slider/element.ts"],"sourcesContent":["import { TimeSliderCore, TimeSliderDataAttrs, type TimeSliderProps } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createSlider,\n getTimeSliderCSSVars,\n logMissingFeature,\n type SliderApi,\n selectBuffer,\n selectControls,\n selectPlayback,\n selectTime,\n} from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { hasTimeRange } from '@videojs/media';\nimport { applyStyles } from '@videojs/utils/dom';\nimport { formatTime } from '@videojs/utils/time';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { sliderContext } from '../slider/context';\nimport { UIElement } from '../ui-element';\n\n/**\n * @fires drag-start - Fired when a pointer drag starts.\n * @fires drag-end - Fired when a pointer drag ends.\n */\nexport class TimeSliderElement extends UIElement {\n static readonly tagName = 'media-time-slider';\n\n static override properties = {\n label: { type: String },\n changeThrottle: { type: Number, attribute: 'change-throttle' },\n step: { type: Number },\n largeStep: { type: Number, attribute: 'large-step' },\n orientation: { type: String },\n disabled: { type: Boolean },\n thumbAlignment: { type: String, attribute: 'thumb-alignment' },\n pauseOnDrag: { type: Boolean, attribute: 'pause-on-drag' },\n } satisfies PropertyDeclarationMap<Exclude<keyof TimeSliderProps, 'value' | 'min' | 'max'>>;\n\n label: Text | string = '';\n changeThrottle = TimeSliderCore.defaultProps.changeThrottle;\n step = TimeSliderCore.defaultProps.step;\n largeStep = TimeSliderCore.defaultProps.largeStep;\n orientation = TimeSliderCore.defaultProps.orientation;\n disabled = TimeSliderCore.defaultProps.disabled;\n thumbAlignment = TimeSliderCore.defaultProps.thumbAlignment;\n pauseOnDrag = TimeSliderCore.defaultProps.pauseOnDrag;\n\n readonly #core = new TimeSliderCore();\n readonly #controlsState = new PlayerController(this, playerContext, selectControls);\n readonly #provider = new ContextProvider(this, { context: sliderContext });\n readonly #timeState = new PlayerController(this, playerContext, selectTime);\n readonly #bufferState = new PlayerController(this, playerContext, selectBuffer);\n readonly #playbackState = new PlayerController(this, playerContext, selectPlayback);\n readonly #i18n = new I18nController(this, i18nContext);\n\n #slider: SliderApi | null = null;\n #disconnect: AbortController | null = null;\n #releaseControlsLock: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#disconnect = new AbortController();\n const signal = this.#disconnect.signal;\n\n this.#slider = createSlider({\n getElement: () => this,\n getThumbElement: () => this.querySelector<HTMLElement>('media-slider-thumb'),\n getOrientation: () => this.orientation,\n isDisabled: () => {\n const time = this.#timeState.value;\n const buffer = this.#bufferState.value;\n\n // `bufferFeature` is optional: compositions that omit it still get a working slider, with an empty buffer.\n return this.disabled || !time || !hasTimeRange({ ...time, ...(buffer ?? { buffered: [], seekable: [] }) });\n },\n getPercent: () => {\n const media = this.#timeState.value;\n if (!media) return 0;\n\n return this.#core.percentFromValue(media.currentTime);\n },\n getStepPercent: () => this.#core.getStepPercent(),\n getLargeStepPercent: () => this.#core.getLargeStepPercent(),\n onValueCommit: (percent) => {\n const media = this.#timeState.value;\n\n if (media) media.seek(this.#core.rawValueFromPercent(percent));\n },\n changeThrottle: this.changeThrottle,\n onPressStart: () => {\n this.#releaseControlsLock ??= this.#controlsState.value?.requestControlsLock() ?? null;\n },\n onPressEnd: () => this.#releaseControlsVisibilityLock(),\n onDragStart: () => {\n this.#core.startDrag(this.#playbackState.value);\n this.dispatchEvent(new CustomEvent('drag-start', { bubbles: true }));\n },\n onDragEnd: () => {\n this.#core.endDrag(this.#playbackState.value);\n this.dispatchEvent(new CustomEvent('drag-end', { bubbles: true }));\n },\n adjustPercent: (raw, thumbSize, trackSize) => this.#core.adjustPercentForAlignment(raw, thumbSize, trackSize),\n onResize: () => this.requestUpdate(),\n });\n\n applyElementProps(this, this.#slider.rootProps, { signal });\n applyStyles(this, this.#slider.rootStyle);\n this.#slider.input.subscribe(() => this.requestUpdate(), { signal });\n\n if (__DEV__ && !this.#timeState.value) {\n logMissingFeature(this.localName, this.#timeState.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n this.#releaseControlsVisibilityLock();\n this.#resumeIfDragPaused();\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#releaseControlsVisibilityLock();\n this.#resumeIfDragPaused();\n this.#slider?.destroy();\n super.destroyCallback();\n }\n\n // createSlider's destroy() does not fire onDragEnd, so a teardown mid-drag\n // would leave playback paused. Called from both disconnect and destroy paths\n // before super so the PlayerController is still attached.\n #resumeIfDragPaused(): void {\n this.#core.endDrag(this.#playbackState.value);\n }\n\n #releaseControlsVisibilityLock(): void {\n this.#releaseControlsLock?.();\n this.#releaseControlsLock = null;\n }\n\n protected override willUpdate(_changed: PropertyValues): void {\n super.willUpdate(_changed);\n this.#core.setProps({\n label: this.label,\n changeThrottle: this.changeThrottle,\n step: this.step,\n largeStep: this.largeStep,\n orientation: this.orientation,\n disabled: this.disabled,\n thumbAlignment: this.thumbAlignment,\n pauseOnDrag: this.pauseOnDrag,\n });\n this.#core.setFormatLocale(this.#i18n.locale);\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n if (!this.#slider) return;\n\n const time = this.#timeState.value;\n const buffer = this.#bufferState.value;\n\n if (!time) return;\n\n this.#core.setInput(this.#slider.input.current);\n const media = { ...time, ...(buffer ?? { buffered: [], seekable: [] }) };\n\n this.#core.setMedia(media);\n const state = this.#core.getState();\n\n const cssVars = getTimeSliderCSSVars(this.#slider.adjustForAlignment(state));\n const thumbAttrs = this.#core.getAttrs(state);\n\n applyStyles(this, cssVars);\n\n // Domain-specific data attributes on root (includes data-seeking).\n applyStateDataAttrs(this, state, TimeSliderDataAttrs);\n\n // Provide context to child elements with base slider data attrs.\n this.#provider.setValue({\n state,\n stateAttrMap: TimeSliderDataAttrs,\n pointerValue: this.#core.rawValueFromPercent(state.pointerPercent),\n thumbAttrs: {\n ...thumbAttrs,\n 'aria-label': translateText(thumbAttrs['aria-label'], this.#i18n.value),\n 'aria-valuetext': translateText(\n thumbAttrs['aria-valuetext'],\n this.#i18n.value,\n this.#core.getValueTextParams(state)\n ),\n },\n thumbProps: this.#slider.thumbProps,\n formatValue: (value) => formatTime(value, state.duration, { locale: this.#i18n.locale }),\n });\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"element.js","names":[],"sources":["../../../../src/ui/time-slider/element.ts"],"sourcesContent":["import { SliderCSSVars, TimeSliderCore, TimeSliderDataAttrs, type TimeSliderProps } from '@videojs/core';\nimport {\n applyElementProps,\n applyStateDataAttrs,\n createSlider,\n createTimeSliderSeek,\n getTimeSliderCSSVars,\n logMissingFeature,\n type SliderApi,\n selectBuffer,\n selectControls,\n selectPlayback,\n selectTime,\n} from '@videojs/core/dom';\nimport { type Text, translateText } from '@videojs/core/i18n';\nimport type { PropertyDeclarationMap, PropertyValues } from '@videojs/element';\nimport { ContextProvider } from '@videojs/element/context';\nimport { hasTimeRange, isMediaPlaying } from '@videojs/media';\nimport { applyStyles } from '@videojs/utils/dom';\nimport { formatTime } from '@videojs/utils/time';\n\nimport { i18nContext } from '../../i18n/context';\nimport { I18nController } from '../../i18n/controller';\nimport { playerContext } from '../../player/context';\nimport { PlayerController } from '../../player/controller';\nimport { sliderContext } from '../slider/context';\nimport { UIElement } from '../ui-element';\n\n/**\n * @fires drag-start - Fired when a pointer drag starts.\n * @fires drag-end - Fired when a pointer drag ends.\n */\nexport class TimeSliderElement extends UIElement {\n static readonly tagName = 'media-time-slider';\n\n static override properties = {\n label: { type: String },\n changeThrottle: { type: Number, attribute: 'change-throttle' },\n step: { type: Number },\n largeStep: { type: Number, attribute: 'large-step' },\n orientation: { type: String },\n disabled: { type: Boolean },\n thumbAlignment: { type: String, attribute: 'thumb-alignment' },\n pauseOnDrag: { type: Boolean, attribute: 'pause-on-drag' },\n } satisfies PropertyDeclarationMap<Exclude<keyof TimeSliderProps, 'value' | 'min' | 'max'>>;\n\n label: Text | string = '';\n changeThrottle = TimeSliderCore.defaultProps.changeThrottle;\n step = TimeSliderCore.defaultProps.step;\n largeStep = TimeSliderCore.defaultProps.largeStep;\n orientation = TimeSliderCore.defaultProps.orientation;\n disabled = TimeSliderCore.defaultProps.disabled;\n thumbAlignment = TimeSliderCore.defaultProps.thumbAlignment;\n pauseOnDrag = TimeSliderCore.defaultProps.pauseOnDrag;\n\n readonly #core = new TimeSliderCore();\n readonly #controlsState = new PlayerController(this, playerContext, selectControls);\n readonly #provider = new ContextProvider(this, { context: sliderContext });\n readonly #timeState = new PlayerController(this, playerContext, selectTime);\n readonly #bufferState = new PlayerController(this, playerContext, selectBuffer);\n readonly #playbackState = new PlayerController(this, playerContext, selectPlayback);\n readonly #seek = createTimeSliderSeek(SliderCSSVars.fill);\n readonly #i18n = new I18nController(this, i18nContext);\n\n #cssVars: Record<string, string> = {};\n #slider: SliderApi | null = null;\n #disconnect: AbortController | null = null;\n #releaseControlsLock: (() => void) | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n if (this.destroyed) return;\n\n this.#disconnect = new AbortController();\n const signal = this.#disconnect.signal;\n\n this.#slider = createSlider({\n getElement: () => this,\n getThumbElement: () => this.querySelector<HTMLElement>('media-slider-thumb'),\n getOrientation: () => this.orientation,\n isDisabled: () => {\n const time = this.#timeState.value;\n const buffer = this.#bufferState.value;\n\n // `bufferFeature` is optional: compositions that omit it still get a working slider, with an empty buffer.\n return this.disabled || !time || !hasTimeRange({ ...time, ...(buffer ?? { buffered: [], seekable: [] }) });\n },\n getPercent: () => {\n const media = this.#timeState.value;\n if (!media) return 0;\n\n return this.#core.percentFromValue(media.currentTime);\n },\n getStepPercent: () => this.#core.getStepPercent(),\n getLargeStepPercent: () => this.#core.getLargeStepPercent(),\n onValueCommit: (percent) => {\n const media = this.#timeState.value;\n\n if (media) {\n const time = this.#core.rawValueFromPercent(percent);\n\n this.#seek.seek(percent);\n media.seek(time);\n }\n },\n changeThrottle: this.changeThrottle,\n onPressStart: () => {\n this.#releaseControlsLock ??= this.#controlsState.value?.requestControlsLock() ?? null;\n },\n onPressEnd: () => this.#releaseControlsVisibilityLock(),\n onDragStart: () => {\n this.#core.startDrag(this.#playbackState.value);\n this.dispatchEvent(new CustomEvent('drag-start', { bubbles: true }));\n },\n onDragEnd: () => {\n this.#core.endDrag(this.#playbackState.value);\n this.dispatchEvent(new CustomEvent('drag-end', { bubbles: true }));\n },\n adjustPercent: (raw, thumbSize, trackSize) => this.#core.adjustPercentForAlignment(raw, thumbSize, trackSize),\n onResize: () => this.requestUpdate(),\n });\n\n applyElementProps(this, this.#slider.rootProps, { signal });\n applyStyles(this, this.#slider.rootStyle);\n this.#slider.input.subscribe(() => this.requestUpdate(), { signal });\n this.#seek.state.subscribe(() => this.requestUpdate(), { signal });\n\n if (__DEV__ && !this.#timeState.value) {\n logMissingFeature(this.localName, this.#timeState.displayName!);\n }\n }\n\n override disconnectedCallback(): void {\n this.#releaseControlsVisibilityLock();\n this.#resumeIfDragPaused();\n this.#seek.destroy();\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n override destroyCallback(): void {\n this.#releaseControlsVisibilityLock();\n this.#resumeIfDragPaused();\n this.#seek.destroy();\n this.#slider?.destroy();\n super.destroyCallback();\n }\n\n // createSlider's destroy() does not fire onDragEnd, so a teardown mid-drag\n // would leave playback paused. Called from both disconnect and destroy paths\n // before super so the PlayerController is still attached.\n #resumeIfDragPaused(): void {\n this.#core.endDrag(this.#playbackState.value);\n }\n\n #releaseControlsVisibilityLock(): void {\n this.#releaseControlsLock?.();\n this.#releaseControlsLock = null;\n }\n\n protected override willUpdate(_changed: PropertyValues): void {\n super.willUpdate(_changed);\n this.#core.setProps({\n label: this.label,\n changeThrottle: this.changeThrottle,\n step: this.step,\n largeStep: this.largeStep,\n orientation: this.orientation,\n disabled: this.disabled,\n thumbAlignment: this.thumbAlignment,\n pauseOnDrag: this.pauseOnDrag,\n });\n this.#core.setFormatLocale(this.#i18n.locale);\n }\n\n protected override update(_changed: PropertyValues): void {\n super.update(_changed);\n\n if (!this.#slider) return;\n\n const time = this.#timeState.value;\n const buffer = this.#bufferState.value;\n\n if (!time) {\n this.#seek.destroy();\n this.removeAttribute('data-playing');\n return;\n }\n\n this.#core.setInput(this.#slider.input.current);\n const media = { ...time, ...(buffer ?? { buffered: [], seekable: [] }) };\n\n this.#core.setMedia(media);\n const state = this.#core.getState();\n\n this.#seek.update(state.seeking, state.fillPercent, this);\n const percent = this.#seek.state.current.percent;\n\n this.toggleAttribute(\n 'data-playing',\n isMediaPlaying(this.#playbackState.value) &&\n !state.disabled &&\n !state.dragging &&\n !state.seeking &&\n percent === undefined\n );\n\n const fill = percent === undefined || state.dragging || state.disabled ? state : { ...state, fillPercent: percent };\n const cssVars = getTimeSliderCSSVars(this.#slider.adjustForAlignment(fill));\n const styles = Object.fromEntries(Object.entries(cssVars).filter(([name, value]) => this.#cssVars[name] !== value));\n\n applyStyles(this, styles);\n this.#cssVars = cssVars;\n\n const thumbAttrs = this.#core.getAttrs(state);\n\n // Domain-specific data attributes on root (includes data-seeking).\n applyStateDataAttrs(this, state, TimeSliderDataAttrs);\n\n // Provide context to child elements with base slider data attrs.\n this.#provider.setValue({\n state,\n stateAttrMap: TimeSliderDataAttrs,\n pointerValue: this.#core.rawValueFromPercent(state.pointerPercent),\n thumbAttrs: {\n ...thumbAttrs,\n 'aria-label': translateText(thumbAttrs['aria-label'], this.#i18n.value),\n 'aria-valuetext': translateText(\n thumbAttrs['aria-valuetext'],\n this.#i18n.value,\n this.#core.getValueTextParams(state)\n ),\n },\n thumbProps: this.#slider.thumbProps,\n formatValue: (value) => formatTime(value, state.duration, { locale: this.#i18n.locale }),\n });\n }\n}\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  //#region src/version.ts
2
2
  const readVersion = () => {
3
3
  try {
4
- return "10.0.1";
4
+ return "10.1.0";
5
5
  } catch {}
6
6
  return "UNKNOWN";
7
7
  };
package/docs/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # @videojs/html documentation
2
2
 
3
- Bundled markdown documentation for `@videojs/html` v10.0.1.
3
+ Bundled markdown documentation for `@videojs/html` v10.1.0.
4
4
 
5
5
  Start at [`./llms.txt`](./llms.txt) — it's the structured index of every page in this directory.
6
6
 
@@ -121,7 +121,7 @@ The old `npx @videojs/cli docs` workflow was removed. `@videojs/cli` now contain
121
121
 
122
122
  If your agent does not use the skill, start a new session or reload plugins, then ask it to use the Video.js skill explicitly. If it writes `videojs()`, `data-setup`, `registerPlugin`, or other Video.js 8 APIs, ask it to read the installed `llms.txt` before changing code.
123
123
 
124
- Report problems with the skill in the [videojs/skills repository](https://github.com/videojs/skills/issues). Report package and documentation problems in [videojs/v10](https://github.com/videojs/v10/issues).
124
+ Report problems with the skill in the [videojs/skills repository](https://github.com/videojs/skills/issues). Report package and documentation problems in [videojs/video.js](https://github.com/videojs/video.js/issues).
125
125
 
126
126
  ## Use the docs
127
127
 
@@ -36,8 +36,8 @@ A skin bundle registers every UI element its skin is built from. Any element the
36
36
  Each [UI element](./ui-components.md) is its own bundle under `ui/`, for markup that a skin bundle does not already cover: a player-only bundle, [skin source](./customize-skins.md#style-skin-source) that adds a component the packaged skin lacks, or a [dialog](../reference/components/dialog.md) your page opens beside a packaged skin.
37
37
 
38
38
  ```html
39
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/video-player.js"></script>
40
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/ui/play-button.js"></script>
39
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/video-player.js"></script>
40
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/ui/play-button.js"></script>
41
41
  ```
42
42
 
43
43
  Each path mirrors its npm subpath: `ui/play-button.js` registers the element that `@videojs/html/ui/play-button` does. Compound components list one bundle per part in their reference page’s Import section, and all of the bundles share chunks with the player.
@@ -47,8 +47,8 @@ Each path mirrors its npm subpath: `ui/play-button.js` registers the element tha
47
47
  The default presets play through the browser’s own `<video>` and `<audio>`. Every other [media component](./media-sources.md) is its own bundle under `media/`, loaded beside the player bundle:
48
48
 
49
49
  ```html
50
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/video.js"></script>
51
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/hlsjs-video.js"></script>
50
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/video.js"></script>
51
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/media/hlsjs-video.js"></script>
52
52
  ```
53
53
 
54
54
  Each path mirrors its npm subpath. Elements with more than one playback engine keep the extra flavors in a directory named for the element, such as `media/mux-video/spf.js`. Load one flavor per page: every flavor claims the same tag name, and the first registration wins.
@@ -58,9 +58,9 @@ Each path mirrors its npm subpath. Elements with more than one playback engine k
58
58
  Each [extension](./architecture.md) is its own bundle under `extensions/`, loaded beside the player and media bundles:
59
59
 
60
60
  ```html
61
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/video.js"></script>
62
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/media/mux-video.js"></script>
63
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/extensions/mux-data.js"></script>
61
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/video.js"></script>
62
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/media/mux-video.js"></script>
63
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/extensions/mux-data.js"></script>
64
64
  ```
65
65
 
66
66
  As with media, each path mirrors its npm subpath: `extensions/mux-data.js` registers the element that `@videojs/html/extensions/mux-data` does.
@@ -70,8 +70,8 @@ As with media, each path mirrors its npm subpath: `extensions/mux-data.js` regis
70
70
  English ships inside the skin bundles. Each other locale is a bundle under `locales/` that registers its translations on import. Load it before the player script to avoid a flash of English:
71
71
 
72
72
  ```html
73
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/locales/es.js"></script>
74
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/video.js"></script>
73
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/locales/es.js"></script>
74
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/video.js"></script>
75
75
  ```
76
76
 
77
77
  One bundle exists per locale pack, plus bare-language aliases such as `pt`. For custom strings, see [Internationalize the player](./internationalization.md).
@@ -30,7 +30,7 @@ npx @videojs/cli agents init
30
30
 
31
31
  - `project`: Whether to adapt the current project or scaffold a new one. New projects need a named app setup. Values: `new`, `existing`. Default: existing.
32
32
  - `preset`: The player configuration and control set. Values: `video`, `audio`, `live-video`, `live-audio`, `background-video`. Default: video.
33
- - `skin`: The visual skin. Neutral has cleaner surfaces and the same controls as Default. Values: `default`, `neutral`, `compat`, `none`. Default: default. Applies when preset is not background-video.
33
+ - `skin`: The visual skin. Neutral has cleaner surfaces and the same controls as Default. Values: `default`, `neutral`, `compat`, `scaffold`, `none`. Default: default. Applies when preset is not background-video.
34
34
  - `media`: The media source or playback adapter. See the preset compatibility map below. Values: `background-video`, `hls-background-video`, `cloudflare`, `dash`, `hls`, `html5-audio`, `html5-video`, `mux-audio`, `mux-background-video`, `mux-video`, `spotify`, `tiktok`, `twitch`, `vimeo`, `youtube`. Default: the selected preset's first compatible media source.
35
35
  - `extensions`: A comma-separated list of optional player extensions compatible with the selected player. Pass `none` when no extension is needed. Values: `none`, `google-cast`, `mux-data`. Default: mux-data for Mux media; none otherwise (reported as defaulted).
36
36
  - `source-url`: The http:// or https:// media URL placed in the generated player example. Pass `demo` to choose the Video.js demo source for the selected media explicitly. Default: the Video.js demo source for the selected media (reported as defaulted).
@@ -89,7 +89,7 @@ Defaulted options: project, preset, skin, source-url, media, extensions, templat
89
89
  ## Reproduce or change these instructions
90
90
 
91
91
  ```sh
92
- npx @videojs/cli@10.0.1 agents init --method cdn --framework html --project existing --preset video --skin default --media html5-video --extensions none --source-url https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4 --template none
92
+ npx @videojs/cli@10.1.0 agents init --method cdn --framework html --project existing --preset video --skin default --media html5-video --extensions none --source-url https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4 --template none
93
93
  ```
94
94
 
95
95
  ## Load Video.js
@@ -101,7 +101,7 @@ Add these module scripts to the page head. Module scripts are deferred, so they
101
101
  _Merge this into the page `<head>`._
102
102
 
103
103
  ```html
104
- <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.1/video.js"></script>
104
+ <script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/video.js"></script>
105
105
  ```
106
106
 
107
107
  ## Add your player
@@ -129,7 +129,7 @@ _Merge this into the page `<body>` where the player should appear._
129
129
  and display of the media. They are easily swappable
130
130
  to handle different sources.
131
131
  -->
132
- <video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" playsinline></video>
132
+ <video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" playsinline><a href="https://videojs.org/help">Video player not working?</a></video>
133
133
  </video-skin>
134
134
  </video-player>
135
135
  ```
@@ -31,7 +31,7 @@ npx @videojs/cli agents init
31
31
  - `framework`: The application framework that will host the player. React installs @videojs/react; HTML, Vue, and Svelte install @videojs/html. Values: `react`, `html`. Default: react.
32
32
  - `project`: Whether to adapt the current project or scaffold a new one. New projects need a named app setup. Values: `new`, `existing`. Default: existing.
33
33
  - `preset`: The player configuration and control set. Values: `video`, `audio`, `live-video`, `live-audio`. Default: video.
34
- - `skin`: The visual skin. Neutral has cleaner surfaces and the same controls as Default. Values: `default`, `neutral`, `compat`. Default: default. Applies when preset is not background-video.
34
+ - `skin`: The visual skin. Neutral has cleaner surfaces and the same controls as Default. Values: `default`, `neutral`, `compat`, `scaffold`. Default: default. Applies when preset is not background-video.
35
35
  - `media`: The media source or playback adapter. See the preset compatibility map below. Values: `background-video`, `hls-background-video`, `cloudflare`, `dash`, `hls`, `html5-audio`, `html5-video`, `mux-audio`, `mux-background-video`, `mux-video`, `spotify`, `tiktok`, `twitch`, `vimeo`, `youtube`. Default: the selected preset's first compatible media source.
36
36
  - `extensions`: A comma-separated list of optional player extensions compatible with the selected player. Pass `none` when no extension is needed. Values: `none`, `google-cast`, `mux-data`. Default: mux-data for Mux media; none otherwise (reported as defaulted).
37
37
  - `source-url`: The http:// or https:// media URL placed in the generated player example. Pass `demo` to choose the Video.js demo source for the selected media explicitly. Default: the Video.js demo source for the selected media (reported as defaulted).
@@ -94,7 +94,7 @@ Defaulted options: project, preset, skin, source-url, media, extensions, templat
94
94
  ## Reproduce or change these instructions
95
95
 
96
96
  ```sh
97
- npx @videojs/cli@10.0.1 agents init --method shadcn --framework html --project existing --preset video --skin default --media html5-video --extensions none --source-url https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4 --package-manager pnpm --template vite --styling css
97
+ npx @videojs/cli@10.1.0 agents init --method shadcn --framework html --project existing --preset video --skin default --media html5-video --extensions none --source-url https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4 --package-manager pnpm --template vite --styling css
98
98
  ```
99
99
 
100
100
  ## Configure app aliases
@@ -229,7 +229,7 @@ Use the aliases.components value from components.json when it differs from the g
229
229
  _Replace `<!-- Add a compatible media component here. -->` with this block._
230
230
 
231
231
  ```html
232
- <video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" playsinline></video>
232
+ <video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" playsinline><a href="https://videojs.org/help">Video player not working?</a></video>
233
233
  ```
234
234
 
235
235
  ### `src/components/videojs/video/skin.html`