@locpd/vidstack 1.12.14

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 (242) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +22 -0
  3. package/analyze.json.d.ts +8 -0
  4. package/bundle.d.ts +1 -0
  5. package/cdn/chunks/vidstack-2f5gzOW6.js +1 -0
  6. package/cdn/chunks/vidstack-BYgY9wmd.js +1 -0
  7. package/cdn/chunks/vidstack-BfBBPhXV.js +1 -0
  8. package/cdn/chunks/vidstack-Bjo5esRp.js +1 -0
  9. package/cdn/chunks/vidstack-BuL67v3q.js +1 -0
  10. package/cdn/chunks/vidstack-C0msPRTd.js +3 -0
  11. package/cdn/chunks/vidstack-CJNLoJPa.js +1 -0
  12. package/cdn/chunks/vidstack-CQSpZ7X8.js +16 -0
  13. package/cdn/chunks/vidstack-C_AxqLKV.js +1 -0
  14. package/cdn/chunks/vidstack-CioT3Yw2.js +1 -0
  15. package/cdn/chunks/vidstack-CrqkytHl.js +1 -0
  16. package/cdn/chunks/vidstack-D0M8R0ZU.js +1 -0
  17. package/cdn/chunks/vidstack-D40FSa5B.js +3 -0
  18. package/cdn/chunks/vidstack-DD2JwFVU.js +1 -0
  19. package/cdn/chunks/vidstack-DRH_1tFW.js +1 -0
  20. package/cdn/chunks/vidstack-DfDZuHNP.js +1 -0
  21. package/cdn/chunks/vidstack-DiNS2Vx5.js +1 -0
  22. package/cdn/chunks/vidstack-xjJ-ui_l.js +1 -0
  23. package/cdn/providers/vidstack-audio-2Dt_Ivbp.js +1 -0
  24. package/cdn/providers/vidstack-dash-CUtD4e6q.js +1 -0
  25. package/cdn/providers/vidstack-google-cast-BdORATUX.js +1 -0
  26. package/cdn/providers/vidstack-hls-R25Kb6DP.js +1 -0
  27. package/cdn/providers/vidstack-html-DaAUJYsD.js +1 -0
  28. package/cdn/providers/vidstack-video-Csvox7SO.js +1 -0
  29. package/cdn/providers/vidstack-vimeo-D4Z96kg2.js +1 -0
  30. package/cdn/providers/vidstack-youtube-DiND6h3s.js +1 -0
  31. package/cdn/vidstack.js +1 -0
  32. package/cdn/with-layouts/chunks/vidstack-2f5gzOW6.js +1 -0
  33. package/cdn/with-layouts/chunks/vidstack-45yH5los.js +1 -0
  34. package/cdn/with-layouts/chunks/vidstack-BBVMdOnf.js +1 -0
  35. package/cdn/with-layouts/chunks/vidstack-BB_ulI_T.js +1 -0
  36. package/cdn/with-layouts/chunks/vidstack-BcAewM33.js +1 -0
  37. package/cdn/with-layouts/chunks/vidstack-BfBBPhXV.js +1 -0
  38. package/cdn/with-layouts/chunks/vidstack-Bxv1Qnxe.js +1 -0
  39. package/cdn/with-layouts/chunks/vidstack-C2ZbG62f.js +3 -0
  40. package/cdn/with-layouts/chunks/vidstack-CCYIOKgL.js +1 -0
  41. package/cdn/with-layouts/chunks/vidstack-CL6PeIO1.js +1 -0
  42. package/cdn/with-layouts/chunks/vidstack-C_AxqLKV.js +1 -0
  43. package/cdn/with-layouts/chunks/vidstack-CifDkwDH.js +795 -0
  44. package/cdn/with-layouts/chunks/vidstack-Cry7aD59.js +3 -0
  45. package/cdn/with-layouts/chunks/vidstack-D065okCn.js +1 -0
  46. package/cdn/with-layouts/chunks/vidstack-DGuMoXmI.js +1 -0
  47. package/cdn/with-layouts/chunks/vidstack-DRH_1tFW.js +1 -0
  48. package/cdn/with-layouts/chunks/vidstack-DVBs1XoQ.js +1 -0
  49. package/cdn/with-layouts/chunks/vidstack-Dge3KT8k.js +1 -0
  50. package/cdn/with-layouts/chunks/vidstack-DiNS2Vx5.js +1 -0
  51. package/cdn/with-layouts/chunks/vidstack-HvYfJoen.js +1 -0
  52. package/cdn/with-layouts/providers/vidstack-audio-DE5vKIzW.js +1 -0
  53. package/cdn/with-layouts/providers/vidstack-dash-CA2agUuZ.js +1 -0
  54. package/cdn/with-layouts/providers/vidstack-google-cast-CGs-t8HM.js +1 -0
  55. package/cdn/with-layouts/providers/vidstack-hls-BHMbMFFR.js +1 -0
  56. package/cdn/with-layouts/providers/vidstack-html-Dm9gmNk6.js +1 -0
  57. package/cdn/with-layouts/providers/vidstack-video-C5it_Lbl.js +1 -0
  58. package/cdn/with-layouts/providers/vidstack-vimeo-BabLn9sy.js +1 -0
  59. package/cdn/with-layouts/providers/vidstack-youtube-D8UlccUL.js +1 -0
  60. package/cdn/with-layouts/vidstack.js +1 -0
  61. package/dev/chunks/vidstack-B7Zi3v_O.js +104 -0
  62. package/dev/chunks/vidstack-BFg1ZqiG.js +91 -0
  63. package/dev/chunks/vidstack-BGB2pa9s.js +58 -0
  64. package/dev/chunks/vidstack-BaIbHZE3.js +1519 -0
  65. package/dev/chunks/vidstack-Bb2rASIc.js +5188 -0
  66. package/dev/chunks/vidstack-Bcmx8pmK.js +224 -0
  67. package/dev/chunks/vidstack-Bl4b0Nen.js +29 -0
  68. package/dev/chunks/vidstack-Bo5OTJ06.js +58 -0
  69. package/dev/chunks/vidstack-BoAGnlRt.js +58 -0
  70. package/dev/chunks/vidstack-Bpr4fI4n.js +7 -0
  71. package/dev/chunks/vidstack-Bt8MP2DK.js +204 -0
  72. package/dev/chunks/vidstack-Bu2kfzUd.js +1637 -0
  73. package/dev/chunks/vidstack-C-ffXlSV.js +2995 -0
  74. package/dev/chunks/vidstack-C-ztJq-f.js +109 -0
  75. package/dev/chunks/vidstack-CFNlaVTR.js +55 -0
  76. package/dev/chunks/vidstack-C_l97D5j.js +254 -0
  77. package/dev/chunks/vidstack-CjhKISI0.js +114 -0
  78. package/dev/chunks/vidstack-CofXIJAy.js +57 -0
  79. package/dev/chunks/vidstack-CwTj4H1w.js +18 -0
  80. package/dev/chunks/vidstack-DDwbYVHV.js +66 -0
  81. package/dev/chunks/vidstack-DFImIcIL.js +11 -0
  82. package/dev/chunks/vidstack-DGDvUbvO.js +33 -0
  83. package/dev/chunks/vidstack-DO0kqA99.js +107 -0
  84. package/dev/chunks/vidstack-DXxIKXmd.js +50 -0
  85. package/dev/chunks/vidstack-DajrMUR0.js +297 -0
  86. package/dev/chunks/vidstack-DbBJlz7I.js +10 -0
  87. package/dev/chunks/vidstack-Dihypf8P.js +11 -0
  88. package/dev/chunks/vidstack-DlAhl87f.js +1193 -0
  89. package/dev/chunks/vidstack-Dm1xEU9Q.js +34 -0
  90. package/dev/chunks/vidstack-Dv_LIPFu.js +14 -0
  91. package/dev/chunks/vidstack-igYn0Apa.js +254 -0
  92. package/dev/chunks/vidstack-krOAtKMi.js +32 -0
  93. package/dev/chunks/vidstack-qh1N5_f_.js +26 -0
  94. package/dev/chunks/vidstack-rB-wqXw1.js +107 -0
  95. package/dev/chunks/vidstack-zG6PIeGg.js +66 -0
  96. package/dev/define/plyr-layout.js +51 -0
  97. package/dev/define/templates/plyr-layout.js +571 -0
  98. package/dev/define/templates/vidstack-audio-layout.js +167 -0
  99. package/dev/define/templates/vidstack-video-layout.js +390 -0
  100. package/dev/define/vidstack-icons.js +1 -0
  101. package/dev/define/vidstack-player-default-layout.js +21 -0
  102. package/dev/define/vidstack-player-layouts.js +25 -0
  103. package/dev/define/vidstack-player-ui.js +70 -0
  104. package/dev/define/vidstack-player.js +19 -0
  105. package/dev/global/plyr.js +501 -0
  106. package/dev/global/vidstack-player.js +129 -0
  107. package/dev/providers/vidstack-audio.js +35 -0
  108. package/dev/providers/vidstack-dash.js +516 -0
  109. package/dev/providers/vidstack-google-cast.js +474 -0
  110. package/dev/providers/vidstack-hls.js +408 -0
  111. package/dev/providers/vidstack-html.js +567 -0
  112. package/dev/providers/vidstack-video.js +207 -0
  113. package/dev/providers/vidstack-vimeo.js +554 -0
  114. package/dev/providers/vidstack-youtube.js +286 -0
  115. package/dev/vidstack-elements.js +36 -0
  116. package/dev/vidstack.js +91 -0
  117. package/dom.d.ts +91 -0
  118. package/elements.d.ts +1433 -0
  119. package/empty.vtt +1 -0
  120. package/global/player.d.ts +52 -0
  121. package/global/plyr.d.ts +343 -0
  122. package/google-cast.d.ts +1422 -0
  123. package/icons.d.ts +1 -0
  124. package/index.d.ts +402 -0
  125. package/package.json +199 -0
  126. package/player/index.d.ts +3 -0
  127. package/player/layouts/default.d.ts +3 -0
  128. package/player/layouts/index.d.ts +3 -0
  129. package/player/layouts/plyr.d.ts +3 -0
  130. package/player/styles/base.css +153 -0
  131. package/player/styles/default/buffering.css +55 -0
  132. package/player/styles/default/buttons.css +175 -0
  133. package/player/styles/default/captions.css +181 -0
  134. package/player/styles/default/chapter-title.css +26 -0
  135. package/player/styles/default/controls.css +56 -0
  136. package/player/styles/default/gestures.css +19 -0
  137. package/player/styles/default/icons.css +6 -0
  138. package/player/styles/default/keyboard.css +148 -0
  139. package/player/styles/default/layouts/audio.css +417 -0
  140. package/player/styles/default/layouts/video.css +590 -0
  141. package/player/styles/default/menus.css +959 -0
  142. package/player/styles/default/poster.css +52 -0
  143. package/player/styles/default/sliders.css +391 -0
  144. package/player/styles/default/theme.css +2461 -0
  145. package/player/styles/default/thumbnail.css +40 -0
  146. package/player/styles/default/time.css +45 -0
  147. package/player/styles/default/tooltips.css +141 -0
  148. package/player/styles/plyr/theme.css +1237 -0
  149. package/player/ui.d.ts +3 -0
  150. package/plugins.d.ts +19 -0
  151. package/plugins.js +13 -0
  152. package/prod/chunks/vidstack-B01xzxC4.js +7 -0
  153. package/prod/chunks/vidstack-BCeb7ryV.js +201 -0
  154. package/prod/chunks/vidstack-BGSTndAW.js +1590 -0
  155. package/prod/chunks/vidstack-BPitBBjh.js +1519 -0
  156. package/prod/chunks/vidstack-BQlOPwOu.js +45 -0
  157. package/prod/chunks/vidstack-BSDzlwxO.js +4778 -0
  158. package/prod/chunks/vidstack-BT0m6zEi.js +109 -0
  159. package/prod/chunks/vidstack-BTigPj2h.js +55 -0
  160. package/prod/chunks/vidstack-BiyXcJ_M.js +107 -0
  161. package/prod/chunks/vidstack-BoVf5n1M.js +2985 -0
  162. package/prod/chunks/vidstack-Bq6c3Bam.js +58 -0
  163. package/prod/chunks/vidstack-ByLCIBtB.js +297 -0
  164. package/prod/chunks/vidstack-C2US-gSO.js +248 -0
  165. package/prod/chunks/vidstack-C9vIqaYT.js +10 -0
  166. package/prod/chunks/vidstack-CF6fixCQ.js +1193 -0
  167. package/prod/chunks/vidstack-CTojmhKq.js +66 -0
  168. package/prod/chunks/vidstack-ChQTHmIQ.js +77 -0
  169. package/prod/chunks/vidstack-Cm6_unwd.js +246 -0
  170. package/prod/chunks/vidstack-CwTj4H1w.js +18 -0
  171. package/prod/chunks/vidstack-D3ltXc3a.js +33 -0
  172. package/prod/chunks/vidstack-D5EzK014.js +14 -0
  173. package/prod/chunks/vidstack-DDXt6fpN.js +58 -0
  174. package/prod/chunks/vidstack-DJDnh4xT.js +11 -0
  175. package/prod/chunks/vidstack-DXxIKXmd.js +50 -0
  176. package/prod/chunks/vidstack-D_-9AA6_.js +29 -0
  177. package/prod/chunks/vidstack-DbkZGjSn.js +107 -0
  178. package/prod/chunks/vidstack-Dihypf8P.js +11 -0
  179. package/prod/chunks/vidstack-Dm1xEU9Q.js +34 -0
  180. package/prod/chunks/vidstack-Dq5Yu0Vr.js +205 -0
  181. package/prod/chunks/vidstack-DqAw8m9J.js +26 -0
  182. package/prod/chunks/vidstack-DsPOyKtl.js +57 -0
  183. package/prod/chunks/vidstack-krOAtKMi.js +32 -0
  184. package/prod/chunks/vidstack-nLyr4NEP.js +58 -0
  185. package/prod/chunks/vidstack-xMS8dnYq.js +114 -0
  186. package/prod/chunks/vidstack-yEGTpgeA.js +104 -0
  187. package/prod/define/plyr-layout.js +51 -0
  188. package/prod/define/templates/plyr-layout.js +571 -0
  189. package/prod/define/templates/vidstack-audio-layout.js +167 -0
  190. package/prod/define/templates/vidstack-video-layout.js +390 -0
  191. package/prod/define/vidstack-icons.js +1 -0
  192. package/prod/define/vidstack-player-default-layout.js +21 -0
  193. package/prod/define/vidstack-player-layouts.js +25 -0
  194. package/prod/define/vidstack-player-ui.js +70 -0
  195. package/prod/define/vidstack-player.js +19 -0
  196. package/prod/global/plyr.js +493 -0
  197. package/prod/global/vidstack-player.js +129 -0
  198. package/prod/providers/vidstack-audio.js +35 -0
  199. package/prod/providers/vidstack-dash.js +501 -0
  200. package/prod/providers/vidstack-google-cast.js +468 -0
  201. package/prod/providers/vidstack-hls.js +393 -0
  202. package/prod/providers/vidstack-html.js +555 -0
  203. package/prod/providers/vidstack-video.js +204 -0
  204. package/prod/providers/vidstack-vimeo.js +548 -0
  205. package/prod/providers/vidstack-youtube.js +286 -0
  206. package/prod/vidstack-elements.js +36 -0
  207. package/prod/vidstack.js +158 -0
  208. package/server/chunks/vidstack-6juFdkKy.js +29 -0
  209. package/server/chunks/vidstack-B7iHmv7_.js +307 -0
  210. package/server/chunks/vidstack-BmxyML9v.js +1619 -0
  211. package/server/chunks/vidstack-BskfxwD3.js +566 -0
  212. package/server/chunks/vidstack-BvLV0SMz.js +4642 -0
  213. package/server/chunks/vidstack-BvWwluXZ.js +205 -0
  214. package/server/chunks/vidstack-C-413dj2.js +8 -0
  215. package/server/chunks/vidstack-C26K8z_-.js +55 -0
  216. package/server/chunks/vidstack-CJJiksDz.js +107 -0
  217. package/server/chunks/vidstack-CUNv52x1.js +141 -0
  218. package/server/chunks/vidstack-CqyBCODe.js +295 -0
  219. package/server/chunks/vidstack-CwTj4H1w.js +18 -0
  220. package/server/chunks/vidstack-DHAyGSOl.js +1502 -0
  221. package/server/chunks/vidstack-DLU3cjcp.js +381 -0
  222. package/server/chunks/vidstack-DXxIKXmd.js +50 -0
  223. package/server/chunks/vidstack-DbtDXDS2.js +104 -0
  224. package/server/chunks/vidstack-Dm1xEU9Q.js +34 -0
  225. package/server/chunks/vidstack-DzTHw_bw.js +207 -0
  226. package/server/chunks/vidstack-Wn3NH5Sg.js +1566 -0
  227. package/server/chunks/vidstack-krOAtKMi.js +32 -0
  228. package/server/chunks/vidstack-wNViAkr4.js +3045 -0
  229. package/server/define/plyr-layout.js +16 -0
  230. package/server/define/vidstack-icons.js +1 -0
  231. package/server/define/vidstack-player-default-layout.js +13 -0
  232. package/server/define/vidstack-player-layouts.js +16 -0
  233. package/server/define/vidstack-player-ui.js +11 -0
  234. package/server/define/vidstack-player.js +6 -0
  235. package/server/global/plyr.js +322 -0
  236. package/server/global/vidstack-player.js +58 -0
  237. package/server/vidstack-elements.js +46 -0
  238. package/server/vidstack.js +148 -0
  239. package/tailwind.cjs +101 -0
  240. package/tailwind.d.cts +15 -0
  241. package/types/vidstack-BOvzfZjK.d.ts +1269 -0
  242. package/types/vidstack-Cttpg6GU.d.ts +7474 -0
