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

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 (533) hide show
  1. package/cdn/{adapter-XTen-YVQ.js → adapter-CEnNWvii.js} +17 -4
  2. package/cdn/adapter-CEnNWvii.js.map +1 -0
  3. package/cdn/adapter-DaKW8NzI.js +2 -0
  4. package/cdn/adapter-DaKW8NzI.js.map +1 -0
  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 +2 -2
  8. package/cdn/audio-minimal-ui.js +1 -1
  9. package/cdn/audio-minimal.dev.js +5 -5
  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 +2 -2
  14. package/cdn/audio-ui.js +1 -1
  15. package/cdn/audio.dev.js +5 -5
  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/background.dev.js +1 -1
  20. package/cdn/background.js +1 -1
  21. package/cdn/background.js.map +1 -1
  22. package/cdn/compounds-C4YYLyL2.js +8 -0
  23. package/cdn/compounds-C4YYLyL2.js.map +1 -0
  24. package/cdn/{compounds-nk9RJtBK.js → compounds-C73u1MeO.js} +63 -59
  25. package/cdn/compounds-C73u1MeO.js.map +1 -0
  26. package/cdn/create-player-BU8LDJDL.js +2 -0
  27. package/cdn/create-player-BU8LDJDL.js.map +1 -0
  28. package/cdn/{create-player-DK9WOywd.js → create-player-Db1CIvlK.js} +58 -46
  29. package/cdn/create-player-Db1CIvlK.js.map +1 -0
  30. package/cdn/{default-BqQDVloS.js → default-A3aM0skz.js} +2 -2
  31. package/cdn/default-A3aM0skz.js.map +1 -0
  32. package/cdn/default-BDyhiTCm.js +2 -0
  33. package/cdn/default-BDyhiTCm.js.map +1 -0
  34. package/cdn/{default-I2LasfxC.js → default-C1_k1NeB.js} +2 -2
  35. package/cdn/default-C1_k1NeB.js.map +1 -0
  36. package/cdn/default-DHrMd4ie.js +2 -0
  37. package/cdn/default-DHrMd4ie.js.map +1 -0
  38. package/cdn/error-surface-BID4D3DW.js +59 -0
  39. package/cdn/error-surface-BID4D3DW.js.map +1 -0
  40. package/cdn/{select-tracks-nRPBa1NC.js → error-surface-D0bo71gD.js} +442 -48
  41. package/cdn/error-surface-D0bo71gD.js.map +1 -0
  42. package/cdn/gesture-element-CeRy1IVs.js +2 -0
  43. package/cdn/gesture-element-CeRy1IVs.js.map +1 -0
  44. package/cdn/{gesture-element-6Ld1YwIL.js → gesture-element-DB67OYCE.js} +3 -3
  45. package/cdn/gesture-element-DB67OYCE.js.map +1 -0
  46. package/cdn/{hls-js-C4P_b2tT.js → hls-js-CiE4wOrG.js} +2 -2
  47. package/cdn/{hls-js-C4P_b2tT.js.map → hls-js-CiE4wOrG.js.map} +1 -1
  48. package/cdn/{hls-js-CATW7NBm.js → hls-js-DBKRCbQm.js} +2 -2
  49. package/cdn/{hls-js-CATW7NBm.js.map → hls-js-DBKRCbQm.js.map} +1 -1
  50. package/cdn/{hls-js-BEuVm0u9.js → hls-js-DX2NGCAr.js} +2 -2
  51. package/cdn/{hls-js-BEuVm0u9.js.map → hls-js-DX2NGCAr.js.map} +1 -1
  52. package/cdn/{hls-js-WCNy9MVh.js → hls-js-JeH8yvsP.js} +2 -2
  53. package/cdn/{hls-js-WCNy9MVh.js.map → hls-js-JeH8yvsP.js.map} +1 -1
  54. package/cdn/i18n-CpBDXf6M.js +2 -0
  55. package/cdn/{i18n-Dc7WM2xd.js.map → i18n-CpBDXf6M.js.map} +1 -1
  56. package/cdn/{i18n-Ch4t6EjV.js → i18n-D0nhPa0m.js} +2 -2
  57. package/cdn/{i18n-Ch4t6EjV.js.map → i18n-D0nhPa0m.js.map} +1 -1
  58. package/cdn/{live-button-element-DaHgnYdw.js → live-button-element-Co8z2LkI.js} +2 -2
  59. package/cdn/{live-button-element-DaHgnYdw.js.map → live-button-element-Co8z2LkI.js.map} +1 -1
  60. package/cdn/{live-button-element-Bae44kBN.js → live-button-element-zE-8uoR2.js} +3 -3
  61. package/cdn/{live-button-element-Bae44kBN.js.map → live-button-element-zE-8uoR2.js.map} +1 -1
  62. package/cdn/live-video-minimal.dev.js +11 -9
  63. package/cdn/live-video-minimal.dev.js.map +1 -1
  64. package/cdn/live-video-minimal.js +1 -1
  65. package/cdn/live-video-minimal.js.map +1 -1
  66. package/cdn/live-video.dev.js +12 -10
  67. package/cdn/live-video.dev.js.map +1 -1
  68. package/cdn/live-video.js +1 -1
  69. package/cdn/live-video.js.map +1 -1
  70. package/cdn/media/hls-audio.dev.js +1 -1
  71. package/cdn/media/hls-audio.js +1 -1
  72. package/cdn/media/hls-background-video.dev.js +1 -1
  73. package/cdn/media/hls-background-video.js +1 -1
  74. package/cdn/media/hls-video.dev.js +1 -1
  75. package/cdn/media/hls-video.js +1 -1
  76. package/cdn/media/mux-audio/hls-js.dev.js +1 -1
  77. package/cdn/media/mux-audio/hls-js.js +1 -1
  78. package/cdn/media/mux-audio/spf.dev.js +2 -2
  79. package/cdn/media/mux-audio/spf.js +1 -1
  80. package/cdn/media/mux-audio.dev.js +1 -1
  81. package/cdn/media/mux-audio.js +1 -1
  82. package/cdn/media/mux-background-video.dev.js +1 -1
  83. package/cdn/media/mux-background-video.js +1 -1
  84. package/cdn/media/mux-data.dev.js +1 -1
  85. package/cdn/media/mux-data.dev.js.map +1 -1
  86. package/cdn/media/mux-data.js +1 -1
  87. package/cdn/media/mux-data.js.map +1 -1
  88. package/cdn/media/mux-video/hls-js.dev.js +1 -1
  89. package/cdn/media/mux-video/hls-js.js +1 -1
  90. package/cdn/media/mux-video/spf.dev.js +2 -2
  91. package/cdn/media/mux-video/spf.js +1 -1
  92. package/cdn/media/mux-video.dev.js +1 -1
  93. package/cdn/media/mux-video.js +1 -1
  94. package/cdn/media/vimeo-video.dev.js +27 -5
  95. package/cdn/media/vimeo-video.dev.js.map +1 -1
  96. package/cdn/media/vimeo-video.js +1 -1
  97. package/cdn/media/vimeo-video.js.map +1 -1
  98. package/cdn/{media-Uxm0d3Vx.js → media-BI8caj07.js} +3 -3
  99. package/cdn/{media-Uxm0d3Vx.js.map → media-BI8caj07.js.map} +1 -1
  100. package/cdn/{media-COIe3uI5.js → media-BNuI0Im7.js} +19 -6
  101. package/cdn/media-BNuI0Im7.js.map +1 -0
  102. package/cdn/media-CQxFuDcv.js +2 -0
  103. package/cdn/{media-CPVSKLdk.js.map → media-CQxFuDcv.js.map} +1 -1
  104. package/cdn/media-D4tG62L5.js +2 -0
  105. package/cdn/{media-BTipOcKo.js.map → media-D4tG62L5.js.map} +1 -1
  106. package/cdn/{media-oa3nyL2o.js → media-DI6DvYm3.js} +3 -3
  107. package/cdn/{media-oa3nyL2o.js.map → media-DI6DvYm3.js.map} +1 -1
  108. package/cdn/media-DU3Xf5XR.js +2 -0
  109. package/cdn/media-DU3Xf5XR.js.map +1 -0
  110. package/cdn/media-mYKOAsk3.js +825 -0
  111. package/cdn/media-mYKOAsk3.js.map +1 -0
  112. package/cdn/media-zReLnePj.js +2 -0
  113. package/cdn/media-zReLnePj.js.map +1 -0
  114. package/cdn/{minimal-DQCLKRyR.js → minimal-3OmH0xQS.js} +2 -2
  115. package/cdn/minimal-3OmH0xQS.js.map +1 -0
  116. package/cdn/{minimal-DLosvq31.js → minimal-6w_Vyyl9.js} +2 -2
  117. package/cdn/minimal-6w_Vyyl9.js.map +1 -0
  118. package/cdn/minimal-BWLTn7oQ.js +2 -0
  119. package/cdn/minimal-BWLTn7oQ.js.map +1 -0
  120. package/cdn/minimal-DIGrklyh.js +2 -0
  121. package/cdn/minimal-DIGrklyh.js.map +1 -0
  122. package/cdn/{minimal-ui-CRKvUmB8.js → minimal-ui-BCIESK8f.js} +8 -8
  123. package/cdn/{minimal-ui-CRKvUmB8.js.map → minimal-ui-BCIESK8f.js.map} +1 -1
  124. package/cdn/minimal-ui-BXrq3z4U.js +2 -0
  125. package/cdn/{minimal-ui-Et2Wcn7r.js.map → minimal-ui-BXrq3z4U.js.map} +1 -1
  126. package/cdn/{minimal-ui-BpHxIo4z.js → minimal-ui-DEalpMk6.js} +4 -4
  127. package/cdn/{minimal-ui-BpHxIo4z.js.map → minimal-ui-DEalpMk6.js.map} +1 -1
  128. package/cdn/{minimal-ui-8iRZf_72.js → minimal-ui-vY3QgohH.js} +2 -2
  129. package/cdn/{minimal-ui-8iRZf_72.js.map → minimal-ui-vY3QgohH.js.map} +1 -1
  130. package/cdn/{player-DM9rUXg-.js → player-B3GlPF90.js} +2 -2
  131. package/cdn/{player-DM9rUXg-.js.map → player-B3GlPF90.js.map} +1 -1
  132. package/cdn/player-CtTC7qa5.js +2 -0
  133. package/cdn/{player-rCFqzWrA.js.map → player-CtTC7qa5.js.map} +1 -1
  134. package/cdn/player-DKkph8UM.js +2 -0
  135. package/cdn/{player-BRQLp5bX.js.map → player-DKkph8UM.js.map} +1 -1
  136. package/cdn/{player-CKTAtwit.js → player-DPDmTRvg.js} +2 -2
  137. package/cdn/{player-CKTAtwit.js.map → player-DPDmTRvg.js.map} +1 -1
  138. package/cdn/player-DrDd7LJi.js +2 -0
  139. package/cdn/{player-BloX4l6F.js.map → player-DrDd7LJi.js.map} +1 -1
  140. package/cdn/{player-B2oraRyD.js → player-L5UpZmT4.js} +2 -2
  141. package/cdn/{player-B2oraRyD.js.map → player-L5UpZmT4.js.map} +1 -1
  142. package/cdn/{poster-element-BGr1VQJB.js → poster-element-B5tdJ2ub.js} +179 -38
  143. package/cdn/poster-element-B5tdJ2ub.js.map +1 -0
  144. package/cdn/poster-element-B8QwXSU_.js +2 -0
  145. package/cdn/poster-element-B8QwXSU_.js.map +1 -0
  146. package/cdn/{error-surface-drmCvBVW.js → relocation-pipelines-Dh8CcgHw.js} +5 -343
  147. package/cdn/relocation-pipelines-Dh8CcgHw.js.map +1 -0
  148. package/cdn/relocation-pipelines-DunE4gcV.js +2 -0
  149. package/cdn/relocation-pipelines-DunE4gcV.js.map +1 -0
  150. package/cdn/{seek-button-element-XMTLIxZj.js → seek-button-element-5co-k0Dx.js} +4 -4
  151. package/cdn/seek-button-element-5co-k0Dx.js.map +1 -0
  152. package/cdn/{seek-button-element-FlgBVoGM.js → seek-button-element-B8TkILg-.js} +2 -2
  153. package/cdn/{seek-button-element-FlgBVoGM.js.map → seek-button-element-B8TkILg-.js.map} +1 -1
  154. package/cdn/shallow-equal-C7S8rj2f.js +16 -0
  155. package/cdn/shallow-equal-C7S8rj2f.js.map +1 -0
  156. package/cdn/shallow-equal-KV1zFqZi.js +2 -0
  157. package/cdn/shallow-equal-KV1zFqZi.js.map +1 -0
  158. package/cdn/{skin-element-DL-Kqa5f.js → skin-element-DrkI8xuM.js} +2 -2
  159. package/cdn/{skin-element-DL-Kqa5f.js.map → skin-element-DrkI8xuM.js.map} +1 -1
  160. package/cdn/{skin-element-DNytI-uu.js → skin-element-DvX6Bxsv.js} +2 -2
  161. package/cdn/{skin-element-DNytI-uu.js.map → skin-element-DvX6Bxsv.js.map} +1 -1
  162. package/cdn/{text-element-DeWBNKXb.js → text-element-BoY6AhMn.js} +2 -2
  163. package/cdn/{text-element-DeWBNKXb.js.map → text-element-BoY6AhMn.js.map} +1 -1
  164. package/cdn/{text-element-D88ArbZz.js → text-element-cg6l21cd.js} +2 -2
  165. package/cdn/{text-element-D88ArbZz.js.map → text-element-cg6l21cd.js.map} +1 -1
  166. package/cdn/time-slider-chapters-element-BfLjdnU4.js +2 -0
  167. package/cdn/time-slider-chapters-element-BfLjdnU4.js.map +1 -0
  168. package/cdn/{time-slider-chapters-element-DJ0abZXI.js → time-slider-chapters-element-CznFQWFm.js} +5 -5
  169. package/cdn/time-slider-chapters-element-CznFQWFm.js.map +1 -0
  170. package/cdn/{ui-BU3_2gDQ.js → ui-BwzqkJNK.js} +7 -7
  171. package/cdn/{ui-BU3_2gDQ.js.map → ui-BwzqkJNK.js.map} +1 -1
  172. package/cdn/ui-DayfItun.js +2 -0
  173. package/cdn/{ui-C0isALTQ.js.map → ui-DayfItun.js.map} +1 -1
  174. package/cdn/ui-PSnD-pv8.js +2 -0
  175. package/cdn/{ui-DVpkE1MN.js.map → ui-PSnD-pv8.js.map} +1 -1
  176. package/cdn/{ui-BsaWWE4y.js → ui-fnKp94a7.js} +9 -9
  177. package/cdn/{ui-BsaWWE4y.js.map → ui-fnKp94a7.js.map} +1 -1
  178. package/cdn/video-headless.dev.js +1 -1
  179. package/cdn/video-headless.js +1 -1
  180. package/cdn/video-minimal-ui.dev.js +2 -2
  181. package/cdn/video-minimal-ui.js +1 -1
  182. package/cdn/video-minimal.dev.js +8 -6
  183. package/cdn/video-minimal.dev.js.map +1 -1
  184. package/cdn/video-minimal.js +1 -1
  185. package/cdn/video-minimal.js.map +1 -1
  186. package/cdn/video-ui.dev.js +2 -2
  187. package/cdn/video-ui.js +1 -1
  188. package/cdn/video.dev.js +9 -7
  189. package/cdn/video.dev.js.map +1 -1
  190. package/cdn/video.js +1 -1
  191. package/cdn/video.js.map +1 -1
  192. package/dist/default/__generated__/skins/default-video/styles/buttons.css +132 -18
  193. package/dist/default/__generated__/skins/default-video/styles/captions.css +22 -0
  194. package/dist/default/__generated__/skins/default-video/styles/container.css +121 -8
  195. package/dist/default/__generated__/skins/default-video/styles/controls.css +436 -21
  196. package/dist/default/__generated__/skins/default-video/styles/dialog.css +169 -0
  197. package/dist/default/__generated__/skins/default-video/styles/indicator.css +459 -0
  198. package/dist/default/__generated__/skins/default-video/styles/menus.css +254 -0
  199. package/dist/default/__generated__/skins/default-video/styles/overlays.css +26 -2
  200. package/dist/default/__generated__/skins/default-video/styles/popups.css +338 -12
  201. package/dist/default/__generated__/skins/default-video/styles/poster.css +4 -4
  202. package/dist/default/__generated__/skins/default-video/styles/sliders.css +355 -31
  203. package/dist/default/__generated__/skins/default-video/styles/styles.css +2455 -216
  204. package/dist/default/__generated__/skins/default-video/styles/theme.css +4 -19
  205. package/dist/default/__generated__/skins/default-video/styles/video.css +29 -0
  206. package/dist/default/__generated__/skins/minimal-video/styles/base.css +25 -0
  207. package/dist/default/__generated__/skins/minimal-video/styles/buttons.css +266 -0
  208. package/dist/default/__generated__/skins/minimal-video/styles/captions.css +22 -0
  209. package/dist/default/__generated__/skins/minimal-video/styles/container.css +158 -0
  210. package/dist/default/__generated__/skins/minimal-video/styles/controls.css +182 -0
  211. package/dist/default/__generated__/skins/minimal-video/styles/dialog.css +77 -0
  212. package/dist/default/__generated__/skins/minimal-video/styles/indicator.css +322 -0
  213. package/dist/default/__generated__/skins/minimal-video/styles/menus.css +254 -0
  214. package/dist/default/__generated__/skins/minimal-video/styles/overlays.css +35 -0
  215. package/dist/default/__generated__/skins/minimal-video/styles/popups.css +371 -0
  216. package/dist/default/__generated__/skins/minimal-video/styles/poster.css +47 -0
  217. package/dist/default/__generated__/skins/minimal-video/styles/sliders.css +436 -0
  218. package/dist/default/__generated__/skins/minimal-video/styles/styles.css +2246 -0
  219. package/dist/default/__generated__/skins/minimal-video/styles/theme.css +7 -0
  220. package/dist/default/__generated__/skins/minimal-video/styles/video.css +29 -0
  221. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  222. package/dist/default/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  223. package/dist/default/_virtual/inline-css_src/define/audio/skin.js +1 -1
  224. package/dist/default/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  225. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  226. package/dist/default/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  227. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  228. package/dist/default/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  229. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  230. package/dist/default/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  231. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  232. package/dist/default/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  233. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  234. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  235. package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
  236. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  237. package/dist/default/define/audio/minimal-skin.css +103 -101
  238. package/dist/default/define/audio/skin.css +68 -69
  239. package/dist/default/define/live-audio/minimal-skin.css +103 -101
  240. package/dist/default/define/live-audio/skin.css +68 -69
  241. package/dist/default/define/live-video/minimal-skin.css +140 -120
  242. package/dist/default/define/live-video/minimal-skin.js +1 -1
  243. package/dist/default/define/live-video/minimal-skin.js.map +1 -1
  244. package/dist/default/define/live-video/minimal-skin.tailwind.js +1 -1
  245. package/dist/default/define/live-video/minimal-skin.tailwind.js.map +1 -1
  246. package/dist/default/define/live-video/skin.css +89 -76
  247. package/dist/default/define/live-video/skin.js +1 -1
  248. package/dist/default/define/live-video/skin.js.map +1 -1
  249. package/dist/default/define/live-video/skin.tailwind.js +1 -1
  250. package/dist/default/define/live-video/skin.tailwind.js.map +1 -1
  251. package/dist/default/define/ui/gesture.js +7 -0
  252. package/dist/default/define/ui/gesture.js.map +1 -0
  253. package/dist/default/define/video/minimal-skin.css +140 -120
  254. package/dist/default/define/video/minimal-skin.js +1 -1
  255. package/dist/default/define/video/minimal-skin.js.map +1 -1
  256. package/dist/default/define/video/minimal-skin.tailwind.js +1 -1
  257. package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
  258. package/dist/default/define/video/skin.css +89 -76
  259. package/dist/default/define/video/skin.js +1 -1
  260. package/dist/default/define/video/skin.js.map +1 -1
  261. package/dist/default/define/video/skin.tailwind.js +1 -1
  262. package/dist/default/define/video/skin.tailwind.js.map +1 -1
  263. package/dist/default/icons/dist/element/default/icons.js +1 -1
  264. package/dist/default/icons/dist/element/default/icons.js.map +1 -1
  265. package/dist/default/icons/dist/element/minimal/icons.js +1 -1
  266. package/dist/default/icons/dist/element/minimal/icons.js.map +1 -1
  267. package/dist/default/icons/dist/html/default/airplay-exit.js +1 -1
  268. package/dist/default/icons/dist/html/default/airplay-exit.js.map +1 -1
  269. package/dist/default/icons/dist/html/minimal/airplay-exit.js +1 -1
  270. package/dist/default/icons/dist/html/minimal/airplay-exit.js.map +1 -1
  271. package/dist/default/icons/dist/render/default/index.js +1 -1
  272. package/dist/default/icons/dist/render/default/index.js.map +1 -1
  273. package/dist/default/icons/dist/render/minimal/index.js +1 -1
  274. package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
  275. package/dist/default/media/hls-background-video/media.js +18 -0
  276. package/dist/default/media/hls-background-video/media.js.map +1 -1
  277. package/dist/default/skins/dist/default/default/tailwind/components/button.js +3 -1
  278. package/dist/default/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  279. package/dist/default/skins/dist/default/default/tailwind/components/poster.js +8 -1
  280. package/dist/default/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  281. package/dist/default/skins/dist/default/default/tailwind/components/slider.js +10 -10
  282. package/dist/default/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  283. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
  284. package/dist/default/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
  285. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
  286. package/dist/default/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  287. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
  288. package/dist/default/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  289. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
  290. package/dist/default/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  291. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
  292. package/dist/default/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
  293. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
  294. package/dist/default/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  295. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +4 -4
  296. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  297. package/dist/default/store/provider-mixin.js +22 -8
  298. package/dist/default/store/provider-mixin.js.map +1 -1
  299. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
  300. package/dist/default/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
  301. package/dist/default/ui/captions-radio-group/captions-radio-group-element.js +1 -1
  302. package/dist/default/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
  303. package/dist/default/ui/gesture/gesture-element.js.map +1 -1
  304. package/dist/default/ui/hotkey/hotkey-element.js.map +1 -1
  305. package/dist/default/ui/menu/context.js.map +1 -1
  306. package/dist/default/ui/menu/menu-element.js +28 -27
  307. package/dist/default/ui/menu/menu-element.js.map +1 -1
  308. package/dist/default/ui/menu/menu-radio-group-element.js +14 -14
  309. package/dist/default/ui/menu/menu-radio-group-element.js.map +1 -1
  310. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
  311. package/dist/default/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
  312. package/dist/default/ui/poster/poster-element.js +138 -8
  313. package/dist/default/ui/poster/poster-element.js.map +1 -1
  314. package/dist/default/ui/quality-radio-group/quality-radio-group-element.js +1 -1
  315. package/dist/default/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
  316. package/dist/default/ui/slider/slider-preview-element.js.map +1 -1
  317. package/dist/dev/__generated__/skins/default-video/styles/buttons.css +132 -18
  318. package/dist/dev/__generated__/skins/default-video/styles/captions.css +22 -0
  319. package/dist/dev/__generated__/skins/default-video/styles/container.css +121 -8
  320. package/dist/dev/__generated__/skins/default-video/styles/controls.css +436 -21
  321. package/dist/dev/__generated__/skins/default-video/styles/dialog.css +169 -0
  322. package/dist/dev/__generated__/skins/default-video/styles/indicator.css +459 -0
  323. package/dist/dev/__generated__/skins/default-video/styles/menus.css +254 -0
  324. package/dist/dev/__generated__/skins/default-video/styles/overlays.css +26 -2
  325. package/dist/dev/__generated__/skins/default-video/styles/popups.css +338 -12
  326. package/dist/dev/__generated__/skins/default-video/styles/poster.css +4 -4
  327. package/dist/dev/__generated__/skins/default-video/styles/sliders.css +355 -31
  328. package/dist/dev/__generated__/skins/default-video/styles/styles.css +2455 -216
  329. package/dist/dev/__generated__/skins/default-video/styles/theme.css +4 -19
  330. package/dist/dev/__generated__/skins/default-video/styles/video.css +29 -0
  331. package/dist/dev/__generated__/skins/minimal-video/styles/base.css +25 -0
  332. package/dist/dev/__generated__/skins/minimal-video/styles/buttons.css +266 -0
  333. package/dist/dev/__generated__/skins/minimal-video/styles/captions.css +22 -0
  334. package/dist/dev/__generated__/skins/minimal-video/styles/container.css +158 -0
  335. package/dist/dev/__generated__/skins/minimal-video/styles/controls.css +182 -0
  336. package/dist/dev/__generated__/skins/minimal-video/styles/dialog.css +77 -0
  337. package/dist/dev/__generated__/skins/minimal-video/styles/indicator.css +322 -0
  338. package/dist/dev/__generated__/skins/minimal-video/styles/menus.css +254 -0
  339. package/dist/dev/__generated__/skins/minimal-video/styles/overlays.css +35 -0
  340. package/dist/dev/__generated__/skins/minimal-video/styles/popups.css +371 -0
  341. package/dist/dev/__generated__/skins/minimal-video/styles/poster.css +47 -0
  342. package/dist/dev/__generated__/skins/minimal-video/styles/sliders.css +436 -0
  343. package/dist/dev/__generated__/skins/minimal-video/styles/styles.css +2246 -0
  344. package/dist/dev/__generated__/skins/minimal-video/styles/theme.css +7 -0
  345. package/dist/dev/__generated__/skins/minimal-video/styles/video.css +29 -0
  346. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js +1 -1
  347. package/dist/dev/_virtual/inline-css_src/define/audio/minimal-skin.js.map +1 -1
  348. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js +1 -1
  349. package/dist/dev/_virtual/inline-css_src/define/audio/skin.js.map +1 -1
  350. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js +1 -1
  351. package/dist/dev/_virtual/inline-css_src/define/live-audio/minimal-skin.js.map +1 -1
  352. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js +1 -1
  353. package/dist/dev/_virtual/inline-css_src/define/live-audio/skin.js.map +1 -1
  354. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js +1 -1
  355. package/dist/dev/_virtual/inline-css_src/define/live-video/minimal-skin.js.map +1 -1
  356. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js +1 -1
  357. package/dist/dev/_virtual/inline-css_src/define/live-video/skin.js.map +1 -1
  358. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  359. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  360. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
  361. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  362. package/dist/dev/define/audio/minimal-skin.css +103 -101
  363. package/dist/dev/define/audio/skin.css +68 -69
  364. package/dist/dev/define/live-audio/minimal-skin.css +103 -101
  365. package/dist/dev/define/live-audio/skin.css +68 -69
  366. package/dist/dev/define/live-video/minimal-skin.css +140 -120
  367. package/dist/dev/define/live-video/minimal-skin.d.ts.map +1 -1
  368. package/dist/dev/define/live-video/minimal-skin.js +3 -1
  369. package/dist/dev/define/live-video/minimal-skin.js.map +1 -1
  370. package/dist/dev/define/live-video/minimal-skin.tailwind.d.ts.map +1 -1
  371. package/dist/dev/define/live-video/minimal-skin.tailwind.js +3 -1
  372. package/dist/dev/define/live-video/minimal-skin.tailwind.js.map +1 -1
  373. package/dist/dev/define/live-video/skin.css +89 -76
  374. package/dist/dev/define/live-video/skin.d.ts.map +1 -1
  375. package/dist/dev/define/live-video/skin.js +3 -1
  376. package/dist/dev/define/live-video/skin.js.map +1 -1
  377. package/dist/dev/define/live-video/skin.tailwind.d.ts.map +1 -1
  378. package/dist/dev/define/live-video/skin.tailwind.js +4 -2
  379. package/dist/dev/define/live-video/skin.tailwind.js.map +1 -1
  380. package/dist/dev/define/ui/gesture.d.ts +8 -0
  381. package/dist/dev/define/ui/gesture.d.ts.map +1 -0
  382. package/dist/dev/define/ui/gesture.js +7 -0
  383. package/dist/dev/define/ui/gesture.js.map +1 -0
  384. package/dist/dev/define/video/minimal-skin.css +140 -120
  385. package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
  386. package/dist/dev/define/video/minimal-skin.js +3 -1
  387. package/dist/dev/define/video/minimal-skin.js.map +1 -1
  388. package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -1
  389. package/dist/dev/define/video/minimal-skin.tailwind.js +3 -1
  390. package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
  391. package/dist/dev/define/video/skin.css +89 -76
  392. package/dist/dev/define/video/skin.d.ts.map +1 -1
  393. package/dist/dev/define/video/skin.js +3 -1
  394. package/dist/dev/define/video/skin.js.map +1 -1
  395. package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
  396. package/dist/dev/define/video/skin.tailwind.js +4 -2
  397. package/dist/dev/define/video/skin.tailwind.js.map +1 -1
  398. package/dist/dev/media/hls-background-video/media.d.ts +16 -0
  399. package/dist/dev/media/hls-background-video/media.d.ts.map +1 -1
  400. package/dist/dev/media/hls-background-video/media.js +18 -0
  401. package/dist/dev/media/hls-background-video/media.js.map +1 -1
  402. package/dist/dev/packages/icons/dist/element/default/icons.js +1 -1
  403. package/dist/dev/packages/icons/dist/element/default/icons.js.map +1 -1
  404. package/dist/dev/packages/icons/dist/element/minimal/icons.js +1 -1
  405. package/dist/dev/packages/icons/dist/element/minimal/icons.js.map +1 -1
  406. package/dist/dev/packages/icons/dist/html/default/airplay-exit.js +1 -1
  407. package/dist/dev/packages/icons/dist/html/default/airplay-exit.js.map +1 -1
  408. package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js +1 -1
  409. package/dist/dev/packages/icons/dist/html/minimal/airplay-exit.js.map +1 -1
  410. package/dist/dev/packages/icons/dist/render/default/index.js +1 -1
  411. package/dist/dev/packages/icons/dist/render/default/index.js.map +1 -1
  412. package/dist/dev/packages/icons/dist/render/minimal/index.js +1 -1
  413. package/dist/dev/packages/icons/dist/render/minimal/index.js.map +1 -1
  414. package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js +3 -1
  415. package/dist/dev/packages/skins/dist/default/default/tailwind/components/button.js.map +1 -1
  416. package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js +8 -1
  417. package/dist/dev/packages/skins/dist/default/default/tailwind/components/poster.js.map +1 -1
  418. package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js +10 -10
  419. package/dist/dev/packages/skins/dist/default/default/tailwind/components/slider.js.map +1 -1
  420. package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js +1 -1
  421. package/dist/dev/packages/skins/dist/default/default/tailwind/components/thumbnail.js.map +1 -1
  422. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js +2 -2
  423. package/dist/dev/packages/skins/dist/default/default/tailwind/video.tailwind.js.map +1 -1
  424. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js +8 -1
  425. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/poster.js.map +1 -1
  426. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js +13 -12
  427. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/slider.js.map +1 -1
  428. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js +1 -1
  429. package/dist/dev/packages/skins/dist/default/minimal/tailwind/components/thumbnail.js.map +1 -1
  430. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js +6 -5
  431. package/dist/dev/packages/skins/dist/default/minimal/tailwind/video.tailwind.js.map +1 -1
  432. package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js +4 -4
  433. package/dist/dev/packages/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  434. package/dist/dev/store/provider-mixin.d.ts.map +1 -1
  435. package/dist/dev/store/provider-mixin.js +24 -8
  436. package/dist/dev/store/provider-mixin.js.map +1 -1
  437. package/dist/dev/store/types.d.ts +2 -2
  438. package/dist/dev/store/types.d.ts.map +1 -1
  439. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js +1 -1
  440. package/dist/dev/ui/audio-track-radio-group/audio-track-radio-group-element.js.map +1 -1
  441. package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js +1 -1
  442. package/dist/dev/ui/captions-radio-group/captions-radio-group-element.js.map +1 -1
  443. package/dist/dev/ui/gesture/gesture-element.d.ts +7 -7
  444. package/dist/dev/ui/gesture/gesture-element.d.ts.map +1 -1
  445. package/dist/dev/ui/gesture/gesture-element.js.map +1 -1
  446. package/dist/dev/ui/hotkey/hotkey-element.d.ts +6 -6
  447. package/dist/dev/ui/hotkey/hotkey-element.d.ts.map +1 -1
  448. package/dist/dev/ui/hotkey/hotkey-element.js.map +1 -1
  449. package/dist/dev/ui/menu/context.d.ts +8 -8
  450. package/dist/dev/ui/menu/context.d.ts.map +1 -1
  451. package/dist/dev/ui/menu/context.js.map +1 -1
  452. package/dist/dev/ui/menu/menu-element.d.ts.map +1 -1
  453. package/dist/dev/ui/menu/menu-element.js +28 -27
  454. package/dist/dev/ui/menu/menu-element.js.map +1 -1
  455. package/dist/dev/ui/menu/menu-radio-group-element.d.ts +1 -1
  456. package/dist/dev/ui/menu/menu-radio-group-element.d.ts.map +1 -1
  457. package/dist/dev/ui/menu/menu-radio-group-element.js +14 -14
  458. package/dist/dev/ui/menu/menu-radio-group-element.js.map +1 -1
  459. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js +1 -1
  460. package/dist/dev/ui/playback-rate-radio-group/playback-rate-radio-group-element.js.map +1 -1
  461. package/dist/dev/ui/poster/poster-element.d.ts +20 -18
  462. package/dist/dev/ui/poster/poster-element.d.ts.map +1 -1
  463. package/dist/dev/ui/poster/poster-element.js +145 -8
  464. package/dist/dev/ui/poster/poster-element.js.map +1 -1
  465. package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js +1 -1
  466. package/dist/dev/ui/quality-radio-group/quality-radio-group-element.js.map +1 -1
  467. package/dist/dev/ui/slider/slider-preview-element.d.ts +2 -2
  468. package/dist/dev/ui/slider/slider-preview-element.d.ts.map +1 -1
  469. package/dist/dev/ui/slider/slider-preview-element.js.map +1 -1
  470. package/docs/README.md +1 -1
  471. package/docs/concepts/skins.md +91 -78
  472. package/docs/how-to/customize-skins.md +411 -377
  473. package/docs/reference/menu.md +3 -19
  474. package/docs/reference/popover.md +2 -2
  475. package/docs/reference/poster.md +211 -21
  476. package/docs/reference/slider.md +1 -1
  477. package/docs/reference/time-slider.md +1 -1
  478. package/docs/reference/tooltip.md +6 -6
  479. package/docs/reference/volume-slider.md +1 -1
  480. package/package.json +14 -9
  481. package/cdn/adapter-Bk03SAxn.js +0 -2
  482. package/cdn/adapter-Bk03SAxn.js.map +0 -1
  483. package/cdn/adapter-XTen-YVQ.js.map +0 -1
  484. package/cdn/compounds-BEO1d3ZM.js +0 -8
  485. package/cdn/compounds-BEO1d3ZM.js.map +0 -1
  486. package/cdn/compounds-nk9RJtBK.js.map +0 -1
  487. package/cdn/create-player-DK9WOywd.js.map +0 -1
  488. package/cdn/create-player-hSdQMP5p.js +0 -2
  489. package/cdn/create-player-hSdQMP5p.js.map +0 -1
  490. package/cdn/default-BqQDVloS.js.map +0 -1
  491. package/cdn/default-CXWVp2oG.js +0 -2
  492. package/cdn/default-CXWVp2oG.js.map +0 -1
  493. package/cdn/default-Dw6cIEqT.js +0 -2
  494. package/cdn/default-Dw6cIEqT.js.map +0 -1
  495. package/cdn/default-I2LasfxC.js.map +0 -1
  496. package/cdn/error-surface-DCT1m2p1.js +0 -2
  497. package/cdn/error-surface-DCT1m2p1.js.map +0 -1
  498. package/cdn/error-surface-drmCvBVW.js.map +0 -1
  499. package/cdn/gesture-element-6Ld1YwIL.js.map +0 -1
  500. package/cdn/gesture-element-BC48ucj9.js +0 -2
  501. package/cdn/gesture-element-BC48ucj9.js.map +0 -1
  502. package/cdn/i18n-Dc7WM2xd.js +0 -2
  503. package/cdn/media-BTipOcKo.js +0 -2
  504. package/cdn/media-Bmablv4g.js +0 -2
  505. package/cdn/media-Bmablv4g.js.map +0 -1
  506. package/cdn/media-COIe3uI5.js.map +0 -1
  507. package/cdn/media-CPVSKLdk.js +0 -2
  508. package/cdn/media-Dq4zmIJa.js +0 -2
  509. package/cdn/media-Dq4zmIJa.js.map +0 -1
  510. package/cdn/media-suYcjCG2.js +0 -445
  511. package/cdn/media-suYcjCG2.js.map +0 -1
  512. package/cdn/minimal-BedCvMBG.js +0 -2
  513. package/cdn/minimal-BedCvMBG.js.map +0 -1
  514. package/cdn/minimal-BoP112ye.js +0 -2
  515. package/cdn/minimal-BoP112ye.js.map +0 -1
  516. package/cdn/minimal-DLosvq31.js.map +0 -1
  517. package/cdn/minimal-DQCLKRyR.js.map +0 -1
  518. package/cdn/minimal-ui-Et2Wcn7r.js +0 -2
  519. package/cdn/player-BRQLp5bX.js +0 -2
  520. package/cdn/player-BloX4l6F.js +0 -2
  521. package/cdn/player-rCFqzWrA.js +0 -2
  522. package/cdn/poster-element-BGr1VQJB.js.map +0 -1
  523. package/cdn/poster-element-DBmgOyep.js +0 -2
  524. package/cdn/poster-element-DBmgOyep.js.map +0 -1
  525. package/cdn/seek-button-element-XMTLIxZj.js.map +0 -1
  526. package/cdn/select-tracks-nRPBa1NC.js.map +0 -1
  527. package/cdn/select-tracks-xV1s28xD.js +0 -59
  528. package/cdn/select-tracks-xV1s28xD.js.map +0 -1
  529. package/cdn/time-slider-chapters-element-DJ0abZXI.js.map +0 -1
  530. package/cdn/time-slider-chapters-element-DW8YyJn8.js +0 -2
  531. package/cdn/time-slider-chapters-element-DW8YyJn8.js.map +0 -1
  532. package/cdn/ui-C0isALTQ.js +0 -2
  533. package/cdn/ui-DVpkE1MN.js +0 -2
