@mattebox/player 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (410) hide show
  1. package/README.md +4 -3
  2. package/dist/cdn/mattebox-player.min.js +200 -196
  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 +46 -0
  60. package/dist/elements/control-bar.d.ts.map +1 -0
  61. package/dist/elements/control-bar.js +207 -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/seek-bar.d.ts +83 -0
  112. package/dist/elements/seek-bar.d.ts.map +1 -0
  113. package/dist/elements/seek-bar.js +352 -0
  114. package/dist/elements/seek-bar.js.map +1 -0
  115. package/dist/elements/shared.d.ts +27 -0
  116. package/dist/elements/shared.d.ts.map +1 -0
  117. package/dist/elements/shared.js +155 -0
  118. package/dist/elements/shared.js.map +1 -0
  119. package/dist/elements/skip-button.d.ts +14 -0
  120. package/dist/elements/skip-button.d.ts.map +1 -0
  121. package/dist/elements/skip-button.js +60 -0
  122. package/dist/elements/skip-button.js.map +1 -0
  123. package/dist/elements/spacer.d.ts +4 -0
  124. package/dist/elements/spacer.d.ts.map +1 -0
  125. package/dist/elements/spacer.js +9 -0
  126. package/dist/elements/spacer.js.map +1 -0
  127. package/dist/elements/speed-menu.d.ts +18 -0
  128. package/dist/elements/speed-menu.d.ts.map +1 -0
  129. package/dist/elements/speed-menu.js +56 -0
  130. package/dist/elements/speed-menu.js.map +1 -0
  131. package/dist/elements/start-button.d.ts +13 -0
  132. package/dist/elements/start-button.d.ts.map +1 -0
  133. package/dist/elements/start-button.js +83 -0
  134. package/dist/elements/start-button.js.map +1 -0
  135. package/dist/elements/subtitles-menu.d.ts +17 -0
  136. package/dist/elements/subtitles-menu.d.ts.map +1 -0
  137. package/dist/elements/subtitles-menu.js +108 -0
  138. package/dist/elements/subtitles-menu.js.map +1 -0
  139. package/dist/elements/time-element.d.ts +14 -0
  140. package/dist/elements/time-element.d.ts.map +1 -0
  141. package/dist/elements/time-element.js +29 -0
  142. package/dist/elements/time-element.js.map +1 -0
  143. package/dist/elements/volume-slider.d.ts +10 -0
  144. package/dist/elements/volume-slider.d.ts.map +1 -0
  145. package/dist/elements/volume-slider.js +46 -0
  146. package/dist/elements/volume-slider.js.map +1 -0
  147. package/dist/elements/volume.d.ts +9 -0
  148. package/dist/elements/volume.d.ts.map +1 -0
  149. package/dist/elements/volume.js +50 -0
  150. package/dist/elements/volume.js.map +1 -0
  151. package/dist/entries/audio-menu.d.ts +5 -0
  152. package/dist/entries/audio-menu.d.ts.map +1 -0
  153. package/dist/entries/audio-menu.js +8 -0
  154. package/dist/entries/audio-menu.js.map +1 -0
  155. package/dist/entries/chapters-menu.d.ts +5 -0
  156. package/dist/entries/chapters-menu.d.ts.map +1 -0
  157. package/dist/entries/chapters-menu.js +9 -0
  158. package/dist/entries/chapters-menu.js.map +1 -0
  159. package/dist/entries/control-bar.d.ts +5 -0
  160. package/dist/entries/control-bar.d.ts.map +1 -0
  161. package/dist/entries/control-bar.js +8 -0
  162. package/dist/entries/control-bar.js.map +1 -0
  163. package/dist/entries/current-time.d.ts +5 -0
  164. package/dist/entries/current-time.d.ts.map +1 -0
  165. package/dist/entries/current-time.js +8 -0
  166. package/dist/entries/current-time.js.map +1 -0
  167. package/dist/entries/drm-badge.d.ts +5 -0
  168. package/dist/entries/drm-badge.d.ts.map +1 -0
  169. package/dist/entries/drm-badge.js +8 -0
  170. package/dist/entries/drm-badge.js.map +1 -0
  171. package/dist/entries/duration.d.ts +5 -0
  172. package/dist/entries/duration.d.ts.map +1 -0
  173. package/dist/entries/duration.js +8 -0
  174. package/dist/entries/duration.js.map +1 -0
  175. package/dist/entries/error-screen.d.ts +5 -0
  176. package/dist/entries/error-screen.d.ts.map +1 -0
  177. package/dist/entries/error-screen.js +8 -0
  178. package/dist/entries/error-screen.js.map +1 -0
  179. package/dist/entries/fullscreen-button.d.ts +5 -0
  180. package/dist/entries/fullscreen-button.d.ts.map +1 -0
  181. package/dist/entries/fullscreen-button.js +8 -0
  182. package/dist/entries/fullscreen-button.js.map +1 -0
  183. package/dist/entries/live-button.d.ts +5 -0
  184. package/dist/entries/live-button.d.ts.map +1 -0
  185. package/dist/entries/live-button.js +8 -0
  186. package/dist/entries/live-button.js.map +1 -0
  187. package/dist/entries/mute-button.d.ts +5 -0
  188. package/dist/entries/mute-button.d.ts.map +1 -0
  189. package/dist/entries/mute-button.js +8 -0
  190. package/dist/entries/mute-button.js.map +1 -0
  191. package/dist/entries/panels.d.ts +5 -0
  192. package/dist/entries/panels.d.ts.map +1 -0
  193. package/dist/entries/panels.js +8 -0
  194. package/dist/entries/panels.js.map +1 -0
  195. package/dist/entries/pip-button.d.ts +5 -0
  196. package/dist/entries/pip-button.d.ts.map +1 -0
  197. package/dist/entries/pip-button.js +8 -0
  198. package/dist/entries/pip-button.js.map +1 -0
  199. package/dist/entries/play-button.d.ts +5 -0
  200. package/dist/entries/play-button.d.ts.map +1 -0
  201. package/dist/entries/play-button.js +8 -0
  202. package/dist/entries/play-button.js.map +1 -0
  203. package/dist/entries/quality-menu.d.ts +5 -0
  204. package/dist/entries/quality-menu.d.ts.map +1 -0
  205. package/dist/entries/quality-menu.js +8 -0
  206. package/dist/entries/quality-menu.js.map +1 -0
  207. package/dist/entries/seek-bar.d.ts +5 -0
  208. package/dist/entries/seek-bar.d.ts.map +1 -0
  209. package/dist/entries/seek-bar.js +8 -0
  210. package/dist/entries/seek-bar.js.map +1 -0
  211. package/dist/entries/skip-button.d.ts +5 -0
  212. package/dist/entries/skip-button.d.ts.map +1 -0
  213. package/dist/entries/skip-button.js +8 -0
  214. package/dist/entries/skip-button.js.map +1 -0
  215. package/dist/entries/spacer.d.ts +5 -0
  216. package/dist/entries/spacer.d.ts.map +1 -0
  217. package/dist/entries/spacer.js +8 -0
  218. package/dist/entries/spacer.js.map +1 -0
  219. package/dist/entries/speed-menu.d.ts +5 -0
  220. package/dist/entries/speed-menu.d.ts.map +1 -0
  221. package/dist/entries/speed-menu.js +8 -0
  222. package/dist/entries/speed-menu.js.map +1 -0
  223. package/dist/entries/start-button.d.ts +5 -0
  224. package/dist/entries/start-button.d.ts.map +1 -0
  225. package/dist/entries/start-button.js +8 -0
  226. package/dist/entries/start-button.js.map +1 -0
  227. package/dist/entries/subtitles-menu.d.ts +5 -0
  228. package/dist/entries/subtitles-menu.d.ts.map +1 -0
  229. package/dist/entries/subtitles-menu.js +8 -0
  230. package/dist/entries/subtitles-menu.js.map +1 -0
  231. package/dist/entries/volume-slider.d.ts +5 -0
  232. package/dist/entries/volume-slider.d.ts.map +1 -0
  233. package/dist/entries/volume-slider.js +8 -0
  234. package/dist/entries/volume-slider.js.map +1 -0
  235. package/dist/entries/volume.d.ts +7 -0
  236. package/dist/entries/volume.d.ts.map +1 -0
  237. package/dist/entries/volume.js +10 -0
  238. package/dist/entries/volume.js.map +1 -0
  239. package/dist/es2015/compose.js +33 -0
  240. package/dist/es2015/controls/chapters.js +61 -0
  241. package/dist/es2015/controls/cues.js +39 -11
  242. package/dist/es2015/controls/fullscreen.js +25 -23
  243. package/dist/es2015/controls/icons.js +5 -9
  244. package/dist/es2015/controls/menu.js +39 -35
  245. package/dist/es2015/controls/session.js +40 -0
  246. package/dist/es2015/controls/slider.js +18 -13
  247. package/dist/es2015/controls/time.js +1 -5
  248. package/dist/es2015/dom.js +5 -25
  249. package/dist/es2015/element-entry.js +10 -0
  250. package/dist/es2015/element.js +118 -65
  251. package/dist/es2015/elements/audio-menu.js +68 -0
  252. package/dist/es2015/elements/chapters-menu.js +68 -0
  253. package/dist/es2015/elements/component.js +84 -0
  254. package/dist/es2015/elements/control-bar.js +178 -0
  255. package/dist/es2015/elements/current-time.js +27 -0
  256. package/dist/es2015/elements/drm-badge.js +138 -0
  257. package/dist/es2015/elements/duration.js +23 -0
  258. package/dist/es2015/elements/error-screen.js +97 -0
  259. package/dist/es2015/elements/fullscreen-button.js +49 -0
  260. package/dist/es2015/elements/live-button.js +97 -0
  261. package/dist/es2015/elements/menu-element.js +39 -0
  262. package/dist/es2015/elements/mute-button.js +60 -0
  263. package/dist/es2015/elements/panels.js +52 -0
  264. package/dist/es2015/elements/pip-button.js +56 -0
  265. package/dist/es2015/elements/play-button.js +68 -0
  266. package/dist/es2015/elements/quality-menu.js +68 -0
  267. package/dist/es2015/elements/seek-bar.js +314 -0
  268. package/dist/es2015/elements/shared.js +155 -0
  269. package/dist/es2015/elements/skip-button.js +59 -0
  270. package/dist/es2015/elements/spacer.js +11 -0
  271. package/dist/es2015/elements/speed-menu.js +60 -0
  272. package/dist/es2015/elements/start-button.js +87 -0
  273. package/dist/es2015/elements/subtitles-menu.js +103 -0
  274. package/dist/es2015/elements/time-element.js +38 -0
  275. package/dist/es2015/elements/volume-slider.js +47 -0
  276. package/dist/es2015/elements/volume.js +50 -0
  277. package/dist/es2015/entries/audio-menu.js +7 -0
  278. package/dist/es2015/entries/chapters-menu.js +7 -0
  279. package/dist/es2015/entries/control-bar.js +7 -0
  280. package/dist/es2015/entries/current-time.js +7 -0
  281. package/dist/es2015/entries/drm-badge.js +7 -0
  282. package/dist/es2015/entries/duration.js +7 -0
  283. package/dist/es2015/entries/error-screen.js +7 -0
  284. package/dist/es2015/entries/fullscreen-button.js +7 -0
  285. package/dist/es2015/entries/live-button.js +7 -0
  286. package/dist/es2015/entries/mute-button.js +7 -0
  287. package/dist/es2015/entries/panels.js +7 -0
  288. package/dist/es2015/entries/pip-button.js +7 -0
  289. package/dist/es2015/entries/play-button.js +7 -0
  290. package/dist/es2015/entries/quality-menu.js +7 -0
  291. package/dist/es2015/entries/seek-bar.js +7 -0
  292. package/dist/es2015/entries/skip-button.js +7 -0
  293. package/dist/es2015/entries/spacer.js +7 -0
  294. package/dist/es2015/entries/speed-menu.js +7 -0
  295. package/dist/es2015/entries/start-button.js +7 -0
  296. package/dist/es2015/entries/subtitles-menu.js +7 -0
  297. package/dist/es2015/entries/volume-slider.js +7 -0
  298. package/dist/es2015/entries/volume.js +9 -0
  299. package/dist/es2015/host.js +23 -0
  300. package/dist/es2015/index.js +46 -9
  301. package/dist/es2015/labels.js +14 -0
  302. package/dist/es2015/style.js +21 -294
  303. package/dist/es2015/{panels/error.js → surface.js} +3 -3
  304. package/dist/es2015/tags.js +27 -0
  305. package/dist/host.d.ts +26 -0
  306. package/dist/host.d.ts.map +1 -0
  307. package/dist/host.js +23 -0
  308. package/dist/host.js.map +1 -0
  309. package/dist/index.d.ts +81 -3
  310. package/dist/index.d.ts.map +1 -1
  311. package/dist/index.js +23 -8
  312. package/dist/index.js.map +1 -1
  313. package/dist/labels.d.ts +7 -0
  314. package/dist/labels.d.ts.map +1 -0
  315. package/dist/labels.js +12 -0
  316. package/dist/labels.js.map +1 -0
  317. package/dist/style.d.ts +4 -2
  318. package/dist/style.d.ts.map +1 -1
  319. package/dist/style.js +21 -294
  320. package/dist/style.js.map +1 -1
  321. package/dist/surface.d.ts +15 -0
  322. package/dist/surface.d.ts.map +1 -0
  323. package/dist/{panels/error.js → surface.js} +3 -3
  324. package/dist/surface.js.map +1 -0
  325. package/dist/tags.d.ts +25 -0
  326. package/dist/tags.d.ts.map +1 -0
  327. package/dist/tags.js +25 -0
  328. package/dist/tags.js.map +1 -0
  329. package/package.json +22 -2
  330. package/dist/controls/bar.d.ts +0 -56
  331. package/dist/controls/bar.d.ts.map +0 -1
  332. package/dist/controls/bar.js +0 -245
  333. package/dist/controls/bar.js.map +0 -1
  334. package/dist/controls/buttons.d.ts +0 -13
  335. package/dist/controls/buttons.d.ts.map +0 -1
  336. package/dist/controls/buttons.js +0 -157
  337. package/dist/controls/buttons.js.map +0 -1
  338. package/dist/controls/control.d.ts +0 -12
  339. package/dist/controls/control.d.ts.map +0 -1
  340. package/dist/controls/control.js +0 -2
  341. package/dist/controls/control.js.map +0 -1
  342. package/dist/controls/keys.d.ts +0 -26
  343. package/dist/controls/keys.d.ts.map +0 -1
  344. package/dist/controls/keys.js +0 -66
  345. package/dist/controls/keys.js.map +0 -1
  346. package/dist/controls/live.d.ts +0 -10
  347. package/dist/controls/live.d.ts.map +0 -1
  348. package/dist/controls/live.js +0 -59
  349. package/dist/controls/live.js.map +0 -1
  350. package/dist/controls/menus.d.ts +0 -43
  351. package/dist/controls/menus.d.ts.map +0 -1
  352. package/dist/controls/menus.js +0 -262
  353. package/dist/controls/menus.js.map +0 -1
  354. package/dist/controls/options.d.ts +0 -44
  355. package/dist/controls/options.d.ts.map +0 -1
  356. package/dist/controls/options.js +0 -54
  357. package/dist/controls/options.js.map +0 -1
  358. package/dist/controls/screens.d.ts +0 -22
  359. package/dist/controls/screens.d.ts.map +0 -1
  360. package/dist/controls/screens.js +0 -69
  361. package/dist/controls/screens.js.map +0 -1
  362. package/dist/controls/seek.d.ts +0 -52
  363. package/dist/controls/seek.d.ts.map +0 -1
  364. package/dist/controls/seek.js +0 -215
  365. package/dist/controls/seek.js.map +0 -1
  366. package/dist/controls/speed.d.ts +0 -8
  367. package/dist/controls/speed.d.ts.map +0 -1
  368. package/dist/controls/speed.js +0 -34
  369. package/dist/controls/speed.js.map +0 -1
  370. package/dist/controls/volume.d.ts +0 -8
  371. package/dist/controls/volume.d.ts.map +0 -1
  372. package/dist/controls/volume.js +0 -29
  373. package/dist/controls/volume.js.map +0 -1
  374. package/dist/es2015/controls/bar.js +0 -227
  375. package/dist/es2015/controls/buttons.js +0 -146
  376. package/dist/es2015/controls/keys.js +0 -60
  377. package/dist/es2015/controls/live.js +0 -60
  378. package/dist/es2015/controls/menus.js +0 -258
  379. package/dist/es2015/controls/options.js +0 -46
  380. package/dist/es2015/controls/screens.js +0 -74
  381. package/dist/es2015/controls/seek.js +0 -203
  382. package/dist/es2015/controls/speed.js +0 -41
  383. package/dist/es2015/controls/volume.js +0 -30
  384. package/dist/es2015/panels/drm.js +0 -29
  385. package/dist/es2015/panels/live.js +0 -48
  386. package/dist/es2015/panels/quality.js +0 -52
  387. package/dist/es2015/panels/tracks.js +0 -47
  388. package/dist/panels/drm.d.ts +0 -8
  389. package/dist/panels/drm.d.ts.map +0 -1
  390. package/dist/panels/drm.js +0 -36
  391. package/dist/panels/drm.js.map +0 -1
  392. package/dist/panels/error.d.ts +0 -13
  393. package/dist/panels/error.d.ts.map +0 -1
  394. package/dist/panels/error.js.map +0 -1
  395. package/dist/panels/live.d.ts +0 -3
  396. package/dist/panels/live.d.ts.map +0 -1
  397. package/dist/panels/live.js +0 -56
  398. package/dist/panels/live.js.map +0 -1
  399. package/dist/panels/panel.d.ts +0 -13
  400. package/dist/panels/panel.d.ts.map +0 -1
  401. package/dist/panels/panel.js +0 -2
  402. package/dist/panels/panel.js.map +0 -1
  403. package/dist/panels/quality.d.ts +0 -3
  404. package/dist/panels/quality.d.ts.map +0 -1
  405. package/dist/panels/quality.js +0 -59
  406. package/dist/panels/quality.js.map +0 -1
  407. package/dist/panels/tracks.d.ts +0 -3
  408. package/dist/panels/tracks.d.ts.map +0 -1
  409. package/dist/panels/tracks.js +0 -49
  410. package/dist/panels/tracks.js.map +0 -1
