@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,23 +1,19 @@
1
+ import { CONTROL_BAR, PANELS, PLAYER } from "./tags.js";
2
+ import { composeBar, composePanels } from "./compose.js";
1
3
  import { namespaces } from "./namespaces.js";
2
- import { ATTRIBUTES, resolve } from "./controls/options.js";
3
- import { controlBar } from "./controls/bar.js";
4
- import { drmPanel } from "./panels/drm.js";
5
- import { errorSurface } from "./panels/error.js";
6
- import { livePanel } from "./panels/live.js";
7
- import { qualityPanel } from "./panels/quality.js";
8
- import { tracksPanel } from "./panels/tracks.js";
9
4
  import _asyncToGenerator from "./_virtual/_@oxc-project_runtime@0.148.0/helpers/esm/asyncToGenerator.js";
10
5
  import { drmGuard, resolvePreset } from "./presets.js";
11
6
  import { STYLE } from "./style.js";
7
+ import { errorSurface } from "./surface.js";
12
8
  import _objectSpread2 from "./_virtual/_@oxc-project_runtime@0.148.0/helpers/esm/objectSpread2.js";
13
9
  import { createPlayer, matteboxHandler, nativeHandler } from "@mattebox/player-core";
14
10
  //#region src/element.ts
15
- const TAG = "mattebox-player";
16
11
  /** Attributes forwarded onto the video as attributes, never as properties. */
17
12
  const FORWARDED = [
18
13
  "autoplay",
19
14
  "muted",
20
- "poster"
15
+ "poster",
16
+ "crossorigin"
21
17
  ];
22
18
  /** Everything else the element watches. Changing any of them reloads. */