@@ -542,6 +542,54 @@ function effect(fn) {
542
542
  };
543
543
  }
544
544
 
545
+ //#endregion
546
+ //#region ../spf/dist/dev/media/errors.js
547
+ /** SVTA 1 [Media Content] 004 — the video is in a format we can't play (e.g. an MPEG-TS container). */
548
+ const SVTA_UNSUPPORTED_VIDEO_FORMAT = 1004;
549
+ /** SVTA 1 [Media Content] 005 — the audio counterpart of {@link SVTA_UNSUPPORTED_VIDEO_FORMAT}. */
550
+ const SVTA_UNSUPPORTED_AUDIO_FORMAT = 1005;
551
+ /**
552
+ * SVTA 4 [Content Protection] 008 — unsupported or unavailable DRM system. Used
553
+ * for "this source is encrypted and we have no decryption pipeline," which is
554
+ * detection, not a license failure.
555
+ */
556
+ const SVTA_UNSUPPORTED_DRM_SYSTEM = 4008;
557
+ /**
558
+ * SVTA 2 [Playback] 011 — no video track the environment can play.
559
+ *
560
+ * Covers both ways a composition can end up with nothing to select: renditions
561
+ * that existed and were all excluded as unplayable, and — where the composition
562
+ * composes `reportAbsentTrackType` to say it needs the type — a source carrying
563
+ * none to begin with. Deliberately one code for both, because they are the same
564
+ * answer to a viewer, and because the alternative is a code the SVTA spec doesn't
565
+ * define. Whether an absent type is a failure is the composition's to state,
566
+ * which is why it opts in rather than being read off the source.
567
+ */
568
+ const SVTA_NO_SUPPORTED_VIDEO_TRACK = 2011;
569
+ /** SVTA 2 [Playback] 012 — the audio counterpart of {@link SVTA_NO_SUPPORTED_VIDEO_TRACK}. */
570
+ const SVTA_NO_SUPPORTED_AUDIO_TRACK = 2012;
571
+ /**
572
+ * SVTA 99 [Custom] 001 — this engine has no pipeline for something the source
573
+ * requires, so the source is unplayable *here* rather than broken.
574
+ *
575
+ * Custom rather than standard because the standard codes available describe
576
+ * either narrower or wider things. The causes (1004/1005 unsupported format,
577
+ * 4008 unsupported DRM) say what one rendition hit; the verdicts (2011/2012 no
578
+ * supported track) say a type emptied without saying why it's unfixable. And
579
+ * 2039 "Manifest feature unsupported" covers features that are unsupported but
580
+ * still *playable* — LL-HLS degrading to standard live is a 2039 — so
581
+ * overloading it for a fatal condition would make it useless for the notices it
582
+ * belongs on.
583
+ *
584
+ * Index `001`: the spec defines only `99000` (Unknown) for the custom category
585
+ * and leaves the rest to the publisher, so this is the first code we define.
586
+ *
587
+ * Five digits, and deliberately not special-cased anywhere: {@link svtaCategory}
588
+ * and {@link svtaIndex} decompose it correctly by arithmetic alone, because
589
+ * every standard category is below `8000` and custom starts at `99000`.
590
+ */
591
+ const SVTA_UNSUPPORTED_PLAYBACK_FEATURE = 99001;
592
+
545
593
  //#endregion
