@videojs/html 10.0.0-beta.29 → 10.0.0-beta.30

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 (667) hide show
  1. package/cdn/{ar-BgO-vdw6.js → ar-BbHGxPgW.js} +2 -2
  2. package/cdn/{ar-BgO-vdw6.js.map → ar-BbHGxPgW.js.map} +1 -1
  3. package/cdn/{ar-DGKbeOEU.js → ar-DsPINVvV.js} +2 -2
  4. package/cdn/{ar-DGKbeOEU.js.map → ar-DsPINVvV.js.map} +1 -1
  5. package/cdn/audio-headless.dev.js +1 -1
  6. package/cdn/audio-headless.js +1 -1
  7. package/cdn/audio-minimal-ui.dev.js +1 -1
  8. package/cdn/audio-minimal-ui.js +1 -1
  9. package/cdn/audio-minimal.dev.js +4 -4
  10. package/cdn/audio-minimal.dev.js.map +1 -1
  11. package/cdn/audio-minimal.js +1 -1
  12. package/cdn/audio-minimal.js.map +1 -1
  13. package/cdn/audio-ui.dev.js +1 -1
  14. package/cdn/audio-ui.js +1 -1
  15. package/cdn/audio.dev.js +4 -4
  16. package/cdn/audio.dev.js.map +1 -1
  17. package/cdn/audio.js +1 -1
  18. package/cdn/audio.js.map +1 -1
  19. package/cdn/{az-BXA58gAV.js → az-BNG9I9VB.js} +2 -2
  20. package/cdn/{az-BXA58gAV.js.map → az-BNG9I9VB.js.map} +1 -1
  21. package/cdn/{az-BT93Xmvh.js → az-q6l4N3j1.js} +2 -2
  22. package/cdn/{az-BT93Xmvh.js.map → az-q6l4N3j1.js.map} +1 -1
  23. package/cdn/background.dev.js +1 -1
  24. package/cdn/background.js +1 -1
  25. package/cdn/{bg-CNMY77ir.js → bg-BdKU1ynW.js} +2 -2
  26. package/cdn/{bg-CNMY77ir.js.map → bg-BdKU1ynW.js.map} +1 -1
  27. package/cdn/{bg-B3I4SlRq.js → bg-DCWtl1c4.js} +2 -2
  28. package/cdn/{bg-B3I4SlRq.js.map → bg-DCWtl1c4.js.map} +1 -1
  29. package/cdn/{bn-KcCmQhYd.js → bn-BbmORCrv.js} +2 -2
  30. package/cdn/{bn-KcCmQhYd.js.map → bn-BbmORCrv.js.map} +1 -1
  31. package/cdn/{bn-CcLIScl6.js → bn-DZmQ9OJ-.js} +2 -2
  32. package/cdn/{bn-CcLIScl6.js.map → bn-DZmQ9OJ-.js.map} +1 -1
  33. package/cdn/{bs-BGd6Lc0X.js → bs-BvptjSqN.js} +2 -2
  34. package/cdn/{bs-BGd6Lc0X.js.map → bs-BvptjSqN.js.map} +1 -1
  35. package/cdn/{bs-CS5F7Fa6.js → bs-Cw5PmwUl.js} +2 -2
  36. package/cdn/{bs-CS5F7Fa6.js.map → bs-Cw5PmwUl.js.map} +1 -1
  37. package/cdn/{ca-BIdQJZV-.js → ca-Cn5dI2Qs.js} +2 -2
  38. package/cdn/{ca-BIdQJZV-.js.map → ca-Cn5dI2Qs.js.map} +1 -1
  39. package/cdn/{ca-tFUfQ2mI.js → ca-CoCZNriH.js} +2 -2
  40. package/cdn/{ca-tFUfQ2mI.js.map → ca-CoCZNriH.js.map} +1 -1
  41. package/cdn/compounds-CHlzbAKu.js +8 -0
  42. package/cdn/compounds-CHlzbAKu.js.map +1 -0
  43. package/cdn/{compounds-C73u1MeO.js → compounds-D1FPw7jg.js} +99 -109
  44. package/cdn/compounds-D1FPw7jg.js.map +1 -0
  45. package/cdn/{create-player-Db1CIvlK.js → create-player-5UrHNqBI.js} +704 -704
  46. package/cdn/create-player-5UrHNqBI.js.map +1 -0
  47. package/cdn/create-player-LjvbIxIq.js +2 -0
  48. package/cdn/create-player-LjvbIxIq.js.map +1 -0
  49. package/cdn/{cs-B9lsmY_k.js → cs-BV3Sx3fM.js} +2 -2
  50. package/cdn/{cs-B9lsmY_k.js.map → cs-BV3Sx3fM.js.map} +1 -1
  51. package/cdn/{cs-CGi94LND.js → cs-D5U7GOvT.js} +2 -2
  52. package/cdn/{cs-CGi94LND.js.map → cs-D5U7GOvT.js.map} +1 -1
  53. package/cdn/{cy-m5eMZq7d.js → cy-C1ARfOdw.js} +2 -2
  54. package/cdn/{cy-m5eMZq7d.js.map → cy-C1ARfOdw.js.map} +1 -1
  55. package/cdn/{cy-DW6qAdUj.js → cy-DudRluPj.js} +2 -2
  56. package/cdn/{cy-DW6qAdUj.js.map → cy-DudRluPj.js.map} +1 -1
  57. package/cdn/{da-B5RntG8L.js → da-B7ZwuW3M.js} +2 -2
  58. package/cdn/{da-B5RntG8L.js.map → da-B7ZwuW3M.js.map} +1 -1
  59. package/cdn/{da-BW7obU8g.js → da-II10K6Ey.js} +2 -2
  60. package/cdn/{da-BW7obU8g.js.map → da-II10K6Ey.js.map} +1 -1
  61. package/cdn/{de-D3KzJ5Tz.js → de-B6OPMaJ5.js} +2 -2
  62. package/cdn/{de-D3KzJ5Tz.js.map → de-B6OPMaJ5.js.map} +1 -1
  63. package/cdn/{de-B1BbfHoj.js → de-Dp0rNs6I.js} +2 -2
  64. package/cdn/{de-B1BbfHoj.js.map → de-Dp0rNs6I.js.map} +1 -1
  65. package/cdn/device-pixel-ratio-BuD3pqk8.js +2 -0
  66. package/cdn/device-pixel-ratio-BuD3pqk8.js.map +1 -0
  67. package/cdn/device-pixel-ratio-mmUkCbE0.js +48 -0
  68. package/cdn/device-pixel-ratio-mmUkCbE0.js.map +1 -0
  69. package/cdn/{el-DpHi5eUV.js → el-EOboxCMK.js} +2 -2
  70. package/cdn/{el-DpHi5eUV.js.map → el-EOboxCMK.js.map} +1 -1
  71. package/cdn/{el-B0opiKbz.js → el-KnLx85RQ.js} +2 -2
  72. package/cdn/{el-B0opiKbz.js.map → el-KnLx85RQ.js.map} +1 -1
  73. package/cdn/{error-surface-D0bo71gD.js → error-surface-BOIu7qNS.js} +30 -13
  74. package/cdn/error-surface-BOIu7qNS.js.map +1 -0
  75. package/cdn/{error-surface-BID4D3DW.js → error-surface-CK9nYgD5.js} +2 -2
  76. package/cdn/error-surface-CK9nYgD5.js.map +1 -0
  77. package/cdn/{es-DPmLLGjd.js → es--93P_KGd.js} +2 -2
  78. package/cdn/{es-DPmLLGjd.js.map → es--93P_KGd.js.map} +1 -1
  79. package/cdn/{es-R4DSKG7w.js → es-COk6VYCt.js} +2 -2
  80. package/cdn/{es-R4DSKG7w.js.map → es-COk6VYCt.js.map} +1 -1
  81. package/cdn/{et-DQHjBg68.js → et-B_7oInYP.js} +2 -2
  82. package/cdn/{et-DQHjBg68.js.map → et-B_7oInYP.js.map} +1 -1
  83. package/cdn/{et-Ba6ZgMTe.js → et-aUy-aqQn.js} +2 -2
  84. package/cdn/{et-Ba6ZgMTe.js.map → et-aUy-aqQn.js.map} +1 -1
  85. package/cdn/{eu-CBUcm8xq.js → eu-B6ITLPO5.js} +2 -2
  86. package/cdn/{eu-CBUcm8xq.js.map → eu-B6ITLPO5.js.map} +1 -1
  87. package/cdn/{eu-DXctohCN.js → eu-BG9wftF5.js} +2 -2
  88. package/cdn/{eu-DXctohCN.js.map → eu-BG9wftF5.js.map} +1 -1
  89. package/cdn/{fa-BSekhYli.js → fa-Dh0ufSh-.js} +2 -2
  90. package/cdn/{fa-BSekhYli.js.map → fa-Dh0ufSh-.js.map} +1 -1
  91. package/cdn/{fa-DVErbQrK.js → fa-Vvr1px4j.js} +2 -2
  92. package/cdn/{fa-DVErbQrK.js.map → fa-Vvr1px4j.js.map} +1 -1
  93. package/cdn/{fi-CvnyRW00.js → fi-BG_ciEXf.js} +2 -2
  94. package/cdn/{fi-CvnyRW00.js.map → fi-BG_ciEXf.js.map} +1 -1
  95. package/cdn/{fi-CFpiNsK2.js → fi-XtLm7xkM.js} +2 -2
  96. package/cdn/{fi-CFpiNsK2.js.map → fi-XtLm7xkM.js.map} +1 -1
  97. package/cdn/{fr-V1tRQlCS.js → fr-BXWr8Jqu.js} +2 -2
  98. package/cdn/{fr-V1tRQlCS.js.map → fr-BXWr8Jqu.js.map} +1 -1
  99. package/cdn/{fr-DFpP-osm.js → fr-CHcVddjH.js} +2 -2
  100. package/cdn/{fr-DFpP-osm.js.map → fr-CHcVddjH.js.map} +1 -1
  101. package/cdn/{gd-BSg8cDZO.js → gd-4GF6aH0c.js} +2 -2
  102. package/cdn/{gd-BSg8cDZO.js.map → gd-4GF6aH0c.js.map} +1 -1
  103. package/cdn/{gd-qpj49Ajf.js → gd-DjfDHZSD.js} +2 -2
  104. package/cdn/{gd-qpj49Ajf.js.map → gd-DjfDHZSD.js.map} +1 -1
  105. package/cdn/{gesture-element-CeRy1IVs.js → gesture-element-BbNy1Pjt.js} +2 -2
  106. package/cdn/{gesture-element-CeRy1IVs.js.map → gesture-element-BbNy1Pjt.js.map} +1 -1
  107. package/cdn/{gesture-element-DB67OYCE.js → gesture-element-KdpjbbBD.js} +3 -3
  108. package/cdn/{gesture-element-DB67OYCE.js.map → gesture-element-KdpjbbBD.js.map} +1 -1
  109. package/cdn/{gl-BkUKK3Id.js → gl-CMgj66_6.js} +2 -2
  110. package/cdn/{gl-BkUKK3Id.js.map → gl-CMgj66_6.js.map} +1 -1
  111. package/cdn/{gl-9SEblv-S.js → gl-D9ioIzwX.js} +2 -2
  112. package/cdn/{gl-9SEblv-S.js.map → gl-D9ioIzwX.js.map} +1 -1
  113. package/cdn/{he-1PXxurjR.js → he-CfWrcfG4.js} +2 -2
  114. package/cdn/{he-1PXxurjR.js.map → he-CfWrcfG4.js.map} +1 -1
  115. package/cdn/{he-DA_NFjk3.js → he-DfwOOgbT.js} +2 -2
  116. package/cdn/{he-DA_NFjk3.js.map → he-DfwOOgbT.js.map} +1 -1
  117. package/cdn/{hi-u7gnYTbQ.js → hi-BZ3n5dDB.js} +2 -2
  118. package/cdn/{hi-u7gnYTbQ.js.map → hi-BZ3n5dDB.js.map} +1 -1
  119. package/cdn/{hi-qm1t0A8G.js → hi-D3c9qx7l.js} +2 -2
  120. package/cdn/{hi-qm1t0A8G.js.map → hi-D3c9qx7l.js.map} +1 -1
  121. package/cdn/{hr-BlnRGxrs.js → hr-DEA0U32S.js} +2 -2
  122. package/cdn/{hr-BlnRGxrs.js.map → hr-DEA0U32S.js.map} +1 -1
  123. package/cdn/{hr-YlMHxjnx.js → hr-WZJQxYNC.js} +2 -2
  124. package/cdn/{hr-YlMHxjnx.js.map → hr-WZJQxYNC.js.map} +1 -1
  125. package/cdn/{hu-Cpl4civp.js → hu-Ci9TDNn-.js} +2 -2
  126. package/cdn/{hu-Cpl4civp.js.map → hu-Ci9TDNn-.js.map} +1 -1
  127. package/cdn/{hu-CfmcttWR.js → hu-XOjo5JlM.js} +2 -2
  128. package/cdn/{hu-CfmcttWR.js.map → hu-XOjo5JlM.js.map} +1 -1
  129. package/cdn/{i18n-D0nhPa0m.js → i18n-DeI9j-ko.js} +2 -2
  130. package/cdn/{i18n-D0nhPa0m.js.map → i18n-DeI9j-ko.js.map} +1 -1
  131. package/cdn/i18n-R3TQ8P2f.js +2 -0
  132. package/cdn/{i18n-CpBDXf6M.js.map → i18n-R3TQ8P2f.js.map} +1 -1
  133. package/cdn/i18n.dev.js +53 -53
  134. package/cdn/i18n.js +1 -1
  135. package/cdn/{id-COi2HloV.js → id-D2Z0jj2m.js} +2 -2
  136. package/cdn/{id-COi2HloV.js.map → id-D2Z0jj2m.js.map} +1 -1
  137. package/cdn/{id-Be_i6jhO.js → id-D9XC3sJi.js} +2 -2
  138. package/cdn/{id-Be_i6jhO.js.map → id-D9XC3sJi.js.map} +1 -1
  139. package/cdn/{it-B18weK94.js → it-CDVRQsJC.js} +2 -2
  140. package/cdn/{it-B18weK94.js.map → it-CDVRQsJC.js.map} +1 -1
  141. package/cdn/{it-DKKYDPD1.js → it-tbmwIgns.js} +2 -2
  142. package/cdn/{it-DKKYDPD1.js.map → it-tbmwIgns.js.map} +1 -1
  143. package/cdn/{ja-CeZwzavz.js → ja-Di4sbE9W.js} +2 -2
  144. package/cdn/{ja-CeZwzavz.js.map → ja-Di4sbE9W.js.map} +1 -1
  145. package/cdn/{ja-Bk6dXsfM.js → ja-DuWgmes7.js} +2 -2
  146. package/cdn/{ja-Bk6dXsfM.js.map → ja-DuWgmes7.js.map} +1 -1
  147. package/cdn/{ko-DpALhNiw.js → ko-BX5hcvm_.js} +2 -2
  148. package/cdn/{ko-DpALhNiw.js.map → ko-BX5hcvm_.js.map} +1 -1
  149. package/cdn/{ko-DzP46eEm.js → ko-CvalpIGs.js} +2 -2
  150. package/cdn/{ko-DzP46eEm.js.map → ko-CvalpIGs.js.map} +1 -1
  151. package/cdn/{live-button-element-Co8z2LkI.js → live-button-element-C-WypudK.js} +2 -2
  152. package/cdn/{live-button-element-Co8z2LkI.js.map → live-button-element-C-WypudK.js.map} +1 -1
  153. package/cdn/{live-button-element-zE-8uoR2.js → live-button-element-CylfQD0v.js} +3 -3
  154. package/cdn/{live-button-element-zE-8uoR2.js.map → live-button-element-CylfQD0v.js.map} +1 -1
  155. package/cdn/live-video-minimal.dev.js +7 -7
  156. package/cdn/live-video-minimal.dev.js.map +1 -1
  157. package/cdn/live-video-minimal.js +1 -1
  158. package/cdn/live-video-minimal.js.map +1 -1
  159. package/cdn/live-video.dev.js +8 -8
  160. package/cdn/live-video.dev.js.map +1 -1
  161. package/cdn/live-video.js +1 -1
  162. package/cdn/live-video.js.map +1 -1
  163. package/cdn/locales/ar.dev.js +1 -1
  164. package/cdn/locales/ar.js +1 -1
  165. package/cdn/locales/az.dev.js +1 -1
  166. package/cdn/locales/az.js +1 -1
  167. package/cdn/locales/bg.dev.js +1 -1
  168. package/cdn/locales/bg.js +1 -1
  169. package/cdn/locales/bn.dev.js +1 -1
  170. package/cdn/locales/bn.js +1 -1
  171. package/cdn/locales/bs.dev.js +1 -1
  172. package/cdn/locales/bs.js +1 -1
  173. package/cdn/locales/ca.dev.js +1 -1
  174. package/cdn/locales/ca.js +1 -1
  175. package/cdn/locales/cs.dev.js +1 -1
  176. package/cdn/locales/cs.js +1 -1
  177. package/cdn/locales/cy.dev.js +1 -1
  178. package/cdn/locales/cy.js +1 -1
  179. package/cdn/locales/da.dev.js +1 -1
  180. package/cdn/locales/da.js +1 -1
  181. package/cdn/locales/de.dev.js +1 -1
  182. package/cdn/locales/de.js +1 -1
  183. package/cdn/locales/el.dev.js +1 -1
  184. package/cdn/locales/el.js +1 -1
  185. package/cdn/locales/es.dev.js +1 -1
  186. package/cdn/locales/es.js +1 -1
  187. package/cdn/locales/et.dev.js +1 -1
  188. package/cdn/locales/et.js +1 -1
  189. package/cdn/locales/eu.dev.js +1 -1
  190. package/cdn/locales/eu.js +1 -1
  191. package/cdn/locales/fa.dev.js +1 -1
  192. package/cdn/locales/fa.js +1 -1
  193. package/cdn/locales/fi.dev.js +1 -1
  194. package/cdn/locales/fi.js +1 -1
  195. package/cdn/locales/fr.dev.js +1 -1
  196. package/cdn/locales/fr.js +1 -1
  197. package/cdn/locales/gd.dev.js +1 -1
  198. package/cdn/locales/gd.js +1 -1
  199. package/cdn/locales/gl.dev.js +1 -1
  200. package/cdn/locales/gl.js +1 -1
  201. package/cdn/locales/he.dev.js +1 -1
  202. package/cdn/locales/he.js +1 -1
  203. package/cdn/locales/hi.dev.js +1 -1
  204. package/cdn/locales/hi.js +1 -1
  205. package/cdn/locales/hr.dev.js +1 -1
  206. package/cdn/locales/hr.js +1 -1
  207. package/cdn/locales/hu.dev.js +1 -1
  208. package/cdn/locales/hu.js +1 -1
  209. package/cdn/locales/id.dev.js +1 -1
  210. package/cdn/locales/id.js +1 -1
  211. package/cdn/locales/it.dev.js +1 -1
  212. package/cdn/locales/it.js +1 -1
  213. package/cdn/locales/ja.dev.js +1 -1
  214. package/cdn/locales/ja.js +1 -1
  215. package/cdn/locales/ko.dev.js +1 -1
  216. package/cdn/locales/ko.js +1 -1
  217. package/cdn/locales/lt.dev.js +1 -1
  218. package/cdn/locales/lt.js +1 -1
  219. package/cdn/locales/lv.dev.js +1 -1
  220. package/cdn/locales/lv.js +1 -1
  221. package/cdn/locales/mr.dev.js +1 -1
  222. package/cdn/locales/mr.js +1 -1
  223. package/cdn/locales/nb.dev.js +1 -1
  224. package/cdn/locales/nb.js +1 -1
  225. package/cdn/locales/ne.dev.js +1 -1
  226. package/cdn/locales/ne.js +1 -1
  227. package/cdn/locales/nl.dev.js +1 -1
  228. package/cdn/locales/nl.js +1 -1
  229. package/cdn/locales/nn.dev.js +1 -1
  230. package/cdn/locales/nn.js +1 -1
  231. package/cdn/locales/oc.dev.js +1 -1
  232. package/cdn/locales/oc.js +1 -1
  233. package/cdn/locales/pl.dev.js +1 -1
  234. package/cdn/locales/pl.js +1 -1
  235. package/cdn/locales/pt-BR.dev.js +1 -1
  236. package/cdn/locales/pt-BR.js +1 -1
  237. package/cdn/locales/pt-PT.dev.js +1 -1
  238. package/cdn/locales/pt-PT.js +1 -1
  239. package/cdn/locales/pt.dev.js +1 -1
  240. package/cdn/locales/pt.js +1 -1
  241. package/cdn/locales/ro.dev.js +1 -1
  242. package/cdn/locales/ro.js +1 -1
  243. package/cdn/locales/ru.dev.js +1 -1
  244. package/cdn/locales/ru.js +1 -1
  245. package/cdn/locales/sk.dev.js +1 -1
  246. package/cdn/locales/sk.js +1 -1
  247. package/cdn/locales/sl.dev.js +1 -1
  248. package/cdn/locales/sl.js +1 -1
  249. package/cdn/locales/sr.dev.js +1 -1
  250. package/cdn/locales/sr.js +1 -1
  251. package/cdn/locales/sv.dev.js +1 -1
  252. package/cdn/locales/sv.js +1 -1
  253. package/cdn/locales/te.dev.js +1 -1
  254. package/cdn/locales/te.js +1 -1
  255. package/cdn/locales/th.dev.js +1 -1
  256. package/cdn/locales/th.js +1 -1
  257. package/cdn/locales/tr.dev.js +1 -1
  258. package/cdn/locales/tr.js +1 -1
  259. package/cdn/locales/uk.dev.js +1 -1
  260. package/cdn/locales/uk.js +1 -1
  261. package/cdn/locales/vi.dev.js +1 -1
  262. package/cdn/locales/vi.js +1 -1
  263. package/cdn/locales/zh-CN.dev.js +1 -1
  264. package/cdn/locales/zh-CN.js +1 -1
  265. package/cdn/locales/zh-TW.dev.js +1 -1
  266. package/cdn/locales/zh-TW.js +1 -1
  267. package/cdn/locales/zh.dev.js +1 -1
  268. package/cdn/locales/zh.js +1 -1
  269. package/cdn/{lt-CJC2CVhF.js → lt-DLXeAqcs.js} +2 -2
  270. package/cdn/{lt-CJC2CVhF.js.map → lt-DLXeAqcs.js.map} +1 -1
  271. package/cdn/{lt-y_SCQZXc.js → lt-ZQzwrnWQ.js} +2 -2
  272. package/cdn/{lt-y_SCQZXc.js.map → lt-ZQzwrnWQ.js.map} +1 -1
  273. package/cdn/{lv-E4LvfHSK.js → lv-CsVQVy3v.js} +2 -2
  274. package/cdn/{lv-E4LvfHSK.js.map → lv-CsVQVy3v.js.map} +1 -1
  275. package/cdn/{lv-CfdIbjKR.js → lv-RRA9zY_N.js} +2 -2
  276. package/cdn/{lv-CfdIbjKR.js.map → lv-RRA9zY_N.js.map} +1 -1
  277. package/cdn/media/cloudflare-video.dev.js +2 -2
  278. package/cdn/media/cloudflare-video.js +1 -1
  279. package/cdn/media/hls-audio.dev.js +1 -1
  280. package/cdn/media/hls-audio.js +1 -1
  281. package/cdn/media/hls-background-video.dev.js +1 -1
  282. package/cdn/media/hls-background-video.js +1 -1
  283. package/cdn/media/hls-video.dev.js +1 -1
  284. package/cdn/media/hls-video.js +1 -1
  285. package/cdn/media/mux-audio/spf.dev.js +1 -1
  286. package/cdn/media/mux-audio/spf.js +1 -1
  287. package/cdn/media/mux-background-video.dev.js +1 -1
  288. package/cdn/media/mux-background-video.js +1 -1
  289. package/cdn/media/mux-data.dev.js +1 -1
  290. package/cdn/media/mux-data.dev.js.map +1 -1
  291. package/cdn/media/mux-data.js +1 -1
  292. package/cdn/media/mux-data.js.map +1 -1
  293. package/cdn/media/mux-video/spf.dev.js +1 -1
  294. package/cdn/media/mux-video/spf.js +1 -1
  295. package/cdn/media/shaka-video.dev.d.ts +1 -0
  296. package/cdn/media/shaka-video.dev.js +35132 -0
  297. package/cdn/media/shaka-video.dev.js.map +1 -0
  298. package/cdn/media/shaka-video.js +55 -0
  299. package/cdn/media/shaka-video.js.map +1 -0
  300. package/cdn/media/spotify-audio.dev.js +2 -2
  301. package/cdn/media/spotify-audio.js +1 -1
  302. package/cdn/media/tiktok-video.dev.js +2 -2
  303. package/cdn/media/tiktok-video.js +1 -1
  304. package/cdn/media/twitch-video.dev.js +1 -1
  305. package/cdn/media/twitch-video.js +1 -1
  306. package/cdn/media/vimeo-video.dev.js +2 -2
  307. package/cdn/media/vimeo-video.js +2 -2
  308. package/cdn/media/youtube-video.dev.js +2 -2
  309. package/cdn/media/youtube-video.js +1 -1
  310. package/cdn/{media-mYKOAsk3.js → media-B4uT13xV.js} +13 -29
  311. package/cdn/media-B4uT13xV.js.map +1 -0
  312. package/cdn/{media-DI6DvYm3.js → media-B6LoDnMy.js} +57 -3
  313. package/cdn/media-B6LoDnMy.js.map +1 -0
  314. package/cdn/media-D6Xer97u.js +2 -0
  315. package/cdn/media-D6Xer97u.js.map +1 -0
  316. package/cdn/media-DdApyCAP.js +2 -0
  317. package/cdn/media-DdApyCAP.js.map +1 -0
  318. package/cdn/{media-D4tG62L5.js → media-YTtOjoEw.js} +2 -2
  319. package/cdn/{media-D4tG62L5.js.map → media-YTtOjoEw.js.map} +1 -1
  320. package/cdn/{media-BI8caj07.js → media-aZ7x4gGL.js} +3 -3
  321. package/cdn/{media-BI8caj07.js.map → media-aZ7x4gGL.js.map} +1 -1
  322. package/cdn/minimal-ui-D3XCtSx_.js +2 -0
  323. package/cdn/{minimal-ui-BXrq3z4U.js.map → minimal-ui-D3XCtSx_.js.map} +1 -1
  324. package/cdn/{minimal-ui-BCIESK8f.js → minimal-ui-KUzZkG_3.js} +8 -8
  325. package/cdn/{minimal-ui-BCIESK8f.js.map → minimal-ui-KUzZkG_3.js.map} +1 -1
  326. package/cdn/{minimal-ui-DEalpMk6.js → minimal-ui-ajeAXABk.js} +4 -4
  327. package/cdn/{minimal-ui-DEalpMk6.js.map → minimal-ui-ajeAXABk.js.map} +1 -1
  328. package/cdn/{minimal-ui-vY3QgohH.js → minimal-ui-p9QCZfCz.js} +2 -2
  329. package/cdn/{minimal-ui-vY3QgohH.js.map → minimal-ui-p9QCZfCz.js.map} +1 -1
  330. package/cdn/{mr-C4OijKV_.js → mr-CZ7oMzua.js} +2 -2
  331. package/cdn/{mr-C4OijKV_.js.map → mr-CZ7oMzua.js.map} +1 -1
  332. package/cdn/{mr-DmbgkSem.js → mr-CgFYVcpx.js} +2 -2
  333. package/cdn/{mr-DmbgkSem.js.map → mr-CgFYVcpx.js.map} +1 -1
  334. package/cdn/{nb-Bx5aKqbD.js → nb-DWtHJLYf.js} +2 -2
  335. package/cdn/{nb-Bx5aKqbD.js.map → nb-DWtHJLYf.js.map} +1 -1
  336. package/cdn/{nb-DQ3Nq1ZC.js → nb-ahqFuIy4.js} +2 -2
  337. package/cdn/{nb-DQ3Nq1ZC.js.map → nb-ahqFuIy4.js.map} +1 -1
  338. package/cdn/{ne-DTL8Y04V.js → ne-CFkutVHH.js} +2 -2
  339. package/cdn/{ne-DTL8Y04V.js.map → ne-CFkutVHH.js.map} +1 -1
  340. package/cdn/{ne-BM_WgrGC.js → ne-DQx0S7DC.js} +2 -2
  341. package/cdn/{ne-BM_WgrGC.js.map → ne-DQx0S7DC.js.map} +1 -1
  342. package/cdn/{nl-C7CWKQe5.js → nl-BbWS-uoT.js} +2 -2
  343. package/cdn/{nl-C7CWKQe5.js.map → nl-BbWS-uoT.js.map} +1 -1
  344. package/cdn/{nl-DMt-nkiN.js → nl-V4DJd2nd.js} +2 -2
  345. package/cdn/{nl-DMt-nkiN.js.map → nl-V4DJd2nd.js.map} +1 -1
  346. package/cdn/{nn-BOoGZjkf.js → nn-BoY6X0bu.js} +2 -2
  347. package/cdn/{nn-BOoGZjkf.js.map → nn-BoY6X0bu.js.map} +1 -1
  348. package/cdn/{nn-CT846E14.js → nn-Bp2EWBHZ.js} +2 -2
  349. package/cdn/{nn-CT846E14.js.map → nn-Bp2EWBHZ.js.map} +1 -1
  350. package/cdn/observe-elements-B4q3zaDw.js +79 -0
  351. package/cdn/observe-elements-B4q3zaDw.js.map +1 -0
  352. package/cdn/observe-elements-BivD4tHs.js +2 -0
  353. package/cdn/observe-elements-BivD4tHs.js.map +1 -0
  354. package/cdn/{oc-DQgnGeb2.js → oc-BJrdQkma.js} +2 -2
  355. package/cdn/{oc-DQgnGeb2.js.map → oc-BJrdQkma.js.map} +1 -1
  356. package/cdn/{oc-ClJwr9d0.js → oc-Dto6NU-U.js} +2 -2
  357. package/cdn/{oc-ClJwr9d0.js.map → oc-Dto6NU-U.js.map} +1 -1
  358. package/cdn/{pl-B7SFuF8C.js → pl-BmUKjVFU.js} +2 -2
  359. package/cdn/{pl-B7SFuF8C.js.map → pl-BmUKjVFU.js.map} +1 -1
  360. package/cdn/{pl-DWVOOhfp.js → pl-HlPnZjYT.js} +2 -2
  361. package/cdn/{pl-DWVOOhfp.js.map → pl-HlPnZjYT.js.map} +1 -1
  362. package/cdn/{player-B3GlPF90.js → player-B5zkgqwT.js} +2 -2
  363. package/cdn/{player-B3GlPF90.js.map → player-B5zkgqwT.js.map} +1 -1
  364. package/cdn/{player-DPDmTRvg.js → player-BXQMSpgR.js} +2 -2
  365. package/cdn/{player-DPDmTRvg.js.map → player-BXQMSpgR.js.map} +1 -1
  366. package/cdn/{player-CtTC7qa5.js → player-BuxifKSM.js} +2 -2
  367. package/cdn/{player-CtTC7qa5.js.map → player-BuxifKSM.js.map} +1 -1
  368. package/cdn/{player-DrDd7LJi.js → player-CngT-cVQ.js} +2 -2
  369. package/cdn/{player-DrDd7LJi.js.map → player-CngT-cVQ.js.map} +1 -1
  370. package/cdn/{player-L5UpZmT4.js → player-DMP2pc3L.js} +2 -2
  371. package/cdn/{player-L5UpZmT4.js.map → player-DMP2pc3L.js.map} +1 -1
  372. package/cdn/{player-DKkph8UM.js → player-POHYt5tr.js} +2 -2
  373. package/cdn/{player-DKkph8UM.js.map → player-POHYt5tr.js.map} +1 -1
  374. package/cdn/{poster-element-B5tdJ2ub.js → poster-element-CuCEBVr3.js} +3 -11
  375. package/cdn/poster-element-CuCEBVr3.js.map +1 -0
  376. package/cdn/{poster-element-B8QwXSU_.js → poster-element-Djlm5fwC.js} +2 -2
  377. package/cdn/{poster-element-B8QwXSU_.js.map → poster-element-Djlm5fwC.js.map} +1 -1
  378. package/cdn/{pt-BR-Dx0zZKM6.js → pt-BR-Cfv1ox9K.js} +2 -2
  379. package/cdn/{pt-BR-Dx0zZKM6.js.map → pt-BR-Cfv1ox9K.js.map} +1 -1
  380. package/cdn/{pt-BR-BweixWSY.js → pt-BR-j4XWQBdJ.js} +2 -2
  381. package/cdn/{pt-BR-BweixWSY.js.map → pt-BR-j4XWQBdJ.js.map} +1 -1
  382. package/cdn/{pt-C0Z9dXhV.js → pt-BUBSLaBp.js} +3 -3
  383. package/cdn/{pt-C0Z9dXhV.js.map → pt-BUBSLaBp.js.map} +1 -1
  384. package/cdn/{pt-PT-Di4o8ntw.js → pt-PT-DQ0otVWH.js} +2 -2
  385. package/cdn/{pt-PT-Di4o8ntw.js.map → pt-PT-DQ0otVWH.js.map} +1 -1
  386. package/cdn/{pt-PT-DlHt57Eg.js → pt-PT-DdJVXfMB.js} +2 -2
  387. package/cdn/{pt-PT-DlHt57Eg.js.map → pt-PT-DdJVXfMB.js.map} +1 -1
  388. package/cdn/pt-akbpk7gG.js +2 -0
  389. package/cdn/{pt-ohZp6iM5.js.map → pt-akbpk7gG.js.map} +1 -1
  390. package/cdn/relocation-pipelines-CBzRuD_s.js +2 -0
  391. package/cdn/relocation-pipelines-CBzRuD_s.js.map +1 -0
  392. package/cdn/{relocation-pipelines-Dh8CcgHw.js → relocation-pipelines-R2UVEy5p.js} +38 -2
  393. package/cdn/relocation-pipelines-R2UVEy5p.js.map +1 -0
  394. package/cdn/resolution-C4bCDOw4.js +2 -0
  395. package/cdn/resolution-C4bCDOw4.js.map +1 -0
  396. package/cdn/resolution-DPr_vTWF.js +29 -0
  397. package/cdn/resolution-DPr_vTWF.js.map +1 -0
  398. package/cdn/{ro-BB4KBp_W.js → ro-BiexogxI.js} +2 -2
  399. package/cdn/{ro-BB4KBp_W.js.map → ro-BiexogxI.js.map} +1 -1
  400. package/cdn/{ro-BU9kKrWV.js → ro-X-mft-iF.js} +2 -2
  401. package/cdn/{ro-BU9kKrWV.js.map → ro-X-mft-iF.js.map} +1 -1
  402. package/cdn/rolldown-runtime-KW3qVizi.js +42 -0
  403. package/cdn/rolldown-runtime-QTnfLwEv.js +1 -0
  404. package/cdn/{ru-CajU7FT2.js → ru-15_5g81L.js} +2 -2
  405. package/cdn/{ru-CajU7FT2.js.map → ru-15_5g81L.js.map} +1 -1
  406. package/cdn/{ru-BrWt8VXI.js → ru-GHEfsz_c.js} +2 -2
  407. package/cdn/{ru-BrWt8VXI.js.map → ru-GHEfsz_c.js.map} +1 -1
  408. package/cdn/{seek-button-element-5co-k0Dx.js → seek-button-element-BD2caCd5.js} +3 -3
  409. package/cdn/{seek-button-element-5co-k0Dx.js.map → seek-button-element-BD2caCd5.js.map} +1 -1
  410. package/cdn/{seek-button-element-B8TkILg-.js → seek-button-element-CgaXVFPS.js} +2 -2
  411. package/cdn/{seek-button-element-B8TkILg-.js.map → seek-button-element-CgaXVFPS.js.map} +1 -1
  412. package/cdn/{sk-DOZafohX.js → sk-BEvGx8AE.js} +2 -2
  413. package/cdn/{sk-DOZafohX.js.map → sk-BEvGx8AE.js.map} +1 -1
  414. package/cdn/{sk-XGkesNm5.js → sk-CbZOx0Xf.js} +2 -2
  415. package/cdn/{sk-XGkesNm5.js.map → sk-CbZOx0Xf.js.map} +1 -1
  416. package/cdn/{skin-element-DrkI8xuM.js → skin-element-DE8OodF5.js} +2 -2
  417. package/cdn/skin-element-DE8OodF5.js.map +1 -0
  418. package/cdn/{skin-element-DvX6Bxsv.js → skin-element-PDwjO4v0.js} +2 -10
  419. package/cdn/{skin-element-DvX6Bxsv.js.map → skin-element-PDwjO4v0.js.map} +1 -1
  420. package/cdn/{sl-CHuwx211.js → sl-BqYDAX6g.js} +2 -2
  421. package/cdn/{sl-CHuwx211.js.map → sl-BqYDAX6g.js.map} +1 -1
  422. package/cdn/{sl-CuZgo3JI.js → sl-D7uEXtkn.js} +2 -2
  423. package/cdn/{sl-CuZgo3JI.js.map → sl-D7uEXtkn.js.map} +1 -1
  424. package/cdn/{sr-BsZrd40u.js → sr-CBBykxkN.js} +2 -2
  425. package/cdn/{sr-BsZrd40u.js.map → sr-CBBykxkN.js.map} +1 -1
  426. package/cdn/{sr-CzT_52m8.js → sr-D10ir4DL.js} +2 -2
  427. package/cdn/{sr-CzT_52m8.js.map → sr-D10ir4DL.js.map} +1 -1
  428. package/cdn/{sv-CsISpTMM.js → sv-BGcohnZb.js} +2 -2
  429. package/cdn/{sv-CsISpTMM.js.map → sv-BGcohnZb.js.map} +1 -1
  430. package/cdn/{sv-hxsarb6k.js → sv-he8gk9up.js} +2 -2
  431. package/cdn/{sv-hxsarb6k.js.map → sv-he8gk9up.js.map} +1 -1
  432. package/cdn/{te-DUaUnw1d.js → te-DhEDBJ0Q.js} +2 -2
  433. package/cdn/{te-DUaUnw1d.js.map → te-DhEDBJ0Q.js.map} +1 -1
  434. package/cdn/{te-CG0NRKuG.js → te-Dw2hLtHG.js} +2 -2
  435. package/cdn/{te-CG0NRKuG.js.map → te-Dw2hLtHG.js.map} +1 -1
  436. package/cdn/{text-element-BoY6AhMn.js → text-element-BJyj7nLo.js} +2 -2
  437. package/cdn/{text-element-BoY6AhMn.js.map → text-element-BJyj7nLo.js.map} +1 -1
  438. package/cdn/{text-element-cg6l21cd.js → text-element-dyiwucQB.js} +2 -2
  439. package/cdn/{text-element-cg6l21cd.js.map → text-element-dyiwucQB.js.map} +1 -1
  440. package/cdn/{th-BYS5ZpYb.js → th-B3iYzmd5.js} +2 -2
  441. package/cdn/{th-BYS5ZpYb.js.map → th-B3iYzmd5.js.map} +1 -1
  442. package/cdn/{th-Bx_CvtvC.js → th-BMZDRGQ7.js} +2 -2
  443. package/cdn/{th-Bx_CvtvC.js.map → th-BMZDRGQ7.js.map} +1 -1
  444. package/cdn/{time-slider-chapters-element-CznFQWFm.js → time-slider-chapters-element-BTMqnBhM.js} +3 -3
  445. package/cdn/{time-slider-chapters-element-CznFQWFm.js.map → time-slider-chapters-element-BTMqnBhM.js.map} +1 -1
  446. package/cdn/{time-slider-chapters-element-BfLjdnU4.js → time-slider-chapters-element-b6oeaZtJ.js} +2 -2
  447. package/cdn/{time-slider-chapters-element-BfLjdnU4.js.map → time-slider-chapters-element-b6oeaZtJ.js.map} +1 -1
  448. package/cdn/{tr-5Cegmhcj.js → tr-BJOEOizJ.js} +2 -2
  449. package/cdn/{tr-5Cegmhcj.js.map → tr-BJOEOizJ.js.map} +1 -1
  450. package/cdn/{tr-BV5YcpOy.js → tr-CdLz59Rt.js} +2 -2
  451. package/cdn/{tr-BV5YcpOy.js.map → tr-CdLz59Rt.js.map} +1 -1
  452. package/cdn/{ui-BwzqkJNK.js → ui-BsUcH4YJ.js} +7 -7
  453. package/cdn/{ui-BwzqkJNK.js.map → ui-BsUcH4YJ.js.map} +1 -1
  454. package/cdn/{ui-fnKp94a7.js → ui-CtONjPC2.js} +9 -9
  455. package/cdn/{ui-fnKp94a7.js.map → ui-CtONjPC2.js.map} +1 -1
  456. package/cdn/ui-CxftD4RF.js +2 -0
  457. package/cdn/{ui-DayfItun.js.map → ui-CxftD4RF.js.map} +1 -1
  458. package/cdn/ui-DLvwCbsU.js +2 -0
  459. package/cdn/{ui-PSnD-pv8.js.map → ui-DLvwCbsU.js.map} +1 -1
  460. package/cdn/{uk-DsHkf0ZB.js → uk-BTa1prcg.js} +2 -2
  461. package/cdn/{uk-DsHkf0ZB.js.map → uk-BTa1prcg.js.map} +1 -1
  462. package/cdn/{uk-D2WGhYFz.js → uk-BW53WsQa.js} +2 -2
  463. package/cdn/{uk-D2WGhYFz.js.map → uk-BW53WsQa.js.map} +1 -1
  464. package/cdn/{vi-DBLOO1G4.js → vi-CGDf02ms.js} +2 -2
  465. package/cdn/{vi-DBLOO1G4.js.map → vi-CGDf02ms.js.map} +1 -1
  466. package/cdn/{vi-CORn5e7t.js → vi-CcOG_Tlw.js} +2 -2
  467. package/cdn/{vi-CORn5e7t.js.map → vi-CcOG_Tlw.js.map} +1 -1
  468. package/cdn/video-headless.dev.js +1 -1
  469. package/cdn/video-headless.js +1 -1
  470. package/cdn/video-minimal-ui.dev.js +1 -1
  471. package/cdn/video-minimal-ui.js +1 -1
  472. package/cdn/video-minimal.dev.js +4 -4
  473. package/cdn/video-minimal.dev.js.map +1 -1
  474. package/cdn/video-minimal.js +1 -1
  475. package/cdn/video-minimal.js.map +1 -1
  476. package/cdn/video-ui.dev.js +1 -1
  477. package/cdn/video-ui.js +1 -1
  478. package/cdn/video.dev.js +5 -5
  479. package/cdn/video.dev.js.map +1 -1
  480. package/cdn/video.js +1 -1
  481. package/cdn/video.js.map +1 -1
  482. package/cdn/{zh-R2vnxJiQ.js → zh-34ObMhvt.js} +3 -3
  483. package/cdn/{zh-R2vnxJiQ.js.map → zh-34ObMhvt.js.map} +1 -1
  484. package/cdn/{zh-CN-Cga4L1h3.js → zh-CN-C_IU0JUw.js} +2 -2
  485. package/cdn/{zh-CN-Cga4L1h3.js.map → zh-CN-C_IU0JUw.js.map} +1 -1
  486. package/cdn/{zh-CN-xq6taoBE.js → zh-CN-rZeJec8v.js} +2 -2
  487. package/cdn/{zh-CN-xq6taoBE.js.map → zh-CN-rZeJec8v.js.map} +1 -1
  488. package/cdn/zh-Cf3NSZs8.js +2 -0
  489. package/cdn/{zh-CtBcRYRs.js.map → zh-Cf3NSZs8.js.map} +1 -1
  490. package/cdn/{zh-TW-DWI1-WUt.js → zh-TW-5fFrgVzt.js} +2 -2
  491. package/cdn/{zh-TW-DWI1-WUt.js.map → zh-TW-5fFrgVzt.js.map} +1 -1
  492. package/cdn/{zh-TW-Dca2WbyD.js → zh-TW-BvuhCu_U.js} +2 -2
  493. package/cdn/{zh-TW-Dca2WbyD.js.map → zh-TW-BvuhCu_U.js.map} +1 -1
  494. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  495. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  496. package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
  497. package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  498. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  499. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  500. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  501. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  502. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  503. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  504. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  505. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  506. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  507. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  508. package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
  509. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  510. package/dist/default/define/audio/minimal-skin.css +1 -3
  511. package/dist/default/define/audio/skin.css +1 -3
  512. package/dist/default/define/live-audio/minimal-skin.css +1 -3
  513. package/dist/default/define/live-audio/skin.css +1 -3
  514. package/dist/default/define/live-video/minimal-skin.css +2 -31
  515. package/dist/default/define/live-video/skin.css +2 -33
  516. package/dist/default/define/media/shaka-video.js +13 -0
  517. package/dist/default/define/media/shaka-video.js.map +1 -0
  518. package/dist/default/define/skin-element.js +0 -8
  519. package/dist/default/define/skin-element.js.map +1 -1
  520. package/dist/default/define/ui/title.js +7 -0
  521. package/dist/default/define/ui/title.js.map +1 -0
  522. package/dist/default/define/video/minimal-skin.css +2 -31
  523. package/dist/default/define/video/skin.css +2 -33
  524. package/dist/default/index.js +2 -1
  525. package/dist/default/media/shaka-video/media.js +9 -0
  526. package/dist/default/media/shaka-video/media.js.map +1 -0
  527. package/dist/default/skins/dist/default/default/tailwind/components/button.js +1 -1
  528. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  529. package/dist/default/skins/dist/default/default/tailwind/components/menu.js +2 -2
  530. package/dist/default/skins/dist/default/default/tailwind/components/menu.js.map +1 -1
  531. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +1 -7
  532. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  533. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +1 -10
  534. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  535. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js +1 -1
  536. package/dist/default/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  537. package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js +2 -2
  538. package/dist/default/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -1
  539. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +1 -7
  540. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  541. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -10
  542. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  543. package/dist/default/ui/poster/poster-element.js +0 -8
  544. package/dist/default/ui/poster/poster-element.js.map +1 -1
  545. package/dist/default/ui/thumbnail/thumbnail-element.js +22 -7
  546. package/dist/default/ui/thumbnail/thumbnail-element.js.map +1 -1
  547. package/dist/default/ui/time/time-element.js +2 -3
  548. package/dist/default/ui/time/time-element.js.map +1 -1
  549. package/dist/default/ui/title/title-element.js +37 -0
  550. package/dist/default/ui/title/title-element.js.map +1 -0
  551. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  552. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  553. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
  554. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  555. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  556. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  557. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  558. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  559. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  560. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  561. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  562. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  563. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  564. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  565. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
  566. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  567. package/dist/dev/define/audio/minimal-skin.css +1 -3
  568. package/dist/dev/define/audio/skin.css +1 -3
  569. package/dist/dev/define/live-audio/minimal-skin.css +1 -3
  570. package/dist/dev/define/live-audio/skin.css +1 -3
  571. package/dist/dev/define/live-video/minimal-skin.css +2 -31
  572. package/dist/dev/define/live-video/skin.css +2 -33
  573. package/dist/dev/define/media/shaka-video.d.ts +14 -0
  574. package/dist/dev/define/media/shaka-video.d.ts.map +1 -0
  575. package/dist/dev/define/media/shaka-video.js +13 -0
  576. package/dist/dev/define/media/shaka-video.js.map +1 -0
  577. package/dist/dev/define/skin-element.d.ts +0 -2
  578. package/dist/dev/define/skin-element.d.ts.map +1 -1
  579. package/dist/dev/define/skin-element.js +0 -8
  580. package/dist/dev/define/skin-element.js.map +1 -1
  581. package/dist/dev/define/ui/title.d.ts +8 -0
  582. package/dist/dev/define/ui/title.d.ts.map +1 -0
  583. package/dist/dev/define/ui/title.js +7 -0
  584. package/dist/dev/define/ui/title.js.map +1 -0
  585. package/dist/dev/define/video/minimal-skin.css +2 -31
  586. package/dist/dev/define/video/skin.css +2 -33
  587. package/dist/dev/index.d.ts +3 -2
  588. package/dist/dev/index.js +2 -1
  589. package/dist/dev/media/shaka-video/index.d.ts +2 -0
  590. package/dist/dev/media/shaka-video/media.d.ts +19 -0
  591. package/dist/dev/media/shaka-video/media.d.ts.map +1 -0
  592. package/dist/dev/media/shaka-video/media.js +9 -0
  593. package/dist/dev/media/shaka-video/media.js.map +1 -0
  594. package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js +1 -1
  595. package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  596. package/dist/dev/packages/skins/dist/default/default/tailwind/components/menu.js +2 -2
  597. package/dist/dev/packages/skins/dist/default/default/tailwind/components/menu.js.map +1 -1
  598. package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js +1 -7
  599. package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  600. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js +1 -10
  601. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  602. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/button.js +1 -1
  603. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/button.js.map +1 -1
  604. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/menu.js +2 -2
  605. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/menu.js.map +1 -1
  606. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js +1 -7
  607. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  608. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js +1 -10
  609. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  610. package/dist/dev/ui/captions-button/captions-button-element.d.ts +1 -0
  611. package/dist/dev/ui/captions-button/captions-button-element.d.ts.map +1 -1
  612. package/dist/dev/ui/poster/poster-element.d.ts +0 -2
  613. package/dist/dev/ui/poster/poster-element.d.ts.map +1 -1
  614. package/dist/dev/ui/poster/poster-element.js +0 -8
  615. package/dist/dev/ui/poster/poster-element.js.map +1 -1
  616. package/dist/dev/ui/thumbnail/thumbnail-element.d.ts.map +1 -1
  617. package/dist/dev/ui/thumbnail/thumbnail-element.js +22 -7
  618. package/dist/dev/ui/thumbnail/thumbnail-element.js.map +1 -1
  619. package/dist/dev/ui/time/time-element.d.ts.map +1 -1
  620. package/dist/dev/ui/time/time-element.js +2 -3
  621. package/dist/dev/ui/time/time-element.js.map +1 -1
  622. package/dist/dev/ui/title/title-element.d.ts +18 -0
  623. package/dist/dev/ui/title/title-element.d.ts.map +1 -0
  624. package/dist/dev/ui/title/title-element.js +38 -0
  625. package/dist/dev/ui/title/title-element.js.map +1 -0
  626. package/docs/README.md +1 -1
  627. package/docs/concepts/presets.md +4 -4
  628. package/docs/concepts/skins.md +6 -37
  629. package/docs/how-to/add-a-poster-placeholder.md +52 -0
  630. package/docs/how-to/customize-skins.md +6 -70
  631. package/docs/how-to/migrate-from-mux-player.md +12 -6
  632. package/docs/llms.txt +3 -0
  633. package/docs/reference/feature-fullscreen.md +7 -8
  634. package/docs/reference/feature-metadata.md +141 -0
  635. package/docs/reference/feature-orientation-lock.md +99 -7
  636. package/docs/reference/feature-text-tracks.md +10 -0
  637. package/docs/reference/menu.md +0 -1
  638. package/docs/reference/thumbnail.md +4 -0
  639. package/docs/reference/title.md +211 -0
  640. package/package.json +9 -9
  641. package/cdn/compounds-C4YYLyL2.js +0 -8
  642. package/cdn/compounds-C4YYLyL2.js.map +0 -1
  643. package/cdn/compounds-C73u1MeO.js.map +0 -1
  644. package/cdn/create-player-BU8LDJDL.js +0 -2
  645. package/cdn/create-player-BU8LDJDL.js.map +0 -1
  646. package/cdn/create-player-Db1CIvlK.js.map +0 -1
  647. package/cdn/error-surface-BID4D3DW.js.map +0 -1
  648. package/cdn/error-surface-D0bo71gD.js.map +0 -1
  649. package/cdn/i18n-CpBDXf6M.js +0 -2
  650. package/cdn/media-CQxFuDcv.js +0 -2
  651. package/cdn/media-CQxFuDcv.js.map +0 -1
  652. package/cdn/media-DI6DvYm3.js.map +0 -1
  653. package/cdn/media-mYKOAsk3.js.map +0 -1
  654. package/cdn/media-zReLnePj.js +0 -2
  655. package/cdn/media-zReLnePj.js.map +0 -1
  656. package/cdn/minimal-ui-BXrq3z4U.js +0 -2
  657. package/cdn/poster-element-B5tdJ2ub.js.map +0 -1
  658. package/cdn/pt-ohZp6iM5.js +0 -2
  659. package/cdn/relocation-pipelines-Dh8CcgHw.js.map +0 -1
  660. package/cdn/relocation-pipelines-DunE4gcV.js +0 -2
  661. package/cdn/relocation-pipelines-DunE4gcV.js.map +0 -1
  662. package/cdn/rolldown-runtime-DK3Fl9T5.js +0 -1
  663. package/cdn/rolldown-runtime-w6R9maHv.js +0 -18
  664. package/cdn/skin-element-DrkI8xuM.js.map +0 -1
  665. package/cdn/ui-DayfItun.js +0 -2
  666. package/cdn/ui-PSnD-pv8.js +0 -2
  667. package/cdn/zh-CtBcRYRs.js +0 -2