@@ -1,26 +0,0 @@
1
- /**
2
- * The shortcuts, live only while focus is inside the element: Space and `k`
3
- * toggle play, `m` mutes, `f` toggles fullscreen, the arrows seek by the
4
- * step. They listen on the host, where every key pressed inside the
5
- * element arrives, and they stand aside twice. A key a control has already
6
- * handled arrives with its default prevented, so the seek bar's arrows are
7
- * not seeking twice. And Space on a button is the button's own activation,
8
- * so it is left to the button.
9
- *
10
- * A click on the video toggles play, the way a viewer expects of a player,
11
- * and only there: clicks on the bar, the start button and the error screen
12
- * are theirs.
13
- */
14
- import type { Control } from './control.js';
15
- import type { Fullscreen } from './fullscreen.js';
16
- export interface KeysOptions {
17
- readonly host: HTMLElement;
18
- readonly stage: HTMLElement;
19
- /** What sits over the picture and takes its own clicks. */
20
- readonly own: readonly HTMLElement[];
21
- readonly video: HTMLVideoElement;
22
- readonly step: number;
23
- readonly fullscreen: Fullscreen;
24
- }
25
- export declare function keys(options: KeysOptions): Control;
26
- //# sourceMappingURL=keys.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/controls/keys.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,2DAA2D;IAC3D,QAAQ,CAAC,GAAG,EAAE,SAAS,WAAW,EAAE,CAAC;IACrC,QAAQ,CAAC,KAAK,EAAE,gBAAgB,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;CACjC;AAcD,wBAAgB,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAoDlD"}
@@ -1,66 +0,0 @@
1
- function toggle(video) {
2
- if (video.paused)
3
- video.play().catch(() => undefined);
4
- else
5
- video.pause();
6
- }
7
- /** The end the playhead can reach: the duration, or the seekable end for live. */
8
- function end(video) {
9
- if (Number.isFinite(video.duration))
10
- return video.duration;
11
- const ranges = video.seekable;
12
- return ranges.length > 0 ? ranges.end(ranges.length - 1) : video.currentTime;
13
- }
14
- export function keys(options) {
15
- const { host, stage, own, video } = options;
16
- function onKey(event) {
17
- if (event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey)
18
- return;
19
- const target = event.composedPath()[0];
20
- const onButton = target instanceof HTMLButtonElement;
21
- switch (event.key) {
22
- case ' ':
23
- if (onButton)
24
- return;
25
- toggle(video);
26
- break;
27
- case 'k':
28
- case 'K':
29
- toggle(video);
30
- break;
31
- case 'm':
32
- case 'M':
33
- video.muted = !video.muted;
34
- break;
35
- case 'f':
36
- case 'F':
37
- options.fullscreen.toggle();
38
- break;
39
- case 'ArrowLeft':
40
- video.currentTime = Math.max(0, video.currentTime - options.step);
41
- break;
42
- case 'ArrowRight':
43
- video.currentTime = Math.min(end(video), video.currentTime + options.step);
44
- break;
45
- default:
46
- return;
47
- }
48
- event.preventDefault();
49
- }
50
- function onClick(event) {
51
- const path = event.composedPath();
52
- if (own.some((node) => path.includes(node)))
53
- return;
54
- toggle(video);
55
- }
56
- host.addEventListener('keydown', onKey);
57
- stage.addEventListener('click', onClick);
58
- return {
59
- root: stage,
60
- dispose() {
61
- host.removeEventListener('keydown', onKey);
62
- stage.removeEventListener('click', onClick);
63
- },
64
- };
65
- }
66
- //# sourceMappingURL=keys.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/controls/keys.ts"],"names":[],"mappings":"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"}
@@ -1,10 +0,0 @@
1
- import type { LiveApi } from '../namespaces.js';
2
- import type { Control } from './control.js';
3
- export interface LiveButton extends Control {
4
- attach(live: LiveApi | undefined): void;
5
- detach(): void;
6
- /** Whether the stream has a seek bar. Without one the button only says live. */
7
- seekable(on: boolean): void;
8
- }
9
- export declare function liveButton(video: HTMLVideoElement): LiveButton;
10
- //# sourceMappingURL=live.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"live.d.ts","sourceRoot":"","sources":["../../src/controls/live.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,WAAW,UAAW,SAAQ,OAAO;IACzC,MAAM,CAAC,IAAI,EAAE,OAAO,GAAG,SAAS,GAAG,IAAI,CAAC;IACxC,MAAM,IAAI,IAAI,CAAC;IACf,gFAAgF;IAChF,QAAQ,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,CAAC;CAC7B;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,gBAAgB,GAAG,UAAU,CAgD9D"}
@@ -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"}