546
594
  //#region ../spf/dist/dev/core/signals/primitives.js
547
595
  /** Read a signal value without tracking it as a dependency. */
@@ -2034,6 +2082,73 @@ function parseMediaPlaylist(text, previous) {
2034
2082
  };
2035
2083
  }
2036
2084
 
2085
+ //#endregion
2086
+ //#region ../spf/dist/dev/media/dom/capabilities.js
2087
+ /**
2088
+ * Capability probing — the engine's foundation for asking the browser what it
2089
+ * can actually decode before committing a rendition to the pipeline.
2090
+ *
2091
+ * Today this is the synchronous codec half: `canPlayTrack` answers "can this
2092
+ * environment play this track?" by building the track's MIME codec string and
2093
+ * passing it to `MediaSource.isTypeSupported` (via `isCodecSupported`). It's the
2094
+ * DOM implementation of the DOM-free `CanPlayTrack` predicate the
2095
+ * track-switching hard-constraint pre-pass consumes — injected through engine
2096
+ * config so the (DOM-free) behavior never imports a DOM API directly.
2097
+ *
2098
+ * Results are memoized by built MIME string: codec support is a pure function
2099
+ * of (codec, environment) and never changes after load, so probing is lazy
2100
+ * (per candidate, at constraint-apply time) but each unique MIME is asked once.
2101
+ *
2102
+ * Future cluster-D phases (async `requestMediaKeySystemAccess` key-system
2103
+ * probing, `SourceBuffer.changeType()` availability) extend this surface; the
2104
+ * async ones land as a state-slot writer behavior rather than a config
2105
+ * predicate, since their verdict resolves asynchronously.
2106
+ */
2107
+ const codecSupportCache = /* @__PURE__ */ new Map();
2108
+ /**
2109
+ * Whether the environment can decode `track`, by codec. Builds the track's
2110
+ * MIME codec string and checks `MediaSource.isTypeSupported`, memoized by MIME.
2111
+ * A track without enough to probe — no `mimeType`, or no declared `codecs`
2112
+ * (CODECS is optional per the HLS spec) — is unprobeable and passes through as
2113
+ * playable (`true`) rather than being dropped; the late `createSourceBuffer`
2114
+ * check stays as the backstop for those.
2115
+ *
2116
+ * Detected non-fMP4 containers (`video/mp2t`, `audio/aac`) are asserted
2117
+ * unsupported regardless of the probe, so they're pruned before selection
2118
+ * (the type makes no pick) instead of failing/stalling deep in the pipeline.
2119
+ * Two different reasons, neither UA-based:
2120
+ *
2121
+ * - **MPEG-TS** can't be played at all here: `isTypeSupported('video/mp2t…')` is
2122
+ * a genuine false positive on Chromium (reports `true` but appends produce no
2123
+ * buffered range), and this engine has no TS transmux pipeline.
2124
+ * - **Raw ADTS AAC** is a *temporary* limitation. The browser genuinely
2125
+ * supports it (Chrome/Safari decode `audio/aac`; Firefox doesn't), so it could
2126
+ * be made playable — but our segment actors / loading behaviors / append
2127
+ * pipeline assume every rendition has an `EXT-X-MAP` init segment (e.g. an
2128
+ * `append-init` task with an empty URL, fMP4-shaped append handling). Until
2129
+ * that init-segment assumption is removed, ADTS would fetch but never buffer
2130
+ * (a silent stall), so we assert it unplayable for now. FOLLOW-UP: drop the
2131
+ * init-required assumption in the pipeline and switch this to a bare-MIME
2132
+ * probe (`buildMimeCodec` would project `audio/aac` with no codecs) so it
2133
+ * plays where the browser supports it.
2134
+ *
2135
+ * Override via the engine's `canPlayTrack` config when those pipelines land.
2136
+ */
2137
+ const canPlayTrack = (track) => {
2138
+ if (track.mimeType && NON_FMP4_CONTAINER_MIMES.has(track.mimeType)) return false;
2139
+ if (getMediaPlaylistMetadata(track)?.encrypted) return false;
2140
+ if (!track.mimeType || !track.codecs?.length) return true;
2141
+ const mimeCodec = buildMimeCodec({
2142
+ mimeType: track.mimeType,
2143
+ codecs: track.codecs
2144
+ });
2145
+ const cached = codecSupportCache.get(mimeCodec);
2146
+ if (cached !== void 0) return cached;
2147
+ const supported = isCodecSupported(mimeCodec);
2148
+ codecSupportCache.set(mimeCodec, supported);
2149
+ return supported;
2150
+ };
2151
+
2037
2152
  //#endregion