@@ -0,0 +1,167 @@
1
+ import { signal, effect, toggleClass, Host, listenEvent } from '../../chunks/vidstack-Bu2kfzUd.js';
2
+ import { DefaultLayout, DefaultAnnouncer, DefaultCaptions, DefaultSeekButton, DefaultPlayButton, DefaultTimeSlider, DefaultTimeInvert, DefaultVolumePopup, DefaultCaptionButton, DefaultDownloadButton, DefaultAirPlayButton, DefaultChaptersMenu, DefaultSettingsMenu, useDefaultLayoutContext, DefaultControlsSpacer, i18n, DefaultChapterTitle, setLayoutName, createMenuContainer, DefaultLayoutIconsLoader } from '../../chunks/vidstack-DlAhl87f.js';
3
+ import { useMediaContext, useMediaState } from '../../chunks/vidstack-DFImIcIL.js';
4
+ import { useTransitionActive, useResizeObserver, isHTMLElement } from '../../chunks/vidstack-C_l97D5j.js';
5
+ import { $signal, SlotManager } from '../../chunks/vidstack-Bcmx8pmK.js';
6
+ import { LitElement } from '../../chunks/vidstack-CwTj4H1w.js';
7
+ import { html } from 'lit-html';
8
+ import { ref } from 'lit-html/directives/ref.js';
9
+ import '../../chunks/vidstack-BGB2pa9s.js';
10
+ import 'lit-html/directives/if-defined.js';
11
+ import '../../chunks/vidstack-zG6PIeGg.js';
12
+ import '../../chunks/vidstack-CjhKISI0.js';
13
+ import '@floating-ui/dom';
14
+ import 'lit-html/directives/unsafe-svg.js';
15
+ import 'lit-html/async-directive.js';
16
+
17
+ let DefaultAudioLayout$1 = class DefaultAudioLayout extends DefaultLayout {
18
+ static props = {
19
+ ...super.props,
20
+ when: ({ viewType }) => viewType === "audio",
21
+ smallWhen: ({ width }) => width < 576
22
+ };
23
+ };
24
+
25
+ function DefaultAudioLayout() {
26
+ return [
27
+ DefaultAnnouncer(),
28
+ DefaultCaptions(),
29
+ html`
30
+ <media-controls class="vds-controls">
31
+ <media-controls-group class="vds-controls-group">
32
+ ${[
33
+ DefaultSeekButton({ backward: true, tooltip: "top start" }),
34
+ DefaultPlayButton({ tooltip: "top" }),
35
+ DefaultSeekButton({ tooltip: "top" }),
36
+ DefaultAudioTitle(),
37
+ DefaultTimeSlider(),
38
+ DefaultTimeInvert(),
39
+ DefaultVolumePopup({ orientation: "vertical", tooltip: "top" }),
40
+ DefaultCaptionButton({ tooltip: "top" }),
41
+ DefaultDownloadButton(),
42
+ DefaultAirPlayButton({ tooltip: "top" }),
43
+ DefaultAudioMenus()
44
+ ]}
45
+ </media-controls-group>
46
+ </media-controls>
47
+ `
48
+ ];
49
+ }
50
+ function DefaultAudioTitle() {
51
+ return $signal(() => {
52
+ let $ref = signal(void 0), $isTextOverflowing = signal(false), media = useMediaContext(), { title, started, currentTime, ended } = useMediaState(), { translations } = useDefaultLayoutContext(), $isTransitionActive = useTransitionActive($ref), $isContinued = () => started() || currentTime() > 0;
53
+ const $title = () => {
54
+ const word = ended() ? "Replay" : $isContinued() ? "Continue" : "Play";
55
+ return `${i18n(translations, word)}: ${title()}`;
56
+ };
57
+ effect(() => {
58
+ if ($isTransitionActive() && document.activeElement === document.body) {
59
+ media.player.el?.focus({ preventScroll: true });
60
+ }
61
+ });
62
+ function onResize() {
63
+ const el = $ref(), isOverflowing = !!el && !$isTransitionActive() && el.clientWidth < el.children[0].clientWidth;
64
+ el && toggleClass(el, "vds-marquee", isOverflowing);
65
+ $isTextOverflowing.set(isOverflowing);
66
+ }
67
+ function Title() {
68
+ return html`
69
+ <span class="vds-title-text">
70
+ ${$signal($title)}${$signal(() => $isContinued() ? DefaultChapterTitle() : null)}
71
+ </span>
72
+ `;
73
+ }
74
+ useResizeObserver($ref, onResize);
75
+ return title() ? html`
76
+ <span class="vds-title" title=${$signal($title)} ${ref($ref.set)}>
77
+ ${[
78
+ Title(),
79
+ $signal(() => $isTextOverflowing() && !$isTransitionActive() ? Title() : null)
80
+ ]}
81
+ </span>
82
+ ` : DefaultControlsSpacer();
83
+ });
84
+ }
85
+ function DefaultAudioMenus() {
86
+ const placement = "top end";
87
+ return [
88
+ DefaultChaptersMenu({ tooltip: "top", placement, portal: true }),
89
+ DefaultSettingsMenu({ tooltip: "top end", placement, portal: true })
90
+ ];
91
+ }
92
+
93
+ class MediaAudioLayoutElement extends Host(LitElement, DefaultAudioLayout$1) {
94
+ static tagName = "media-audio-layout";
95
+ static attrs = {
96
+ smallWhen: {
97
+ converter(value) {
98
+ return value !== "never" && !!value;
99
+ }
100
+ }
101
+ };
102
+ #media;
103
+ #scrubbing = signal(false);
104
+ onSetup() {
105
+ this.forwardKeepAlive = false;
106
+ this.#media = useMediaContext();
107
+ this.classList.add("vds-audio-layout");
108
+ this.#setupWatchScrubbing();
109
+ }
110
+ onConnect() {
111
+ setLayoutName("audio", () => this.isMatch);
112
+ this.#setupMenuContainer();
113
+ }
114
+ render() {
115
+ return $signal(this.#render.bind(this));
116
+ }
117
+ #render() {
118
+ return this.isMatch ? DefaultAudioLayout() : null;
119
+ }
120
+ #setupMenuContainer() {
121
+ const { menuPortal } = useDefaultLayoutContext();
122
+ effect(() => {
123
+ if (!this.isMatch) return;
124
+ const container = createMenuContainer(
125
+ this,
126
+ this.menuContainer,
127
+ "vds-audio-layout",
128
+ () => this.isSmallLayout
129
+ ), roots = container ? [this, container] : [this];
130
+ const iconsManager = this.$props.customIcons() ? new SlotManager(roots) : new DefaultLayoutIconsLoader(roots);
131
+ iconsManager.connect();
132
+ menuPortal.set(container);
133
+ return () => {
134
+ container.remove();
135
+ menuPortal.set(null);
136
+ };
137
+ });
138
+ }
139
+ #setupWatchScrubbing() {
140
+ const { pointer } = this.#media.$state;
141
+ effect(() => {
142
+ if (pointer() !== "coarse") return;
143
+ effect(this.#watchScrubbing.bind(this));
144
+ });
145
+ }
146
+ #watchScrubbing() {
147
+ if (!this.#scrubbing()) {
148
+ listenEvent(this, "pointerdown", this.#onStartScrubbing.bind(this), { capture: true });
149
+ return;
150
+ }
151
+ listenEvent(this, "pointerdown", (e) => e.stopPropagation());
152
+ listenEvent(window, "pointerdown", this.#onStopScrubbing.bind(this));
153
+ }
154
+ #onStartScrubbing(event) {
155
+ const { target } = event, hasTimeSlider = !!(isHTMLElement(target) && target.closest(".vds-time-slider"));
156
+ if (!hasTimeSlider) return;
157
+ event.stopImmediatePropagation();
158
+ this.setAttribute("data-scrubbing", "");
159
+ this.#scrubbing.set(true);
160
+ }
161
+ #onStopScrubbing() {
162
+ this.#scrubbing.set(false);
163
+ this.removeAttribute("data-scrubbing");
164
+ }
165
+ }
166
+
167
+ export { MediaAudioLayoutElement };
@@ -0,0 +1,390 @@
1
+ import { computed, signal, effect, camelToKebabCase, unwrap, isFunction, Host } from '../../chunks/vidstack-Bu2kfzUd.js';
2
+ import { DefaultLayout, useDefaultLayoutContext, $i18n, IconSlot, MenuPortal, DefaultPlayButton, DefaultAnnouncer, DefaultCaptions, DefaultAirPlayButton, DefaultControlsSpacer, DefaultDownloadButton, DefaultVolumePopup, DefaultTimeInfo, DefaultTitle, DefaultFullscreenButton, DefaultTimeSlider, DefaultSeekButton, DefaultPIPButton, DefaultChaptersMenu, DefaultSettingsMenu, setLayoutName, createMenuContainer, DefaultLayoutIconsLoader } from '../../chunks/vidstack-DlAhl87f.js';
3
+ import { useMediaContext, useMediaState } from '../../chunks/vidstack-DFImIcIL.js';
4
+ import { $signal, SlotManager } from '../../chunks/vidstack-Bcmx8pmK.js';
5
+ import { LitElement } from '../../chunks/vidstack-CwTj4H1w.js';
6
+ import { html } from 'lit-html';
7
+ import { keyed } from 'lit-html/directives/keyed.js';
8
+ import { createSlot } from '../../chunks/vidstack-C_l97D5j.js';
9
+ import '../../chunks/vidstack-BGB2pa9s.js';
10
+ import 'lit-html/directives/if-defined.js';
11
+ import 'lit-html/directives/ref.js';
12
+ import '../../chunks/vidstack-zG6PIeGg.js';
13
+ import '../../chunks/vidstack-CjhKISI0.js';
14
+ import 'lit-html/directives/unsafe-svg.js';
15
+ import 'lit-html/async-directive.js';
16
+ import '@floating-ui/dom';
17
+
18
+ class DefaultVideoLayout extends DefaultLayout {
19
+ static props = {
20
+ ...super.props,
21
+ when: ({ viewType }) => viewType === "video",
22
+ smallWhen: ({ width, height }) => width < 576 || height < 380
23
+ };
24
+ }
25
+
26
+ function DefaultKeyboardDisplay() {
27
+ return $signal(() => {
28
+ const media = useMediaContext(), { noKeyboardAnimations, userPrefersKeyboardAnimations } = useDefaultLayoutContext(), $disabled = computed(() => noKeyboardAnimations() || !userPrefersKeyboardAnimations());
29
+ if ($disabled()) {
30
+ return null;
31
+ }
32
+ const visible = signal(false), { lastKeyboardAction } = media.$state;
33
+ effect(() => {
34
+ visible.set(!!lastKeyboardAction());
35
+ const id = setTimeout(() => visible.set(false), 500);
36
+ return () => {
37
+ visible.set(false);
38
+ window.clearTimeout(id);
39
+ };
40
+ });
41
+ const $actionDataAttr = computed(() => {
42
+ const action = lastKeyboardAction()?.action;
43
+ return action && visible() ? camelToKebabCase(action) : null;
44
+ });
45
+ const $classList = computed(() => `vds-kb-action${!visible() ? " hidden" : ""}`), $text = computed(getText), $iconSlot = computed(() => {
46
+ const name = getIconName();
47
+ return name ? createSlot(name) : null;
48
+ });
49
+ function Icon() {
50
+ const $slot = $iconSlot();
51
+ if (!$slot) return null;
52
+ return html`
53
+ <div class="vds-kb-bezel">
54
+ <div class="vds-kb-icon">${$slot}</div>
55
+ </div>
56
+ `;
57
+ }
58
+ return html`
59
+ <div class=${$signal($classList)} data-action=${$signal($actionDataAttr)}>
60
+ <div class="vds-kb-text-wrapper">
61
+ <div class="vds-kb-text">${$signal($text)}</div>
62
+ </div>
63
+ ${$signal(() => keyed(lastKeyboardAction(), Icon()))}
64
+ </div>
65
+ `;
66
+ });
67
+ }
68
+ function getText() {
69
+ const { $state } = useMediaContext(), action = $state.lastKeyboardAction()?.action, audioGain = $state.audioGain() ?? 1;
70
+ switch (action) {
71
+ case "toggleMuted":
72
+ return $state.muted() ? "0%" : getVolumeText($state.volume(), audioGain);
73
+ case "volumeUp":
74
+ case "volumeDown":
75
+ return getVolumeText($state.volume(), audioGain);
76
+ default:
77
+ return "";
78
+ }
79
+ }
80
+ function getVolumeText(volume, gain) {
81
+ return `${Math.round(volume * gain * 100)}%`;
82
+ }
83
+ function getIconName() {
84
+ const { $state } = useMediaContext(), action = $state.lastKeyboardAction()?.action;
85
+ switch (action) {
86
+ case "togglePaused":
87
+ return !$state.paused() ? "kb-play-icon" : "kb-pause-icon";
88
+ case "toggleMuted":
89
+ return $state.muted() || $state.volume() === 0 ? "kb-mute-icon" : $state.volume() >= 0.5 ? "kb-volume-up-icon" : "kb-volume-down-icon";
90
+ case "toggleFullscreen":
91
+ return `kb-fs-${$state.fullscreen() ? "enter" : "exit"}-icon`;
92
+ case "togglePictureInPicture":
93
+ return `kb-pip-${$state.pictureInPicture() ? "enter" : "exit"}-icon`;
94
+ case "toggleCaptions":
95
+ return $state.hasCaptions() ? `kb-cc-${$state.textTrack() ? "on" : "off"}-icon` : null;
96
+ case "volumeUp":
97
+ return "kb-volume-up-icon";
98
+ case "volumeDown":
99
+ return "kb-volume-down-icon";
100
+ case "seekForward":
101
+ return "kb-seek-forward-icon";
102
+ case "seekBackward":
103
+ return "kb-seek-backward-icon";
104
+ default:
105
+ return null;
106
+ }
107
+ }
108
+
109
+ function DefaultCaptionsMenu({
110
+ placement,
111
+ portal,
112
+ tooltip
113
+ }) {
114
+ return $signal(() => {
115
+ const {
116
+ translations,
117
+ menuPortal,
118
+ noModal,
119
+ menuGroup,
120
+ smallWhen: smWhen
121
+ } = useDefaultLayoutContext(), { viewType, hasCaptions } = useMediaState(), $offText = $i18n(translations, "Off");
122
+ if (!hasCaptions()) return null;
123
+ const $placement = computed(
124
+ () => noModal() ? unwrap(placement) : !smWhen() ? unwrap(placement) : null
125
+ ), $offset = computed(
126
+ () => !smWhen() && menuGroup() === "bottom" && viewType() === "video" ? 26 : 0
127
+ ), $isOpen = signal(false);
128
+ function onOpen() {
129
+ $isOpen.set(true);
130
+ }
131
+ function onClose() {
132
+ $isOpen.set(false);
133
+ }
134
+ const items = html`
135
+ <media-menu-items
136
+ class="vds-settings-menu-items vds-menu-items"
137
+ placement=${$signal($placement)}
138
+ offset=${$signal($offset)}
139
+ >
140
+ ${$signal(() => {
141
+ if (!$isOpen()) {
142
+ return null;
143
+ }
144
+ return html`
145
+ <media-captions-radio-group
146
+ class="vds-captions-radio-group vds-radio-group"
147
+ off-label=${$offText}
148
+ >
149
+ <template>
150
+ <media-radio class="vds-caption-radio vds-radio">
151
+ <slot name="menu-radio-check-icon" data-class="vds-icon"></slot>
152
+ <span class="vds-radio-label" data-part="label"></span>
153
+ </media-radio>
154
+ </template>
155
+ </media-captions-radio-group>
156
+ `;
157
+ })}
158
+ </media-menu-items>
159
+ `;
160
+ return html`
161
+ <media-menu class="vds-captions-menu vds-menu" @open=${onOpen} @close=${onClose}>
162
+ <media-tooltip class="vds-tooltip">
163
+ <media-tooltip-trigger>
164
+ <media-menu-button
165
+ class="vds-menu-button vds-button"
166
+ aria-label=${$i18n(translations, "Captions")}
167
+ >
168
+ ${IconSlot("cc-off")}
169
+ </media-menu-button>
170
+ </media-tooltip-trigger>
171
+ <media-tooltip-content
172
+ class="vds-tooltip-content"
173
+ placement=${isFunction(tooltip) ? $signal(tooltip) : tooltip}
174
+ >
175
+ ${$i18n(translations, "Captions")}
176
+ </media-tooltip-content>
177
+ </media-tooltip>
178
+ ${MenuPortal(menuPortal, items) }
179
+ </media-menu>
180
+ `;
181
+ });
182
+ }
183
+
184
+ function DefaultVideoLayoutLarge() {
185
+ return [
186
+ DefaultAnnouncer(),
187
+ DefaultVideoGestures(),
188
+ DefaultBufferingIndicator(),
189
+ DefaultKeyboardDisplay(),
190
+ DefaultCaptions(),
191
+ html`<div class="vds-scrim"></div>`,
192
+ html`
193
+ <media-controls class="vds-controls">
194
+ ${[
195
+ DefaultControlsGroupTop(),
196
+ DefaultControlsSpacer(),
197
+ html`<media-controls-group class="vds-controls-group"></media-controls-group>`,
198
+ DefaultControlsSpacer(),
199
+ html`
200
+ <media-controls-group class="vds-controls-group">
201
+ ${DefaultTimeSlider()}
202
+ </media-controls-group>
203
+ `,
204
+ html`
205
+ <media-controls-group class="vds-controls-group">
206
+ ${[
207
+ DefaultPlayButton({ tooltip: "top start" }),
208
+ DefaultSeekButton({ backward: true, tooltip: "top" }),
209
+ DefaultSeekButton({ backward: false, tooltip: "top" }),
210
+ DefaultVolumePopup({ orientation: "horizontal", tooltip: "top" }),
211
+ DefaultTimeInfo(),
212
+ DefaultTitle(),
213
+ DefaultBottomMenuGroup(),
214
+ DefaultAirPlayButton({ tooltip: "top" }),
215
+ DefaultDownloadButton(),
216
+ DefaultPIPButton(),
217
+ DefaultFullscreenButton({ tooltip: "top end" })
218
+ ]}
219
+ </media-controls-group>
220
+ `
221
+ ]}
222
+ </media-controls>
223
+ `
224
+ ];
225
+ }
226
+ function DefaultBottomMenuGroup() {
227
+ return $signal(() => {
228
+ const { menuGroup } = useDefaultLayoutContext();
229
+ return menuGroup() === "bottom" ? DefaultVideoMenus() : null;
230
+ });
231
+ }
232
+ function DefaultControlsGroupTop() {
233
+ return html`
234
+ <media-controls-group class="vds-controls-group">
235
+ ${$signal(() => {
236
+ const { menuGroup } = useDefaultLayoutContext();
237
+ return menuGroup() === "top" ? [DefaultControlsSpacer(), DefaultVideoMenus()] : null;
238
+ })}
239
+ </media-controls-group>
240
+ `;
241
+ }
242
+ function DefaultVideoLayoutSmall() {
243
+ return [
244
+ DefaultAnnouncer(),
245
+ DefaultVideoGestures(),
246
+ DefaultBufferingIndicator(),
247
+ DefaultCaptions(),
248
+ DefaultKeyboardDisplay(),
249
+ html`<div class="vds-scrim"></div>`,
250
+ html`
251
+ <media-controls class="vds-controls">
252
+ <media-controls-group class="vds-controls-group">
253
+ ${[
254
+ DefaultAirPlayButton({ tooltip: "top start" }),
255
+ DefaultControlsSpacer(),
256
+ DefaultDownloadButton(),
257
+ DefaultVideoMenus(),
258
+ DefaultVolumePopup({ orientation: "vertical", tooltip: "bottom end" })
259
+ ]}
260
+ </media-controls-group>
261
+
262
+ ${DefaultControlsSpacer()}
263
+
264
+ <media-controls-group class="vds-controls-group" style="pointer-events: none;">
265
+ ${[
266
+ DefaultControlsSpacer(),
267
+ DefaultPlayButton({ tooltip: "top" }),
268
+ DefaultControlsSpacer()
269
+ ]}
270
+ </media-controls-group>
271
+
272
+ ${DefaultControlsSpacer()}
273
+
274
+ <media-controls-group class="vds-controls-group">
275
+ ${[DefaultTimeInfo(), DefaultTitle(), DefaultFullscreenButton({ tooltip: "top end" })]}
276
+ </media-controls-group>
277
+
278
+ <media-controls-group class="vds-controls-group">
279
+ ${DefaultTimeSlider()}
280
+ </media-controls-group>
281
+ </media-controls>
282
+ `,
283
+ StartDuration()
284
+ ];
285
+ }
286
+ function DefaultVideoLoadLayout() {
287
+ return html`
288
+ <div class="vds-load-container">
289
+ ${[DefaultBufferingIndicator(), DefaultPlayButton({ tooltip: "top" })]}
290
+ </div>
291
+ `;
292
+ }
293
+ function StartDuration() {
294
+ return $signal(() => {
295
+ const { duration } = useMediaState();
296
+ if (duration() === 0) return null;
297
+ return html`
298
+ <div class="vds-start-duration">
299
+ <media-time class="vds-time" type="duration"></media-time>
300
+ </div>
301
+ `;
302
+ });
303
+ }
304
+ function DefaultBufferingIndicator() {
305
+ return html`
306
+ <div class="vds-buffering-indicator">
307
+ <media-spinner class="vds-buffering-spinner"></media-spinner>
308
+ </div>
309
+ `;
310
+ }
311
+ function DefaultVideoMenus() {
312
+ const { menuGroup, smallWhen: smWhen } = useDefaultLayoutContext(), $side = () => menuGroup() === "top" || smWhen() ? "bottom" : "top", $tooltip = computed(() => `${$side()} ${menuGroup() === "top" ? "end" : "center"}`), $placement = computed(() => `${$side()} end`);
313
+ return [
314
+ DefaultChaptersMenu({ tooltip: $tooltip, placement: $placement, portal: true }),
315
+ DefaultCaptionsMenu({ tooltip: $tooltip, placement: $placement, portal: true }),
316
+ DefaultSettingsMenu({ tooltip: $tooltip, placement: $placement, portal: true })
317
+ ];
318
+ }
319
+ function DefaultVideoGestures() {
320
+ return $signal(() => {
321
+ const { noGestures } = useDefaultLayoutContext();
322
+ if (noGestures()) return null;
323
+ return html`
324
+ <div class="vds-gestures">
325
+ <media-gesture class="vds-gesture" event="pointerup" action="toggle:paused"></media-gesture>
326
+ <media-gesture
327
+ class="vds-gesture"
328
+ event="pointerup"
329
+ action="toggle:controls"
330
+ ></media-gesture>
331
+ <media-gesture
332
+ class="vds-gesture"
333
+ event="dblpointerup"
334
+ action="toggle:fullscreen"
335
+ ></media-gesture>
336
+ <media-gesture class="vds-gesture" event="dblpointerup" action="seek:-10"></media-gesture>
337
+ <media-gesture class="vds-gesture" event="dblpointerup" action="seek:10"></media-gesture>
338
+ </div>
339
+ `;
340
+ });
341
+ }
342
+
343
+ class MediaVideoLayoutElement extends Host(LitElement, DefaultVideoLayout) {
344
+ static tagName = "media-video-layout";
345
+ static attrs = {
346
+ smallWhen: {
347
+ converter(value) {
348
+ return value !== "never" && !!value;
349
+ }
350
+ }
351
+ };
352
+ #media;
353
+ onSetup() {
354
+ this.forwardKeepAlive = false;
355
+ this.#media = useMediaContext();
356
+ this.classList.add("vds-video-layout");
357
+ }
358
+ onConnect() {
359
+ setLayoutName("video", () => this.isMatch);
360
+ this.#setupMenuContainer();
361
+ }
362
+ render() {
363
+ return $signal(this.#render.bind(this));
364
+ }
365
+ #setupMenuContainer() {
366
+ const { menuPortal } = useDefaultLayoutContext();
367
+ effect(() => {
368
+ if (!this.isMatch) return;
369
+ const container = createMenuContainer(
370
+ this,
371
+ this.menuContainer,
372
+ "vds-video-layout",
373
+ () => this.isSmallLayout
374
+ ), roots = container ? [this, container] : [this];
375
+ const iconsManager = this.$props.customIcons() ? new SlotManager(roots) : new DefaultLayoutIconsLoader(roots);
376
+ iconsManager.connect();
377
+ menuPortal.set(container);
378
+ return () => {
379
+ container.remove();
380
+ menuPortal.set(null);
381
+ };
382
+ });
383
+ }
384
+ #render() {
385
+ const { load } = this.#media.$props, { canLoad, streamType, nativeControls } = this.#media.$state;
386
+ return !nativeControls() && this.isMatch ? load() === "play" && !canLoad() ? DefaultVideoLoadLayout() : streamType() === "unknown" ? DefaultBufferingIndicator() : this.isSmallLayout ? DefaultVideoLayoutSmall() : DefaultVideoLayoutLarge() : null;
387
+ }
388
+ }
389
+
390
+ export { MediaVideoLayoutElement };
@@ -0,0 +1 @@
1
+ import 'media-icons/element';
@@ -0,0 +1,21 @@
1
+ import { defineCustomElement } from '../chunks/vidstack-Bu2kfzUd.js';
2
+ import { MediaAudioLayoutElement } from './templates/vidstack-audio-layout.js';
3
+ import { MediaVideoLayoutElement } from './templates/vidstack-video-layout.js';
4
+ import '../chunks/vidstack-DlAhl87f.js';
5
+ import '../chunks/vidstack-DFImIcIL.js';
6
+ import '../chunks/vidstack-C_l97D5j.js';
7
+ import '@floating-ui/dom';
8
+ import 'lit-html';
9
+ import '../chunks/vidstack-Bcmx8pmK.js';
10
+ import 'lit-html/directives/if-defined.js';
11
+ import 'lit-html/directives/unsafe-svg.js';
12
+ import 'lit-html/async-directive.js';
13
+ import '../chunks/vidstack-BGB2pa9s.js';
14
+ import 'lit-html/directives/ref.js';
15
+ import '../chunks/vidstack-zG6PIeGg.js';
16
+ import '../chunks/vidstack-CjhKISI0.js';
17
+ import '../chunks/vidstack-CwTj4H1w.js';
18
+ import 'lit-html/directives/keyed.js';
19
+
20
+ defineCustomElement(MediaAudioLayoutElement);
21
+ defineCustomElement(MediaVideoLayoutElement);
@@ -0,0 +1,25 @@
1
+ import { defineCustomElement } from '../chunks/vidstack-Bu2kfzUd.js';
2
+ import { MediaAudioLayoutElement } from './templates/vidstack-audio-layout.js';
3
+ import { MediaVideoLayoutElement } from './templates/vidstack-video-layout.js';
4
+ import { MediaPlyrLayoutElement } from './templates/plyr-layout.js';
5
+ import '../chunks/vidstack-DlAhl87f.js';
6
+ import '../chunks/vidstack-DFImIcIL.js';
7
+ import '../chunks/vidstack-C_l97D5j.js';
8
+ import '@floating-ui/dom';
9
+ import 'lit-html';
10
+ import '../chunks/vidstack-Bcmx8pmK.js';
11
+ import 'lit-html/directives/if-defined.js';
12
+ import 'lit-html/directives/unsafe-svg.js';
13
+ import 'lit-html/async-directive.js';
14
+ import '../chunks/vidstack-BGB2pa9s.js';
15
+ import 'lit-html/directives/ref.js';
16
+ import '../chunks/vidstack-zG6PIeGg.js';
17
+ import '../chunks/vidstack-CjhKISI0.js';
18
+ import '../chunks/vidstack-CwTj4H1w.js';
19
+ import 'lit-html/directives/keyed.js';
20
+ import '../chunks/vidstack-DO0kqA99.js';
21
+ import 'lit-html/directives/unsafe-html.js';
22
+
23
+ defineCustomElement(MediaAudioLayoutElement);
24
+ defineCustomElement(MediaVideoLayoutElement);
25
+ defineCustomElement(MediaPlyrLayoutElement);
@@ -0,0 +1,70 @@
1
+ import { defineCustomElement } from '../chunks/vidstack-Bu2kfzUd.js';
2
+ import { MediaLayoutElement, MediaControlsElement, MediaControlsGroupElement, MediaAnnouncerElement, MediaTooltipElement, MediaTooltipTriggerElement, MediaTooltipContentElement, MediaGoogleCastButtonElement, MediaToggleButtonElement, MediaSliderElement, MediaAudioGainSliderElement, MediaSpeedSliderElement, MediaQualitySliderElement, MediaSliderChaptersElement, MediaSliderStepsElement, MediaSliderVideoElement, MediaMenuPortalElement, MediaAudioGainRadioGroupElement, MediaChaptersRadioGroupElement, MediaRadioGroupElement, MediaGestureElement, MediaCaptionsElement, MediaTitleElement, MediaChapterTitleElement, MediaSpinnerElement } from '../chunks/vidstack-DajrMUR0.js';
3
+ import { MediaPlayButtonElement, MediaMuteButtonElement, MediaCaptionButtonElement, MediaFullscreenButtonElement, MediaPIPButtonElement, MediaSeekButtonElement, MediaAirPlayButtonElement, MediaVolumeSliderElement, MediaTimeSliderElement, MediaSliderPreviewElement, MediaSliderValueElement, MediaSliderThumbnailElement, MediaMenuElement, MediaMenuButtonElement, MediaMenuItemsElement, MediaMenuItemElement, MediaAudioRadioGroupElement, MediaCaptionsRadioGroupElement, MediaSpeedRadioGroupElement, MediaQualityRadioGroupElement, MediaRadioElement, MediaThumbnailElement, MediaLiveButtonElement, MediaTimeElement } from '../chunks/vidstack-Bt8MP2DK.js';
4
+ import { MediaPosterElement } from '../chunks/vidstack-DGDvUbvO.js';
5
+ import '../chunks/vidstack-BaIbHZE3.js';
6
+ import '../chunks/vidstack-DFImIcIL.js';
7
+ import '../chunks/vidstack-C_l97D5j.js';
8
+ import '@floating-ui/dom';
9
+ import '../chunks/vidstack-C-ffXlSV.js';
10
+ import '../chunks/vidstack-igYn0Apa.js';
11
+ import '../chunks/vidstack-zG6PIeGg.js';
12
+ import '../chunks/vidstack-CjhKISI0.js';
13
+ import '../chunks/vidstack-BGB2pa9s.js';
14
+ import '../chunks/vidstack-CofXIJAy.js';
15
+ import '../chunks/vidstack-Dihypf8P.js';
16
+ import '../chunks/vidstack-DbBJlz7I.js';
17
+ import 'lit-html';
18
+ import '../chunks/vidstack-CwTj4H1w.js';
19
+ import '../chunks/vidstack-rB-wqXw1.js';
20
+
21
+ defineCustomElement(MediaLayoutElement);
22
+ defineCustomElement(MediaControlsElement);
23
+ defineCustomElement(MediaControlsGroupElement);
24
+ defineCustomElement(MediaPosterElement);
25
+ defineCustomElement(MediaAnnouncerElement);
26
+ defineCustomElement(MediaTooltipElement);
27
+ defineCustomElement(MediaTooltipTriggerElement);
28
+ defineCustomElement(MediaTooltipContentElement);
29
+ defineCustomElement(MediaPlayButtonElement);
30
+ defineCustomElement(MediaMuteButtonElement);
31
+ defineCustomElement(MediaCaptionButtonElement);
32
+ defineCustomElement(MediaFullscreenButtonElement);
33
+ defineCustomElement(MediaPIPButtonElement);
34
+ defineCustomElement(MediaSeekButtonElement);
35
+ defineCustomElement(MediaAirPlayButtonElement);
36
+ defineCustomElement(MediaGoogleCastButtonElement);
37
+ defineCustomElement(MediaToggleButtonElement);
38
+ defineCustomElement(MediaSliderElement);
39
+ defineCustomElement(MediaAudioGainSliderElement);
40
+ defineCustomElement(MediaVolumeSliderElement);
41
+ defineCustomElement(MediaTimeSliderElement);
42
+ defineCustomElement(MediaSpeedSliderElement);
43
+ defineCustomElement(MediaQualitySliderElement);
44
+ defineCustomElement(MediaSliderChaptersElement);
45
+ defineCustomElement(MediaSliderStepsElement);
46
+ defineCustomElement(MediaSliderPreviewElement);
47
+ defineCustomElement(MediaSliderValueElement);
48
+ defineCustomElement(MediaSliderThumbnailElement);
49
+ defineCustomElement(MediaSliderVideoElement);
50
+ defineCustomElement(MediaMenuElement);
51
+ defineCustomElement(MediaMenuButtonElement);
52
+ defineCustomElement(MediaMenuPortalElement);
53
+ defineCustomElement(MediaMenuItemsElement);
54
+ defineCustomElement(MediaMenuItemElement);
55
+ defineCustomElement(MediaAudioRadioGroupElement);
56
+ defineCustomElement(MediaCaptionsRadioGroupElement);
57
+ defineCustomElement(MediaSpeedRadioGroupElement);
58
+ defineCustomElement(MediaAudioGainRadioGroupElement);
59
+ defineCustomElement(MediaQualityRadioGroupElement);
60
+ defineCustomElement(MediaChaptersRadioGroupElement);
61
+ defineCustomElement(MediaRadioGroupElement);
62
+ defineCustomElement(MediaRadioElement);
63
+ defineCustomElement(MediaGestureElement);
64
+ defineCustomElement(MediaThumbnailElement);
65
+ defineCustomElement(MediaCaptionsElement);
66
+ defineCustomElement(MediaLiveButtonElement);
67
+ defineCustomElement(MediaTimeElement);
68
+ defineCustomElement(MediaTitleElement);
69
+ defineCustomElement(MediaChapterTitleElement);
70
+ defineCustomElement(MediaSpinnerElement);