@@ -1,16 +1,16 @@
1
- import { a as isNull, r as isFunction, s as isObject, u as isUndefined } from "./predicate-faYxAB6Z.js";
1
+ import { a as isNull, i as isNil, r as isFunction, s as isObject, u as isUndefined } from "./predicate-faYxAB6Z.js";
2
2
  import { n as getCanonicalLocaleKey, s as DEFAULT_LOCALE, t as findLocaleKeys } from "./i18n-DyF_NfCk.js";
3
3
  import { t as shallowEqual } from "./shallow-equal-C7S8rj2f.js";
4
4
  import { n as ContextConsumer } from "./media-element-CJY3JIgc.js";
5
5
  import { n as mediaContext, r as playerContext, t as containerContext } from "./context-OhQY847V.js";
6
6
  import { l as ContextProvider } from "./container-element-HHK_KZOE.js";
7
- import { n as kebabCase, t as camelCase } from "./casing-Cu0fL85w.js";
8
7
  import { t as listen } from "./listen-CdeggIF8.js";
9
8
  import { t as noop } from "./noop-BxkeRIz9.js";
9
+ import { n as kebabCase, t as camelCase } from "./casing-Cu0fL85w.js";
10
10
  import { n as isCaptionOrSubtitleTrack, t as findTrackElement } from "./text-track-DMA7pa8W.js";