2038
2153
  //#region ../spf/dist/dev/media/hls/parse-multivariant.js
2039
2154
  /**
@@ -2389,6 +2504,40 @@ function emitError(state, error) {
2389
2504
  update(state.errors, (errors) => [...errors ?? [], error]);
2390
2505
  }
2391
2506
  /**
2507
+ * A "constraint" that reports a type the source carries **no** renditions of, for
2508
+ * a composition that can't play without it.
2509
+ *
2510
+ * Strange on purpose, and the strangeness is the point: it never constrains
2511
+ * anything, always returning its input untouched. It is shaped as a rule so a
2512
+ * composition opts in by adding it to `constraints` — nothing to thread through
2513
+ * config, and no cost at all to a composition that leaves it out.
2514
+ *
2515
+ * **Belongs first in the chain.** A constraint sees the list as it stands at its
2516
+ * own position, so only at the head does an empty input mean "the source offers
2517
+ * none of this type" rather than "the constraints ahead of me pruned them all."
2518
+ *
2519
+ * This is the one failure no per-rendition cause can report: causes come from
2520
+ * `reportUnsupportedTrackConditions` as each media playlist resolves, and here
2521
+ * nothing resolves, because there is nothing to resolve. Everything else already
2522
+ * reports something more specific than a verdict.
2523
+ *
2524
+ * Idempotent because the constraint chain runs inside a `computed` that re-derives
2525
+ * on every `presentation` write — segment appends and live reloads included — and
2526
+ * the sequence deliberately keeps duplicates. `peek` is what keeps that computed
2527
+ * from subscribing to the slot this writes.
2528
+ *
2529
+ * @example
2530
+ * // engine-background-video.ts — video-only, so a source with none can't play
2531
+ * constraints: [reportAbsentTrackType(SVTA_NO_SUPPORTED_VIDEO_TRACK), excludeUnplayableTracks]
2532
+ */
2533
+ function reportAbsentTrackType(code) {
2534
+ return (tracks, { state }) => {
2535
+ const reported = state.errors && peek(state.errors);
2536
+ if (!tracks.length && !reported?.some((error) => error.code === code)) emitError(state, { code });
2537
+ return tracks;
2538
+ };
2539
+ }
2540
+ /**
2392
2541
  * Own `errors` for the resolved source's lifetime.
2393
2542
  *
2394
2543
  * @example
@@ -4667,58 +4816,44 @@ function matchesPartialTrack(track, filter) {
4667
4816
  }
4668
4817
  return true;
4669
4818
  }
4670
- /**
4671
- * Pick the first track of the given type from a presentation.
4672
- *
4673
- * Returns the first track in the first switching set of the matching
4674
- * selection set, or `undefined` if either is missing. POC-shaped
4675
- * default-pick — `pickVideoTrack` / `pickAudioTrack` honor bandwidth +
4676
- * language preferences and will replace this once selection callers are
4677
- * ready.
4678
- */
4679
- function pickFirstTrackId(presentation, type) {
4680
- return presentation.selectionSets?.find((set) => set.type === type)?.switchingSets[0]?.tracks[0]?.id;
4819
+ /** Missing dimensions are treated as area `0`, so a track without them ranks last. */
4820
+ function pixelArea(track) {
4821
+ return (track.width ?? 0) * (track.height ?? 0);
4681
4822
  }
4682
4823
  /**
4683
- * Pick the track with the highest pixel area at or below `maxPixelArea`.
4684
- * Falls back to the lowest track when nothing satisfies the cap (the
4685
- * lowest of the above-cap set is the closest to the cap from above).
4686
- * Tiebreak on bandwidth. Missing dimensions are treated as area `0`.
4824
+ * Narrow to the tracks at or below `maxPixelArea`, and nothing else: no ordering,
4825
+ * no fallback. Survivors keep their incoming order, and an empty result is a real
4826
+ * answer "none of these fit".
4827
+ *
4828
+ * Deliberately only the filter, because as a selection rule this composes under
4829
+ * `applyRules`, which already owns both halves a caller might expect here: an empty
4830
+ * result is skipped, so a preference can never narrow the candidate set to nothing;
4831
+ * and ordering the survivors is a separate rule's job
4832
+ * ({@link byDescendingResolution}, bandwidth ABR). Doing either here would duplicate
4833
+ * the composer and give one rule two responsibilities.
4687
4834
  */
4688
- function pickTrackUnderPixelArea(tracks, maxPixelArea = Number.POSITIVE_INFINITY) {
4689
- if (tracks.length === 0) return void 0;
4690
- const sorted = [...tracks].sort((a, b) => (b.width ?? 0) * (b.height ?? 0) - (a.width ?? 0) * (a.height ?? 0) || (b.bandwidth ?? 0) - (a.bandwidth ?? 0));
4691
- return sorted.find((t) => (t.width ?? 0) * (t.height ?? 0) <= maxPixelArea) ?? sorted[sorted.length - 1];
4835
+ function tracksUnderPixelArea(tracks, maxPixelArea = Number.POSITIVE_INFINITY) {
4836
+ return tracks.filter((track) => pixelArea(track) <= maxPixelArea);
4692
4837
  }
4693
4838
  /**
4694
- * Pick the video track with the highest pixel area.
4839
+ * Compare two tracks by resolution, largest first, with bandwidth as the tiebreak
4840
+ * for renditions of identical dimensions. Missing dimensions are treated as area
4841
+ * `0`, so a track without them sorts last.
4695
4842
  *
4696
- * Pair with `selectVideoTrack`; compose `switchVideoQuality` instead
4697
- * for runtime-adapted quality.
4843
+ * A comparator rather than a "highest track" function: the selection-rule chain
4844
+ * takes the head of the list it produces, so ranking never has to collapse to a
4845
+ * single track. `preferHighestResolution` is `sort` over this and nothing more.
4698
4846
  */
4699
- function pickHighestResolutionVideoTrack(presentation) {
4700
- const tracks = (presentation.selectionSets?.find((set) => set.type === "video"))?.switchingSets[0]?.tracks;
4701
- if (!tracks?.length) return void 0;
4702
- return pickTrackUnderPixelArea(tracks)?.id;
4847
+ function byDescendingResolution(a, b) {
4848
+ return pixelArea(b) - pixelArea(a) || (b.bandwidth ?? 0) - (a.bandwidth ?? 0);
4703
4849
  }
4704
4850
  /**
4705
- * Pick audio track.
4851
+ * Default audio policy over a candidate list: the three-tier pick a selection-rule
4852
+ * chain applies once it has narrowed the candidates.
4706
4853
  *
4707
- * Selection priority:
4708
- * 1. First track matching preferred language (if specified)
4709
- * 2. First default track
4710
- * 3. First audio track
4711
- *
4712
- * @param presentation - Presentation with audio tracks
4713
- * @param config - Selection configuration (preferred language)
4714
- * @returns Selected audio track ID, or undefined if no audio tracks
4854
+ * Priority: `preferredAudioLanguage` match → `DEFAULT=YES` → first track.
4715
4855
  */
4716
- function pickAudioTrack(presentation, config) {
4717
- const audioSet = presentation.selectionSets?.find((set) => set.type === "audio");
4718
- if (!audioSet || audioSet.switchingSets.length === 0) return;
4719
- const switchingSet = audioSet.switchingSets[0];
4720
- if (!switchingSet || switchingSet.tracks.length === 0) return;
4721
- const tracks = switchingSet.tracks;
4856
+ function pickAudioTrackFromTracks(tracks, config) {
4722
4857
  if (config?.preferredAudioLanguage) {
4723
4858
  const languageMatch = tracks.find((track) => track.language === config.preferredAudioLanguage);
4724
4859
  if (languageMatch) return languageMatch.id;
@@ -4728,11 +4863,9 @@ function pickAudioTrack(presentation, config) {
4728
4863
  return tracks[0]?.id;
4729
4864
  }
4730
4865
  /**
4731
- * Default text-track policy over an explicit candidate list (rather than a whole
4732
- * presentation): the opt-in three-tier pick `pickTextTrack` delegates to, factored
4733
- * out so a caller that has already narrowed the candidates — a constrained,
4734
- * CDN-scoped track-switching chain — applies the same policy without re-deriving
4735
- * from the presentation.
4866
+ * Default text-track policy over a candidate list: the opt-in three-tier pick
4867
+ * `switchTextTrack`'s terminal applies once it has narrowed the renditions to the
4868
+ * constrained, CDN-scoped set.
4736
4869
  *
4737
4870
  * Priority: `preferredSubtitleLanguage` match → `DEFAULT=YES + AUTOSELECT=YES`
4738
4871
  * (only when `enableDefaultTrack`) → `undefined` (opt-in). FORCED tracks are
@@ -4754,5 +4887,266 @@ function pickTextTrackFromTracks(tracks, config) {
4754
4887
  }
4755
4888
 
4756
4889
  //#endregion
4757
- export { createComposition as $, getResolvedSelectedTrackDuration as A, AUDIO_TYPE_CONFIG as B, endOfStream as C, collectErrors as D, getOrderedCdnIds as E, isCodecSupported as F, getSegmentsToLoad as G, findTrackById as H, trackCurrentTime as I, isResolvedPresentation as J, deriveStreamType as K, loadAudioSegments as L, NON_FMP4_CONTAINER_MIMES as M, attachMediaSourceAsSourceElement as N, emitError as O, buildMimeCodec as P, makeShareSignals as Q, loadTextTrackSegments as R, getBandwidthEstimate as S, getCdnId as T, getTracksByType as U, VIDEO_TYPE_CONFIG as V, DEFAULT_FORWARD_BUFFER_CONFIG as W, createMachineReactor as X, isResolvedTrack as Y, createMachineCore as Z, fetchStep as _, pickTextTrackFromTracks as a, effect as at, Task as b, resolveTextTrack as c, isStandardPreload as d, defineBehavior as et, updateMediaSourceDuration as f, dispatchStep as g, setupVideoBufferActors as h, pickHighestResolutionVideoTrack as i, update as it, parseMultivariantPlaylist as j, calculatePresentationDuration as k, resolveVideoTrack as l, setupAudioBufferActors as m, pickAudioTrack as n, peek as nt, pickTrackUnderPixelArea as o, setupMediaSource as p, getMediaPlaylistMetadata as q, pickFirstTrackId as r, untrack as rt, resolveAudioTrack as s, matchesPartialTrack as t, computed as tt, resolvePresentation as u, createMachineActor as v, getMinBufferedEnd as w, DEFAULT_BANDWIDTH_CONFIG as x, SerialRunner as y, loadVideoSegments as z };
4758
- //# sourceMappingURL=select-tracks-nRPBa1NC.js.map
4890
+ //#region ../spf/dist/dev/playback/primitives/selection-rules.js
4891
+ /**
4892
+ * Apply rules to a candidate list in order; the pick is the first survivor.
4893
+ * Two responsibilities the rules don't carry: a rule that returns nothing is
4894
+ * skipped (fall-through — a preference never empties the set), and once one
4895
+ * survivor remains the chain stops (early-bail — later rules, including the
4896
+ * bandwidth ranker, never run, so the effect doesn't subscribe to their
4897
+ * signals while the choice is fixed).
4898
+ *
4899
+ * @param rules - Rules to apply, most authoritative first
4900
+ * @param tracks - Candidate tracks
4901
+ * @param deps - The behavior's `{ state, context, config }`, passed through to each rule
4902
+ * @returns The surviving candidates, pick first
4903
+ */
4904
+ function applyRules(rules, tracks, deps) {
4905
+ let current = tracks;
4906
+ for (const rule of rules) {
4907
+ const remaining = rule(current, deps);
4908
+ if (remaining.length === 0) continue;
4909
+ current = remaining;
4910
+ if (current.length === 1) break;
4911
+ }
4912
+ return current;
4913
+ }
4914
+ /**
4915
+ * Apply hard constraints to a candidate list — the pre-pass that runs before the
4916
+ * rule chain. A constraint shares a rule's signature but its exclusion is
4917
+ * *hard*: it removes the unplayable (a codec the environment can't decode, a CDN
4918
+ * in failover cooldown) and a removed track is never attempted. Unlike
4919
+ * `applyRules`, this never skips an empty result and never early-bails — every
4920
+ * constraint always applies, and an empty survivor set is a real outcome
4921
+ * ("nothing playable here"), not a fall-through. Because each constraint only
4922
+ * removes, the order they run in can't change the result.
4923
+ *
4924
+ * @param constraints - Constraints to apply (pooled, order-independent)
4925
+ * @param tracks - Candidate tracks
4926
+ * @param deps - The behavior's `{ state, context, config }`, passed to each constraint
4927
+ * @returns The playable survivors (possibly empty)
4928
+ */
4929
+ function applyConstraints(constraints, tracks, deps) {
4930
+ let current = tracks;
4931
+ for (const constraint of constraints) current = constraint(current, deps);
4932
+ return current;
4933
+ }
4934
+ /**
4935
+ * Whether two candidate sets hold the same tracks, by id.
4936
+ *
4937
+ * The `equals` both selection behaviors give their candidate-set `computed`. A
4938
+ * live playlist refresh swaps in a new presentation object carrying the same
4939
+ * variants, and a constraint's own inputs can churn without changing which
4940
+ * tracks survive; in both cases the set is unchanged and the reaction must not
4941
+ * re-fire. Compares by id rather than array identity for exactly that.
4942
+ */
4943
+ function sameCandidateSet(a, b) {
4944
+ return a.length === b.length && a.every((track) => b.some((other) => other.id === track.id));
4945
+ }
4946
+ /**
4947
+ * Capability constraint — a *hard* filter for the {@link applyConstraints}
4948
+ * pre-pass. Removes renditions this environment can't decode, probed via the
4949
+ * injected `canPlayTrack` (codec → `MediaSource.isTypeSupported`, plus the
4950
+ * container and encryption assertions that probe can't make). Constraining here
4951
+ * — before selection — means an unplayable variant is pruned upstream and never
4952
+ * picked, instead of surviving into the pipeline to fail late at
4953
+ * `createSourceBuffer`. That late throw stays as a defensive structural
4954
+ * guarantee; with this constraint it should rarely fire.
4955
+ *
4956
+ * Lives here rather than beside `switchVideoTrack` for the reason this module
4957
+ * exists: both the re-evaluating variant and the pinned `selectVideoTrack` apply
4958
+ * it, and reaching it through `behaviors/track-switching.ts` would drag the ABR
4959
+ * path into a composition that deliberately omits it.
4960
+ *
4961
+ * Passes everything through when there's no probe (a composition that didn't
4962
+ * wire one, or DOM-free tests). When it prunes *every* track, the empty result is
4963
+ * preserved (per `applyConstraints`) — "nothing playable" — which each consuming
4964
+ * behavior answers by clearing its selection and reporting the type's verdict.
4965
+ */
4966
+ function excludeUnplayableTracks(tracks, { config }) {
4967
+ const canPlay = config?.canPlayTrack;
4968
+ if (!canPlay) return tracks;
4969
+ return tracks.filter((track) => canPlay(track));
4970
+ }
4971
+
4972
+ //#endregion
4973
+ //#region ../spf/dist/dev/playback/primitives/report-track-conditions.js
4974
+ /**
4975
+ * The seam `resolve-track` uses to report conditions discovered in a freshly
4976
+ * parsed media playlist.
4977
+ *
4978
+ * Injected rather than baked in so `resolve-track` stays free of format and
4979
+ * policy knowledge: it parses and commits, and whatever the composition wants
4980
+ * noticed about the result is this function's business. Which conditions matter,
4981
+ * and which codes they carry, therefore vary per composition — a provider that
4982
+ * never ships MPEG-TS can drop that check, and future playlist-derived notices
4983
+ * (LL-HLS or DVR support that's partial rather than absent) attach here without
4984
+ * touching the resolver.
4985
+ *
4986
+ * Reported **per rendition, as it resolves**, which is why these are causes and
4987
+ * not verdicts: one rendition being unplayable doesn't make the source
4988
+ * unplayable. The verdict is `track-switching`'s, which reports
4989
+ * `SVTA_NO_SUPPORTED_{VIDEO,AUDIO}_TRACK` when a type's candidates actually
4990
+ * empty. Keeping the two apart is what lets a mixed source — some renditions
4991
+ * encrypted or MPEG-TS, others playable — log its causes and still play.
4992
+ */
4993
+ /** Unsupported-format code per type; text has none — absent captions aren't a failure. */
4994
+ const UNSUPPORTED_FORMAT_CODE = {
4995
+ video: SVTA_UNSUPPORTED_VIDEO_FORMAT,
4996
+ audio: SVTA_UNSUPPORTED_AUDIO_FORMAT
4997
+ };
4998
+ /**
4999
+ * The types a reported cause can legitimately describe: the ones whose candidates
5000
+ * `canPlayTrack` actually prunes, via `track-switching`'s `excludeUnplayableTracks`
5001
+ * pre-pass.
5002
+ *
5003
+ * Text is outside it by design — its switching chain runs failed-CDN constraints
5004
+ * alone, because an MSE codec probe is the wrong question for a WebVTT rendition
5005
+ * (see `track-switching.ts`). So nothing prunes a text rendition, no verdict can
5006
+ * follow from one, and a cause reported against it would be an orphan: the
5007
+ * adapter's unsupported-feature substitution scans the sequence as a whole, so a
5008
+ * lone encrypted subtitle would otherwise recode an unrelated verdict — an
5009
+ * all-CDN cooldown among them — as "this engine can't play the source".
5010
+ */
5011
+ const CAPABILITY_PRUNED_TYPES = /* @__PURE__ */ new Set(["video", "audio"]);
5012
+ /**
5013
+ * The default: report what makes a rendition unplayable *to this engine* — a
5014
+ * container MSE can't accept, or encryption with no decryption pipeline. Both
5015
+ * mirror what `canPlayTrack` prunes on, so a reported cause always has a
5016
+ * corresponding exclusion.
5017
+ *
5018
+ * A condition carries its code and its context, not copy. `data.mimeType` is
5019
+ * what preserves the specificity — the format codes cover every non-fMP4
5020
+ * container, so "which one" lives there for a consumer that wants to say, rather
5021
+ * than being flattened into an English sentence here.
5022
+ *
5023
+ * Both carry `trackType`, redundantly for the format codes (1004/1005 are
5024
+ * already per type) but not for 4008, which isn't per type — SVTA has one
5025
+ * content-protection code for both. Nothing branches on the tag: it's diagnostic
5026
+ * context, reaching a developer through the logged sequence and `error.data`,
5027
+ * which is why it goes on every condition rather than only where the code can't
5028
+ * carry it. `trackId` alongside it is what distinguishes two renditions of the
5029
+ * same type.
5030
+ */
5031
+ function reportUnsupportedTrackConditions(track) {
5032
+ if (!CAPABILITY_PRUNED_TYPES.has(track.type)) return [];
5033
+ const conditions = [];
5034
+ const data = {
5035
+ trackType: track.type,
5036
+ trackId: track.id
5037
+ };
5038
+ const formatCode = UNSUPPORTED_FORMAT_CODE[track.type];
5039
+ if (formatCode !== void 0 && NON_FMP4_CONTAINER_MIMES.has(track.mimeType)) conditions.push({
5040
+ code: formatCode,
5041
+ data: {
5042
+ ...data,
5043
+ mimeType: track.mimeType
5044
+ }
5045
+ });
5046
+ if (getMediaPlaylistMetadata(track)?.encrypted) conditions.push({
5047
+ code: SVTA_UNSUPPORTED_DRM_SYSTEM,
5048
+ data
5049
+ });
5050
+ return conditions;
5051
+ }
5052
+
5053
+ //#endregion
5054
+ //#region ../spf/dist/dev/playback/primitives/error-messages.js
5055
+ /**
5056
+ * Developer-facing copy for what this engine reports.
5057
+ *
5058
+ * Everything here reaches a **console**, never a viewer. Viewer-facing copy for
5059
+ * a fatal condition is the presentation layer's to compose: the engine reports a
5060
+ * code, and a consumer maps that code to localized text it owns.
5061
+ *
5062
+ * Plain string constants, one export each. Nothing is parameterized — a message
5063
+ * that names the engine has to be built at the call site from state the engine
5064
+ * carries around solely to say it, which is a lot of plumbing for a console
5065
+ * prefix. Separate exports rather than one object so a composition that logs
5066
+ * neither notice doesn't carry their bytes.
5067
+ */
5068
+ /**
5069
+ * Logged when a fatal `SVTA_UNSUPPORTED_PLAYBACK_FEATURE` is surfaced.
5070
+ *
5071
+ * The developer's half of that event; the viewer gets the localized copy the
5072
+ * code maps to. One sentence is enough because the specifics — which container,
5073
+ * which rendition, whether it was DRM — stay structured on the reported
5074
+ * conditions logged beside it.
5075
+ */
5076
+ const UNSUPPORTED_PLAYBACK_FEATURE_MESSAGE = "Can't play this source: it requires an unsupported playback feature.";
5077
+ /**
5078
+ * Logged for **any** fatal condition, by a composition whose failures don't all
5079
+ * reduce to a missing feature.
5080
+ *
5081
+ * The background variant is the case: it treats a per-rendition cause as fatal on
5082
+ * its own, so what reaches its surface can be an unsupported container, DRM it
5083
+ * can't decrypt, or a source carrying no video at all. Naming one feature would be
5084
+ * wrong for the last of those, so all three are named broadly. Deferring the *why*
5085
+ * to the conditions instead would promise prose they don't carry — an `SvtaError`
5086
+ * is a code and its context, and nothing on this path sets `message`.
5087
+ */
5088
+ const UNPLAYABLE_SOURCE_MESSAGE = "Can't play this source — unsupported container, encryption, or no usable video track.";
5089
+ /**
5090
+ * LL-HLS delivery, played as standard live. The parser ignores partial segments
5091
+ * and the loader fetches whole ones, so latency lands wherever `HOLD-BACK` puts
5092
+ * it — the stream plays, just not at the latency it was published for.
5093
+ */
5094
+ const LOW_LATENCY_UNSUPPORTED_MESSAGE = "Low-Latency HLS is unsupported; playing as standard live at higher latency.";
5095
+ /**
5096
+ * `#EXT-X-PLAYLIST-TYPE:EVENT` — a growing window, which is how DVR is
5097
+ * delivered. It plays, but the seekable-range and live-edge handling for it is
5098
+ * newer and less exercised than sliding-window live.
5099
+ */
5100
+ const DVR_EXPERIMENTAL_MESSAGE = "DVR support for EVENT playlists is experimental.";
5101
+
5102
+ //#endregion
5103
+ //#region ../spf/dist/dev/playback/adapters/hls-video/error-surface.js
5104
+ /**
5105
+ * `message`, plus the alternative-Media sentence when `media`'s class names one.
5106
+ *
5107
+ * Read off the class rather than passed in so a subclass can point at a
5108
+ * better-equipped sibling — the SPF Mux Medias name the hls.js-backed one, which
5109
+ * plays the MPEG-TS and DRM sources SPF doesn't — without either adapter knowing
5110
+ * that sibling exists.
5111
+ */
5112
+ function withAlternativeMediaSuggestion(message, media) {
5113
+ const { alternativeMediaSuggestion } = media.constructor;
5114
+ const suggestion = alternativeMediaSuggestion?.trim();
5115
+ return suggestion ? `${message} ${suggestion}` : message;
5116
+ }
5117
+ /** The first condition `fatalCodes` covers — the root cause, not its consequences. */
5118
+ function firstFatal(errors, fatalCodes) {
5119
+ return errors?.find((error) => fatalCodes.has(error.code));
5120
+ }
5121
+ /**
5122
+ * The causes that mean the engine has no pipeline for what the source delivers —
5123
+ * a container it can't append, or encryption it can't decrypt.
5124
+ *
5125
+ * What these have in common is that no retry, no other CDN, and no other
5126
+ * rendition of the same source fixes them: the source needs a capability this
5127
+ * engine doesn't have. That's the distinction the surfaced code exists to draw,
5128
+ * and it's why the set is these three rather than "every cause".
5129
+ */
5130
+ const UNSUPPORTED_FEATURE_CAUSES = /* @__PURE__ */ new Set([
5131
+ SVTA_UNSUPPORTED_VIDEO_FORMAT,
5132
+ SVTA_UNSUPPORTED_AUDIO_FORMAT,
5133
+ SVTA_UNSUPPORTED_DRM_SYSTEM
5134
+ ]);
5135
+ /**
5136
+ * Whether anything in the sequence is a cause of the "we don't implement this"
5137
+ * kind.
5138
+ *
5139
+ * Deliberately `some` over the whole sequence rather than a per-type match
5140
+ * against the verdict. A verdict means one type's candidates emptied, but the
5141
+ * *reason* the source is unplayable can sit on another type — an audio-only
5142
+ * source whose sole rendition is encrypted empties the audio candidates, and a
5143
+ * video source with encrypted video empties the video ones. Both are the same
5144
+ * answer to the viewer, so both get the same code.
5145
+ */
5146
+ function hasUnsupportedFeatureCause(errors) {
5147
+ return errors?.some((error) => UNSUPPORTED_FEATURE_CAUSES.has(error.code)) ?? false;
5148
+ }
5149
+
5150
+ //#endregion
5151
+ export { getTracksByType as $, SerialRunner as A, reportAbsentTrackType as B, updateMediaSourceDuration as C, dispatchStep as D, setupVideoBufferActors as E, getMinBufferedEnd as F, attachMediaSourceAsSourceElement as G, getResolvedSelectedTrackDuration as H, getCdnId as I, loadTextTrackSegments as J, trackCurrentTime as K, getOrderedCdnIds as L, DEFAULT_BANDWIDTH_CONFIG as M, getBandwidthEstimate as N, fetchStep as O, endOfStream as P, findTrackById as Q, collectErrors as R, isStandardPreload as S, setupAudioBufferActors as T, parseMultivariantPlaylist as U, calculatePresentationDuration as V, canPlayTrack as W, AUDIO_TYPE_CONFIG as X, loadVideoSegments as Y, VIDEO_TYPE_CONFIG as Z, tracksUnderPixelArea as _, SVTA_UNSUPPORTED_DRM_SYSTEM as _t, LOW_LATENCY_UNSUPPORTED_MESSAGE as a, isResolvedTrack as at, resolveVideoTrack as b, effect as bt, reportUnsupportedTrackConditions as c, makeShareSignals as ct, excludeUnplayableTracks as d, computed as dt, DEFAULT_FORWARD_BUFFER_CONFIG as et, sameCandidateSet as f, peek as ft, pickTextTrackFromTracks as g, SVTA_NO_SUPPORTED_VIDEO_TRACK as gt, pickAudioTrackFromTracks as h, SVTA_NO_SUPPORTED_AUDIO_TRACK as ht, DVR_EXPERIMENTAL_MESSAGE as i, isResolvedPresentation as it, Task as j, createMachineActor as k, applyConstraints as l, createComposition as lt, matchesPartialTrack as m, update as mt, hasUnsupportedFeatureCause as n, deriveStreamType as nt, UNPLAYABLE_SOURCE_MESSAGE as o, createMachineReactor as ot, byDescendingResolution as p, untrack as pt, loadAudioSegments as q, withAlternativeMediaSuggestion as r, getMediaPlaylistMetadata as rt, UNSUPPORTED_PLAYBACK_FEATURE_MESSAGE as s, createMachineCore as st, firstFatal as t, getSegmentsToLoad as tt, applyRules as u, defineBehavior as ut, resolveAudioTrack as v, SVTA_UNSUPPORTED_PLAYBACK_FEATURE as vt, setupMediaSource as w, resolvePresentation as x, resolveTextTrack as y, SVTA_UNSUPPORTED_VIDEO_FORMAT as yt, emitError as z };
5152
+ //# sourceMappingURL=error-surface-D0bo71gD.js.map