@mattebox/player 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (420) hide show
  1. package/README.md +4 -3
  2. package/dist/cdn/mattebox-player.min.js +222 -198
  3. package/dist/compose.d.ts +5 -0
  4. package/dist/compose.d.ts.map +1 -0
  5. package/dist/compose.js +31 -0
  6. package/dist/compose.js.map +1 -0
  7. package/dist/controls/chapters.d.ts +29 -0
  8. package/dist/controls/chapters.d.ts.map +1 -0
  9. package/dist/controls/chapters.js +81 -0
  10. package/dist/controls/chapters.js.map +1 -0
  11. package/dist/controls/cues.d.ts +8 -3
  12. package/dist/controls/cues.d.ts.map +1 -1
  13. package/dist/controls/cues.js +44 -10
  14. package/dist/controls/cues.js.map +1 -1
  15. package/dist/controls/fullscreen.d.ts +9 -9
  16. package/dist/controls/fullscreen.d.ts.map +1 -1
  17. package/dist/controls/fullscreen.js +17 -21
  18. package/dist/controls/fullscreen.js.map +1 -1
  19. package/dist/controls/icons.d.ts +1 -3
  20. package/dist/controls/icons.d.ts.map +1 -1
  21. package/dist/controls/icons.js +3 -6
  22. package/dist/controls/icons.js.map +1 -1
  23. package/dist/controls/menu.d.ts +14 -11
  24. package/dist/controls/menu.d.ts.map +1 -1
  25. package/dist/controls/menu.js +39 -34
  26. package/dist/controls/menu.js.map +1 -1
  27. package/dist/controls/session.d.ts +27 -0
  28. package/dist/controls/session.d.ts.map +1 -0
  29. package/dist/controls/session.js +36 -0
  30. package/dist/controls/session.js.map +1 -0
  31. package/dist/controls/slider.d.ts +6 -6
  32. package/dist/controls/slider.d.ts.map +1 -1
  33. package/dist/controls/slider.js +18 -13
  34. package/dist/controls/slider.js.map +1 -1
  35. package/dist/dom.d.ts +4 -10
  36. package/dist/dom.d.ts.map +1 -1
  37. package/dist/dom.js +4 -24
  38. package/dist/dom.js.map +1 -1
  39. package/dist/element-entry.d.ts +4 -0
  40. package/dist/element-entry.d.ts.map +1 -0
  41. package/dist/element-entry.js +9 -0
  42. package/dist/element-entry.js.map +1 -0
  43. package/dist/element.d.ts +54 -14
  44. package/dist/element.d.ts.map +1 -1
  45. package/dist/element.js +154 -73
  46. package/dist/element.js.map +1 -1
  47. package/dist/elements/audio-menu.d.ts +24 -0
  48. package/dist/elements/audio-menu.d.ts.map +1 -0
  49. package/dist/elements/audio-menu.js +70 -0
  50. package/dist/elements/audio-menu.js.map +1 -0
  51. package/dist/elements/chapters-menu.d.ts +12 -0
  52. package/dist/elements/chapters-menu.d.ts.map +1 -0
  53. package/dist/elements/chapters-menu.js +67 -0
  54. package/dist/elements/chapters-menu.js.map +1 -0
  55. package/dist/elements/component.d.ts +45 -0
  56. package/dist/elements/component.d.ts.map +1 -0
  57. package/dist/elements/component.js +90 -0
  58. package/dist/elements/component.js.map +1 -0
  59. package/dist/elements/control-bar.d.ts +75 -0
  60. package/dist/elements/control-bar.d.ts.map +1 -0
  61. package/dist/elements/control-bar.js +339 -0
  62. package/dist/elements/control-bar.js.map +1 -0
  63. package/dist/elements/current-time.d.ts +5 -0
  64. package/dist/elements/current-time.d.ts.map +1 -0
  65. package/dist/elements/current-time.js +27 -0
  66. package/dist/elements/current-time.js.map +1 -0
  67. package/dist/elements/drm-badge.d.ts +29 -0
  68. package/dist/elements/drm-badge.d.ts.map +1 -0
  69. package/dist/elements/drm-badge.js +145 -0
  70. package/dist/elements/drm-badge.js.map +1 -0
  71. package/dist/elements/duration.d.ts +6 -0
  72. package/dist/elements/duration.d.ts.map +1 -0
  73. package/dist/elements/duration.js +23 -0
  74. package/dist/elements/duration.js.map +1 -0
  75. package/dist/elements/error-screen.d.ts +17 -0
  76. package/dist/elements/error-screen.d.ts.map +1 -0
  77. package/dist/elements/error-screen.js +103 -0
  78. package/dist/elements/error-screen.js.map +1 -0
  79. package/dist/elements/fullscreen-button.d.ts +19 -0
  80. package/dist/elements/fullscreen-button.d.ts.map +1 -0
  81. package/dist/elements/fullscreen-button.js +55 -0
  82. package/dist/elements/fullscreen-button.js.map +1 -0
  83. package/dist/elements/live-button.d.ts +12 -0
  84. package/dist/elements/live-button.d.ts.map +1 -0
  85. package/dist/elements/live-button.js +96 -0
  86. package/dist/elements/live-button.js.map +1 -0
  87. package/dist/elements/menu-element.d.ts +22 -0
  88. package/dist/elements/menu-element.d.ts.map +1 -0
  89. package/dist/elements/menu-element.js +31 -0
  90. package/dist/elements/menu-element.js.map +1 -0
  91. package/dist/elements/mute-button.d.ts +12 -0
  92. package/dist/elements/mute-button.d.ts.map +1 -0
  93. package/dist/elements/mute-button.js +61 -0
  94. package/dist/elements/mute-button.js.map +1 -0
  95. package/dist/elements/panels.d.ts +15 -0
  96. package/dist/elements/panels.d.ts.map +1 -0
  97. package/dist/elements/panels.js +55 -0
  98. package/dist/elements/panels.js.map +1 -0
  99. package/dist/elements/pip-button.d.ts +13 -0
  100. package/dist/elements/pip-button.d.ts.map +1 -0
  101. package/dist/elements/pip-button.js +56 -0
  102. package/dist/elements/pip-button.js.map +1 -0
  103. package/dist/elements/play-button.d.ts +12 -0
  104. package/dist/elements/play-button.d.ts.map +1 -0
  105. package/dist/elements/play-button.js +60 -0
  106. package/dist/elements/play-button.js.map +1 -0
  107. package/dist/elements/quality-menu.d.ts +11 -0
  108. package/dist/elements/quality-menu.d.ts.map +1 -0
  109. package/dist/elements/quality-menu.js +72 -0
  110. package/dist/elements/quality-menu.js.map +1 -0
  111. package/dist/elements/remaining-time.d.ts +6 -0
  112. package/dist/elements/remaining-time.d.ts.map +1 -0
  113. package/dist/elements/remaining-time.js +26 -0
  114. package/dist/elements/remaining-time.js.map +1 -0
  115. package/dist/elements/seek-bar.d.ts +83 -0
  116. package/dist/elements/seek-bar.d.ts.map +1 -0
  117. package/dist/elements/seek-bar.js +352 -0
  118. package/dist/elements/seek-bar.js.map +1 -0
  119. package/dist/elements/shared.d.ts +27 -0
  120. package/dist/elements/shared.d.ts.map +1 -0
  121. package/dist/elements/shared.js +155 -0
  122. package/dist/elements/shared.js.map +1 -0
  123. package/dist/elements/skip-button.d.ts +14 -0
  124. package/dist/elements/skip-button.d.ts.map +1 -0
  125. package/dist/elements/skip-button.js +60 -0
  126. package/dist/elements/skip-button.js.map +1 -0
  127. package/dist/elements/spacer.d.ts +4 -0
  128. package/dist/elements/spacer.d.ts.map +1 -0
  129. package/dist/elements/spacer.js +9 -0
  130. package/dist/elements/spacer.js.map +1 -0
  131. package/dist/elements/speed-menu.d.ts +18 -0
  132. package/dist/elements/speed-menu.d.ts.map +1 -0
  133. package/dist/elements/speed-menu.js +56 -0
  134. package/dist/elements/speed-menu.js.map +1 -0
  135. package/dist/elements/start-button.d.ts +23 -0
  136. package/dist/elements/start-button.d.ts.map +1 -0
  137. package/dist/elements/start-button.js +120 -0
  138. package/dist/elements/start-button.js.map +1 -0
  139. package/dist/elements/subtitles-menu.d.ts +17 -0
  140. package/dist/elements/subtitles-menu.d.ts.map +1 -0
  141. package/dist/elements/subtitles-menu.js +108 -0
  142. package/dist/elements/subtitles-menu.js.map +1 -0
  143. package/dist/elements/time-element.d.ts +14 -0
  144. package/dist/elements/time-element.d.ts.map +1 -0
  145. package/dist/elements/time-element.js +29 -0
  146. package/dist/elements/time-element.js.map +1 -0
  147. package/dist/elements/volume-slider.d.ts +10 -0
  148. package/dist/elements/volume-slider.d.ts.map +1 -0
  149. package/dist/elements/volume-slider.js +46 -0
  150. package/dist/elements/volume-slider.js.map +1 -0
  151. package/dist/elements/volume.d.ts +9 -0
  152. package/dist/elements/volume.d.ts.map +1 -0
  153. package/dist/elements/volume.js +52 -0
  154. package/dist/elements/volume.js.map +1 -0
  155. package/dist/entries/audio-menu.d.ts +5 -0
  156. package/dist/entries/audio-menu.d.ts.map +1 -0
  157. package/dist/entries/audio-menu.js +8 -0
  158. package/dist/entries/audio-menu.js.map +1 -0
  159. package/dist/entries/chapters-menu.d.ts +5 -0
  160. package/dist/entries/chapters-menu.d.ts.map +1 -0
  161. package/dist/entries/chapters-menu.js +9 -0
  162. package/dist/entries/chapters-menu.js.map +1 -0
  163. package/dist/entries/control-bar.d.ts +5 -0
  164. package/dist/entries/control-bar.d.ts.map +1 -0
  165. package/dist/entries/control-bar.js +8 -0
  166. package/dist/entries/control-bar.js.map +1 -0
  167. package/dist/entries/current-time.d.ts +5 -0
  168. package/dist/entries/current-time.d.ts.map +1 -0
  169. package/dist/entries/current-time.js +8 -0
  170. package/dist/entries/current-time.js.map +1 -0
  171. package/dist/entries/drm-badge.d.ts +5 -0
  172. package/dist/entries/drm-badge.d.ts.map +1 -0
  173. package/dist/entries/drm-badge.js +8 -0
  174. package/dist/entries/drm-badge.js.map +1 -0
  175. package/dist/entries/duration.d.ts +5 -0
  176. package/dist/entries/duration.d.ts.map +1 -0
  177. package/dist/entries/duration.js +8 -0
  178. package/dist/entries/duration.js.map +1 -0
  179. package/dist/entries/error-screen.d.ts +5 -0
  180. package/dist/entries/error-screen.d.ts.map +1 -0
  181. package/dist/entries/error-screen.js +8 -0
  182. package/dist/entries/error-screen.js.map +1 -0
  183. package/dist/entries/fullscreen-button.d.ts +5 -0
  184. package/dist/entries/fullscreen-button.d.ts.map +1 -0
  185. package/dist/entries/fullscreen-button.js +8 -0
  186. package/dist/entries/fullscreen-button.js.map +1 -0
  187. package/dist/entries/live-button.d.ts +5 -0
  188. package/dist/entries/live-button.d.ts.map +1 -0
  189. package/dist/entries/live-button.js +8 -0
  190. package/dist/entries/live-button.js.map +1 -0
  191. package/dist/entries/mute-button.d.ts +5 -0
  192. package/dist/entries/mute-button.d.ts.map +1 -0
  193. package/dist/entries/mute-button.js +8 -0
  194. package/dist/entries/mute-button.js.map +1 -0
  195. package/dist/entries/panels.d.ts +5 -0
  196. package/dist/entries/panels.d.ts.map +1 -0
  197. package/dist/entries/panels.js +8 -0
  198. package/dist/entries/panels.js.map +1 -0
  199. package/dist/entries/pip-button.d.ts +5 -0
  200. package/dist/entries/pip-button.d.ts.map +1 -0
  201. package/dist/entries/pip-button.js +8 -0
  202. package/dist/entries/pip-button.js.map +1 -0
  203. package/dist/entries/play-button.d.ts +5 -0
  204. package/dist/entries/play-button.d.ts.map +1 -0
  205. package/dist/entries/play-button.js +8 -0
  206. package/dist/entries/play-button.js.map +1 -0
  207. package/dist/entries/quality-menu.d.ts +5 -0
  208. package/dist/entries/quality-menu.d.ts.map +1 -0
  209. package/dist/entries/quality-menu.js +8 -0
  210. package/dist/entries/quality-menu.js.map +1 -0
  211. package/dist/entries/remaining-time.d.ts +5 -0
  212. package/dist/entries/remaining-time.d.ts.map +1 -0
  213. package/dist/entries/remaining-time.js +9 -0
  214. package/dist/entries/remaining-time.js.map +1 -0
  215. package/dist/entries/seek-bar.d.ts +5 -0
  216. package/dist/entries/seek-bar.d.ts.map +1 -0
  217. package/dist/entries/seek-bar.js +8 -0
  218. package/dist/entries/seek-bar.js.map +1 -0
  219. package/dist/entries/skip-button.d.ts +5 -0
  220. package/dist/entries/skip-button.d.ts.map +1 -0
  221. package/dist/entries/skip-button.js +8 -0
  222. package/dist/entries/skip-button.js.map +1 -0
  223. package/dist/entries/spacer.d.ts +5 -0
  224. package/dist/entries/spacer.d.ts.map +1 -0
  225. package/dist/entries/spacer.js +8 -0
  226. package/dist/entries/spacer.js.map +1 -0
  227. package/dist/entries/speed-menu.d.ts +5 -0
  228. package/dist/entries/speed-menu.d.ts.map +1 -0
  229. package/dist/entries/speed-menu.js +8 -0
  230. package/dist/entries/speed-menu.js.map +1 -0
  231. package/dist/entries/start-button.d.ts +5 -0
  232. package/dist/entries/start-button.d.ts.map +1 -0
  233. package/dist/entries/start-button.js +8 -0
  234. package/dist/entries/start-button.js.map +1 -0
  235. package/dist/entries/subtitles-menu.d.ts +5 -0
  236. package/dist/entries/subtitles-menu.d.ts.map +1 -0
  237. package/dist/entries/subtitles-menu.js +8 -0
  238. package/dist/entries/subtitles-menu.js.map +1 -0
  239. package/dist/entries/volume-slider.d.ts +5 -0
  240. package/dist/entries/volume-slider.d.ts.map +1 -0
  241. package/dist/entries/volume-slider.js +8 -0
  242. package/dist/entries/volume-slider.js.map +1 -0
  243. package/dist/entries/volume.d.ts +7 -0
  244. package/dist/entries/volume.d.ts.map +1 -0
  245. package/dist/entries/volume.js +10 -0
  246. package/dist/entries/volume.js.map +1 -0
  247. package/dist/es2015/compose.js +33 -0
  248. package/dist/es2015/controls/chapters.js +61 -0
  249. package/dist/es2015/controls/cues.js +39 -11
  250. package/dist/es2015/controls/fullscreen.js +25 -23
  251. package/dist/es2015/controls/icons.js +5 -9
  252. package/dist/es2015/controls/menu.js +39 -35
  253. package/dist/es2015/controls/session.js +40 -0
  254. package/dist/es2015/controls/slider.js +18 -13
  255. package/dist/es2015/controls/time.js +1 -5
  256. package/dist/es2015/dom.js +5 -25
  257. package/dist/es2015/element-entry.js +10 -0
  258. package/dist/es2015/element.js +118 -65
  259. package/dist/es2015/elements/audio-menu.js +68 -0
  260. package/dist/es2015/elements/chapters-menu.js +68 -0
  261. package/dist/es2015/elements/component.js +85 -0
  262. package/dist/es2015/elements/control-bar.js +299 -0
  263. package/dist/es2015/elements/current-time.js +27 -0
  264. package/dist/es2015/elements/drm-badge.js +138 -0
  265. package/dist/es2015/elements/duration.js +23 -0
  266. package/dist/es2015/elements/error-screen.js +97 -0
  267. package/dist/es2015/elements/fullscreen-button.js +49 -0
  268. package/dist/es2015/elements/live-button.js +97 -0
  269. package/dist/es2015/elements/menu-element.js +39 -0
  270. package/dist/es2015/elements/mute-button.js +60 -0
  271. package/dist/es2015/elements/panels.js +52 -0
  272. package/dist/es2015/elements/pip-button.js +56 -0
  273. package/dist/es2015/elements/play-button.js +68 -0
  274. package/dist/es2015/elements/quality-menu.js +68 -0
  275. package/dist/es2015/elements/remaining-time.js +26 -0
  276. package/dist/es2015/elements/seek-bar.js +314 -0
  277. package/dist/es2015/elements/shared.js +155 -0
  278. package/dist/es2015/elements/skip-button.js +59 -0
  279. package/dist/es2015/elements/spacer.js +11 -0
  280. package/dist/es2015/elements/speed-menu.js +60 -0
  281. package/dist/es2015/elements/start-button.js +124 -0
  282. package/dist/es2015/elements/subtitles-menu.js +103 -0
  283. package/dist/es2015/elements/time-element.js +38 -0
  284. package/dist/es2015/elements/volume-slider.js +47 -0
  285. package/dist/es2015/elements/volume.js +52 -0
  286. package/dist/es2015/entries/audio-menu.js +7 -0
  287. package/dist/es2015/entries/chapters-menu.js +7 -0
  288. package/dist/es2015/entries/control-bar.js +7 -0
  289. package/dist/es2015/entries/current-time.js +7 -0
  290. package/dist/es2015/entries/drm-badge.js +7 -0
  291. package/dist/es2015/entries/duration.js +7 -0
  292. package/dist/es2015/entries/error-screen.js +7 -0
  293. package/dist/es2015/entries/fullscreen-button.js +7 -0
  294. package/dist/es2015/entries/live-button.js +7 -0
  295. package/dist/es2015/entries/mute-button.js +7 -0
  296. package/dist/es2015/entries/panels.js +7 -0
  297. package/dist/es2015/entries/pip-button.js +7 -0
  298. package/dist/es2015/entries/play-button.js +7 -0
  299. package/dist/es2015/entries/quality-menu.js +7 -0
  300. package/dist/es2015/entries/remaining-time.js +7 -0
  301. package/dist/es2015/entries/seek-bar.js +7 -0
  302. package/dist/es2015/entries/skip-button.js +7 -0
  303. package/dist/es2015/entries/spacer.js +7 -0
  304. package/dist/es2015/entries/speed-menu.js +7 -0
  305. package/dist/es2015/entries/start-button.js +7 -0
  306. package/dist/es2015/entries/subtitles-menu.js +7 -0
  307. package/dist/es2015/entries/volume-slider.js +7 -0
  308. package/dist/es2015/entries/volume.js +9 -0
  309. package/dist/es2015/host.js +23 -0
  310. package/dist/es2015/index.js +48 -9
  311. package/dist/es2015/labels.js +14 -0
  312. package/dist/es2015/style.js +40 -292
  313. package/dist/es2015/{panels/error.js → surface.js} +3 -3
  314. package/dist/es2015/tags.js +28 -0
  315. package/dist/host.d.ts +26 -0
  316. package/dist/host.d.ts.map +1 -0
  317. package/dist/host.js +23 -0
  318. package/dist/host.js.map +1 -0
  319. package/dist/index.d.ts +84 -3
  320. package/dist/index.d.ts.map +1 -1
  321. package/dist/index.js +24 -8
  322. package/dist/index.js.map +1 -1
  323. package/dist/labels.d.ts +7 -0
  324. package/dist/labels.d.ts.map +1 -0
  325. package/dist/labels.js +12 -0
  326. package/dist/labels.js.map +1 -0
  327. package/dist/style.d.ts +10 -2
  328. package/dist/style.d.ts.map +1 -1
  329. package/dist/style.js +40 -292
  330. package/dist/style.js.map +1 -1
  331. package/dist/surface.d.ts +15 -0
  332. package/dist/surface.d.ts.map +1 -0
  333. package/dist/{panels/error.js → surface.js} +3 -3
  334. package/dist/surface.js.map +1 -0
  335. package/dist/tags.d.ts +26 -0
  336. package/dist/tags.d.ts.map +1 -0
  337. package/dist/tags.js +26 -0
  338. package/dist/tags.js.map +1 -0
  339. package/package.json +22 -2
  340. package/dist/controls/bar.d.ts +0 -56
  341. package/dist/controls/bar.d.ts.map +0 -1
  342. package/dist/controls/bar.js +0 -245
  343. package/dist/controls/bar.js.map +0 -1
  344. package/dist/controls/buttons.d.ts +0 -13
  345. package/dist/controls/buttons.d.ts.map +0 -1
  346. package/dist/controls/buttons.js +0 -157
  347. package/dist/controls/buttons.js.map +0 -1
  348. package/dist/controls/control.d.ts +0 -12
  349. package/dist/controls/control.d.ts.map +0 -1
  350. package/dist/controls/control.js +0 -2
  351. package/dist/controls/control.js.map +0 -1
  352. package/dist/controls/keys.d.ts +0 -26
  353. package/dist/controls/keys.d.ts.map +0 -1
  354. package/dist/controls/keys.js +0 -66
  355. package/dist/controls/keys.js.map +0 -1
  356. package/dist/controls/live.d.ts +0 -10
  357. package/dist/controls/live.d.ts.map +0 -1
  358. package/dist/controls/live.js +0 -59
  359. package/dist/controls/live.js.map +0 -1
  360. package/dist/controls/menus.d.ts +0 -43
  361. package/dist/controls/menus.d.ts.map +0 -1
  362. package/dist/controls/menus.js +0 -262
  363. package/dist/controls/menus.js.map +0 -1
  364. package/dist/controls/options.d.ts +0 -44
  365. package/dist/controls/options.d.ts.map +0 -1
  366. package/dist/controls/options.js +0 -54
  367. package/dist/controls/options.js.map +0 -1
  368. package/dist/controls/screens.d.ts +0 -22
  369. package/dist/controls/screens.d.ts.map +0 -1
  370. package/dist/controls/screens.js +0 -69
  371. package/dist/controls/screens.js.map +0 -1
  372. package/dist/controls/seek.d.ts +0 -52
  373. package/dist/controls/seek.d.ts.map +0 -1
  374. package/dist/controls/seek.js +0 -215
  375. package/dist/controls/seek.js.map +0 -1
  376. package/dist/controls/speed.d.ts +0 -8
  377. package/dist/controls/speed.d.ts.map +0 -1
  378. package/dist/controls/speed.js +0 -34
  379. package/dist/controls/speed.js.map +0 -1
  380. package/dist/controls/volume.d.ts +0 -8
  381. package/dist/controls/volume.d.ts.map +0 -1
  382. package/dist/controls/volume.js +0 -29
  383. package/dist/controls/volume.js.map +0 -1
  384. package/dist/es2015/controls/bar.js +0 -227
  385. package/dist/es2015/controls/buttons.js +0 -146
  386. package/dist/es2015/controls/keys.js +0 -60
  387. package/dist/es2015/controls/live.js +0 -60
  388. package/dist/es2015/controls/menus.js +0 -258
  389. package/dist/es2015/controls/options.js +0 -46
  390. package/dist/es2015/controls/screens.js +0 -74
  391. package/dist/es2015/controls/seek.js +0 -203
  392. package/dist/es2015/controls/speed.js +0 -41
  393. package/dist/es2015/controls/volume.js +0 -30
  394. package/dist/es2015/panels/drm.js +0 -29
  395. package/dist/es2015/panels/live.js +0 -48
  396. package/dist/es2015/panels/quality.js +0 -52
  397. package/dist/es2015/panels/tracks.js +0 -47
  398. package/dist/panels/drm.d.ts +0 -8
  399. package/dist/panels/drm.d.ts.map +0 -1
  400. package/dist/panels/drm.js +0 -36
  401. package/dist/panels/drm.js.map +0 -1
  402. package/dist/panels/error.d.ts +0 -13
  403. package/dist/panels/error.d.ts.map +0 -1
  404. package/dist/panels/error.js.map +0 -1
  405. package/dist/panels/live.d.ts +0 -3
  406. package/dist/panels/live.d.ts.map +0 -1
  407. package/dist/panels/live.js +0 -56
  408. package/dist/panels/live.js.map +0 -1
  409. package/dist/panels/panel.d.ts +0 -13
  410. package/dist/panels/panel.d.ts.map +0 -1
  411. package/dist/panels/panel.js +0 -2
  412. package/dist/panels/panel.js.map +0 -1
  413. package/dist/panels/quality.d.ts +0 -3
  414. package/dist/panels/quality.d.ts.map +0 -1
  415. package/dist/panels/quality.js +0 -59
  416. package/dist/panels/quality.js.map +0 -1
  417. package/dist/panels/tracks.d.ts +0 -3
  418. package/dist/panels/tracks.d.ts.map +0 -1
  419. package/dist/panels/tracks.js +0 -49
  420. package/dist/panels/tracks.js.map +0 -1