11
11
  import { t as isWebKitAirPlayCapable } from "./webkit-C682yTT7.js";
12
- import { t as anyAbortSignal } from "./abort-CUxJsUWY.js";
13
12
  import { n as EMPTY_TEXT_TRACKS, r as EMPTY_TIME_RANGES, t as EMPTY_REMOTE } from "./constants-CsSwyIX6.js";
13
+ import { t as anyAbortSignal } from "./abort-CUxJsUWY.js";
14
14
 
15
15
  //#region ../utils/dist/dom/event.js
16
16
  /** Resolve the deepest event target, preferring composedPath for shadow DOM. */
@@ -107,743 +107,392 @@ function serializeTimeRanges(ranges) {
107
107
  }
108
108
 
109
109
  //#endregion
110
- //#region ../store/dist/dev/core/abort-controller-registry.js
111
- var AbortControllerRegistry = class {
112
- #base;
113
- #keys = /* @__PURE__ */ new Map();
114
- /** The attach-scoped signal. Aborts on detach or reattach. */
115
- get base() {
116
- return (this.#base ??= new AbortController()).signal;
117
- }
118
- /** Clears all keyed signals, leaving base intact. */
119
- clear() {
120
- for (const controller of this.#keys.values()) controller.abort();
121
- this.#keys.clear();
122
- }
123
- /** Resets base and clears all keyed signals. */
124
- reset() {
125
- this.clear();
126
- this.#base?.abort();
127
- this.#base = void 0;
128
- }
129
- /** Creates a new signal for the key, superseding any previous signal. */
130
- supersede(key) {
131
- this.#keys.get(key)?.abort();
132
- const controller = new AbortController();
133
- this.#keys.set(key, controller);
134
- return anyAbortSignal([this.base, controller.signal]);
135
- }
136
- };
137
-
138
- //#endregion
139
- //#region ../store/dist/dev/core/combine.js
140
- /**
141
- * Combines multiple slices into a single slice.
142
- *
143
- * @param slices - The slices to combine.
144
- * @returns A new slice that represents the combination of the input slices.
145
- */
146
- function combine(...slices) {
147
- const derivedDefinitions = slices.map((slice) => slice.derived ?? {});
148
- warnDuplicates("derived", derivedDefinitions);
110
+ //#region ../core/dist/dev/dom/feature.js
111
+ function definePlayerFeature(definition) {
112
+ const preserved = Object.values(definition.config ?? {}).map((entry) => entry.state);
149
113
  return {
150
- state: (ctx) => {
151
- const states = slices.map((slice) => slice.state(ctx));
152
- warnDuplicates("state", states);
153
- warnOverlaps(states, derivedDefinitions);
154
- return Object.assign({}, ...states);
155
- },
156
- preserve: Array.from(new Set(slices.flatMap((slice) => slice.preserve ?? []))),
157
- derived: Object.assign({}, ...derivedDefinitions),
158
- attach: (ctx) => {
159
- for (const slice of slices) try {
160
- slice.attach?.(ctx);
161
- } catch (err) {
162
- ctx.reportError(err);
163
- }
164
- }
114
+ ...definition,
115
+ ...preserved.length > 0 ? { preserve: preserved } : {}
165
116
  };
166
117
  }
167
- function warnDuplicates(namespace, objects) {
168
- const seen = /* @__PURE__ */ new Set();
169
- for (const object of objects) for (const key of Reflect.ownKeys(object)) {
170
- if (seen.has(key)) console.warn(`[vjs-store] combine(): duplicate ${namespace} key "${String(key)}" — later slice overwrites earlier one`);
171
- seen.add(key);
118
+ /** Merge the configuration declarations from the selected player features. */
119
+ function combinePlayerFeatureConfigs(features) {
120
+ const definitions = features.map((feature) => feature.config ?? {});
121
+ {
122
+ const seen = /* @__PURE__ */ new Set();
123
+ for (const definition of definitions) for (const key of Object.keys(definition)) {
124
+ if (seen.has(key)) console.warn(`[vjs-core] duplicate config key "${key}" — later feature overwrites earlier one`);
125
+ seen.add(key);
126
+ }
172
127
  }
128
+ return Object.assign({}, ...definitions);
173
129
  }
174
- function warnOverlaps(states, derivedDefinitions) {
175
- const stateKeys = new Set(states.flatMap((state) => Reflect.ownKeys(state)));
176
- for (const key of new Set(derivedDefinitions.flatMap((derived) => Reflect.ownKeys(derived)))) if (stateKeys.has(key)) console.warn(`[vjs-store] combine(): state and derived key "${String(key)}" overlap — derived state overwrites source state`);
130
+ /** Forward one configuration input through its feature-owned private action. */
131
+ function setPlayerConfigValue(store, entry, value) {
132
+ const action = store[entry.action];
133
+ if (typeof action !== "function") throw new TypeError(`Missing config action "${String(entry.action)}"`);
134
+ action(value);
177
135
  }
178
136
 
179
137
  //#endregion
180
- //#region ../store/dist/dev/core/errors.js
181
- var StoreError = class extends Error {
182
- code;
183
- cause;
184
- constructor(code, options) {
185
- super(options?.message ?? code);
186
- this.name = "StoreError";
187
- this.code = code;
188
- this.cause = options?.cause;
189
- }
190
- };
191
- function throwNoTargetError() {
192
- throw new StoreError("NO_TARGET");
138
+ //#region ../media/dist/dev/core/predicate.js
139
+ function hasMetadata(media) {
140
+ return media.readyState >= 1;
193
141
  }
194
- function throwDestroyedError() {
195
- throw new StoreError("DESTROYED");
142
+ function isMediaPauseCapable(value) {
143
+ if (!isObject(value)) return false;
144
+ const media = value;
145
+ return !isUndefined(media.paused) && !isUndefined(media.ended) && isFunction(media.pause);
196
146
  }
197
-
198
- //#endregion
199
- //#region ../store/dist/dev/core/slice.js
200
- function defineSlice() {
201
- return ((config) => config);
147
+ function isMediaSeekCapable(value) {
148
+ if (!isObject(value)) return false;
149
+ const media = value;
150
+ return !isUndefined(media.currentTime) && !isUndefined(media.duration) && !isUndefined(media.seeking);
151
+ }
152
+ function isMediaSourceCapable(value) {
153
+ if (!isObject(value)) return false;
154
+ const media = value;
155
+ return !isUndefined(media.src) && !isUndefined(media.currentSrc) && !isUndefined(media.readyState) && isFunction(media.load);
156
+ }
157
+ function isMediaVolumeCapable(value) {
158
+ if (!isObject(value)) return false;
159
+ const media = value;
160
+ return !isUndefined(media.volume) && !isUndefined(media.muted);
161
+ }
162
+ /**
163
+ * Whether the media reports a mute at all, which is a narrower question than
164
+ * `isMediaVolumeCapable`: an embed can take a mute command while offering no way
165
+ * to set a level.
166
+ */
167
+ function isMediaMutedCapable(value) {
168
+ if (!isObject(value)) return false;
169
+ return !isUndefined(value.muted);
170
+ }
171
+ function isMediaPlaybackRateCapable(value) {
172
+ if (!isObject(value)) return false;
173
+ return !isUndefined(value.playbackRate);
174
+ }
175
+ /**
176
+ * Only `requestPictureInPicture` is required. A native video element carries it
177
+ * but leaves exiting to `document`, so demanding the pair would rule out the one
178
+ * media that most certainly can.
179
+ */
180
+ function isMediaPictureInPictureCapable(value) {
181
+ if (!isObject(value)) return false;
182
+ return isFunction(value.requestPictureInPicture);
183
+ }
184
+ function isMediaBufferCapable(value) {
185
+ if (!isObject(value)) return false;
186
+ const media = value;
187
+ return !isUndefined(media.buffered) && media.buffered !== EMPTY_TIME_RANGES && !isUndefined(media.seekable) && media.seekable !== EMPTY_TIME_RANGES;
188
+ }
189
+ function isMediaErrorCapable(value) {
190
+ if (!isObject(value)) return false;
191
+ return !isUndefined(value.error);
192
+ }
193
+ function isMediaTextTrackCapable(value) {
194
+ if (!isObject(value)) return false;
195
+ const media = value;
196
+ return !isUndefined(media.textTracks) && media.textTracks !== EMPTY_TEXT_TRACKS;
197
+ }
198
+ function isMediaVideoRenditionCapable(value) {
199
+ if (!isObject(value)) return false;
200
+ return !isUndefined(value.videoRenditions);
201
+ }
202
+ function isMediaAudioTrackCapable(value) {
203
+ if (!isObject(value)) return false;
204
+ return !isUndefined(value.audioTracks);
205
+ }
206
+ function isMediaVideoDimensionsCapable(value) {
207
+ if (!isObject(value)) return false;
208
+ const media = value;
209
+ return !isUndefined(media.videoWidth) && !isUndefined(media.videoHeight);
210
+ }
211
+ function isMediaRemotePlaybackCapable(value) {
212
+ if (!isObject(value)) return false;
213
+ const media = value;
214
+ return isObject(media.remote) && media.remote !== EMPTY_REMOTE;
215
+ }
216
+ function isMediaStreamTypeCapable(value) {
217
+ if (!isObject(value)) return false;
218
+ return !isUndefined(value.streamType);
219
+ }
220
+ function isMediaContentDataCapable(value) {
221
+ if (!isObject(value)) return false;
222
+ return !isUndefined(value.contentData);
223
+ }
224
+ function isMediaLiveCapable(value) {
225
+ if (!isObject(value)) return false;
226
+ const media = value;
227
+ return !isUndefined(media.liveEdgeStart) && !isUndefined(media.targetLiveWindow);
228
+ }
229
+ function isQuerySelectorAllCapable(value) {
230
+ return isObject(value) && "querySelectorAll" in value && isFunction(value.querySelectorAll);
202
231
  }
203
232
 
204
233
  //#endregion
205
- //#region ../store/dist/dev/core/state.js
206
- let isFlushScheduled = false;
207
- function scheduleFlush() {
208
- if (isFlushScheduled) return;
209
- isFlushScheduled = true;
210
- queueMicrotask(flush);
234
+ //#region ../core/dist/dev/dom/store/features/audio-track.js
235
+ function getTrackValue(track, index) {
236
+ return track.id || String(index);
211
237
  }
212
- const pendingContainers = /* @__PURE__ */ new Set();
213
- function flush() {
214
- isFlushScheduled = false;
215
- for (const container of pendingContainers) container.flush();
216
- pendingContainers.clear();
238
+ function toMediaTrack(track) {
239
+ return {
240
+ ...track.id !== void 0 && { id: track.id },
241
+ ...track.kind !== void 0 && { kind: track.kind },
242
+ label: track.label,
243
+ language: track.language,
244
+ enabled: track.enabled
245
+ };
217
246
  }
218
- const hasOwnProp$1 = Object.prototype.hasOwnProperty;
219
- var StateContainer = class {
220
- #current;
221
- #listeners = /* @__PURE__ */ new Set();
222
- #pending = false;
223
- constructor(initial) {
224
- this.#current = Object.freeze({ ...initial });
225
- }
226
- get current() {
227
- return this.#current;
228
- }
229
- patch(partial) {
230
- const next = { ...this.#current };
231
- let changed = false;
232
- for (const key of Reflect.ownKeys(partial)) {
233
- if (!hasOwnProp$1.call(partial, key)) continue;
234
- const value = partial[key];
235
- if (!Object.is(this.#current[key], value)) {
236
- next[key] = value;
237
- changed = true;
238
- }
239
- }
240
- if (changed) {
241
- this.#current = Object.freeze(next);
242
- this.#markPending();
247
+ const audioTrackFeature = definePlayerFeature({
248
+ name: "audioTrack",
249
+ state: ({ target }) => ({
250
+ audioTrackList: [],
251
+ selectAudioTrack(value) {
252
+ const { media } = target();
253
+ if (!isMediaAudioTrackCapable(media)) return;
254
+ const tracks = [...media.audioTracks];
255
+ const track = tracks.find((candidate, index) => getTrackValue(candidate, index) === value);
256
+ if (!track) return;
257
+ for (const candidate of tracks) candidate.enabled = candidate === track;
243
258
  }
244
- }
245
- replace(next) {
246
- if (shallowEqual(this.#current, next)) return;
247
- this.#current = Object.freeze({ ...next });
248
- this.#markPending();
249
- }
250
- subscribe(callback, options) {
251
- const signal = options?.signal;
252
- if (signal?.aborted) return noop;
253
- this.#listeners.add(callback);
254
- if (!signal) return () => this.#listeners.delete(callback);
255
- const onAbort = () => this.#listeners.delete(callback);
256
- signal.addEventListener("abort", onAbort, { once: true });
257
- return () => {
258
- signal.removeEventListener("abort", onAbort);
259
- this.#listeners.delete(callback);
259
+ }),
260
+ attach({ target, signal, set }) {
261
+ const { media } = target;
262
+ let audioTracks = null;
263
+ let cleanup = null;
264
+ const getAudioTracks = () => isMediaAudioTrackCapable(media) ? media.audioTracks : null;
265
+ const sync = (list = getAudioTracks()) => {
266
+ set({ audioTrackList: list ? [...list].map(toMediaTrack) : [] });
267
+ };
268
+ const bind = () => {
269
+ const nextAudioTracks = getAudioTracks();
270
+ if (nextAudioTracks === audioTracks) {
271
+ sync(nextAudioTracks);
272
+ return;
273
+ }
274
+ cleanup?.abort();
275
+ cleanup = new AbortController();
276
+ audioTracks = nextAudioTracks;
277
+ if (audioTracks) {
278
+ listen(audioTracks, "addtrack", () => sync(audioTracks), { signal: cleanup.signal });
279
+ listen(audioTracks, "removetrack", () => sync(audioTracks), { signal: cleanup.signal });
280
+ listen(audioTracks, "change", () => sync(audioTracks), { signal: cleanup.signal });
281
+ }
282
+ sync(audioTracks);
260
283
  };
284
+ bind();
285
+ listen(media, "loadstart", bind, { signal });
286
+ signal.addEventListener("abort", () => cleanup?.abort(), { once: true });
261
287
  }
262
- flush() {
263
- if (!this.#pending) return;
264
- this.#pending = false;
265
- for (const fn of this.#listeners) fn();
288
+ });
289
+
290
+ //#endregion
291
+ //#region ../core/dist/dev/dom/store/features/buffer.js
292
+ const bufferFeature = definePlayerFeature({
293
+ name: "buffer",
294
+ state: () => ({
295
+ buffered: [],
296
+ seekable: []
297
+ }),
298
+ attach({ target, signal, set }) {
299
+ const { media } = target;
300
+ if (!isMediaBufferCapable(media)) return;
301
+ const sync = () => set({
302
+ buffered: serializeTimeRanges(media.buffered),
303
+ seekable: serializeTimeRanges(media.seekable)
304
+ });
305
+ sync();
306
+ listen(media, "progress", sync, { signal });
307
+ listen(media, "emptied", sync, { signal });
266
308
  }
267
- #markPending() {
268
- this.#pending = true;
269
- pendingContainers.add(this);
270
- scheduleFlush();
309
+ });
310
+
311
+ //#endregion
312
+ //#region ../core/dist/dev/dom/gesture/region.js
313
+ /**
314
+ * Determine which named region a pointer position falls into.
315
+ *
316
+ * Regions divide the container width equally based on how many are active:
317
+ * - `left` + `right` → halves (50% / 50%)
318
+ * - `left` + `center` + `right` → thirds (33% / 34% / 33%)
319
+ *
320
+ * Single region: `left` covers the left half, `right` the right half,
321
+ * and `center` covers the full surface. Partial two-region combos
322
+ * (e.g. `left` + `center`) use the same natural zones — positions outside
323
+ * all active zones return `null` so full-surface gestures can handle them.
324
+ */
325
+ function resolveRegion(clientX, containerRect, activeRegions) {
326
+ if (activeRegions.size === 0) return null;
327
+ const relativeX = clientX - containerRect.left;
328
+ const width = containerRect.width;
329
+ if (width === 0) return null;
330
+ const ratio = relativeX / width;
331
+ if (activeRegions.size === 2 && activeRegions.has("left") && activeRegions.has("right")) return ratio < .5 ? "left" : "right";
332
+ if (activeRegions.size === 3) {
333
+ if (ratio < 1 / 3) return "left";
334
+ if (ratio < 2 / 3) return "center";
335
+ return "right";
271
336
  }
272
- };
273
- function createState(initial) {
274
- return new StateContainer(initial);
337
+ if (activeRegions.has("left") && ratio < .5) return "left";
338
+ if (activeRegions.has("right") && ratio >= .5) return "right";
339
+ if (activeRegions.has("center")) {
340
+ if (activeRegions.size === 1) return "center";
341
+ if (ratio >= 1 / 3 && ratio < 2 / 3) return "center";
342
+ }
343
+ return null;
275
344
  }
276
345
 
277
346
  //#endregion
278
- //#region ../store/dist/dev/core/store.js
279
- const STORE_SYMBOL = Symbol.for("@videojs/store");
280
- const hasOwnProp = Object.prototype.hasOwnProperty;
281
- function createStore() {
282
- return ((slice, options = {}) => {
283
- let target = null;
284
- let destroyed = false;
285
- const setupAbort = new AbortController();
286
- const signals = new AbortControllerRegistry();
287
- let sourceState;
288
- let state;
289
- function validate() {
290
- if (destroyed) throwDestroyedError();
291
- if (!target) throwNoTargetError();
292
- }
293
- const initialSourceState = freezeCopy(slice.state({
294
- target: () => {
295
- validate();
296
- return target;
297
- },
298
- signals,
299
- get: () => sourceState,
300
- set: (partial) => setSource(partial)
301
- }));
302
- sourceState = initialSourceState;
303
- const initialDerivedState = derive(sourceState);
304
- state = createState(publish(sourceState, initialDerivedState));
305
- const store = {
306
- [STORE_SYMBOL]: true,
307
- get $state() {
308
- return state;
309
- },
310
- get target() {
311
- return target;
312
- },
313
- get destroyed() {
314
- return destroyed;
315
- },
316
- get state() {
317
- return state.current;
318
- },
319
- attach,
320
- destroy,
321
- subscribe
322
- };
323
- for (const key of Object.keys(state.current)) Object.defineProperty(store, key, {
324
- get: () => state.current[key],
325
- enumerable: true
326
- });
327
- for (const key of Object.getOwnPropertySymbols(sourceState)) {
328
- if (typeof sourceState[key] !== "function") continue;
329
- Object.defineProperty(store, key, { get: () => sourceState[key] });
330
- }
331
- try {
332
- options.onSetup?.({
333
- store,
334
- signal: setupAbort.signal
335
- });
336
- } catch (error) {
337
- reportError(error);
338
- }
339
- return store;
340
- function derive(source) {
341
- const result = {};
342
- const definitions = slice.derived;
343
- if (!definitions) return result;
344
- const ctx = { get: () => source };
345
- for (const key of Object.keys(definitions)) result[key] = definitions[key](ctx);
346
- return result;
347
- }
348
- function publish(source, derived) {
349
- const result = {};
350
- for (const key of Object.keys(source)) result[key] = source[key];
351
- return Object.assign(result, derived);
352
- }
353
- function setSource(partial) {
354
- const patched = patchSource(sourceState, partial);
355
- if (!patched) return;
356
- const nextDerived = derive(patched.next);
357
- sourceState = patched.next;
358
- state.replace(publish(sourceState, nextDerived));
359
- }
360
- function attach(newTarget) {
361
- if (destroyed) throwDestroyedError();
362
- signals.reset();
363
- target = newTarget;
364
- const attachContext = {
365
- target: newTarget,
366
- signal: signals.base,
367
- get: () => sourceState,
368
- set: (partial) => {
369
- try {
370
- setSource(partial);
347
+ //#region ../core/dist/dev/dom/gesture/coordinator.js
348
+ const TAP_THRESHOLD$1 = 250;
349
+ var GestureCoordinator = class {
350
+ #target;
351
+ #bindings = [];
352
+ #recognizers = /* @__PURE__ */ new Set();
353
+ #disconnect = null;
354
+ #subscribers = /* @__PURE__ */ new Set();
355
+ constructor(target) {
356
+ this.#target = target;
357
+ }
358
+ get bindings() {
359
+ return this.#bindings;
360
+ }
361
+ subscribe(callback) {
362
+ this.#subscribers.add(callback);
363
+ return () => this.#subscribers.delete(callback);
364
+ }
365
+ /**
366
+ * Whether a registered binding claims this tap for the given action. A claimed tap
367
+ * belongs to the gesture layer, so callers should leave it alone. Taps on interactive
368
+ * targets (buttons, sliders) are never claimed — the same filtering the pointerup
369
+ * listener applies. A disabled binding still claims: disabling a gesture opts out of
370
+ * the action, it doesn't hand the tap back to a fallback handler.
371
+ */
372
+ claimsTap(event, action) {
373
+ if (isInteractiveTarget(event)) return false;
374
+ return this.#bindings.some((b) => b.type === "tap" && b.action === action && (!b.pointer || b.pointer === event.pointerType));
375
+ }
376
+ add(binding) {
377
+ const wrapped = {
378
+ ...binding,
379
+ onActivate: (event) => {
380
+ if (this.#subscribers.size > 0) {
381
+ const activateEvent = {
382
+ type: binding.type,
383
+ source: "gesture",
384
+ action: binding.action,
385
+ value: binding.value,
386
+ region: binding.region,
387
+ pointer: binding.pointer,
388
+ event
389
+ };
390
+ for (const cb of this.#subscribers) try {
391
+ cb(activateEvent);
371
392
  } catch (error) {
372
- reportError(error);
393
+ console.warn("[vjs-gesture] subscribe callback threw:", error);
373
394
  }
374
- },
375
- reportError,
376
- store: {
377
- get state() {
378
- return state.current;
379
- },
380
- subscribe
381
395
  }
382
- };
383
- try {
384
- slice.attach?.(attachContext);
385
- } catch (error) {
386
- reportError(error);
396
+ binding.onActivate(event);
387
397
  }
388
- try {
389
- options.onAttach?.({
390
- store,
391
- target: newTarget,
392
- signal: signals.base
393
- });
394
- } catch (error) {
395
- reportError(error);
396
- }
397
- return detach;
398
- }
399
- function detach() {
400
- if (isNull(target)) return;
401
- signals.reset();
402
- target = null;
403
- const resetState = { ...initialSourceState };
404
- for (const key of slice.preserve ?? []) resetState[key] = sourceState[key];
405
- setSource(resetState);
406
- }
407
- function destroy() {
408
- if (destroyed) return;
409
- destroyed = true;
410
- detach();
411
- setupAbort.abort();
412
- }
413
- function subscribe(callback, options) {
414
- return state.subscribe(callback, options);
415
- }
416
- function reportError(error) {
417
- if (options.onError) options.onError({
418
- store,
419
- error
420
- });
421
- else console.error("[vjs-store]", error);
422
- }
423
- });
424
- }
425
- function freezeCopy(value) {
426
- return Object.freeze({ ...value });
427
- }
428
- function patchSource(current, partial) {
429
- const next = { ...current };
430
- let changed = false;
431
- for (const key of Reflect.ownKeys(partial)) {
432
- if (!hasOwnProp.call(partial, key)) continue;
433
- const value = partial[key];
434
- if (Object.is(current[key], value)) continue;
435
- next[key] = value;
436
- changed = true;
398
+ };
399
+ this.#bindings.push(wrapped);
400
+ this.#recognizers.add(wrapped.recognizer);
401
+ this.#connect();
402
+ let removed = false;
403
+ return () => {
404
+ if (removed) return;
405
+ removed = true;
406
+ const idx = this.#bindings.indexOf(wrapped);
407
+ if (idx !== -1) this.#bindings.splice(idx, 1);
408
+ this.#maybeDisconnect();
409
+ };
437
410
  }
438
- return changed ? { next: Object.freeze(next) } : null;
439
- }
440
- function isStore(value) {
441
- return isObject(value) && STORE_SYMBOL in value;
411
+ #connect() {
412
+ if (this.#disconnect) return;
413
+ this.#disconnect = new AbortController();
414
+ const { signal } = this.#disconnect;
415
+ let pointerDownTime = 0;
416
+ listen(this.#target, "pointerdown", (event) => {
417
+ if (event.button !== 0) return;
418
+ pointerDownTime = Date.now();
419
+ }, { signal });
420
+ listen(this.#target, "pointerup", (event) => {
421
+ if (event.button !== 0) return;
422
+ if (Date.now() - pointerDownTime > TAP_THRESHOLD$1) return;
423
+ if (isInteractiveTarget(event)) return;
424
+ const pointerType = event.pointerType;
425
+ const clientX = event.clientX;
426
+ const target = this.#target;
427
+ const bindings = this.#bindings;
428
+ const matches = { resolve: (type) => matchBindings(bindings, type, pointerType, clientX, target) };
429
+ for (const recognizer of this.#recognizers) recognizer.handleUp(matches, event);
430
+ }, { signal });
431
+ }
432
+ #maybeDisconnect() {
433
+ if (this.#bindings.length > 0) return;
434
+ for (const recognizer of this.#recognizers) recognizer.reset();
435
+ this.#recognizers.clear();
436
+ this.#disconnect?.abort();
437
+ this.#disconnect = null;
438
+ }
439
+ };
440
+ const coordinators = /* @__PURE__ */ new WeakMap();
441
+ /** Look up the gesture coordinator for a target element, if one exists. */
442
+ function findGestureCoordinator(target) {
443
+ return coordinators.get(target);
442
444
  }
443
-
444
- //#endregion
445
- //#region ../core/dist/dev/dom/feature.js
446
- const definePlayerSlice = defineSlice();
447
- function definePlayerFeature(definition, defaultConfig) {
448
- if (arguments.length === 1) {
449
- const feature = definition;
450
- const preserved = Object.values(feature.config ?? {}).map((entry) => entry.state);
451
- return {
452
- ...feature,
453
- ...preserved.length > 0 ? { preserve: preserved } : {}
454
- };
445
+ function getGestureCoordinator(target) {
446
+ let coordinator = coordinators.get(target);
447
+ if (!coordinator) {
448
+ coordinator = new GestureCoordinator(target);
449
+ coordinators.set(target, coordinator);
455
450
  }
456
- const { name, state, attach } = definition;
457
- const forConfig = (featureConfig) => definePlayerSlice({
458
- ...isUndefined(name) ? {} : { name },
459
- state: (ctx) => state(ctx, featureConfig),
460
- ...attach ? { attach: (ctx) => attach(ctx, featureConfig) } : {}
461
- });
462
- const defaultFeature = forConfig(defaultConfig);
463
- const feature = ((featureConfig) => isUndefined(featureConfig) ? defaultFeature : forConfig(featureConfig));
464
- feature.state = defaultFeature.state;
465
- if (defaultFeature.attach) feature.attach = defaultFeature.attach;
466
- if (!isUndefined(name)) Object.defineProperty(feature, "name", { value: name });
467
- return feature;
451
+ return coordinator;
468
452
  }
469
- /** Merge the configuration declarations from the selected player features. */
470
- function combinePlayerFeatureConfigs(features) {
471
- const definitions = features.map((feature) => feature.config ?? {});
472
- {
473
- const seen = /* @__PURE__ */ new Set();
474
- for (const definition of definitions) for (const key of Object.keys(definition)) {
475
- if (seen.has(key)) console.warn(`[vjs-core] duplicate config key "${key}" — later feature overwrites earlier one`);
476
- seen.add(key);
477
- }
453
+ function matchBindings(bindings, type, pointerType, clientX, target) {
454
+ const rect = target.getBoundingClientRect();
455
+ const activeRegions = getActiveRegions(bindings, type, pointerType);
456
+ const region = activeRegions.size > 0 ? resolveRegion(clientX, rect, activeRegions) : null;
457
+ const matches = [];
458
+ for (const binding of bindings) {
459
+ if (binding.disabled) continue;
460
+ if (binding.type !== type) continue;
461
+ if (binding.pointer && binding.pointer !== pointerType) continue;
462
+ if (binding.region) {
463
+ if (binding.region !== region) continue;
464
+ } else if (region !== null) continue;
465
+ matches.push(binding);
478
466
  }
479
- return Object.assign({}, ...definitions);
467
+ return matches;
480
468
  }
481
- /** Forward one configuration input through its feature-owned private action. */
482
- function setPlayerConfigValue(store, entry, value) {
483
- const action = store[entry.action];
484
- if (typeof action !== "function") throw new TypeError(`Missing config action "${String(entry.action)}"`);
485
- action(value);
469
+ function getActiveRegions(bindings, type, pointerType) {
470
+ const regions = /* @__PURE__ */ new Set();
471
+ for (const binding of bindings) {
472
+ if (binding.disabled) continue;
473
+ if (binding.type !== type) continue;
474
+ if (binding.pointer && binding.pointer !== pointerType) continue;
475
+ if (binding.region) regions.add(binding.region);
476
+ }
477
+ return regions;
486
478
  }
487
479
 
488
480
  //#endregion
489
- //#region ../media/dist/dev/core/predicate.js
490
- function hasMetadata(media) {
491
- return media.readyState >= 1;
492
- }
493
- function isMediaPauseCapable(value) {
494
- if (!isObject(value)) return false;
495
- const media = value;
496
- return !isUndefined(media.paused) && !isUndefined(media.ended) && isFunction(media.pause);
497
- }
498
- function isMediaSeekCapable(value) {
499
- if (!isObject(value)) return false;
500
- const media = value;
501
- return !isUndefined(media.currentTime) && !isUndefined(media.duration) && !isUndefined(media.seeking);
502
- }
503
- function isMediaSourceCapable(value) {
504
- if (!isObject(value)) return false;
505
- const media = value;
506
- return !isUndefined(media.src) && !isUndefined(media.currentSrc) && !isUndefined(media.readyState) && isFunction(media.load);
507
- }
508
- function isMediaVolumeCapable(value) {
509
- if (!isObject(value)) return false;
510
- const media = value;
511
- return !isUndefined(media.volume) && !isUndefined(media.muted);
512
- }
513
- /**
514
- * Whether the media reports a mute at all, which is a narrower question than
515
- * `isMediaVolumeCapable`: an embed can take a mute command while offering no way
516
- * to set a level.
517
- */
518
- function isMediaMutedCapable(value) {
519
- if (!isObject(value)) return false;
520
- return !isUndefined(value.muted);
521
- }
522
- function isMediaPlaybackRateCapable(value) {
523
- if (!isObject(value)) return false;
524
- return !isUndefined(value.playbackRate);
525
- }
526
- /**
527
- * Only `requestPictureInPicture` is required. A native video element carries it
528
- * but leaves exiting to `document`, so demanding the pair would rule out the one
529
- * media that most certainly can.
530
- */
531
- function isMediaPictureInPictureCapable(value) {
532
- if (!isObject(value)) return false;
533
- return isFunction(value.requestPictureInPicture);
534
- }
535
- function isMediaBufferCapable(value) {
536
- if (!isObject(value)) return false;
537
- const media = value;
538
- return !isUndefined(media.buffered) && media.buffered !== EMPTY_TIME_RANGES && !isUndefined(media.seekable) && media.seekable !== EMPTY_TIME_RANGES;
539
- }
540
- function isMediaErrorCapable(value) {
541
- if (!isObject(value)) return false;
542
- return !isUndefined(value.error);
543
- }
544
- function isMediaTextTrackCapable(value) {
545
- if (!isObject(value)) return false;
546
- const media = value;
547
- return !isUndefined(media.textTracks) && media.textTracks !== EMPTY_TEXT_TRACKS;
548
- }
549
- function isMediaVideoRenditionCapable(value) {
550
- if (!isObject(value)) return false;
551
- return !isUndefined(value.videoRenditions);
552
- }
553
- function isMediaAudioTrackCapable(value) {
554
- if (!isObject(value)) return false;
555
- return !isUndefined(value.audioTracks);
556
- }
557
- function isMediaVideoDimensionsCapable(value) {
558
- if (!isObject(value)) return false;
559
- const media = value;
560
- return !isUndefined(media.videoWidth) && !isUndefined(media.videoHeight);
561
- }
562
- function isMediaRemotePlaybackCapable(value) {
563
- if (!isObject(value)) return false;
564
- const media = value;
565
- return isObject(media.remote) && media.remote !== EMPTY_REMOTE;
566
- }
567
- function isMediaStreamTypeCapable(value) {
568
- if (!isObject(value)) return false;
569
- return !isUndefined(value.streamType);
481
+ //#region ../core/dist/dev/dom/presentation/remote-playback.js
482
+ function resolveRemote(media) {
483
+ const target = media;
484
+ if (isObject(target.remote) && "state" in target.remote && "prompt" in target.remote) return target.remote;
570
485
  }
571
- function isMediaContentDataCapable(value) {
572
- if (!isObject(value)) return false;
573
- return !isUndefined(value.contentData);
486
+ function isRemotePlaybackConnected(media) {
487
+ return resolveRemote(media)?.state === "connected";
574
488
  }
575
- function isMediaLiveCapable(value) {
576
- if (!isObject(value)) return false;
577
- const media = value;
578
- return !isUndefined(media.liveEdgeStart) && !isUndefined(media.targetLiveWindow);
489
+ function isRemotePlaybackConnecting(media) {
490
+ return resolveRemote(media)?.state === "connecting";
579
491
  }
580
- function isQuerySelectorAllCapable(value) {
581
- return isObject(value) && "querySelectorAll" in value && isFunction(value.querySelectorAll);
582
- }
583
-
584
- //#endregion
585
- //#region ../core/dist/dev/dom/store/features/audio-track.js
586
- function getTrackValue(track, index) {
587
- return track.id || String(index);
588
- }
589
- function toMediaTrack(track) {
590
- return {
591
- ...track.id !== void 0 && { id: track.id },
592
- ...track.kind !== void 0 && { kind: track.kind },
593
- label: track.label,
594
- language: track.language,
595
- enabled: track.enabled
596
- };
597
- }
598
- const audioTrackFeature = definePlayerFeature({
599
- name: "audioTrack",
600
- state: ({ target }) => ({
601
- audioTrackList: [],
602
- selectAudioTrack(value) {
603
- const { media } = target();
604
- if (!isMediaAudioTrackCapable(media)) return;
605
- const tracks = [...media.audioTracks];
606
- const track = tracks.find((candidate, index) => getTrackValue(candidate, index) === value);
607
- if (!track) return;
608
- for (const candidate of tracks) candidate.enabled = candidate === track;
609
- }
610
- }),
611
- attach({ target, signal, set }) {
612
- const { media } = target;
613
- let audioTracks = null;
614
- let cleanup = null;
615
- const getAudioTracks = () => isMediaAudioTrackCapable(media) ? media.audioTracks : null;
616
- const sync = (list = getAudioTracks()) => {
617
- set({ audioTrackList: list ? [...list].map(toMediaTrack) : [] });
618
- };
619
- const bind = () => {
620
- const nextAudioTracks = getAudioTracks();
621
- if (nextAudioTracks === audioTracks) {
622
- sync(nextAudioTracks);
623
- return;
624
- }
625
- cleanup?.abort();
626
- cleanup = new AbortController();
627
- audioTracks = nextAudioTracks;
628
- if (audioTracks) {
629
- listen(audioTracks, "addtrack", () => sync(audioTracks), { signal: cleanup.signal });
630
- listen(audioTracks, "removetrack", () => sync(audioTracks), { signal: cleanup.signal });
631
- listen(audioTracks, "change", () => sync(audioTracks), { signal: cleanup.signal });
632
- }
633
- sync(audioTracks);
634
- };
635
- bind();
636
- listen(media, "loadstart", bind, { signal });
637
- signal.addEventListener("abort", () => cleanup?.abort(), { once: true });
638
- }
639
- });
640
-
641
- //#endregion
642
- //#region ../core/dist/dev/dom/store/features/buffer.js
643
- const bufferFeature = definePlayerFeature({
644
- name: "buffer",
645
- state: () => ({
646
- buffered: [],
647
- seekable: []
648
- }),
649
- attach({ target, signal, set }) {
650
- const { media } = target;
651
- if (!isMediaBufferCapable(media)) return;
652
- const sync = () => set({
653
- buffered: serializeTimeRanges(media.buffered),
654
- seekable: serializeTimeRanges(media.seekable)
655
- });
656
- sync();
657
- listen(media, "progress", sync, { signal });
658
- listen(media, "emptied", sync, { signal });
659
- }
660
- });
661
-
662
- //#endregion
663
- //#region ../core/dist/dev/dom/gesture/region.js
664
- /**
665
- * Determine which named region a pointer position falls into.
666
- *
667
- * Regions divide the container width equally based on how many are active:
668
- * - `left` + `right` → halves (50% / 50%)
669
- * - `left` + `center` + `right` → thirds (33% / 34% / 33%)
670
- *
671
- * Single region: `left` covers the left half, `right` the right half,
672
- * and `center` covers the full surface. Partial two-region combos
673
- * (e.g. `left` + `center`) use the same natural zones — positions outside
674
- * all active zones return `null` so full-surface gestures can handle them.
675
- */
676
- function resolveRegion(clientX, containerRect, activeRegions) {
677
- if (activeRegions.size === 0) return null;
678
- const relativeX = clientX - containerRect.left;
679
- const width = containerRect.width;
680
- if (width === 0) return null;
681
- const ratio = relativeX / width;
682
- if (activeRegions.size === 2 && activeRegions.has("left") && activeRegions.has("right")) return ratio < .5 ? "left" : "right";
683
- if (activeRegions.size === 3) {
684
- if (ratio < 1 / 3) return "left";
685
- if (ratio < 2 / 3) return "center";
686
- return "right";
687
- }
688
- if (activeRegions.has("left") && ratio < .5) return "left";
689
- if (activeRegions.has("right") && ratio >= .5) return "right";
690
- if (activeRegions.has("center")) {
691
- if (activeRegions.size === 1) return "center";
692
- if (ratio >= 1 / 3 && ratio < 2 / 3) return "center";
693
- }
694
- return null;
695
- }
696
-
697
- //#endregion
698
- //#region ../core/dist/dev/dom/gesture/coordinator.js
699
- const TAP_THRESHOLD$1 = 250;
700
- var GestureCoordinator = class {
701
- #target;
702
- #bindings = [];
703
- #recognizers = /* @__PURE__ */ new Set();
704
- #disconnect = null;
705
- #subscribers = /* @__PURE__ */ new Set();
706
- constructor(target) {
707
- this.#target = target;
708
- }
709
- get bindings() {
710
- return this.#bindings;
711
- }
712
- subscribe(callback) {
713
- this.#subscribers.add(callback);
714
- return () => this.#subscribers.delete(callback);
715
- }
716
- /**
717
- * Whether a registered binding claims this tap for the given action. A claimed tap
718
- * belongs to the gesture layer, so callers should leave it alone. Taps on interactive
719
- * targets (buttons, sliders) are never claimed — the same filtering the pointerup
720
- * listener applies. A disabled binding still claims: disabling a gesture opts out of
721
- * the action, it doesn't hand the tap back to a fallback handler.
722
- */
723
- claimsTap(event, action) {
724
- if (isInteractiveTarget(event)) return false;
725
- return this.#bindings.some((b) => b.type === "tap" && b.action === action && (!b.pointer || b.pointer === event.pointerType));
726
- }
727
- add(binding) {
728
- const wrapped = {
729
- ...binding,
730
- onActivate: (event) => {
731
- if (this.#subscribers.size > 0) {
732
- const activateEvent = {
733
- type: binding.type,
734
- source: "gesture",
735
- action: binding.action,
736
- value: binding.value,
737
- region: binding.region,
738
- pointer: binding.pointer,
739
- event
740
- };
741
- for (const cb of this.#subscribers) try {
742
- cb(activateEvent);
743
- } catch (error) {
744
- console.warn("[vjs-gesture] subscribe callback threw:", error);
745
- }
746
- }
747
- binding.onActivate(event);
748
- }
749
- };
750
- this.#bindings.push(wrapped);
751
- this.#recognizers.add(wrapped.recognizer);
752
- this.#connect();
753
- let removed = false;
754
- return () => {
755
- if (removed) return;
756
- removed = true;
757
- const idx = this.#bindings.indexOf(wrapped);
758
- if (idx !== -1) this.#bindings.splice(idx, 1);
759
- this.#maybeDisconnect();
760
- };
761
- }
762
- #connect() {
763
- if (this.#disconnect) return;
764
- this.#disconnect = new AbortController();
765
- const { signal } = this.#disconnect;
766
- let pointerDownTime = 0;
767
- listen(this.#target, "pointerdown", (event) => {
768
- if (event.button !== 0) return;
769
- pointerDownTime = Date.now();
770
- }, { signal });
771
- listen(this.#target, "pointerup", (event) => {
772
- if (event.button !== 0) return;
773
- if (Date.now() - pointerDownTime > TAP_THRESHOLD$1) return;
774
- if (isInteractiveTarget(event)) return;
775
- const pointerType = event.pointerType;
776
- const clientX = event.clientX;
777
- const target = this.#target;
778
- const bindings = this.#bindings;
779
- const matches = { resolve: (type) => matchBindings(bindings, type, pointerType, clientX, target) };
780
- for (const recognizer of this.#recognizers) recognizer.handleUp(matches, event);
781
- }, { signal });
782
- }
783
- #maybeDisconnect() {
784
- if (this.#bindings.length > 0) return;
785
- for (const recognizer of this.#recognizers) recognizer.reset();
786
- this.#recognizers.clear();
787
- this.#disconnect?.abort();
788
- this.#disconnect = null;
789
- }
790
- };
791
- const coordinators = /* @__PURE__ */ new WeakMap();
792
- /** Look up the gesture coordinator for a target element, if one exists. */
793
- function findGestureCoordinator(target) {
794
- return coordinators.get(target);
795
- }
796
- function getGestureCoordinator(target) {
797
- let coordinator = coordinators.get(target);
798
- if (!coordinator) {
799
- coordinator = new GestureCoordinator(target);
800
- coordinators.set(target, coordinator);
801
- }
802
- return coordinator;
803
- }
804
- function matchBindings(bindings, type, pointerType, clientX, target) {
805
- const rect = target.getBoundingClientRect();
806
- const activeRegions = getActiveRegions(bindings, type, pointerType);
807
- const region = activeRegions.size > 0 ? resolveRegion(clientX, rect, activeRegions) : null;
808
- const matches = [];
809
- for (const binding of bindings) {
810
- if (binding.disabled) continue;
811
- if (binding.type !== type) continue;
812
- if (binding.pointer && binding.pointer !== pointerType) continue;
813
- if (binding.region) {
814
- if (binding.region !== region) continue;
815
- } else if (region !== null) continue;
816
- matches.push(binding);
817
- }
818
- return matches;
819
- }
820
- function getActiveRegions(bindings, type, pointerType) {
821
- const regions = /* @__PURE__ */ new Set();
822
- for (const binding of bindings) {
823
- if (binding.disabled) continue;
824
- if (binding.type !== type) continue;
825
- if (binding.pointer && binding.pointer !== pointerType) continue;
826
- if (binding.region) regions.add(binding.region);
827
- }
828
- return regions;
829
- }
830
-
831
- //#endregion
832
- //#region ../core/dist/dev/dom/presentation/remote-playback.js
833
- function resolveRemote(media) {
834
- const target = media;
835
- if (isObject(target.remote) && "state" in target.remote && "prompt" in target.remote) return target.remote;
836
- }
837
- function isRemotePlaybackConnected(media) {
838
- return resolveRemote(media)?.state === "connected";
839
- }
840
- function isRemotePlaybackConnecting(media) {
841
- return resolveRemote(media)?.state === "connecting";
842
- }
843
- async function requestRemotePlayback(media) {
844
- const remote = resolveRemote(media);
845
- if (!remote) throw new DOMException("Remote playback not supported", "NotSupportedError");
846
- return remote.prompt();
492
+ async function requestRemotePlayback(media) {
493
+ const remote = resolveRemote(media);
494
+ if (!remote) throw new DOMException("Remote playback not supported", "NotSupportedError");
495
+ return remote.prompt();
847
496
  }
848
497
 
849
498
  //#endregion
@@ -1239,11 +888,13 @@ const DEFAULT_POSTER = "";
1239
888
  const metadataFeature = definePlayerFeature({
1240
889
  name: "metadata",
1241
890
  config: {
891
+ /** The title to display. Takes precedence over the title the media carries. */
1242
892
  title: {
1243
893
  action: SET_USER_TITLE,
1244
894
  state: USER_TITLE,
1245
895
  html: { attribute: "content-title" }
1246
896
  },
897
+ /** The poster to display. Takes precedence over the poster the media carries. */
1247
898
  poster: {
1248
899
  action: SET_USER_POSTER,
1249
900
  state: USER_POSTER
@@ -1258,7 +909,12 @@ const metadataFeature = definePlayerFeature({
1258
909
  [SET_USER_POSTER]: (value) => set({ [USER_POSTER]: value })
1259
910
  }),
1260
911
  derived: {
912
+ /** The resolved content title. Set it through the player, not through the store. */
1261
913
  title: ({ get }) => get()[USER_TITLE] ?? get()[MEDIA_TITLE] ?? DEFAULT_TITLE,
914
+ /**
915
+ * The resolved poster URL, independent of the media element's own `poster`.
916
+ * Set it through the player, not through the store.
917
+ */
1262
918
  poster: ({ get }) => get()[USER_POSTER] ?? get()[MEDIA_POSTER] ?? DEFAULT_POSTER
1263
919
  },
1264
920
  attach({ target, signal, set }) {
@@ -1570,6 +1226,15 @@ function showOnly(tracks, active) {
1570
1226
  if (track.mode !== mode) track.mode = mode;
1571
1227
  }
1572
1228
  }
1229
+ /**
1230
+ * Map a media element's `crossOrigin` to a CORS mode. Per the CORS-settings
1231
+ * attribute, any value other than `use-credentials` is Anonymous — including
1232
+ * the empty string and unknown keywords.
1233
+ */
1234
+ function toCorsMode(value) {
1235
+ if (isNil(value)) return null;
1236
+ return value.toLowerCase() === "use-credentials" ? "use-credentials" : "anonymous";
1237
+ }
1573
1238
  function findLocaleTrack(tracks, locale) {
1574
1239
  const localeKey = getCanonicalLocaleKey(locale);
1575
1240
  const keys = findLocaleKeys(locale);
@@ -1589,6 +1254,7 @@ const textTrackFeature = definePlayerFeature({
1589
1254
  chaptersCues: [],
1590
1255
  thumbnailCues: [],
1591
1256
  thumbnailTrackSrc: null,
1257
+ thumbnailTrackCrossOrigin: null,
1592
1258
  textTrackList: [],
1593
1259
  subtitlesShowing: false,
1594
1260
  toggleSubtitles(forceShow) {
@@ -1653,7 +1319,11 @@ const textTrackFeature = definePlayerFeature({
1653
1319
  const chaptersCues = chaptersTrack?.cues ? Array.from(chaptersTrack.cues) : [];
1654
1320
  const thumbnailCues = thumbnailTrack?.cues ? Array.from(thumbnailTrack.cues) : [];
1655
1321
  let thumbnailTrackSrc = null;
1656
- if (thumbnailTrack) thumbnailTrackSrc = findTrackElement(media, thumbnailTrack)?.src ?? null;
1322
+ let thumbnailTrackCrossOrigin = null;
1323
+ if (thumbnailTrack) {
1324
+ thumbnailTrackSrc = findTrackElement(media, thumbnailTrack)?.src ?? null;
1325
+ thumbnailTrackCrossOrigin = isMediaSourceCapable(media) ? toCorsMode(media.crossOrigin) : null;
1326
+ }
1657
1327
  const tracks = isQuerySelectorAllCapable(media) && media.querySelectorAll("track") || [];
1658
1328
  const shadowTracks = media instanceof HTMLElement && media.shadowRoot?.querySelectorAll("track") || [];
1659
1329
  for (const trackEl of [...tracks, ...shadowTracks]) if (!trackEl.track?.cues?.length) listen(trackEl, "load", sync, { signal: trackCleanup.signal });
@@ -1661,6 +1331,7 @@ const textTrackFeature = definePlayerFeature({
1661
1331
  chaptersCues,
1662
1332
  thumbnailCues,
1663
1333
  thumbnailTrackSrc,
1334
+ thumbnailTrackCrossOrigin,
1664
1335
  textTrackList,
1665
1336
  subtitlesShowing
1666
1337
  });
@@ -1797,6 +1468,335 @@ function canSetVolume() {
1797
1468
  }
1798
1469
  }
1799
1470
 
1471
+ //#endregion
1472
+ //#region ../store/dist/dev/core/abort-controller-registry.js
1473
+ var AbortControllerRegistry = class {
1474
+ #base;
1475
+ #keys = /* @__PURE__ */ new Map();
1476
+ /** The attach-scoped signal. Aborts on detach or reattach. */
1477
+ get base() {
1478
+ return (this.#base ??= new AbortController()).signal;
1479
+ }
1480
+ /** Clears all keyed signals, leaving base intact. */
1481
+ clear() {
1482
+ for (const controller of this.#keys.values()) controller.abort();
1483
+ this.#keys.clear();
1484
+ }
1485
+ /** Resets base and clears all keyed signals. */
1486
+ reset() {
1487
+ this.clear();
1488
+ this.#base?.abort();
1489
+ this.#base = void 0;
1490
+ }
1491
+ /** Creates a new signal for the key, superseding any previous signal. */
1492
+ supersede(key) {
1493
+ this.#keys.get(key)?.abort();
1494
+ const controller = new AbortController();
1495
+ this.#keys.set(key, controller);
1496
+ return anyAbortSignal([this.base, controller.signal]);
1497
+ }
1498
+ };
1499
+
1500
+ //#endregion
1501
+ //#region ../store/dist/dev/core/combine.js
1502
+ /**
1503
+ * Combines multiple slices into a single slice.
1504
+ *
1505
+ * @param slices - The slices to combine.
1506
+ * @returns A new slice that represents the combination of the input slices.
1507
+ */
1508
+ function combine(...slices) {
1509
+ const derivedDefinitions = slices.map((slice) => slice.derived ?? {});
1510
+ warnDuplicates("derived", derivedDefinitions);
1511
+ return {
1512
+ state: (ctx) => {
1513
+ const states = slices.map((slice) => slice.state(ctx));
1514
+ warnDuplicates("state", states);
1515
+ warnOverlaps(states, derivedDefinitions);
1516
+ return Object.assign({}, ...states);
1517
+ },
1518
+ preserve: Array.from(new Set(slices.flatMap((slice) => slice.preserve ?? []))),
1519
+ derived: Object.assign({}, ...derivedDefinitions),
1520
+ attach: (ctx) => {
1521
+ for (const slice of slices) try {
1522
+ slice.attach?.(ctx);
1523
+ } catch (err) {
1524
+ ctx.reportError(err);
1525
+ }
1526
+ }
1527
+ };
1528
+ }
1529
+ function warnDuplicates(namespace, objects) {
1530
+ const seen = /* @__PURE__ */ new Set();
1531
+ for (const object of objects) for (const key of Reflect.ownKeys(object)) {
1532
+ if (seen.has(key)) console.warn(`[vjs-store] combine(): duplicate ${namespace} key "${String(key)}" — later slice overwrites earlier one`);
1533
+ seen.add(key);
1534
+ }
1535
+ }
1536
+ function warnOverlaps(states, derivedDefinitions) {
1537
+ const stateKeys = new Set(states.flatMap((state) => Reflect.ownKeys(state)));
1538
+ for (const key of new Set(derivedDefinitions.flatMap((derived) => Reflect.ownKeys(derived)))) if (stateKeys.has(key)) console.warn(`[vjs-store] combine(): state and derived key "${String(key)}" overlap — derived state overwrites source state`);
1539
+ }
1540
+
1541
+ //#endregion
1542
+ //#region ../store/dist/dev/core/errors.js
1543
+ var StoreError = class extends Error {
1544
+ code;
1545
+ cause;
1546
+ constructor(code, options) {
1547
+ super(options?.message ?? code);
1548
+ this.name = "StoreError";
1549
+ this.code = code;
1550
+ this.cause = options?.cause;
1551
+ }
1552
+ };
1553
+ function throwNoTargetError() {
1554
+ throw new StoreError("NO_TARGET");
1555
+ }
1556
+ function throwDestroyedError() {
1557
+ throw new StoreError("DESTROYED");
1558
+ }
1559
+
1560
+ //#endregion
1561
+ //#region ../store/dist/dev/core/state.js
1562
+ let isFlushScheduled = false;
1563
+ function scheduleFlush() {
1564
+ if (isFlushScheduled) return;
1565
+ isFlushScheduled = true;
1566
+ queueMicrotask(flush);
1567
+ }
1568
+ const pendingContainers = /* @__PURE__ */ new Set();
1569
+ function flush() {
1570
+ isFlushScheduled = false;
1571
+ for (const container of pendingContainers) container.flush();
1572
+ pendingContainers.clear();
1573
+ }
1574
+ const hasOwnProp$1 = Object.prototype.hasOwnProperty;
1575
+ var StateContainer = class {
1576
+ #current;
1577
+ #listeners = /* @__PURE__ */ new Set();
1578
+ #pending = false;
1579
+ constructor(initial) {
1580
+ this.#current = Object.freeze({ ...initial });
1581
+ }
1582
+ get current() {
1583
+ return this.#current;
1584
+ }
1585
+ patch(partial) {
1586
+ const next = { ...this.#current };
1587
+ let changed = false;
1588
+ for (const key of Reflect.ownKeys(partial)) {
1589
+ if (!hasOwnProp$1.call(partial, key)) continue;
1590
+ const value = partial[key];
1591
+ if (!Object.is(this.#current[key], value)) {
1592
+ next[key] = value;
1593
+ changed = true;
1594
+ }
1595
+ }
1596
+ if (changed) {
1597
+ this.#current = Object.freeze(next);
1598
+ this.#markPending();
1599
+ }
1600
+ }
1601
+ replace(next) {
1602
+ if (shallowEqual(this.#current, next)) return;
1603
+ this.#current = Object.freeze({ ...next });
1604
+ this.#markPending();
1605
+ }
1606
+ subscribe(callback, options) {
1607
+ const signal = options?.signal;
1608
+ if (signal?.aborted) return noop;
1609
+ this.#listeners.add(callback);
1610
+ if (!signal) return () => this.#listeners.delete(callback);
1611
+ const onAbort = () => this.#listeners.delete(callback);
1612
+ signal.addEventListener("abort", onAbort, { once: true });
1613
+ return () => {
1614
+ signal.removeEventListener("abort", onAbort);
1615
+ this.#listeners.delete(callback);
1616
+ };
1617
+ }
1618
+ flush() {
1619
+ if (!this.#pending) return;
1620
+ this.#pending = false;
1621
+ for (const fn of this.#listeners) fn();
1622
+ }
1623
+ #markPending() {
1624
+ this.#pending = true;
1625
+ pendingContainers.add(this);
1626
+ scheduleFlush();
1627
+ }
1628
+ };
1629
+ function createState(initial) {
1630
+ return new StateContainer(initial);
1631
+ }
1632
+
1633
+ //#endregion
1634
+ //#region ../store/dist/dev/core/store.js
1635
+ const STORE_SYMBOL = Symbol.for("@videojs/store");
1636
+ const hasOwnProp = Object.prototype.hasOwnProperty;
1637
+ function createStore() {
1638
+ return ((slice, options = {}) => {
1639
+ let target = null;
1640
+ let destroyed = false;
1641
+ const setupAbort = new AbortController();
1642
+ const signals = new AbortControllerRegistry();
1643
+ let sourceState;
1644
+ let state;
1645
+ function validate() {
1646
+ if (destroyed) throwDestroyedError();
1647
+ if (!target) throwNoTargetError();
1648
+ }
1649
+ const initialSourceState = freezeCopy(slice.state({
1650
+ target: () => {
1651
+ validate();
1652
+ return target;
1653
+ },
1654
+ signals,
1655
+ get: () => sourceState,
1656
+ set: (partial) => setSource(partial)
1657
+ }));
1658
+ sourceState = initialSourceState;
1659
+ const initialDerivedState = derive(sourceState);
1660
+ state = createState(publish(sourceState, initialDerivedState));
1661
+ const store = {
1662
+ [STORE_SYMBOL]: true,
1663
+ get $state() {
1664
+ return state;
1665
+ },
1666
+ get target() {
1667
+ return target;
1668
+ },
1669
+ get destroyed() {
1670
+ return destroyed;
1671
+ },
1672
+ get state() {
1673
+ return state.current;
1674
+ },
1675
+ attach,
1676
+ destroy,
1677
+ subscribe
1678
+ };
1679
+ for (const key of Object.keys(state.current)) Object.defineProperty(store, key, {
1680
+ get: () => state.current[key],
1681
+ enumerable: true
1682
+ });
1683
+ for (const key of Object.getOwnPropertySymbols(sourceState)) {
1684
+ if (typeof sourceState[key] !== "function") continue;
1685
+ Object.defineProperty(store, key, { get: () => sourceState[key] });
1686
+ }
1687
+ try {
1688
+ options.onSetup?.({
1689
+ store,
1690
+ signal: setupAbort.signal
1691
+ });
1692
+ } catch (error) {
1693
+ reportError(error);
1694
+ }
1695
+ return store;
1696
+ function derive(source) {
1697
+ const result = {};
1698
+ const definitions = slice.derived;
1699
+ if (!definitions) return result;
1700
+ const ctx = { get: () => source };
1701
+ for (const key of Object.keys(definitions)) result[key] = definitions[key](ctx);
1702
+ return result;
1703
+ }
1704
+ function publish(source, derived) {
1705
+ const result = {};
1706
+ for (const key of Object.keys(source)) result[key] = source[key];
1707
+ return Object.assign(result, derived);
1708
+ }
1709
+ function setSource(partial) {
1710
+ const patched = patchSource(sourceState, partial);
1711
+ if (!patched) return;
1712
+ const nextDerived = derive(patched.next);
1713
+ sourceState = patched.next;
1714
+ state.replace(publish(sourceState, nextDerived));
1715
+ }
1716
+ function attach(newTarget) {
1717
+ if (destroyed) throwDestroyedError();
1718
+ signals.reset();
1719
+ target = newTarget;
1720
+ const attachContext = {
1721
+ target: newTarget,
1722
+ signal: signals.base,
1723
+ get: () => sourceState,
1724
+ set: (partial) => {
1725
+ try {
1726
+ setSource(partial);
1727
+ } catch (error) {
1728
+ reportError(error);
1729
+ }
1730
+ },
1731
+ reportError,
1732
+ store: {
1733
+ get state() {
1734
+ return state.current;
1735
+ },
1736
+ subscribe
1737
+ }
1738
+ };
1739
+ try {
1740
+ slice.attach?.(attachContext);
1741
+ } catch (error) {
1742
+ reportError(error);
1743
+ }
1744
+ try {
1745
+ options.onAttach?.({
1746
+ store,
1747
+ target: newTarget,
1748
+ signal: signals.base
1749
+ });
1750
+ } catch (error) {
1751
+ reportError(error);
1752
+ }
1753
+ return detach;
1754
+ }
1755
+ function detach() {
1756
+ if (isNull(target)) return;
1757
+ signals.reset();
1758
+ target = null;
1759
+ const resetState = { ...initialSourceState };
1760
+ for (const key of slice.preserve ?? []) resetState[key] = sourceState[key];
1761
+ setSource(resetState);
1762
+ }
1763
+ function destroy() {
1764
+ if (destroyed) return;
1765
+ destroyed = true;
1766
+ detach();
1767
+ setupAbort.abort();
1768
+ }
1769
+ function subscribe(callback, options) {
1770
+ return state.subscribe(callback, options);
1771
+ }
1772
+ function reportError(error) {
1773
+ if (options.onError) options.onError({
1774
+ store,
1775
+ error
1776
+ });
1777
+ else console.error("[vjs-store]", error);
1778
+ }
1779
+ });
1780
+ }
1781
+ function freezeCopy(value) {
1782
+ return Object.freeze({ ...value });
1783
+ }
1784
+ function patchSource(current, partial) {
1785
+ const next = { ...current };
1786
+ let changed = false;
1787
+ for (const key of Reflect.ownKeys(partial)) {
1788
+ if (!hasOwnProp.call(partial, key)) continue;
1789
+ const value = partial[key];
1790
+ if (Object.is(current[key], value)) continue;
1791
+ next[key] = value;
1792
+ changed = true;
1793
+ }
1794
+ return changed ? { next: Object.freeze(next) } : null;
1795
+ }
1796
+ function isStore(value) {
1797
+ return isObject(value) && STORE_SYMBOL in value;
1798
+ }
1799
+
1800
1800
  //#endregion
1801
1801
  //#region ../core/dist/dev/dom/store/features/presets.js
1802
1802
  const videoFeatures = [
@@ -2266,5 +2266,5 @@ function createPlayer(config) {
2266
2266
  }
2267
2267
 
2268
2268
  //#endregion
2269
- export { throwNoTargetError as A, bufferFeature as C, isMediaStreamTypeCapable as D, isMediaSeekCapable as E, isEditableTarget as M, isInteractiveActivation as N, definePlayerFeature as O, getGestureCoordinator as S, isMediaBufferCapable as T, metadataFeature as _, backgroundFeatures as a, errorFeature as b, volumeFeature as c, sourceFeature as d, remotePlaybackFeature as f, pipFeature as g, playbackFeature as h, audioFeatures as i, AbortControllerRegistry as j, createState as k, timeFeature as l, playbackRateFeature as m, PlayerController as n, liveVideoFeatures as o, qualityFeature as p, SnapshotController as r, videoFeatures as s, createPlayer as t, textTrackFeature as u, liveFeature as v, audioTrackFeature as w, controlsFeature as x, fullscreenFeature as y };
2270
- //# sourceMappingURL=create-player-Db1CIvlK.js.map
2269
+ export { isMediaStreamTypeCapable as A, errorFeature as C, audioTrackFeature as D, bufferFeature as E, isEditableTarget as M, isInteractiveActivation as N, isMediaBufferCapable as O, fullscreenFeature as S, getGestureCoordinator as T, playbackRateFeature as _, backgroundFeatures as a, metadataFeature as b, createState as c, volumeFeature as d, timeFeature as f, qualityFeature as g, remotePlaybackFeature as h, audioFeatures as i, definePlayerFeature as j, isMediaSeekCapable as k, throwNoTargetError as l, sourceFeature as m, PlayerController as n, liveVideoFeatures as o, textTrackFeature as p, SnapshotController as r, videoFeatures as s, createPlayer as t, AbortControllerRegistry as u, playbackFeature as v, controlsFeature as w, liveFeature as x, pipFeature as y };
2270
+ //# sourceMappingURL=create-player-5UrHNqBI.js.map