23
19
  const OWN = [
@@ -28,20 +24,28 @@ const OWN = [
28
24
  "thumbnails"
29
25
  ];
30
26
  /**
27
+ * The chapters track URL. A `<track kind="chapters">` on the video, hidden
28
+ * so its cues load and nothing is drawn: chapters are the browser's own
29
+ * text track, which the seek bar and the chapters menu read, and which a
30
+ * page can also put there itself. Changing it swaps the track and never
31
+ * reloads the source.
32
+ */
33
+ const CHAPTERS = "chapters";
34
+ /**
31
35
  * The one attribute whose meaning the element owns: `native` keeps the
32
36
  * browser's controls on the video, `custom` swaps them for the bar, `none`
33
37
  * leaves the video bare for a page that draws its own. Anything else is
34
38
  * `native`. Changing it swaps the bar without touching the session.
35
39
  */
36
40
  const CONTROLS = "controls";
37
- /** The bar's knobs as attributes. Changing one rebuilds the bar with the new value. */
38
- const KNOBS = Object.values(ATTRIBUTES);
39
- /** Composed in this order, and each one answers null when its namespace is absent. */
40
- const PANELS = [
41
- qualityPanel,
42
- tracksPanel,
43
- livePanel,
44
- drmPanel
41
+ /** The video's state, as attributes on the element, read on the events the video fires for it. */
42
+ const STATE_EVENTS = [
43
+ "play",
44
+ "pause",
45
+ "ended",
46
+ "emptied",
47
+ "volumechange",
48
+ "loadedmetadata"
45
49
  ];
46
50
  /** Every stage the engine ships. A narrower preset is optimization. */
47
51
  const DEFAULT_PRESET = "full";
@@ -63,39 +67,51 @@ var MatteboxPlayerElement = class MatteboxPlayerElement extends HTMLElement {
63
67
  ...FORWARDED,
64
68
  ...OWN,
65
69
  CONTROLS,
66
- ...KNOBS
70
+ CHAPTERS
67
71
  ];
68
72
  }
69
- /** Registers the element once, and records the stages markup-only pages get. */
73
+ /**
74
+ * Registers the element once, and records the stages markup-only pages
75
+ * get. The controls register through their own entries, the package's
76
+ * root entry importing every one; a control connected before its player
77
+ * is defined waits for the definition.
78
+ */
70
79
  static define(options) {
71
80
  if (options !== void 0) defaults = options;
72
- if (customElements.get(TAG) === void 0) customElements.define(TAG, MatteboxPlayerElement);
81
+ if (customElements.get("mattebox-player") === void 0) customElements.define(PLAYER, MatteboxPlayerElement);
73
82
  }
74
83
  constructor(options) {
75
84
  super();
76
85
  this.options = options !== null && options !== void 0 ? options : defaults;
77
- this.panels = [];
78
- this.controls = null;
86
+ this.composed = [];
87
+ this.settled = false;
79
88
  this.focusable = false;
89
+ this.track = null;
80
90
  this.core = null;
81
91
  this.current = null;
92
+ this.failure = null;
93
+ this.reflecting = false;
82
94
  this.offs = [];
83
95
  this.queue = Promise.resolve();
84
96
  this.pending = false;
85
97
  this.media = document.createElement("video");
86
98
  this.media.controls = true;
99
+ for (const name of STATE_EVENTS) this.media.addEventListener(name, () => {
100
+ this.reflect();
101
+ });
102
+ this.media.addEventListener("playing", () => {
103
+ this.failure = null;
104
+ });
87
105
  this.stage = document.createElement("div");
88
106
  this.stage.setAttribute("part", "stage");
89
107
  this.stage.append(document.createElement("slot"));
90
- this.bar = document.createElement("div");
91
- this.bar.setAttribute("part", "panels");
92
108
  this.surface = errorSurface(() => {
93
109
  this.reload();
94
110
  });
95
111
  const root = this.attachShadow({ mode: "open" });
96
112
  const style = document.createElement("style");
97
113
  style.textContent = STYLE;
98
- root.append(style, this.stage, this.bar, this.surface.root);
114
+ root.append(style, this.stage, this.surface.root);
99
115
  }
100
116
  /** The media element. Everything the browser already does is here. */
101
117
  get video() {
@@ -110,57 +126,104 @@ var MatteboxPlayerElement = class MatteboxPlayerElement extends HTMLElement {
110
126
  var _this$current$engine, _this$current;
111
127
  return (_this$current$engine = (_this$current = this.current) === null || _this$current === void 0 ? void 0 : _this$current.engine) !== null && _this$current$engine !== void 0 ? _this$current$engine : null;
112
128
  }
129
+ /**
130
+ * The fatal error of the current load, or null once a load starts or
131
+ * playback resumes. The `error` event says when; this says what, for a
132
+ * control that attaches after the event, such as the default composition
133
+ * behind a source that fails while the page is still parsing.
134
+ */
135
+ get error() {
136
+ return this.failure;
137
+ }
113
138
  connectedCallback() {
114
139
  if (this.media.parentNode !== this) this.append(this.media);
115
140
  for (const name of FORWARDED) this.forward(name);
141
+ this.reflect();
142
+ if (!this.settled) this.settle();
116
143
  this.reload();
117
144
  }
145
+ /** Decides on the default composition once the children are all in, then on every mode change. */
146
+ settle() {
147
+ const done = () => {
148
+ this.settled = true;
149
+ this.mode();
150
+ };
151
+ if (document.readyState === "loading") document.addEventListener("DOMContentLoaded", done, { once: true });
152
+ else queueMicrotask(done);
153
+ }
154
+ /** The video's state on the element, for `mattebox-player[paused]` and the like. */
155
+ reflect() {
156
+ const video = this.media;
157
+ this.reflecting = true;
158
+ this.toggleAttribute("paused", video.paused);
159
+ this.toggleAttribute("playing", !video.paused);
160
+ this.toggleAttribute("ended", video.ended);
161
+ this.toggleAttribute("muted", video.muted);
162
+ this.reflecting = false;
163
+ }
118
164
  disconnectedCallback() {
119
165
  this.enqueue(() => this.teardown());
120
166
  }
121
167
  attributeChangedCallback(name) {
122
168
  if (FORWARDED.includes(name)) {
123
- this.forward(name);
169
+ if (!this.reflecting) this.forward(name);
124
170
  return;
125
171
  }
126
- if (name === CONTROLS || KNOBS.includes(name)) {
172
+ if (name === CONTROLS) {
127
173
  this.mode();
128
174
  return;
129
175
  }
176
+ if (name === CHAPTERS) {
177
+ this.chapters();
178
+ return;
179
+ }
130
180
  if (name === "preset") this.enqueue(() => this.discard());
131
181
  this.reload();
132
182
  }
133
183
  /**
134
- * Applies the `controls` attribute and the knobs: the video's own
135
- * controls, and the bar rebuilt from scratch. Rebuilding is cheap, the
136
- * knobs are read once at build, and a session re-attaches in one call.
184
+ * Applies the `controls` attribute: the video's own controls, the
185
+ * tabindex, and the default composition for the mode where the page
186
+ * wrote none. The controls themselves are elements and attach on their own.
137
187
  */
138
188
  mode() {
139
189
  const value = this.getAttribute(CONTROLS);
140
190
  const custom = value === "custom";
141
191
  this.media.controls = !custom && value !== "none";
142
- this.bar.hidden = custom;
143
- if (this.controls !== null) {
144
- this.controls.dispose();
145
- this.controls = null;
146
- this.removeAttribute("fullscreen");
192
+ if (custom) this.surface.clear();
193
+ if (!custom) {
147
194
  if (this.focusable) this.removeAttribute("tabindex");
148
195
  this.focusable = false;
149
- }
150
- if (!custom) return;
151
- if (!this.hasAttribute("tabindex")) {
196
+ } else if (!this.hasAttribute("tabindex")) {
152
197
  this.tabIndex = 0;
153
198
  this.focusable = true;
154
199
  }
155
- const knobs = resolve(this.options.controls, (name) => this.getAttribute(name));
156
- this.controls = controlBar(this, this.stage, this.media, knobs, (name, on) => {
157
- this.toggleAttribute(name, on);
158
- }, () => {
159
- this.reload();
160
- });
161
- this.surface.clear();
162
- this.stage.append(this.controls.root);
163
- if (this.current !== null) this.controls.attach(this.current);
200
+ if (!this.settled) return;
201
+ for (const node of this.composed) node.remove();
202
+ this.composed = [];
203
+ const own = custom ? CONTROL_BAR : PANELS;
204
+ if (this.querySelector(`:scope > ${own}`) === null) {
205
+ this.composed = custom ? composeBar() : composePanels();
206
+ this.append(...this.composed);
207
+ }
208
+ }
209
+ /** Keeps a hidden chapters track on the video for the `chapters` attribute, or none. */
210
+ chapters() {
211
+ const url = this.getAttribute(CHAPTERS);
212
+ if (url === null) {
213
+ var _this$track;
214
+ (_this$track = this.track) === null || _this$track === void 0 || _this$track.remove();
215
+ this.track = null;
216
+ return;
217
+ }
218
+ const held = this.track;
219
+ if (held !== null && held.parentNode === this.media && held.getAttribute("src") === url) return;
220
+ held === null || held === void 0 || held.remove();
221
+ const track = document.createElement("track");
222
+ track.kind = "chapters";
223
+ track.src = url;
224
+ this.track = track;
225
+ this.media.append(track);
226
+ track.track.mode = "hidden";
164
227
  }
165
228
  forward(name) {
166
229
  const value = this.getAttribute(name);
@@ -193,15 +256,14 @@ var MatteboxPlayerElement = class MatteboxPlayerElement extends HTMLElement {
193
256
  }
194
257
  report(error) {
195
258
  if (error.fatal) {
196
- if (this.controls !== null) this.controls.error(error);
197
- else this.surface.show(error);
259
+ this.failure = error;
260
+ if (this.getAttribute(CONTROLS) !== "custom") this.surface.show(error);
198
261
  }
199
262
  this.emit("error", error);
200
263
  }
201
264
  run() {
202
265
  var _this = this;
203
266
  return _asyncToGenerator(function* () {
204
- var _this$controls, _this$controls2;
205
267
  _this.unmount();
206
268
  if (!_this.isConnected) return;
207
269
  const url = _this.getAttribute("src");
@@ -212,8 +274,8 @@ var MatteboxPlayerElement = class MatteboxPlayerElement extends HTMLElement {
212
274
  url,
213
275
  type
214
276
  };
277
+ _this.failure = null;
215
278
  _this.surface.clear();
216
- (_this$controls = _this.controls) === null || _this$controls === void 0 || _this$controls.clearError();
217
279
  let session;
218
280
  try {
219
281
  session = yield core.load(source);
@@ -226,13 +288,7 @@ var MatteboxPlayerElement = class MatteboxPlayerElement extends HTMLElement {
226
288
  }
227
289
  _this.current = session;
228
290
  _this.configure(session);
229
- (_this$controls2 = _this.controls) === null || _this$controls2 === void 0 || _this$controls2.attach(session);
230
- for (const factory of PANELS) {
231
- const panel = factory(session, _this.media);
232
- if (panel === null) continue;
233
- _this.panels.push(panel);
234
- _this.bar.append(panel.root);
235
- }
291
+ _this.chapters();
236
292
  })();
237
293
  }
238
294
  ensure() {
@@ -241,6 +297,7 @@ var MatteboxPlayerElement = class MatteboxPlayerElement extends HTMLElement {
241
297
  if (_this2.core !== null) return _this2.core;
242
298
  const core = createPlayer(_this2.media, { handlers: yield _this2.chain() });
243
299
  _this2.offs.push(core.on("sourcechange", (session) => {
300
+ _this2.current = session;
244
301
  _this2.emit("sourcechange", session);
245
302
  }), core.on("error", (error) => {
246
303
  _this2.report(error);
@@ -254,7 +311,8 @@ var MatteboxPlayerElement = class MatteboxPlayerElement extends HTMLElement {
254
311
  return _asyncToGenerator(function* () {
255
312
  var _this$getAttribute;
256
313
  if (_this3.options.handlers !== void 0) return _this3.options.handlers;
257
- if (_this3.options.stages !== void 0) return [matteboxHandler({ stages: _this3.options.stages }), nativeHandler()];
314
+ const config = _this3.options.config === void 0 ? {} : { config: _this3.options.config };
315
+ if (_this3.options.stages !== void 0) return [matteboxHandler(_objectSpread2({ stages: _this3.options.stages }, config)), nativeHandler()];
258
316
  const name = (_this$getAttribute = _this3.getAttribute("preset")) !== null && _this$getAttribute !== void 0 ? _this$getAttribute : DEFAULT_PRESET;
259
317
  const preset = yield resolvePreset(name);
260
318
  if (preset === null) {
@@ -268,7 +326,7 @@ var MatteboxPlayerElement = class MatteboxPlayerElement extends HTMLElement {
268
326
  });
269
327
  return [nativeHandler()];
270
328
  }
271
- return [matteboxHandler(_objectSpread2({ preset }, drmGuard())), nativeHandler()];
329
+ return [matteboxHandler(_objectSpread2(_objectSpread2({ preset }, config), drmGuard())), nativeHandler()];
272
330
  })();
273
331
  }
274
332
  /** What the attributes ask of the session's namespaces, once there is one. */
@@ -282,11 +340,6 @@ var MatteboxPlayerElement = class MatteboxPlayerElement extends HTMLElement {
282
340
  if (track !== null && optional.thumbnails !== void 0) optional.thumbnails.load(track).catch(() => void 0);
283
341
  }
284
342
  unmount() {
285
- var _this$controls3;
286
- (_this$controls3 = this.controls) === null || _this$controls3 === void 0 || _this$controls3.detach();
287
- for (const panel of this.panels) panel.dispose();
288
- this.panels = [];
289
- this.bar.replaceChildren();
290
343
  this.current = null;
291
344
  }
292
345
  teardown() {
@@ -0,0 +1,68 @@
1
+ import { show } from "./shared.js";
2
+ import { MenuElement, single } from "./menu-element.js";
3
+ //#region src/elements/audio-menu.ts
4
+ /** The language, then the role, then the id: whichever the manifest gave. */
5
+ function trackLabel(track) {
6
+ const parts = [track.lang, track.role].filter((part) => part !== void 0);
7
+ return parts.length === 0 ? track.id : parts.join(" · ");
8
+ }
9
+ /** The tracks of one content type as menu items, with the active one's id. */
10
+ function trackItems(engine, contentType) {
11
+ var _tracks$active$id, _tracks$active;
12
+ const tracks = engine.tracks;
13
+ const available = tracks.available.filter((track) => track.contentType === contentType);
14
+ const items = [];
15
+ for (const track of available) items.push([track.id, trackLabel(track)]);
16
+ return [items, (_tracks$active$id = (_tracks$active = tracks.active(contentType)) === null || _tracks$active === void 0 ? void 0 : _tracks$active.id) !== null && _tracks$active$id !== void 0 ? _tracks$active$id : null];
17
+ }
18
+ /** Subscribes `tick` to the track events, and answers the unsubscribe. */
19
+ function onTracks(engine, tick) {
20
+ const offs = [engine.on("tracks:changed", tick), engine.on("tracks:selected", tick)];
21
+ return () => {
22
+ for (const off of offs) off();
23
+ };
24
+ }
25
+ var MbxAudioMenu = class extends MenuElement {
26
+ static get observedAttributes() {
27
+ return ["label", "label-back"];
28
+ }
29
+ constructor() {
30
+ super(...single("music"));
31
+ this.engine = null;
32
+ show(this.slots, "default");
33
+ }
34
+ name() {
35
+ return "Audio";
36
+ }
37
+ attach(player) {
38
+ this.follow(player, (engine) => {
39
+ this.engine = engine;
40
+ this.render();
41
+ if (engine === null) return void 0;
42
+ return onTracks(engine, () => {
43
+ this.render();
44
+ });
45
+ });
46
+ }
47
+ render() {
48
+ super.render();
49
+ const engine = this.engine;
50
+ if (engine === null) {
51
+ this.hidden = true;
52
+ return;
53
+ }
54
+ const [items, active] = trackItems(engine, "audio");
55
+ this.menu.fill([{
56
+ name: "track",
57
+ items,
58
+ value: active !== null && active !== void 0 ? active : "",
59
+ onSelect: (value) => {
60
+ engine.tracks.select(value);
61
+ this.render();
62
+ }
63
+ }]);
64
+ this.hidden = items.length < 2;
65
+ }
66
+ };
67
+ //#endregion
68
+ export { MbxAudioMenu, onTracks, trackItems, trackLabel };
@@ -0,0 +1,68 @@
1
+ import { show } from "./shared.js";
2
+ import { MenuElement, single } from "./menu-element.js";
3
+ import { chapterAt, chapters, followChapters } from "../controls/chapters.js";
4
+ import { format } from "../controls/time.js";
5
+ //#region src/elements/chapters-menu.ts
6
+ /**
7
+ * <mbx-chapters-menu>: the chapters of the video as a list, each with its
8
+ * start time, the one the playhead is in checked; choosing one seeks to its
9
+ * start. The chapters are the video's own chapters text track, from the
10
+ * player's `chapters` attribute or a `<track>` the page put there, so the
11
+ * menu works for every session, native included, and hides while the
12
+ * video has none. The name comes from `label`.
13
+ */
14
+ var MbxChaptersMenu = class extends MenuElement {
15
+ static get observedAttributes() {
16
+ return ["label", "label-back"];
17
+ }
18
+ constructor() {
19
+ super(...single("chapters"));
20
+ this.drawn = "";
21
+ show(this.slots, "default");
22
+ }
23
+ name() {
24
+ return "Chapters";
25
+ }
26
+ attach(player) {
27
+ const tick = () => {
28
+ this.render();
29
+ };
30
+ this.keep(followChapters(player.video, tick));
31
+ this.listen(player.video, [
32
+ "timeupdate",
33
+ "seeked",
34
+ "emptied",
35
+ "loadedmetadata"
36
+ ], tick);
37
+ this.listen(player, ["sourcechange"], tick);
38
+ this.render();
39
+ }
40
+ render() {
41
+ var _this$player;
42
+ super.render();
43
+ const video = (_this$player = this.player) === null || _this$player === void 0 ? void 0 : _this$player.video;
44
+ if (video === void 0) return;
45
+ const list = chapters(video);
46
+ this.hidden = list.length === 0;
47
+ const current = String(chapterAt(list, video.currentTime));
48
+ const items = list.map((chapter, i) => [
49
+ String(i),
50
+ chapter.title,
51
+ format(chapter.start)
52
+ ]);
53
+ const key = `${current}|${items.map(([, title, start]) => `${start} ${title}`).join("\n")}`;
54
+ if (key === this.drawn) return;
55
+ this.drawn = key;
56
+ this.menu.fill([{
57
+ name: "chapter",
58
+ items,
59
+ value: current,
60
+ onSelect: (value) => {
61
+ const chapter = list[Number(value)];
62
+ if (chapter !== void 0) video.currentTime = chapter.start;
63
+ }
64
+ }]);
65
+ }
66
+ };
67
+ //#endregion
68
+ export { MbxChaptersMenu };
@@ -0,0 +1,84 @@
1
+ import { PLAYER } from "../tags.js";
2
+ import { findPlayer } from "../host.js";
3
+ //#region src/elements/component.ts
4
+ var Component = class extends HTMLElement {
5
+ constructor() {
6
+ super();
7
+ this.player = null;
8
+ this.offs = [];
9
+ this.epoch = 0;
10
+ }
11
+ connectedCallback() {
12
+ const found = findPlayer(this);
13
+ if (found === null) return;
14
+ this.epoch += 1;
15
+ const epoch = this.epoch;
16
+ const attach = () => {
17
+ if (epoch !== this.epoch || !this.isConnected) return;
18
+ customElements.upgrade(found);
19
+ if (!("video" in found)) return;
20
+ this.player = found;
21
+ this.attach(this.player);
22
+ };
23
+ if ("video" in found) attach();
24
+ else customElements.whenDefined(PLAYER).then(attach);
25
+ }
26
+ disconnectedCallback() {
27
+ this.epoch += 1;
28
+ for (const off of this.offs) off();
29
+ this.offs = [];
30
+ const player = this.player;
31
+ if (player === null) return;
32
+ this.player = null;
33
+ this.detach(player);
34
+ }
35
+ attributeChangedCallback() {
36
+ if (this.player !== null) this.render();
37
+ }
38
+ /** Adds `fn` for every name on `target`, to be removed on detach. */
39
+ listen(target, names, fn) {
40
+ for (const name of names) target.addEventListener(name, fn);
41
+ this.offs.push(() => {
42
+ for (const name of names) target.removeEventListener(name, fn);
43
+ });
44
+ }
45
+ /** Keeps `off` to run on detach. */
46
+ keep(off) {
47
+ this.offs.push(off);
48
+ }
49
+ /**
50
+ * Runs `fn` over the current engine now and on every session change,
51
+ * running what the last call returned first, so a control's engine
52
+ * subscriptions live exactly as long as the session. Detach runs it too.
53
+ */
54
+ follow(player, fn) {
55
+ let off;
56
+ const run = () => {
57
+ off === null || off === void 0 || off();
58
+ off = fn(player.engine);
59
+ };
60
+ this.listen(player, ["sourcechange"], run);
61
+ this.offs.push(() => {
62
+ off === null || off === void 0 || off();
63
+ off = void 0;
64
+ });
65
+ run();
66
+ }
67
+ /** Runs `fn` when any of `names` changes on `target`, until detach. */
68
+ observe(target, names, fn) {
69
+ const observer = new MutationObserver(fn);
70
+ observer.observe(target, {
71
+ attributes: true,
72
+ attributeFilter: [...names]
73
+ });
74
+ this.offs.push(() => {
75
+ observer.disconnect();
76
+ });
77
+ }
78
+ /** The control left its player. Listeners are already gone; undo anything else. */
79
+ detach(_player) {}
80
+ /** Draws the current state. Called on every observed attribute change while attached. */
81
+ render() {}
82
+ };
83
+ //#endregion
84
+ export { Component };