@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,227 +0,0 @@
1
- import { el, state } from "../dom.js";
2
- import { namespaces } from "../namespaces.js";
3
- import { fullscreenButton, muteButton, pipButton, playButton, skipButton } from "./buttons.js";
4
- import { cueLift, cueStyle } from "./cues.js";
5
- import { fullscreen } from "./fullscreen.js";
6
- import { keys } from "./keys.js";
7
- import { liveButton } from "./live.js";
8
- import { MENUS } from "./menus.js";
9
- import { clusters } from "./options.js";
10
- import { pictureInPicture } from "./pip.js";
11
- import { errorScreen, startButton } from "./screens.js";
12
- import { seekBar } from "./seek.js";
13
- import { speedMenu } from "./speed.js";
14
- import { volumeSlider } from "./volume.js";
15
- //#region src/controls/bar.ts
16
- function controlBar(host, stage, video, options, reflect, retry) {
17
- const root = el("div", "controls");
18
- const flags = {};
19
- let timer;
20
- /** Whether the last input was a key, so focus inside is a keyboard user's and holds the bar. */
21
- let keyboard = false;
22
- function render() {
23
- state(root, "controls", flags);
24
- }
25
- function flag(name, on) {
26
- if (flags[name] === on) return;
27
- flags[name] = on;
28
- render();
29
- if (name === "fullscreen") reflect(name, on);
30
- if (name === "idle") cues.lifted(!on);
31
- if (name === "seekable") live.seekable(on);
32
- }
33
- /** What keeps the bar up when the timer fires. Read then, never remembered. */
34
- function held() {
35
- if (video.paused) return true;
36
- if (root.querySelector("[part~=\"open\"]") !== null) return true;
37
- if (!keyboard) return false;
38
- const active = root.getRootNode().activeElement;
39
- return active !== null && root.contains(active);
40
- }
41
- function sleep() {
42
- timer = void 0;
43
- if (held()) {
44
- timer = setTimeout(sleep, options.idleMs);
45
- return;
46
- }
47
- flag("idle", true);
48
- }
49
- /** Shows the bar and arms the timer again. */
50
- function wake() {
51
- clearTimeout(timer);
52
- if (flags.idle === true) flag("idle", false);
53
- timer = setTimeout(sleep, options.idleMs);
54
- }
55
- function pointer() {
56
- keyboard = false;
57
- wake();
58
- }
59
- function key() {
60
- keyboard = true;
61
- wake();
62
- }
63
- cueStyle();
64
- const cues = cueLift(video, root, host);
65
- const live = liveButton(video);
66
- const seek = seekBar(video, flag, options);
67
- seek.root.append(live.root);
68
- const screen = fullscreen(host, stage, video);
69
- const start = startButton(video, flag, options.start !== 0);
70
- const failure = errorScreen(retry);
71
- /** An error over a picture that then plays is wrong by definition: playback resuming clears it. */
72
- function played() {
73
- if (failure.shown()) {
74
- failure.clear();
75
- start.root.hidden = !video.paused;
76
- }
77
- }
78
- video.addEventListener("playing", played);
79
- stage.append(start.root, failure.root);
80
- /** The menus' places in the row, filled per session. */
81
- const slots = /* @__PURE__ */ new Map();
82
- let session = [];
83
- /** A control by the name the layout gives it, or null for a name that is not one. */
84
- function build(name) {
85
- switch (name) {
86
- case "skip-back": return options.skipBack > 0 ? skipButton(video, -options.skipBack) : null;
87
- case "skip-forward": return options.skipForward > 0 ? skipButton(video, options.skipForward) : null;
88
- case "play": return playButton(video, flag);
89
- case "volume": {
90
- const group = el("div", "group volume-group");
91
- const sound = [muteButton(video, flag), volumeSlider(video)];
92
- for (const control of sound) group.append(control.root);
93
- return {
94
- root: group,
95
- dispose() {
96
- for (const control of sound) control.dispose();
97
- }
98
- };
99
- }
100
- case "speed": return speedMenu(video);
101
- case "pip": return pipButton(pictureInPicture(video), flag);
102
- case "fullscreen": return fullscreenButton(screen, flag);
103
- default: {
104
- if (!(name in MENUS)) return null;
105
- const slot = el("div", `slot ${name}-slot`);
106
- slots.set(name, slot);
107
- return {
108
- root: slot,
109
- dispose() {}
110
- };
111
- }
112
- }
113
- }
114
- const row = el("div", "row buttons");
115
- const cluster = el("div", "cluster");
116
- const built = [];
117
- const [leftNames, rightNames] = clusters(options.layout);
118
- for (const name of leftNames) {
119
- const control = build(name);
120
- if (control === null) continue;
121
- built.push(control);
122
- row.append(control.root);
123
- }
124
- for (const name of rightNames) {
125
- const control = build(name);
126
- if (control === null) continue;
127
- built.push(control);
128
- cluster.append(control.root);
129
- }
130
- row.append(cluster);
131
- root.append(seek.root, row);
132
- const controls = [
133
- ...built,
134
- live,
135
- start,
136
- failure,
137
- keys({
138
- host,
139
- stage,
140
- own: [
141
- root,
142
- start.root,
143
- failure.root
144
- ],
145
- video,
146
- step: options.seekStep,
147
- fullscreen: screen
148
- }),
149
- cues
150
- ];
151
- function drop() {
152
- for (const control of session) control.dispose();
153
- session = [];
154
- for (const slot of slots.values()) slot.replaceChildren();
155
- }
156
- stage.addEventListener("pointermove", pointer);
157
- stage.addEventListener("pointerdown", pointer);
158
- host.addEventListener("keydown", key);
159
- video.addEventListener("play", wake);
160
- video.addEventListener("pause", wake);
161
- video.addEventListener("ended", wake);
162
- wake();
163
- cues.lifted(true);
164
- return {
165
- root,
166
- attach(current) {
167
- drop();
168
- const engine = current.engine;
169
- if (engine === null) {
170
- seek.attach({});
171
- live.attach(void 0);
172
- return;
173
- }
174
- const found = namespaces(engine);
175
- seek.attach({
176
- live: found.live,
177
- thumbnails: found.thumbnails,
178
- pdt: found.pdt,
179
- bufferGoal: () => engine.stats.snapshot().scheduling.bufferGoal,
180
- window: () => {
181
- var _engine$stats$snapsho, _engine$stats$snapsho2;
182
- return (_engine$stats$snapsho = (_engine$stats$snapsho2 = engine.stats.snapshot().live) === null || _engine$stats$snapsho2 === void 0 ? void 0 : _engine$stats$snapsho2.span) !== null && _engine$stats$snapsho !== void 0 ? _engine$stats$snapsho : null;
183
- }
184
- });
185
- live.attach(found.live);
186
- for (const [name, slot] of slots) {
187
- const factory = MENUS[name];
188
- if (factory === void 0) continue;
189
- const control = factory({
190
- engine,
191
- host
192
- });
193
- session.push(control);
194
- slot.append(control.root);
195
- }
196
- },
197
- detach() {
198
- drop();
199
- seek.detach();
200
- live.detach();
201
- },
202
- error(error) {
203
- failure.show(error);
204
- start.root.hidden = true;
205
- },
206
- clearError() {
207
- failure.clear();
208
- start.root.hidden = options.start === 0 || !video.paused;
209
- },
210
- dispose() {
211
- clearTimeout(timer);
212
- drop();
213
- seek.dispose();
214
- for (const control of controls) control.dispose();
215
- stage.removeEventListener("pointermove", pointer);
216
- stage.removeEventListener("pointerdown", pointer);
217
- host.removeEventListener("keydown", key);
218
- video.removeEventListener("play", wake);
219
- video.removeEventListener("pause", wake);
220
- video.removeEventListener("ended", wake);
221
- video.removeEventListener("playing", played);
222
- root.remove();
223
- }
224
- };
225
- }
226
- //#endregion
227
- export { controlBar };
@@ -1,146 +0,0 @@
1
- import { el } from "../dom.js";
2
- import { glyph, icon } from "./icons.js";
3
- //#region src/controls/buttons.ts
4
- /**
5
- * The buttons: play/pause, mute, fullscreen. Each reads the video on the
6
- * events the video already fires, swaps its glyph and its name, and writes
7
- * one thing back on click. The glyph is decoration; the name is on the
8
- * button, where a screen reader reads it.
9
- */
10
- /** A button with its glyph. `control` is the generic name, so `::part(control)` reaches every one. */
11
- function button(name, first) {
12
- const node = el("button", `control ${name}-button`);
13
- node.type = "button";
14
- const svg = icon(first);
15
- node.append(svg);
16
- return [node, svg];
17
- }
18
- function listen(target, names, fn) {
19
- for (const name of names) target.addEventListener(name, fn);
20
- return () => {
21
- for (const name of names) target.removeEventListener(name, fn);
22
- };
23
- }
24
- function playButton(video, flag) {
25
- const [root, svg] = button("play", "play");
26
- function render() {
27
- const paused = video.paused;
28
- const name = video.ended ? "replay" : paused ? "play" : "pause";
29
- glyph(svg, name);
30
- root.setAttribute("aria-label", video.ended ? "Replay" : paused ? "Play" : "Pause");
31
- flag("playing", !paused);
32
- }
33
- function click() {
34
- if (video.paused) video.play().catch(() => void 0);
35
- else video.pause();
36
- }
37
- root.addEventListener("click", click);
38
- const off = listen(video, [
39
- "play",
40
- "pause",
41
- "ended",
42
- "emptied"
43
- ], render);
44
- render();
45
- return {
46
- root,
47
- dispose() {
48
- root.removeEventListener("click", click);
49
- off();
50
- }
51
- };
52
- }
53
- function muteButton(video, flag) {
54
- const [root, svg] = button("mute", "volume-high");
55
- function render() {
56
- const silent = video.muted || video.volume === 0;
57
- const name = silent ? "mute" : video.volume <= .5 ? "volume-low" : "volume-high";
58
- glyph(svg, name);
59
- root.setAttribute("aria-label", silent ? "Unmute" : "Mute");
60
- root.setAttribute("aria-pressed", String(video.muted));
61
- flag("muted", silent);
62
- }
63
- function click() {
64
- if (video.muted) {
65
- video.muted = false;
66
- if (video.volume === 0) video.volume = 1;
67
- } else video.muted = true;
68
- }
69
- root.addEventListener("click", click);
70
- const off = listen(video, ["volumechange", "emptied"], render);
71
- render();
72
- return {
73
- root,
74
- dispose() {
75
- root.removeEventListener("click", click);
76
- off();
77
- }
78
- };
79
- }
80
- /** The glyph for a skip amount: the set draws 10 and 30, and a plain arrow says the rest. */
81
- function skipGlyph(back, amount) {
82
- const side = back ? "seek-backward" : "seek-forward";
83
- if (amount === 10 || amount === 30) return `${side}-${amount}`;
84
- return side;
85
- }
86
- /** Moves the playhead by `seconds`, negative for back, within what the video can reach. */
87
- function skipButton(video, seconds) {
88
- const back = seconds < 0;
89
- const amount = Math.abs(seconds);
90
- const [root] = button(back ? "skip-back" : "skip-forward", skipGlyph(back, amount));
91
- root.setAttribute("aria-label", `${back ? "Back" : "Forward"} ${amount} seconds`);
92
- function click() {
93
- const ranges = video.seekable;
94
- const end = Number.isFinite(video.duration) ? video.duration : ranges.length > 0 ? ranges.end(ranges.length - 1) : video.currentTime;
95
- video.currentTime = Math.min(end, Math.max(0, video.currentTime + seconds));
96
- }
97
- root.addEventListener("click", click);
98
- return {
99
- root,
100
- dispose() {
101
- root.removeEventListener("click", click);
102
- }
103
- };
104
- }
105
- function pipButton(api, flag) {
106
- const [root, svg] = button("pip", "picture-in-picture");
107
- root.hidden = !api.supported;
108
- function render() {
109
- const active = api.active();
110
- glyph(svg, active ? "picture-in-picture-exit" : "picture-in-picture");
111
- root.setAttribute("aria-label", active ? "Leave picture in picture" : "Picture in picture");
112
- flag("pip", active);
113
- }
114
- root.addEventListener("click", api.toggle);
115
- const off = api.watch(render);
116
- render();
117
- return {
118
- root,
119
- dispose() {
120
- root.removeEventListener("click", api.toggle);
121
- off();
122
- }
123
- };
124
- }
125
- function fullscreenButton(api, flag) {
126
- const [root, svg] = button("fullscreen", "fullscreen");
127
- root.hidden = !api.supported;
128
- function render() {
129
- const active = api.active();
130
- glyph(svg, active ? "fullscreen-exit" : "fullscreen");
131
- root.setAttribute("aria-label", active ? "Exit fullscreen" : "Enter fullscreen");
132
- flag("fullscreen", active);
133
- }
134
- root.addEventListener("click", api.toggle);
135
- const off = api.watch(render);
136
- render();
137
- return {
138
- root,
139
- dispose() {
140
- root.removeEventListener("click", api.toggle);
141
- off();
142
- }
143
- };
144
- }
145
- //#endregion
146
- export { button, fullscreenButton, muteButton, pipButton, playButton, skipButton };
@@ -1,60 +0,0 @@
1
- //#region src/controls/keys.ts
2
- function toggle(video) {
3
- if (video.paused) video.play().catch(() => void 0);
4
- else video.pause();
5
- }
6
- /** The end the playhead can reach: the duration, or the seekable end for live. */
7
- function end(video) {
8
- if (Number.isFinite(video.duration)) return video.duration;
9
- const ranges = video.seekable;
10
- return ranges.length > 0 ? ranges.end(ranges.length - 1) : video.currentTime;
11
- }
12
- function keys(options) {
13
- const { host, stage, own, video } = options;
14
- function onKey(event) {
15
- if (event.defaultPrevented || event.altKey || event.ctrlKey || event.metaKey) return;
16
- const onButton = event.composedPath()[0] instanceof HTMLButtonElement;
17
- switch (event.key) {
18
- case " ":
19
- if (onButton) return;
20
- toggle(video);
21
- break;
22
- case "k":
23
- case "K":
24
- toggle(video);
25
- break;
26
- case "m":
27
- case "M":
28
- video.muted = !video.muted;
29
- break;
30
- case "f":
31
- case "F":
32
- options.fullscreen.toggle();
33
- break;
34
- case "ArrowLeft":
35
- video.currentTime = Math.max(0, video.currentTime - options.step);
36
- break;
37
- case "ArrowRight":
38
- video.currentTime = Math.min(end(video), video.currentTime + options.step);
39
- break;
40
- default: return;
41
- }
42
- event.preventDefault();
43
- }
44
- function onClick(event) {
45
- const path = event.composedPath();
46
- if (own.some((node) => path.includes(node))) return;
47
- toggle(video);
48
- }
49
- host.addEventListener("keydown", onKey);
50
- stage.addEventListener("click", onClick);
51
- return {
52
- root: stage,
53
- dispose() {
54
- host.removeEventListener("keydown", onKey);
55
- stage.removeEventListener("click", onClick);
56
- }
57
- };
58
- }
59
- //#endregion
60
- export { keys };
@@ -1,60 +0,0 @@
1
- import { el, state } from "../dom.js";
2
- //#region src/controls/live.ts
3
- /**
4
- * The live button: a dot and the word, the dot red at the edge and grey
5
- * behind it, the way viewers read it everywhere. Shown once the stream has
6
- * an availability window, which is what makes it live; disabled at the
7
- * edge, where there is nowhere to go; a click seeks to the edge. The same
8
- * test the live panel uses.
9
- *
10
- * Without a seek bar, when the window is too narrow to be worth one, there
11
- * is nowhere to come back from either: the dot stays red and the button
12
- * stays inert, whatever the playhead does.
13
- */
14
- function liveButton(video) {
15
- const root = el("button", "control live-button");
16
- root.type = "button";
17
- const dot = el("span", "live-dot");
18
- root.append(dot, el("span", "live-text", "LIVE"));
19
- root.setAttribute("aria-label", "Go to the live edge");
20
- root.hidden = true;
21
- let live;
22
- let bar = true;
23
- function tick() {
24
- const on = live !== void 0 && live.edge !== null;
25
- root.hidden = !on;
26
- if (!on) return;
27
- const atEdge = !bar || (live === null || live === void 0 ? void 0 : 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 === null || live === void 0 || 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 = void 0;
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
- //#endregion
60
- export { liveButton };