@@ -1,59 +0,0 @@
1
- /**
2
- * The live button: a dot and the word, the dot red at the edge and grey
3
- * behind it, the way viewers read it everywhere. Shown once the stream has
4
- * an availability window, which is what makes it live; disabled at the
5
- * edge, where there is nowhere to go; a click seeks to the edge. The same
6
- * test the live panel uses.
7
- *
8
- * Without a seek bar, when the window is too narrow to be worth one, there
9
- * is nowhere to come back from either: the dot stays red and the button
10
- * stays inert, whatever the playhead does.
11
- */
12
- import { el, state } from '../dom.js';
13
- export function liveButton(video) {
14
- const root = el('button', 'control live-button');
15
- root.type = 'button';
16
- const dot = el('span', 'live-dot');
17
- root.append(dot, el('span', 'live-text', 'LIVE'));
18
- root.setAttribute('aria-label', 'Go to the live edge');
19
- root.hidden = true;
20
- let live;
21
- let bar = true;
22
- function tick() {
23
- const on = live !== undefined && live.edge !== null;
24
- root.hidden = !on;
25
- if (!on)
26
- return;
27
- const atEdge = !bar || live?.atEdge === true;
28
- root.disabled = atEdge;
29
- state(root, 'control live-button', { 'at-edge': atEdge });
30
- state(dot, 'live-dot', { 'at-edge': atEdge });
31
- root.setAttribute('aria-label', atEdge ? 'At the live edge' : 'Go to the live edge');
32
- }
33
- function click() {
34
- live?.seekToEdge();
35
- }
36
- root.addEventListener('click', click);
37
- video.addEventListener('timeupdate', tick);
38
- tick();
39
- return {
40
- root,
41
- attach(found) {
42
- live = found;
43
- tick();
44
- },
45
- detach() {
46
- live = undefined;
47
- tick();
48
- },
49
- seekable(on) {
50
- bar = on;
51
- tick();
52
- },
53
- dispose() {
54
- root.removeEventListener('click', click);
55
- video.removeEventListener('timeupdate', tick);
56
- },
57
- };
58
- }
59
- //# sourceMappingURL=live.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"live.js","sourceRoot":"","sources":["../../src/controls/live.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAWtC,MAAM,UAAU,UAAU,CAAC,KAAuB;IAChD,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IACjD,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;IACrB,MAAM,GAAG,GAAG,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,qBAAqB,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACnB,IAAI,IAAyB,CAAC;IAC9B,IAAI,GAAG,GAAG,IAAI,CAAC;IAEf,SAAS,IAAI;QACX,MAAM,EAAE,GAAG,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;QACpD,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClB,IAAI,CAAC,EAAE;YAAE,OAAO;QAChB,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;QAC7C,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;QACvB,KAAK,CAAC,IAAI,EAAE,qBAAqB,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1D,KAAK,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC9C,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC;IACvF,CAAC;IAED,SAAS,KAAK;QACZ,IAAI,EAAE,UAAU,EAAE,CAAC;IACrB,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,KAAK,CAAC,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAC3C,IAAI,EAAE,CAAC;IAEP,OAAO;QACL,IAAI;QACJ,MAAM,CAAC,KAA0B;YAC/B,IAAI,GAAG,KAAK,CAAC;YACb,IAAI,EAAE,CAAC;QACT,CAAC;QACD,MAAM;YACJ,IAAI,GAAG,SAAS,CAAC;YACjB,IAAI,EAAE,CAAC;QACT,CAAC;QACD,QAAQ,CAAC,EAAW;YAClB,GAAG,GAAG,EAAE,CAAC;YACT,IAAI,EAAE,CAAC;QACT,CAAC;QACD,OAAO;YACL,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,KAAK,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAChD,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,43 +0,0 @@
1
- /**
2
- * The menus over the engine's namespaces, for the bar under custom
3
- * controls: quality over `engine.quality`, audio and subtitles over
4
- * `engine.tracks`, and a lock badge over `engine.drm`. The same reads and
5
- * writes as the panels, in the bar's shape. Each factory answers null for
6
- * a native session, and each menu hides itself while it has nothing to
7
- * offer.
8
- *
9
- * The subtitles menu also carries how they look: a size and a background,
10
- * kept as attributes on the host, where the element's stylesheet turns
11
- * them into the custom properties the cue rule reads. A page can set them
12
- * in markup and persist them however it likes.
13
- */
14
- import type { Mattebox } from 'mattebox';
15
- import type { Control } from './control.js';
16
- /** What a menu over a session gets: the engine, and the host for the state it reflects there. */
17
- export interface MenuContext {
18
- readonly engine: Mattebox;
19
- readonly host: HTMLElement;
20
- }
21
- export type MenuFactory = (context: MenuContext) => Control;
22
- /** The subtitle looks, as attribute name, choices, and default. */
23
- export declare const SUBTITLE_SIZE = "subtitle-size";
24
- export declare const SUBTITLE_BACKGROUND = "subtitle-background";
25
- /** The quality menu: the pin, where "auto" means none. Hidden without renditions. */
26
- export declare const qualityMenu: MenuFactory;
27
- /** The audio menu. Hidden unless there is a choice to make. */
28
- export declare const audioMenu: MenuFactory;
29
- /**
30
- * The subtitles menu, with "off" because a text selection is releasable
31
- * and an audio one is not, and a Settings page behind it with the size and
32
- * the background. The glyph says whether a track is on.
33
- */
34
- export declare const textMenu: MenuFactory;
35
- /**
36
- * A lock over `engine.drm`, hidden until a key session opens and absent
37
- * without the EME stages. Hover or focus shows what it knows: the key
38
- * system, and the key sessions with their statuses.
39
- */
40
- export declare const drmBadge: MenuFactory;
41
- /** By the name the layout knows them by. */
42
- export declare const MENUS: Readonly<Record<string, MenuFactory>>;
43
- //# sourceMappingURL=menus.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"menus.d.ts","sourceRoot":"","sources":["../../src/controls/menus.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAe,QAAQ,EAAoB,MAAM,UAAU,CAAC;AAGxE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAK5C,iGAAiG;AACjG,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;AAK5D,mEAAmE;AACnE,eAAO,MAAM,aAAa,kBAAkB,CAAC;AAC7C,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AAyBzD,qFAAqF;AACrF,eAAO,MAAM,WAAW,EAAE,WAqCzB,CAAC;AAeF,+DAA+D;AAC/D,eAAO,MAAM,SAAS,EAAE,WA6BvB,CAAC;AAaF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,WA2DtB,CAAC;AAoBF;;;;GAIG;AACH,eAAO,MAAM,QAAQ,EAAE,WA6DtB,CAAC;AAEF,4CAA4C;AAC5C,eAAO,MAAM,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAKvD,CAAC"}
@@ -1,262 +0,0 @@
1
- import { el } from '../dom.js';
2
- import { namespaces } from '../namespaces.js';
3
- import { icon } from './icons.js';
4
- import { menu } from './menu.js';
5
- const AUTO = 'auto';
6
- const OFF = 'off';
7
- /** The subtitle looks, as attribute name, choices, and default. */
8
- export const SUBTITLE_SIZE = 'subtitle-size';
9
- export const SUBTITLE_BACKGROUND = 'subtitle-background';
10
- const SIZES = [
11
- ['small', 'Small'],
12
- ['medium', 'Medium'],
13
- ['large', 'Large'],
14
- ['xlarge', 'Extra large'],
15
- ];
16
- const BACKGROUNDS = [
17
- ['none', 'None'],
18
- ['dark', 'Dark'],
19
- ['solid', 'Solid'],
20
- ];
21
- /** A rendition's height when the manifest declared one, its bitrate otherwise. */
22
- function renditionLabel(rendition) {
23
- if (rendition.height !== undefined)
24
- return `${rendition.height}p`;
25
- return `${Math.round(rendition.bitrate / 1000)} kbps`;
26
- }
27
- /** The language, then the role, then the id: whichever the manifest gave. */
28
- function trackLabel(track) {
29
- const parts = [track.lang, track.role].filter((part) => part !== undefined);
30
- return parts.length === 0 ? track.id : parts.join(' · ');
31
- }
32
- /** The quality menu: the pin, where "auto" means none. Hidden without renditions. */
33
- export const qualityMenu = ({ engine }) => {
34
- const quality = engine.quality;
35
- const control = menu({ name: 'quality', label: 'Quality', icon: 'settings' });
36
- function render() {
37
- const items = [[AUTO, 'Auto']];
38
- for (const rendition of quality.renditions)
39
- items.push([rendition.id, renditionLabel(rendition)]);
40
- control.fill([
41
- {
42
- name: 'rendition',
43
- items,
44
- value: quality.pinned ?? AUTO,
45
- onSelect(value) {
46
- if (value === AUTO)
47
- quality.auto();
48
- else
49
- quality.pin(value);
50
- render();
51
- },
52
- },
53
- ]);
54
- control.root.hidden = quality.renditions.length === 0;
55
- }
56
- const offs = [
57
- engine.on('tracks:changed', render),
58
- engine.on('quality:constraints-unsatisfiable', render),
59
- engine.on('quality:pin-unsatisfiable', render),
60
- ];
61
- render();
62
- return {
63
- root: control.root,
64
- dispose() {
65
- for (const off of offs)
66
- off();
67
- control.dispose();
68
- },
69
- };
70
- };
71
- /** The tracks of one content type as menu items, with the active one. */
72
- function trackItems(engine, contentType, off) {
73
- const tracks = engine.tracks;
74
- const available = tracks.available.filter((track) => track.contentType === contentType);
75
- const items = off ? [[OFF, 'Off']] : [];
76
- for (const track of available)
77
- items.push([track.id, trackLabel(track)]);
78
- return [items, tracks.active(contentType)?.id ?? OFF, available.length];
79
- }
80
- /** The audio menu. Hidden unless there is a choice to make. */
81
- export const audioMenu = ({ engine }) => {
82
- const control = menu({ name: 'audio', label: 'Audio', icon: 'music' });
83
- function render() {
84
- const [items, active, count] = trackItems(engine, 'audio', false);
85
- control.fill([
86
- {
87
- name: 'track',
88
- items,
89
- value: active,
90
- onSelect(value) {
91
- engine.tracks.select(value);
92
- render();
93
- },
94
- },
95
- ]);
96
- control.root.hidden = count < 2;
97
- }
98
- const offs = [engine.on('tracks:changed', render), engine.on('tracks:selected', render)];
99
- render();
100
- return {
101
- root: control.root,
102
- dispose() {
103
- for (const off of offs)
104
- off();
105
- control.dispose();
106
- },
107
- };
108
- };
109
- /** An attribute's value where it is one of the choices, else the default. */
110
- function choice(host, attribute, choices, fallback) {
111
- const value = host.getAttribute(attribute);
112
- return value !== null && choices.some(([id]) => id === value) ? value : fallback;
113
- }
114
- /**
115
- * The subtitles menu, with "off" because a text selection is releasable
116
- * and an audio one is not, and a Settings page behind it with the size and
117
- * the background. The glyph says whether a track is on.
118
- */
119
- export const textMenu = ({ engine, host }) => {
120
- const control = menu({ name: 'text', label: 'Subtitles', icon: 'closed-captions' });
121
- function looks(attribute, name, label, choices, fallback) {
122
- return {
123
- name,
124
- label,
125
- items: choices,
126
- value: choice(host, attribute, choices, fallback),
127
- onSelect(value) {
128
- host.setAttribute(attribute, value);
129
- render();
130
- },
131
- };
132
- }
133
- function render() {
134
- const [items, active, count] = trackItems(engine, 'text', true);
135
- control.fill([
136
- {
137
- name: 'track',
138
- label: 'Track',
139
- items,
140
- value: active,
141
- onSelect(value) {
142
- if (value === OFF)
143
- engine.tracks.deselect('text');
144
- else
145
- engine.tracks.select(value);
146
- render();
147
- },
148
- },
149
- {
150
- name: 'settings',
151
- label: 'Settings',
152
- entries: [
153
- looks(SUBTITLE_SIZE, 'size', 'Size', SIZES, 'medium'),
154
- looks(SUBTITLE_BACKGROUND, 'background', 'Background', BACKGROUNDS, 'dark'),
155
- ],
156
- },
157
- ]);
158
- control.show(active === OFF ? 'closed-captions' : 'closed-captions-on');
159
- control.root.hidden = count === 0;
160
- }
161
- const offs = [engine.on('tracks:changed', render), engine.on('tracks:selected', render)];
162
- render();
163
- return {
164
- root: control.root,
165
- dispose() {
166
- for (const off of offs)
167
- off();
168
- control.dispose();
169
- },
170
- };
171
- };
172
- /** The name a viewer knows a key system by. */
173
- function keySystemName(id) {
174
- if (id.startsWith('com.widevine'))
175
- return 'Widevine';
176
- if (id.startsWith('com.microsoft.playready'))
177
- return 'PlayReady';
178
- if (id.startsWith('com.apple.fps'))
179
- return 'FairPlay';
180
- return id;
181
- }
182
- /** "3 keys: usable ×2, expired ×1", or "no key yet". */
183
- function sessionsText(sessions) {
184
- if (sessions.length === 0)
185
- return 'no key yet';
186
- const counts = new Map();
187
- for (const session of sessions)
188
- counts.set(session.status, (counts.get(session.status) ?? 0) + 1);
189
- const parts = [];
190
- for (const [status, count] of counts)
191
- parts.push(count > 1 ? `${status} ×${count}` : status);
192
- return `${sessions.length} ${sessions.length === 1 ? 'key' : 'keys'}: ${parts.join(', ')}`;
193
- }
194
- /**
195
- * A lock over `engine.drm`, hidden until a key session opens and absent
196
- * without the EME stages. Hover or focus shows what it knows: the key
197
- * system, and the key sessions with their statuses.
198
- */
199
- export const drmBadge = ({ engine }) => {
200
- const drm = namespaces(engine).drm;
201
- const root = el('span', 'badge drm-badge');
202
- root.setAttribute('role', 'img');
203
- root.append(icon('lock-closed'));
204
- root.hidden = true;
205
- if (drm === undefined)
206
- return { root, dispose() { } };
207
- const tooltip = el('div', 'tooltip drm-tooltip');
208
- tooltip.setAttribute('role', 'tooltip');
209
- const system = el('div', 'tooltip-title drm-tooltip-title');
210
- const id = el('div', 'tooltip-text drm-tooltip-id');
211
- const keys = el('div', 'tooltip-text drm-tooltip-keys');
212
- tooltip.append(system, id, keys);
213
- tooltip.hidden = true;
214
- root.append(tooltip);
215
- root.tabIndex = 0;
216
- function render() {
217
- const name = drm?.keySystem ?? null;
218
- root.hidden = name === null;
219
- if (name === null)
220
- return;
221
- const sessions = drm?.sessions ?? [];
222
- system.textContent = keySystemName(name);
223
- id.textContent = name;
224
- keys.textContent = sessionsText(sessions);
225
- root.setAttribute('aria-label', `Protected by ${keySystemName(name)}, ${sessionsText(sessions)}`);
226
- }
227
- function show() {
228
- tooltip.hidden = false;
229
- }
230
- function hide() {
231
- tooltip.hidden = true;
232
- }
233
- root.addEventListener('pointerenter', show);
234
- root.addEventListener('pointerleave', hide);
235
- root.addEventListener('focus', show);
236
- root.addEventListener('blur', hide);
237
- const offs = [
238
- engine.on('drm:keysystem', render),
239
- engine.on('drm:keystatus', render),
240
- engine.on('drm:encrypted', render),
241
- ];
242
- render();
243
- return {
244
- root,
245
- dispose() {
246
- for (const off of offs)
247
- off();
248
- root.removeEventListener('pointerenter', show);
249
- root.removeEventListener('pointerleave', hide);
250
- root.removeEventListener('focus', show);
251
- root.removeEventListener('blur', hide);
252
- },
253
- };
254
- };
255
- /** By the name the layout knows them by. */
256
- export const MENUS = {
257
- subtitles: textMenu,
258
- audio: audioMenu,
259
- quality: qualityMenu,
260
- drm: drmBadge,
261
- };
262
- //# sourceMappingURL=menus.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"menus.js","sourceRoot":"","sources":["../../src/controls/menus.ts"],"names":[],"mappings":"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"}
@@ -1,44 +0,0 @@
1
- /**
2
- * The bar's knobs. Every one has a default, every one can come from
3
- * JavaScript through `define({ controls })` or the constructor, and every
4
- * one has an attribute in kebab-case that wins over both, so a page that
5
- * writes only markup still gets to set them.
6
- */
7
- export interface ControlsOptions {
8
- /** Milliseconds of pointer stillness before the bar hides while playing. */
9
- readonly idleMs?: number;
10
- /** Seconds an arrow key moves the playhead. */
11
- readonly seekStep?: number;
12
- /** Seconds Page Up and Page Down move it. */
13
- readonly seekPage?: number;
14
- /** Seconds the skip-back button moves it. Zero leaves that button out. */
15
- readonly skipBack?: number;
16
- /** Seconds the skip-forward button moves it. Zero leaves that button out. */
17
- readonly skipForward?: number;
18
- /** Whether the large play sits over the picture while paused. Zero leaves it out. */
19
- readonly start?: number;
20
- /**
21
- * How many forward buffer goals long the availability window must be for
22
- * a live stream to be seekable. Below it the bar shows no seek bar: a
23
- * window barely wider than the buffer is nowhere to go. Zero makes every
24
- * live stream seekable.
25
- */
26
- readonly liveWindow?: number;
27
- /**
28
- * Which controls the buttons row carries, in order, by name, with `|`
29
- * between the left and the right cluster. A name left out is a control
30
- * left out. See LAYOUT for the default and the names.
31
- */
32
- readonly layout?: string;
33
- }
34
- export type Controls = Required<ControlsOptions>;
35
- /** The buttons row by default. `drm`, the lock, is a control the row can carry and does not by default. */
36
- export declare const LAYOUT = "skip-back play skip-forward volume | speed subtitles audio quality pip fullscreen";
37
- export declare const DEFAULTS: Controls;
38
- /** Each option's attribute. */
39
- export declare const ATTRIBUTES: Readonly<Record<keyof Controls, string>>;
40
- /** The attribute where it is a non-negative number, else the option, else the default; the layout as given. */
41
- export declare function resolve(options: ControlsOptions | undefined, attribute: (name: string) => string | null): Controls;
42
- /** A layout as two lists of names, left and right of the `|`. Unknown names are the caller's to drop. */
43
- export declare function clusters(layout: string): [string[], string[]];
44
- //# sourceMappingURL=options.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/controls/options.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,eAAe;IAC9B,4EAA4E;IAC5E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,+CAA+C;IAC/C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,6CAA6C;IAC7C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,qFAAqF;IACrF,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB;;;;;OAKG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAC;AAEjD,2GAA2G;AAC3G,eAAO,MAAM,MAAM,sFACkE,CAAC;AAEtF,eAAO,MAAM,QAAQ,EAAE,QAStB,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,QAAQ,EAAE,MAAM,CAAC,CAS/D,CAAC;AAOF,+GAA+G;AAC/G,wBAAgB,OAAO,CACrB,OAAO,EAAE,eAAe,GAAG,SAAS,EACpC,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,GACzC,QAAQ,CAeV;AAED,yGAAyG;AACzG,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAI7D"}
@@ -1,54 +0,0 @@
1
- /**
2
- * The bar's knobs. Every one has a default, every one can come from
3
- * JavaScript through `define({ controls })` or the constructor, and every
4
- * one has an attribute in kebab-case that wins over both, so a page that
5
- * writes only markup still gets to set them.
6
- */
7
- /** The buttons row by default. `drm`, the lock, is a control the row can carry and does not by default. */
8
- export const LAYOUT = 'skip-back play skip-forward volume | speed subtitles audio quality pip fullscreen';
9
- export const DEFAULTS = {
10
- idleMs: 3000,
11
- seekStep: 5,
12
- seekPage: 30,
13
- skipBack: 10,
14
- skipForward: 10,
15
- start: 1,
16
- liveWindow: 3,
17
- layout: LAYOUT,
18
- };
19
- /** Each option's attribute. */
20
- export const ATTRIBUTES = {
21
- idleMs: 'idle-ms',
22
- seekStep: 'seek-step',
23
- seekPage: 'seek-page',
24
- skipBack: 'skip-back',
25
- skipForward: 'skip-forward',
26
- start: 'start',
27
- liveWindow: 'live-window',
28
- layout: 'layout',
29
- };
30
- const NUMERIC = Object.keys(DEFAULTS).filter((key) => key !== 'layout');
31
- /** The attribute where it is a non-negative number, else the option, else the default; the layout as given. */
32
- export function resolve(options, attribute) {
33
- const out = {};
34
- for (const key of NUMERIC) {
35
- const raw = attribute(ATTRIBUTES[key]);
36
- const set = raw === null ? Number.NaN : Number(raw);
37
- const given = options?.[key];
38
- out[key] =
39
- Number.isFinite(set) && set >= 0
40
- ? set
41
- : given !== undefined && Number.isFinite(given) && given >= 0
42
- ? given
43
- : DEFAULTS[key];
44
- }
45
- out.layout = attribute(ATTRIBUTES.layout) ?? options?.layout ?? DEFAULTS.layout;
46
- return out;
47
- }
48
- /** A layout as two lists of names, left and right of the `|`. Unknown names are the caller's to drop. */
49
- export function clusters(layout) {
50
- const [left = '', right = ''] = layout.split('|');
51
- const names = (part) => part.split(/\s+/).filter((name) => name !== '');
52
- return [names(left), names(right)];
53
- }
54
- //# sourceMappingURL=options.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"options.js","sourceRoot":"","sources":["../../src/controls/options.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgCH,2GAA2G;AAC3G,MAAM,CAAC,MAAM,MAAM,GACjB,mFAAmF,CAAC;AAEtF,MAAM,CAAC,MAAM,QAAQ,GAAa;IAChC,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,CAAC;IACX,QAAQ,EAAE,EAAE;IACZ,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,EAAE;IACf,KAAK,EAAE,CAAC;IACR,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,MAAM;CACf,CAAC;AAEF,+BAA+B;AAC/B,MAAM,CAAC,MAAM,UAAU,GAA6C;IAClE,MAAM,EAAE,SAAS;IACjB,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,WAAW;IACrB,QAAQ,EAAE,WAAW;IACrB,WAAW,EAAE,cAAc;IAC3B,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,aAAa;IACzB,MAAM,EAAE,QAAQ;CACjB,CAAC;AAGF,MAAM,OAAO,GAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAmC,CAAC,MAAM,CAC7E,CAAC,GAAG,EAAkB,EAAE,CAAC,GAAG,KAAK,QAAQ,CAC1C,CAAC;AAEF,+GAA+G;AAC/G,MAAM,UAAU,OAAO,CACrB,OAAoC,EACpC,SAA0C;IAE1C,MAAM,GAAG,GAAoC,EAAE,CAAC;IAChD,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,GAAG,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;QACvC,MAAM,GAAG,GAAG,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;QAC7B,GAAG,CAAC,GAAG,CAAC;YACN,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC;gBAC9B,CAAC,CAAC,GAAG;gBACL,CAAC,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;oBAC3D,CAAC,CAAC,KAAK;oBACP,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACxB,CAAC;IACD,GAAG,CAAC,MAAM,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC,MAAM,CAAC;IAChF,OAAO,GAA0B,CAAC;AACpC,CAAC;AAED,yGAAyG;AACzG,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,KAAK,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,CAAC,IAAY,EAAY,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IAC1F,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,CAAC"}
@@ -1,22 +0,0 @@
1
- /**
2
- * What sits over the picture, apart from the bar: the start button and the
3
- * error screen. Both live in the stage, so they are inside fullscreen and
4
- * over the poster, and both are the bar's, mounted and dropped with it.
5
- *
6
- * The start button is the large play in the middle of the picture: shown
7
- * while the video is paused, a replay once it has ended, gone while it
8
- * plays. The error screen replaces the row under the video: the category
9
- * and the code, and a retry.
10
- */
11
- import type { PlayerError } from '@mattebox/player-core';
12
- import type { Control, Flag } from './control.js';
13
- /** `shown` false keeps it out entirely, which is what the `start` knob at zero asks. */
14
- export declare function startButton(video: HTMLVideoElement, flag: Flag, shown?: boolean): Control;
15
- export interface ErrorScreen extends Control {
16
- show(error: PlayerError): void;
17
- clear(): void;
18
- /** Whether an error is on screen, so the start button stays out of its way. */
19
- shown(): boolean;
20
- }
21
- export declare function errorScreen(retry: () => void): ErrorScreen;
22
- //# sourceMappingURL=screens.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"screens.d.ts","sourceRoot":"","sources":["../../src/controls/screens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAIlD,wFAAwF;AACxF,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,UAAO,GAAG,OAAO,CAgCtF;AAED,MAAM,WAAW,WAAY,SAAQ,OAAO;IAC1C,IAAI,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI,CAAC;IAC/B,KAAK,IAAI,IAAI,CAAC;IACd,+EAA+E;IAC/E,KAAK,IAAI,OAAO,CAAC;CAClB;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,IAAI,GAAG,WAAW,CAkC1D"}
@@ -1,69 +0,0 @@
1
- import { el } from '../dom.js';
2
- import { glyph, icon } from './icons.js';
3
- /** `shown` false keeps it out entirely, which is what the `start` knob at zero asks. */
4
- export function startButton(video, flag, shown = true) {
5
- const root = el('button', 'control start-button');
6
- root.type = 'button';
7
- const svg = icon('play');
8
- root.append(svg);
9
- function render() {
10
- const paused = video.paused;
11
- const name = video.ended ? 'replay' : 'play';
12
- glyph(svg, name);
13
- root.setAttribute('aria-label', video.ended ? 'Replay' : 'Play');
14
- root.hidden = !shown || !paused;
15
- flag('paused', paused);
16
- }
17
- function click() {
18
- video.play().catch(() => undefined);
19
- }
20
- const names = ['play', 'pause', 'ended', 'emptied'];
21
- root.addEventListener('click', click);
22
- for (const name of names)
23
- video.addEventListener(name, render);
24
- render();
25
- return {
26
- root,
27
- dispose() {
28
- root.removeEventListener('click', click);
29
- for (const name of names)
30
- video.removeEventListener(name, render);
31
- root.remove();
32
- },
33
- };
34
- }
35
- export function errorScreen(retry) {
36
- const root = el('div', 'error-screen');
37
- root.setAttribute('role', 'alert');
38
- const box = el('div', 'error-box');
39
- const title = el('div', 'error-title', 'Playback failed');
40
- const category = el('span', 'value error-category');
41
- const code = el('span', 'value error-code');
42
- const detail = el('div', 'error-detail');
43
- detail.append(category, el('span', 'error-separator', ' · '), code);
44
- const button = el('button', 'control error-retry', 'Retry');
45
- button.type = 'button';
46
- button.addEventListener('click', retry);
47
- box.append(title, detail, button);
48
- root.append(box);
49
- root.hidden = true;
50
- return {
51
- root,
52
- show(error) {
53
- category.textContent = error.category;
54
- code.textContent = error.code;
55
- root.hidden = false;
56
- },
57
- clear() {
58
- root.hidden = true;
59
- },
60
- shown() {
61
- return !root.hidden;
62
- },
63
- dispose() {
64
- button.removeEventListener('click', retry);
65
- root.remove();
66
- },
67
- };
68
- }
69
- //# sourceMappingURL=screens.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"screens.js","sourceRoot":"","sources":["../../src/controls/screens.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AAG/B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEzC,wFAAwF;AACxF,MAAM,UAAU,WAAW,CAAC,KAAuB,EAAE,IAAU,EAAE,KAAK,GAAG,IAAI;IAC3E,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IAClD,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAEjB,SAAS,MAAM;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC5B,MAAM,IAAI,GAAa,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC;QACvD,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC;QAChC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IACzB,CAAC;IAED,SAAS,KAAK;QACZ,KAAK,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACpD,IAAI,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,KAAK;QAAE,KAAK,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC;IAET,OAAO;QACL,IAAI;QACJ,OAAO;YACL,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACzC,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,KAAK,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AASD,MAAM,UAAU,WAAW,CAAC,KAAiB;IAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACvC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IACnC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,EAAE,aAAa,EAAE,iBAAiB,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,EAAE,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;IACzC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,KAAK,CAAC,EAAE,IAAI,CAAC,CAAC;IACpE,MAAM,MAAM,GAAG,EAAE,CAAC,QAAQ,EAAE,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAC5D,MAAM,CAAC,IAAI,GAAG,QAAQ,CAAC;IACvB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IACxC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACjB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IAEnB,OAAO;QACL,IAAI;QACJ,IAAI,CAAC,KAAkB;YACrB,QAAQ,CAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC;YACtC,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC;YAC9B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACtB,CAAC;QACD,KAAK;YACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACrB,CAAC;QACD,KAAK;YACH,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC;QACtB,CAAC;QACD,OAAO;YACL,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,52 +0,0 @@
1
- /**
2
- * The seek row: the time on the left, the bar, and the duration on the
3
- * right, with the live button appended by the bar. Four layers on the
4
- * track, every one a part: the buffered ranges from `video.buffered`, the
5
- * played span, the hover position, and for live the edge from
6
- * `engine.live`. The span it maps is the availability window for live,
7
- * read from `video.seekable`, and the duration for VOD.
8
- *
9
- * A live stream is seekable only when the window is worth it: at least
10
- * `liveWindow` forward buffer goals long, the goal read from the engine.
11
- * Below that the bar and the time stay hidden and the row is the live
12
- * button alone. VOD is always seekable. The window is the engine's own
13
- * where the session offers it: the browser's seekable range on a live
14
- * MediaSource is the union of that window and whatever is buffered, and
15
- * grows behind a paused playhead until it crosses any threshold.
16
- *
17
- * Reads happen on the events the video already fires; the live window has
18
- * no event of its own and moves with the clock, so `timeupdate` covers it.
19
- * While a pointer holds the thumb, the played layer follows the pointer and
20
- * `currentTime` is written at most once per frame, so the bar never fights
21
- * a slow seek.
22
- *
23
- * The preview above the pointer carries the time and, when the session's
24
- * `engine.thumbnails` answers for that time, the tile: a rectangle of a
25
- * sprite, drawn by background position at the sprite's own size and scaled
26
- * down to `--mbx-preview-width`, so a page sets the size with one token.
27
- *
28
- * On a seekable live stream the time and the preview read the wall clock
29
- * when `engine.pdt` can say it, "14:23:05", which is what a viewer of a
30
- * broadcast wants to know; the distance behind the edge otherwise.
31
- */
32
- import type { ThumbnailsApi } from 'mattebox/stages/thumbnails';
33
- import type { LiveApi, PdtApi } from '../namespaces.js';
34
- import type { Control, Flag } from './control.js';
35
- import type { Controls } from './options.js';
36
- import type { Span } from './ranges.js';
37
- /** What the session feeding the video offers the row, each when it has one. */
38
- export interface SeekSource {
39
- readonly live?: LiveApi | undefined;
40
- readonly thumbnails?: ThumbnailsApi | undefined;
41
- readonly pdt?: PdtApi | undefined;
42
- /** The engine's forward buffer goal in seconds, read when the row decides whether a live window is worth seeking. */
43
- readonly bufferGoal?: (() => number) | undefined;
44
- /** The engine's sliding availability window, in presentation time, or null before it opens. */
45
- readonly window?: (() => Span | null) | undefined;
46
- }
47
- export interface SeekBar extends Control {
48
- attach(source: SeekSource): void;
49
- detach(): void;
50
- }
51
- export declare function seekBar(video: HTMLVideoElement, flag: Flag, options: Controls): SeekBar;
52
- //# sourceMappingURL=seek.d.ts.map