@videojs/html 10.0.0-beta.21 → 10.0.0-beta.22

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 (193) hide show
  1. package/cdn/audio-minimal-ui.dev.js +3 -3
  2. package/cdn/audio-minimal-ui.js +1 -1
  3. package/cdn/audio-minimal.dev.js +5 -5
  4. package/cdn/audio-minimal.js +1 -1
  5. package/cdn/audio-ui.dev.js +3 -3
  6. package/cdn/audio-ui.js +1 -1
  7. package/cdn/audio.dev.js +5 -5
  8. package/cdn/audio.js +1 -1
  9. package/cdn/background.dev.js +1 -1
  10. package/cdn/background.js +1 -1
  11. package/cdn/compounds-CCgS3IGo.js +8 -0
  12. package/cdn/compounds-CCgS3IGo.js.map +1 -0
  13. package/cdn/{compounds-CM_NP-ej.js → compounds-DD3MYkSc.js} +7 -4
  14. package/cdn/compounds-DD3MYkSc.js.map +1 -0
  15. package/cdn/create-player-B-PGzhq2.js +7 -0
  16. package/cdn/create-player-B-PGzhq2.js.map +1 -0
  17. package/cdn/{create-player-Bi6WUwDZ.js → create-player-BKLw7l1a.js} +123 -59
  18. package/cdn/create-player-BKLw7l1a.js.map +1 -0
  19. package/cdn/default-Djy9PEXm.js +2 -0
  20. package/cdn/default-Djy9PEXm.js.map +1 -0
  21. package/cdn/{default-XHZAb7gP.js → default-YzaLyoYg.js} +3 -1
  22. package/cdn/default-YzaLyoYg.js.map +1 -0
  23. package/cdn/{hls-BotloEPN.js → hls-CcSAx_3I.js} +5 -5
  24. package/cdn/{hls-BotloEPN.js.map → hls-CcSAx_3I.js.map} +1 -1
  25. package/cdn/{hls-CBpGTZXU.js → hls-Dl2v35sW.js} +3 -3
  26. package/cdn/{hls-CBpGTZXU.js.map → hls-Dl2v35sW.js.map} +1 -1
  27. package/cdn/{hotkey-element-317kwVH5.js → hotkey-element-BONs_FyJ.js} +3 -3
  28. package/cdn/{hotkey-element-317kwVH5.js.map → hotkey-element-BONs_FyJ.js.map} +1 -1
  29. package/cdn/{hotkey-element-DRGCbVj9.js → hotkey-element-DWWkfH3A.js} +2 -2
  30. package/cdn/{hotkey-element-DRGCbVj9.js.map → hotkey-element-DWWkfH3A.js.map} +1 -1
  31. package/cdn/media/dash-video.dev.js +1 -1
  32. package/cdn/media/dash-video.js +1 -1
  33. package/cdn/media/hls-video.dev.js +2 -2
  34. package/cdn/media/hls-video.js +1 -1
  35. package/cdn/media/mux-audio.dev.js +3 -3
  36. package/cdn/media/mux-audio.js +1 -1
  37. package/cdn/media/mux-video.dev.js +3 -3
  38. package/cdn/media/mux-video.js +1 -1
  39. package/cdn/media/native-hls-video.dev.js +2 -2
  40. package/cdn/media/native-hls-video.js +1 -1
  41. package/cdn/media/simple-hls-video.dev.js +1 -1
  42. package/cdn/media/simple-hls-video.js +1 -1
  43. package/cdn/{minimal-BnDnlwbj.js → minimal-AX_y2YBU.js} +3 -1
  44. package/cdn/minimal-AX_y2YBU.js.map +1 -0
  45. package/cdn/minimal-Bc74CFqg.js +2 -0
  46. package/cdn/minimal-Bc74CFqg.js.map +1 -0
  47. package/cdn/{minimal-ui-DhxN21v5.js → minimal-ui-CE1sVxKB.js} +4 -4
  48. package/cdn/{minimal-ui-DhxN21v5.js.map → minimal-ui-CE1sVxKB.js.map} +1 -1
  49. package/cdn/minimal-ui-hC8-_9_F.js +2 -0
  50. package/cdn/{minimal-ui-CroDYUGf.js.map → minimal-ui-hC8-_9_F.js.map} +1 -1
  51. package/cdn/minimal-ui-lnw8AjaS.js +2 -0
  52. package/cdn/minimal-ui-lnw8AjaS.js.map +1 -0
  53. package/cdn/{minimal-ui-cy2oEbFm.js → minimal-ui-yKur3jyD.js} +5 -4
  54. package/cdn/minimal-ui-yKur3jyD.js.map +1 -0
  55. package/cdn/mux-BgWl50KW.js +27 -0
  56. package/cdn/mux-BgWl50KW.js.map +1 -0
  57. package/cdn/{mux-B5K6kOzg.js → mux-BhHIeG3e.js} +716 -5
  58. package/cdn/mux-BhHIeG3e.js.map +1 -0
  59. package/cdn/{native-hls-CU2F7L5C.js → native-hls-lhip4tV9.js} +2 -2
  60. package/cdn/{native-hls-CU2F7L5C.js.map → native-hls-lhip4tV9.js.map} +1 -1
  61. package/cdn/{native-hls-DKcYYWRt.js → native-hls-odPBXxK7.js} +2 -2
  62. package/cdn/{native-hls-DKcYYWRt.js.map → native-hls-odPBXxK7.js.map} +1 -1
  63. package/cdn/player-B7jISTmQ.js +2 -0
  64. package/cdn/player-B7jISTmQ.js.map +1 -0
  65. package/cdn/{player-xstFHOgW.js → player-BVGWmIbQ.js} +2 -2
  66. package/cdn/{player-xstFHOgW.js.map → player-BVGWmIbQ.js.map} +1 -1
  67. package/cdn/player-ChdQN3H5.js +2 -0
  68. package/cdn/{player-BK35-ndY.js.map → player-ChdQN3H5.js.map} +1 -1
  69. package/cdn/{player-CatrGW7l.js → player-DX5Ka0vt.js} +85 -4
  70. package/cdn/player-DX5Ka0vt.js.map +1 -0
  71. package/cdn/{skin-element-CDUkmCtS.js → skin-element-D3iVinGP.js} +2 -2
  72. package/cdn/{skin-element-CDUkmCtS.js.map → skin-element-D3iVinGP.js.map} +1 -1
  73. package/cdn/{skin-element-BGP23sop.js → skin-element-DM82PPxz.js} +2 -2
  74. package/cdn/{skin-element-BGP23sop.js.map → skin-element-DM82PPxz.js.map} +1 -1
  75. package/cdn/ui-BGvi0TNr.js +2 -0
  76. package/cdn/{ui-QHwo6iyo.js.map → ui-BGvi0TNr.js.map} +1 -1
  77. package/cdn/ui-BN57BxYZ.js +2 -0
  78. package/cdn/ui-BN57BxYZ.js.map +1 -0
  79. package/cdn/{ui-AFHQtrqa.js → ui-CKR6dVbQ.js} +5 -5
  80. package/cdn/{ui-AFHQtrqa.js.map → ui-CKR6dVbQ.js.map} +1 -1
  81. package/cdn/{ui-Em9rF9Ah.js → ui-CZ4yl3t3.js} +6 -5
  82. package/cdn/ui-CZ4yl3t3.js.map +1 -0
  83. package/cdn/{video-host-ycP7ckxU.js → video-host-BtD61mpF.js} +60 -30
  84. package/cdn/{video-host-ycP7ckxU.js.map → video-host-BtD61mpF.js.map} +1 -1
  85. package/cdn/{video-host-CPRJVRi3.js → video-host-LeB1FKfO.js} +2 -2
  86. package/cdn/{video-host-CPRJVRi3.js.map → video-host-LeB1FKfO.js.map} +1 -1
  87. package/cdn/video-minimal-ui.dev.js +3 -3
  88. package/cdn/video-minimal-ui.js +1 -1
  89. package/cdn/video-minimal.dev.js +12 -6
  90. package/cdn/video-minimal.dev.js.map +1 -1
  91. package/cdn/video-minimal.js +1 -1
  92. package/cdn/video-minimal.js.map +1 -1
  93. package/cdn/video-ui.dev.js +3 -3
  94. package/cdn/video-ui.js +1 -1
  95. package/cdn/video.dev.js +12 -6
  96. package/cdn/video.dev.js.map +1 -1
  97. package/cdn/video.js +1 -1
  98. package/cdn/video.js.map +1 -1
  99. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  100. package/dist/default/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  101. package/dist/default/_virtual/inline-css_src/define/video/skin.js +1 -1
  102. package/dist/default/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  103. package/dist/default/define/ui/cast-button.js +7 -0
  104. package/dist/default/define/ui/cast-button.js.map +1 -0
  105. package/dist/default/define/video/minimal-skin.css +6 -0
  106. package/dist/default/define/video/minimal-skin.js +1 -1
  107. package/dist/default/define/video/minimal-skin.js.map +1 -1
  108. package/dist/default/define/video/minimal-skin.tailwind.js +1 -1
  109. package/dist/default/define/video/minimal-skin.tailwind.js.map +1 -1
  110. package/dist/default/define/video/minimal-ui.js +2 -0
  111. package/dist/default/define/video/minimal-ui.js.map +1 -1
  112. package/dist/default/define/video/skin.css +6 -0
  113. package/dist/default/define/video/skin.js +1 -1
  114. package/dist/default/define/video/skin.js.map +1 -1
  115. package/dist/default/define/video/skin.tailwind.js +1 -1
  116. package/dist/default/define/video/skin.tailwind.js.map +1 -1
  117. package/dist/default/define/video/ui.js +2 -0
  118. package/dist/default/define/video/ui.js.map +1 -1
  119. package/dist/default/icons/dist/render/default/index.js +2 -0
  120. package/dist/default/icons/dist/render/default/index.js.map +1 -1
  121. package/dist/default/icons/dist/render/minimal/index.js +2 -0
  122. package/dist/default/icons/dist/render/minimal/index.js.map +1 -1
  123. package/dist/default/index.js +2 -1
  124. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js +5 -0
  125. package/dist/default/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  126. package/dist/default/ui/cast-button/cast-button-element.js +24 -0
  127. package/dist/default/ui/cast-button/cast-button-element.js.map +1 -0
  128. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js +1 -1
  129. package/dist/dev/_virtual/inline-css_src/define/video/minimal-skin.js.map +1 -1
  130. package/dist/dev/_virtual/inline-css_src/define/video/skin.js +1 -1
  131. package/dist/dev/_virtual/inline-css_src/define/video/skin.js.map +1 -1
  132. package/dist/dev/define/ui/cast-button.d.ts +9 -0
  133. package/dist/dev/define/ui/cast-button.d.ts.map +1 -0
  134. package/dist/dev/define/ui/cast-button.js +7 -0
  135. package/dist/dev/define/ui/cast-button.js.map +1 -0
  136. package/dist/dev/define/video/minimal-skin.css +6 -0
  137. package/dist/dev/define/video/minimal-skin.d.ts.map +1 -1
  138. package/dist/dev/define/video/minimal-skin.js +6 -0
  139. package/dist/dev/define/video/minimal-skin.js.map +1 -1
  140. package/dist/dev/define/video/minimal-skin.tailwind.d.ts.map +1 -1
  141. package/dist/dev/define/video/minimal-skin.tailwind.js +5 -0
  142. package/dist/dev/define/video/minimal-skin.tailwind.js.map +1 -1
  143. package/dist/dev/define/video/minimal-ui.js +2 -0
  144. package/dist/dev/define/video/minimal-ui.js.map +1 -1
  145. package/dist/dev/define/video/skin.css +6 -0
  146. package/dist/dev/define/video/skin.d.ts.map +1 -1
  147. package/dist/dev/define/video/skin.js +6 -0
  148. package/dist/dev/define/video/skin.js.map +1 -1
  149. package/dist/dev/define/video/skin.tailwind.d.ts.map +1 -1
  150. package/dist/dev/define/video/skin.tailwind.js +5 -0
  151. package/dist/dev/define/video/skin.tailwind.js.map +1 -1
  152. package/dist/dev/define/video/ui.js +2 -0
  153. package/dist/dev/define/video/ui.js.map +1 -1
  154. package/dist/dev/icons/dist/render/default/index.js +2 -0
  155. package/dist/dev/icons/dist/render/default/index.js.map +1 -1
  156. package/dist/dev/icons/dist/render/minimal/index.js +2 -0
  157. package/dist/dev/icons/dist/render/minimal/index.js.map +1 -1
  158. package/dist/dev/index.d.ts +2 -1
  159. package/dist/dev/index.js +2 -1
  160. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js +5 -0
  161. package/dist/dev/skins/dist/default/shared/tailwind/icon-state.js.map +1 -1
  162. package/dist/dev/ui/cast-button/cast-button-element.d.ts +19 -0
  163. package/dist/dev/ui/cast-button/cast-button-element.d.ts.map +1 -0
  164. package/dist/dev/ui/cast-button/cast-button-element.js +24 -0
  165. package/dist/dev/ui/cast-button/cast-button-element.js.map +1 -0
  166. package/package.json +8 -8
  167. package/cdn/compounds-CM_NP-ej.js.map +0 -1
  168. package/cdn/compounds-Vvz-YfXP.js +0 -8
  169. package/cdn/compounds-Vvz-YfXP.js.map +0 -1
  170. package/cdn/create-player-Bi6WUwDZ.js.map +0 -1
  171. package/cdn/create-player-CKuX8YI5.js +0 -7
  172. package/cdn/create-player-CKuX8YI5.js.map +0 -1
  173. package/cdn/default-C8KsZ0zK.js +0 -2
  174. package/cdn/default-C8KsZ0zK.js.map +0 -1
  175. package/cdn/default-XHZAb7gP.js.map +0 -1
  176. package/cdn/minimal-BnDnlwbj.js.map +0 -1
  177. package/cdn/minimal-CqBxBoLe.js +0 -2
  178. package/cdn/minimal-CqBxBoLe.js.map +0 -1
  179. package/cdn/minimal-ui-C_G24FML.js +0 -2
  180. package/cdn/minimal-ui-C_G24FML.js.map +0 -1
  181. package/cdn/minimal-ui-CroDYUGf.js +0 -2
  182. package/cdn/minimal-ui-cy2oEbFm.js.map +0 -1
  183. package/cdn/mux-B5K6kOzg.js.map +0 -1
  184. package/cdn/mux-DJhfbcCw.js +0 -25
  185. package/cdn/mux-DJhfbcCw.js.map +0 -1
  186. package/cdn/player-BK35-ndY.js +0 -2
  187. package/cdn/player-C7ajkBi4.js +0 -2
  188. package/cdn/player-C7ajkBi4.js.map +0 -1
  189. package/cdn/player-CatrGW7l.js.map +0 -1
  190. package/cdn/ui-B7vt9mp-.js +0 -2
  191. package/cdn/ui-B7vt9mp-.js.map +0 -1
  192. package/cdn/ui-Em9rF9Ah.js.map +0 -1
  193. package/cdn/ui-QHwo6iyo.js +0 -2
@@ -0,0 +1,7 @@
1
+ import{t as e}from"./listen-DFX-0NbX.js";import{a as t,n,r,t as i}from"./context-CEFisYD0.js";import{t as a}from"./abort-C9UiBdVU.js";import{t as o}from"./shallow-equal-xh6Wj-hj.js";function s(e){let t=e.composedPath();return t.length>0?t[0]:e.target}function c(e,t,n){return new Promise((r,i)=>{let a=()=>{i(n?.signal?.reason??`Aborted`)};if(n?.signal?.aborted){a();return}n?.signal?.addEventListener(`abort`,a,{once:!0}),e.addEventListener(t,e=>{n?.signal?.removeEventListener(`abort`,a),r(e)},{...n,once:!0})})}const l=[`textarea`,`select`,`input:not([type])`,...[`text`,`search`,`url`,`tel`,`email`,`password`,`number`].map(e=>`input[type="${e}"]`),`[contenteditable]:not([contenteditable="false"])`].join(`,`);function u(e){return e.matches(l)}function d(e){let t=s(e);return t instanceof Element&&u(t)}function f(e){let t=s(e);return t instanceof Element?t.closest(`button,input,select,textarea,a[href],[role="slider"],[role="button"],[data-interactive]`)!==null:!1}const p=new Set([` `,`Enter`]);function m(e){if(!p.has(e.key))return!1;let t=s(e);return t instanceof Element&&t.matches(`button,a[href],[role="slider"],[role="button"]`)}function h(e,t){if(!(e instanceof HTMLElement))return null;for(let n of e.querySelectorAll(`track`))if(n.track===t)return n;return null}function g(e,t){return e.textTracks?Array.from(e.textTracks).filter(t).sort(ee):[]}function ee(e,t){return e.kind>t.kind?1:e.kind<t.kind?-1:0}function _(e){let t=[];for(let n=0;n<e.length;n++)t.push([e.start(n),e.end(n)]);return t}function te(e){class t extends e{#e=!1;#t=new Set;get destroyed(){return this.#e}destroy(){this.#e||(this.#e=!0,this.destroyCallback())}destroyCallback(){for(let e of this.#t)e.hostDestroyed?.()}addController(e){super.addController(e),this.#t.add(e)}removeController(e){super.removeController(e),this.#t.delete(e)}connectedCallback(){this.#e||super.connectedCallback()}disconnectedCallback(){super.disconnectedCallback(),!this.#e&&!this.hasAttribute(`keep-alive`)&&requestAnimationFrame(()=>{requestAnimationFrame(()=>{this.isConnected||this.destroy()})})}performUpdate(){this.#e||super.performUpdate()}}return t}const ne=new WeakMap,re=new Map;var ie=class extends HTMLElement{static{this.properties={}}static get observedAttributes(){return[...v(this).attrToProp.keys()]}#e=new Set;#t=new Map;#n;#r;constructor(){super(),this.isUpdatePending=!1,this.hasUpdated=!1,this.#r=new Promise(e=>this.enableUpdating=e);let{props:e}=v(this.constructor);for(let t of e.keys())Object.hasOwn(this,t)&&((this.#n??=new Map).set(t,this[t]),delete this[t]);this.requestUpdate()}enableUpdating(e){}addController(e){this.#e.add(e),this.isConnected&&e.hostConnected?.()}removeController(e){this.#e.delete(e)}connectedCallback(){this.enableUpdating(!0);for(let e of this.#e)e.hostConnected?.()}disconnectedCallback(){for(let e of this.#e)e.hostDisconnected?.()}attributeChangedCallback(e,t,n){if(t===n)return;let{props:r,attrToProp:i}=v(this.constructor),a=i.get(e);if(!a)return;let o=r.get(a);if(!o)return;let s=n;o.type===Boolean?s=n!==null:o.type===Number&&(s=n===null?null:Number(n)),this[a]=s}requestUpdate(e,t){e!==void 0&&this.#t.set(e,t),!this.isUpdatePending&&(this.#r=this.#i())}async#i(){this.isUpdatePending=!0;try{await this.#r}catch(e){Promise.reject(e)}let e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated&&this.#n){for(let[e,t]of this.#n)this[e]=t;this.#n=void 0}let e=this.#t;this.willUpdate(e);for(let e of this.#e)e.hostUpdate?.();this.update(e),this.#t=new Map,this.isUpdatePending=!1;for(let e of this.#e)e.hostUpdated?.();this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}willUpdate(e){}update(e){}firstUpdated(e){}updated(e){}get updateComplete(){return this.#r}};function v(e){let t=ne.get(e);if(t)return t;let n=new Map,r=new Map;for(let[t,i]of Object.entries(e.properties))if(n.set(t,i),r.set(i.attribute??t,t),!Object.getOwnPropertyDescriptor(e.prototype,t)?.get){let n=re.get(t);n||(n=Symbol(t),re.set(t,n)),Object.defineProperty(e.prototype,t,{get(){return this[n]},set(e){let r=this[n];this[n]=e,Object.is(r,e)||this.requestUpdate(t,r)},configurable:!0,enumerable:!0})}let i={props:n,attrToProp:r};return ne.set(e,i),i}
2
+ /**
3
+ * @license
4
+ * Copyright 2021 Google LLC
5
+ * SPDX-License-Identifier: BSD-3-Clause
6
+ */var y=class{constructor(e,t,n,r){if(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(e,t)=>{this.unsubscribe&&(this.unsubscribe!==t&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=e,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(e,t)),this.unsubscribe=t},this.host=e,t.context!==void 0){let e=t;this.context=e.context,this.callback=e.callback,this.subscribe=e.subscribe??!1}else this.context=t,this.callback=n,this.subscribe=r??!1;this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&=(this.unsubscribe(),void 0)}dispatchRequest(){this.host.dispatchEvent(new t(this.context,this.host,this.t,this.subscribe))}},ae=class{get value(){return this.o}set value(e){this.setValue(e)}setValue(e,t=!1){let n=t||!Object.is(e,this.o);this.o=e,n&&this.updateObservers()}constructor(e){this.subscriptions=new Map,this.updateObservers=()=>{for(let[e,{disposer:t}]of this.subscriptions)e(this.o,t)},e!==void 0&&(this.value=e)}addCallback(e,t,n){if(!n)return void e(this.value);this.subscriptions.has(e)||this.subscriptions.set(e,{disposer:()=>{this.subscriptions.delete(e)},consumerHost:t});let{disposer:r}=this.subscriptions.get(e);e(this.value,r)}clearCallbacks(){this.subscriptions.clear()}},oe=class extends Event{constructor(e,t){super(`context-provider`,{bubbles:!0,composed:!0}),this.context=e,this.contextTarget=t}},b=class extends ae{constructor(e,n,r){super(n.context===void 0?r:n.initialValue),this.onContextRequest=e=>{if(e.context!==this.context)return;let t=e.contextTarget??e.composedPath()[0];t!==this.host&&(e.stopPropagation(),this.addCallback(e.callback,t,e.subscribe))},this.onProviderRequest=e=>{if(e.context!==this.context||(e.contextTarget??e.composedPath()[0])===this.host)return;let n=new Set;for(let[e,{consumerHost:r}]of this.subscriptions)n.has(e)||(n.add(e),r.dispatchEvent(new t(this.context,r,e,!0)));e.stopPropagation()},this.host=e,n.context===void 0?this.context=n:this.context=n.context,this.attachListeners(),this.host.addController?.(this)}attachListeners(){this.host.addEventListener(`context-request`,this.onContextRequest),this.host.addEventListener(`context-provider`,this.onProviderRequest)}hostConnected(){this.host.dispatchEvent(new oe(this.context,this.host))}};function se(e){return t=>{class n extends t{#e=null;#t=null;constructor(...t){super(...t),new y(this,{context:e.playerContext,callback:e=>{this.#e=e??null},subscribe:!0}),new y(this,{context:e.containerContext,callback:e=>{this.#t=e?.setContainer??null,this.isConnected&&this.#t?.(this)},subscribe:!0})}get store(){return this.#e}connectedCallback(){super.connectedCallback(),this.#t?.(this)}disconnectedCallback(){super.disconnectedCallback(),this.#t?.(null)}}return n}}var ce=class extends te(ie){};const le=se({playerContext:r,containerContext:i});var ue=class extends le(ce){static{this.tagName=`media-container`}#e=null;connectedCallback(){super.connectedCallback(),this.hasAttribute(`tabindex`)||this.setAttribute(`tabindex`,`0`),this.#e=new AbortController,e(this,`pointerup`,this.#t,{signal:this.#e.signal})}disconnectedCallback(){super.disconnectedCallback(),this.#e?.abort(),this.#e=null}#t=()=>{(!this.contains(document.activeElement)||document.activeElement===document.body)&&this.focus({preventScroll:!0})}};function de(e){return typeof e==`number`}function x(e){return typeof e==`function`}function S(e){return e===null}function C(e){return e===void 0}function w(e){return typeof e==`object`&&!!e}var fe=class{#e=new AbortController;#t=new Map;get base(){return this.#e.signal}clear(){for(let e of this.#t.values())e.abort();this.#t.clear()}reset(){this.clear(),this.#e.abort(),this.#e=new AbortController}supersede(e){this.#t.get(e)?.abort();let t=new AbortController;return this.#t.set(e,t),a([this.#e.signal,t.signal])}};function pe(...e){return{state:t=>{let n=e.map(e=>e.state(t));return Object.assign({},...n)},attach:t=>{for(let n of e)try{n.attach?.(t)}catch(e){t.reportError(e)}}}}var me=class extends Error{code;cause;constructor(e,t){super(t?.message??e),this.name=`StoreError`,this.code=e,this.cause=t?.cause}};function he(){throw new me(`NO_TARGET`)}function T(){throw new me(`DESTROYED`)}function ge(){return e=>e}function E(...e){}let D=!1;function _e(){D||(D=!0,queueMicrotask(ve))}const O=new Set;function ve(){D=!1;for(let e of O)e.flush();O.clear()}const ye=Object.prototype.hasOwnProperty;var be=class{#e;#t=new Set;#n=!1;constructor(e){this.#e=Object.freeze({...e})}get current(){return this.#e}patch(e){let t={...this.#e},n=!1;for(let r in e){if(!ye.call(e,r))continue;let i=e[r];Object.is(this.#e[r],i)||(t[r]=i,n=!0)}n&&(this.#e=Object.freeze(t),this.#r())}subscribe(e,t){let n=t?.signal;if(n?.aborted)return E;if(this.#t.add(e),!n)return()=>this.#t.delete(e);let r=()=>this.#t.delete(e);return n.addEventListener(`abort`,r,{once:!0}),()=>{n.removeEventListener(`abort`,r),this.#t.delete(e)}}flush(){if(this.#n){this.#n=!1;for(let e of this.#t)e()}}#r(){this.#n=!0,O.add(this),_e()}};function xe(e){return new be(e)}const Se=Symbol(`@videojs/store`);function Ce(){return(e,t={})=>{let n=null,r=!1,i=new AbortController,a=new fe,o;function s(){r&&T(),n||he()}let c=e.state({target:()=>(s(),n),signals:a,get:()=>o.current,set:e=>o.patch(e)});o=xe(c);let l={[Se]:!0,get $state(){return o},get target(){return n},get destroyed(){return r},get state(){return o.current},attach:u,destroy:f,subscribe:p};for(let e of Object.keys(c))Object.defineProperty(l,e,{get:()=>o.current[e],enumerable:!0});try{t.onSetup?.({store:l,signal:i.signal})}catch(e){m(e)}return l;function u(i){r&&T(),a.reset(),n=i;let s={target:i,signal:a.base,get:()=>o.current,set:e=>o.patch(e),reportError:m,store:{get state(){return o.current},subscribe:p}};try{e.attach?.(s)}catch(e){m(e)}try{t.onAttach?.({store:l,target:i,signal:a.base})}catch(e){m(e)}return d}function d(){S(n)||(a.reset(),n=null,o.patch(c))}function f(){r||(r=!0,d(),i.abort())}function p(e,t){return o.subscribe(e,t)}function m(e){t.onError?t.onError({store:l,error:e}):console.error(`[vjs-store]`,e)}}}function we(e){return w(e)&&Se in e}const k=ge();function Te(e){return e.readyState>=1}function A(e){return w(e)&&`paused`in e&&`ended`in e&&x(e.pause)}function j(e){return w(e)&&`currentTime`in e&&`duration`in e&&`seeking`in e}function M(e){return w(e)&&`src`in e&&`currentSrc`in e&&`readyState`in e&&x(e.load)}function N(e){return w(e)&&`volume`in e&&`muted`in e}function P(e){return w(e)&&`playbackRate`in e}function Ee(e){return w(e)&&`buffered`in e&&`seekable`in e}function De(e){return w(e)&&`error`in e}function F(e){return w(e)&&`textTracks`in e}function I(e){return w(e)&&`remote`in e&&w(e.remote)}function Oe(e){return w(e)&&`querySelectorAll`in e&&x(e.querySelectorAll)}const L=k({name:`buffer`,state:()=>({buffered:[],seekable:[]}),attach({target:t,signal:n,set:r}){let{media:i}=t;if(!Ee(i))return;let a=()=>r({buffered:_(i.buffered),seekable:_(i.seekable)});a(),e(i,`progress`,a,{signal:n}),e(i,`emptied`,a,{signal:n})}});function R(e){let t=e;if(w(t.remote)&&`state`in t.remote&&`prompt`in t.remote)return t.remote}function z(e){return R(e)?.state===`connected`}function ke(e){return R(e)?.state===`connecting`}async function Ae(e){let t=R(e);if(!t)throw new DOMException(`Remote playback not supported`,`NotSupportedError`);return t.prompt()}function je(){let e=document;return e.fullscreenEnabled||e.webkitFullscreenEnabled?!0:x(document.createElement(`video`).webkitEnterFullscreen)}function Me(){let e=document;return e.fullscreenElement??e.webkitFullscreenElement??null}function B(e,t){if(t instanceof HTMLMediaElement){let e=t;if(e.webkitDisplayingFullscreen&&e.webkitPresentationMode===`fullscreen`)return!0}let n=e??t;if(Me()===n)return!0;if(n instanceof Element)try{return n.matches(`:fullscreen`)}catch{return!1}return!1}async function V(e,t){let n=document;if(e&&(n.fullscreenEnabled||n.webkitFullscreenEnabled)){let t=e;if(x(t.requestFullscreen))return t.requestFullscreen();if(x(t.webkitRequestFullscreen))return t.webkitRequestFullscreen()}if(t instanceof HTMLMediaElement){let e=t;if(x(e.webkitEnterFullscreen)){e.webkitEnterFullscreen();return}if(x(t.requestFullscreen))return t.requestFullscreen()}throw new DOMException(`Fullscreen not supported`,`NotSupportedError`)}async function H(e){let t=document;if(e instanceof HTMLMediaElement){let t=e;if(x(t.webkitExitFullscreen)&&t.webkitDisplayingFullscreen){t.webkitExitFullscreen();return}}if(x(t.exitFullscreen))return t.exitFullscreen();if(x(t.webkitExitFullscreen))return t.webkitExitFullscreen()}const Ne=k({name:`cast`,state:({target:e})=>({castState:`disconnected`,castAvailability:`unavailable`,async toggleCast(){let{media:t,container:n}=e();return z(t)||B(n,t)&&await H(),Ae(t)}}),attach({target:t,signal:n,set:r}){let{media:i}=t;if(!I(i))return;let a=()=>r({castState:i.remote.state});a(),e(i.remote,`connect`,a,{signal:n}),e(i.remote,`connecting`,a,{signal:n}),e(i.remote,`disconnect`,a,{signal:n}),i.remote.watchAvailability(e=>{r({castAvailability:e?`available`:`unavailable`})}).catch(()=>{r({castAvailability:`unsupported`})}),n.addEventListener(`abort`,()=>{i.remote?.cancelWatchAvailability().catch(()=>{})})}});function Pe(e,t,n){if(n.size===0)return null;let r=e-t.left,i=t.width;if(i===0)return null;let a=r/i;return n.size===2&&n.has(`left`)&&n.has(`right`)?a<.5?`left`:`right`:n.size===3?a<1/3?`left`:a<2/3?`center`:`right`:n.has(`left`)&&a<.5?`left`:n.has(`right`)&&a>=.5?`right`:n.has(`center`)&&(n.size===1||a>=1/3&&a<2/3)?`center`:null}var Fe=class{#e;#t=[];#n=new Set;#r=null;constructor(e){this.#e=e}get bindings(){return this.#t}add(e){this.#t.push(e),this.#n.add(e.recognizer),this.#i();let t=!1;return()=>{if(t)return;t=!0;let n=this.#t.indexOf(e);n!==-1&&this.#t.splice(n,1),this.#a()}}#i(){if(this.#r)return;this.#r=new AbortController;let{signal:t}=this.#r,n=0;e(this.#e,`pointerdown`,e=>{e.button===0&&(n=Date.now())},{signal:t}),e(this.#e,`pointerup`,e=>{if(e.button!==0||Date.now()-n>250||f(e))return;let t=e.pointerType,r=e.clientX,i=this.#e,a=this.#t,o={resolve:e=>Re(a,e,t,r,i)};for(let t of this.#n)t.handleUp(o,e)},{signal:t})}#a(){if(!(this.#t.length>0)){for(let e of this.#n)e.reset();this.#n.clear(),this.#r?.abort(),this.#r=null}}};const U=new WeakMap;function Ie(e){return U.get(e)}function Le(e){let t=U.get(e);return t||(t=new Fe(e),U.set(e,t)),t}function Re(e,t,n,r,i){let a=i.getBoundingClientRect(),o=ze(e,t,n),s=o.size>0?Pe(r,a,o):null,c=[];for(let r of e)if(!r.disabled&&r.type===t&&!(r.pointer&&r.pointer!==n)){if(r.region){if(r.region!==s)continue}else if(s!==null)continue;c.push(r)}return c}function ze(e,t,n){let r=new Set;for(let i of e)i.disabled||i.type===t&&(i.pointer&&i.pointer!==n||i.region&&r.add(i.region));return r}const Be=k({name:`controls`,state:({get:e,set:t})=>({userActive:!0,controlsVisible:!0,toggleControls(){let n=!e().userActive;return t({userActive:n,controlsVisible:n}),n}}),attach({target:t,signal:n,get:r,set:i}){let{media:a,container:o}=t;if(!A(a)||S(o))return;let s=e=>e||a.paused||z(a)||ke(a),c;function l(){clearTimeout(c),c=void 0}function u(){l(),c=setTimeout(f,2e3)}function d(){r().userActive||i({userActive:!0,controlsVisible:!0}),u()}function f(){l(),i({userActive:!1,controlsVisible:s(!1)})}i({toggleControls(){return r().controlsVisible?f():d(),r().controlsVisible}});let p=0;function m(){p=Date.now()}function h(e){if(e.pointerType===`touch`&&Date.now()-p<250){if(Ie(o)?.bindings.some(e=>e.type===`tap`&&e.action===`toggleControls`&&(!e.pointer||e.pointer===`touch`)))return;let t=[a,o].includes(e.target);r().controlsVisible&&t?f():d()}else d()}let g=()=>{let{userActive:e}=r();i({controlsVisible:s(e)}),!a.paused&&e&&u()};if(e(o,`pointermove`,d,{signal:n}),e(o,`pointerdown`,m,{signal:n}),e(o,`pointerup`,h,{signal:n}),e(o,`keyup`,d,{signal:n}),e(o,`focusin`,d,{signal:n}),e(o,`mouseleave`,f,{signal:n}),e(a,`play`,g,{signal:n}),e(a,`pause`,g,{signal:n}),e(a,`ended`,g,{signal:n}),I(a)){let t=()=>{let{userActive:e}=r();i({controlsVisible:s(e)})};e(a.remote,`connect`,t,{signal:n}),e(a.remote,`connecting`,t,{signal:n}),e(a.remote,`disconnect`,t,{signal:n})}n.addEventListener(`abort`,l,{once:!0}),u()}}),W=k({name:`error`,state:({set:e})=>({error:null,dismissError(){e({error:null})}}),attach({target:t,signal:n,set:r}){let{media:i}=t;De(i)&&(e(i,`error`,()=>r({error:i.error}),{signal:n}),e(i,`emptied`,()=>r({error:null}),{signal:n}))}});function G(e){let t=e.target;return t instanceof HTMLMediaElement?t:e}function Ve(){if(document.pictureInPictureEnabled){let e=/.*Version\/.*Safari\/.*/.test(navigator.userAgent),t=typeof matchMedia==`function`&&matchMedia(`(display-mode: standalone)`).matches;return!e||!t}return x(document.createElement(`video`).webkitSetPresentationMode)}function K(e){let t=G(e);return document.pictureInPictureElement===t?!0:t instanceof HTMLVideoElement?t.webkitPresentationMode===`picture-in-picture`:!1}async function He(e){let t=G(e);if(!(t instanceof HTMLVideoElement))throw new DOMException(`Picture-in-Picture not supported`,`NotSupportedError`);let n=t;if(x(n.webkitSetPresentationMode)){n.webkitSetPresentationMode(`picture-in-picture`);return}if(x(n.requestPictureInPicture)){await n.requestPictureInPicture();return}throw new DOMException(`Picture-in-Picture not supported`,`NotSupportedError`)}async function q(e){if(e){let t=G(e);if(t instanceof HTMLVideoElement){let e=t;if(x(e.webkitSetPresentationMode)&&e.webkitPresentationMode===`picture-in-picture`){e.webkitSetPresentationMode(`inline`);return}}}if(x(document.exitPictureInPicture))return document.exitPictureInPicture()}const Ue=k({name:`fullscreen`,state:({target:e})=>({fullscreen:!1,fullscreenAvailability:`unavailable`,async requestFullscreen(){let{media:t,container:n}=e();return K(t)&&await q(t),V(n,t)},async exitFullscreen(){let{media:t}=e();return H(t)},async toggleFullscreen(){let{media:t,container:n}=e();return B(n,t)?H(t):(K(t)&&await q(t),V(n,t))}}),attach({target:t,signal:n,set:r}){let{media:i,container:a}=t;r({fullscreenAvailability:je()?`available`:`unsupported`});let o=()=>r({fullscreen:B(a,i)});o(),e(document,`fullscreenchange`,o,{signal:n}),e(document,`webkitfullscreenchange`,o,{signal:n}),`webkitPresentationMode`in i&&e(i,`webkitpresentationmodechanged`,o,{signal:n})}}),We=k({name:`pip`,state:({target:e})=>({pip:!1,pipAvailability:`unavailable`,async requestPictureInPicture(){let{media:t,container:n}=e();return B(n,t)&&await H(),He(t)},async exitPictureInPicture(){let{media:t}=e();return q(t)},async togglePictureInPicture(){let{media:t,container:n}=e();return K(t)?q(t):(B(n,t)&&await H(),He(t))}}),attach({target:t,signal:n,set:r}){let{media:i}=t;r({pipAvailability:Ve()?`available`:`unsupported`});let a=()=>r({pip:K(i)});a(),e(i,`enterpictureinpicture`,a,{signal:n}),e(i,`leavepictureinpicture`,a,{signal:n}),`webkitPresentationMode`in i&&e(i,`webkitpresentationmodechanged`,a,{signal:n})}}),J=k({name:`playback`,state:({target:e})=>({paused:!0,ended:!1,started:!1,waiting:!1,play(){return e().media.play()},pause(){let{media:t}=e();A(t)&&t.pause()},togglePaused(){let t=e().media;return A(t)?t.paused?(t.play(),!0):(t.pause(),!1):!1}}),attach({target:t,signal:n,set:r}){let{media:i}=t;if(!A(i)||!j(i)||!M(i))return;let a=()=>r({paused:i.paused,ended:i.ended,started:!i.paused||i.currentTime>0,waiting:i.readyState<HTMLMediaElement.HAVE_FUTURE_DATA&&!i.paused});a(),e(i,`emptied`,a,{signal:n}),e(i,`play`,a,{signal:n}),e(i,`pause`,a,{signal:n}),e(i,`ended`,a,{signal:n}),e(i,`playing`,a,{signal:n}),e(i,`waiting`,a,{signal:n}),e(i,`seeked`,a,{signal:n})}}),Ge=[.2,.5,.7,1,1.2,1.5,1.7,2],Y=k({name:`playbackRate`,state:({target:e})=>({playbackRates:Ge,playbackRate:1,setPlaybackRate(t){let{media:n}=e();P(n)&&(n.playbackRate=t)}}),attach({target:t,signal:n,set:r}){let{media:i}=t;if(!P(i))return;let a=()=>r({playbackRate:i.playbackRate});a(),e(i,`ratechange`,a,{signal:n})}}),X=k({name:`source`,state:({target:e,signals:t})=>({source:null,canPlay:!1,loadSource(n){t.clear();let{media:r}=e();return M(r)?(r.src=n,r.load(),n):n}}),attach({target:t,signal:n,set:r}){let{media:i}=t;if(!M(i))return;let a=()=>r({source:i.currentSrc||i.src||null,canPlay:i.readyState>=HTMLMediaElement.HAVE_ENOUGH_DATA});a(),e(i,`canplay`,a,{signal:n}),e(i,`canplaythrough`,a,{signal:n}),e(i,`loadstart`,a,{signal:n}),e(i,`emptied`,a,{signal:n})}}),Ke=k({name:`textTrack`,state:({target:e})=>({chaptersCues:[],thumbnailCues:[],thumbnailTrackSrc:null,textTrackList:[],subtitlesShowing:!1,toggleSubtitles(t){let{media:n}=e();if(!F(n))return!1;let r=g(n,e=>e.kind===`subtitles`||e.kind===`captions`);if(!r.length)return!1;let i=r.some(e=>e.mode===`showing`),a=t??!i;for(let e of r)e.mode=a?`showing`:`disabled`;return a}}),attach({target:t,signal:n,set:r}){let{media:i}=t;if(!F(i))return;let a=null,o=()=>{a?.abort(),a=new AbortController;let t=null,n=null,s=[],c=!1;for(let e=0;e<i.textTracks.length;e++){let r=i.textTracks[e];!t&&r.kind===`chapters`&&(t=r),!n&&r.kind===`metadata`&&r.label===`thumbnails`&&(n=r),s.push({kind:r.kind,label:r.label,language:r.language,mode:r.mode}),(r.kind===`captions`||r.kind===`subtitles`)&&r.mode===`showing`&&(c=!0)}let l=t?.cues?Array.from(t.cues):[],u=n?.cues?Array.from(n.cues):[],d=null;n&&(d=h(i,n)?.src??null);let f=Oe(i)&&i.querySelectorAll(`track`)||[],p=i instanceof HTMLElement&&i.shadowRoot?.querySelectorAll(`track`)||[];for(let t of[...f,...p])t.track?.cues?.length||e(t,`load`,o,{signal:a.signal});r({chaptersCues:l,thumbnailCues:u,thumbnailTrackSrc:d,textTrackList:s,subtitlesShowing:c})};o();let s=i.textTracks;s instanceof EventTarget&&(e(s,`addtrack`,o,{signal:n}),e(s,`removetrack`,o,{signal:n}),e(s,`change`,o,{signal:n})),e(i,`loadstart`,o,{signal:n}),n.addEventListener(`abort`,()=>a?.abort(),{once:!0})}}),qe={seek:Symbol.for(`@videojs/seek`)},Z=k({name:`time`,state:({target:e,signals:t,set:n})=>({currentTime:0,duration:0,seeking:!1,async seek(r){let{media:i}=e(),a=t.supersede(qe.seek);if(!j(i)||!M(i))return 0;if(!Te(i)&&!await c(i,`loadedmetadata`,{signal:a}).catch(()=>!1))return i.currentTime;let o=Math.max(0,Math.min(r,i.duration||1/0));return n({currentTime:o,seeking:!0}),i.currentTime=o,await c(i,`seeked`,{signal:a}).catch(E),i.currentTime}}),attach({target:t,signal:n,set:r,get:i}){let{media:a}=t;if(!j(a))return;let o=()=>r({currentTime:a.currentTime,duration:Number.isFinite(a.duration)?a.duration:0,seeking:a.seeking});o(),e(a,`timeupdate`,()=>{i().seeking||o()},{signal:n}),e(a,`durationchange`,o,{signal:n}),e(a,`seeking`,o,{signal:n}),e(a,`seeked`,o,{signal:n}),e(a,`loadedmetadata`,o,{signal:n}),e(a,`emptied`,o,{signal:n})}}),Q=k({name:`volume`,state:({target:e})=>({volume:1,muted:!1,volumeAvailability:`unavailable`,setVolume(t){let{media:n}=e();if(!N(n))return 0;let r=Math.max(0,Math.min(1,t));return r>0&&n.muted&&(n.muted=!1),n.volume=r,n.volume},toggleMuted(){let{media:t}=e();return N(t)?(t.muted||t.volume===0?(t.muted=!1,t.volume===0&&(t.volume=.25)):t.muted=!0,t.muted):!1}}),attach({target:t,signal:n,set:r}){let{media:i}=t;if(!N(i))return;r({volumeAvailability:Je()});let a=()=>r({volume:i.volume,muted:i.muted});a(),e(i,`volumechange`,a,{signal:n})}});function Je(){let e=document.createElement(`video`);try{return e.volume=.5,e.volume===.5?`available`:`unsupported`}catch{return`unsupported`}}const Ye=[J,Y,Q,Z,X,L,Ue,We,Ne,Be,Ke,W],Xe=[J,Y,Q,Z,X,L,W],Ze=[];var Qe=class{#e;#t;#n;#r;#i=E;constructor(e,t,n){this.#e=e,this.#n=t,this.#t=n,e.addController(this)}get value(){return this.#t?(this.#r??=this.#t(this.#n.current),this.#r):this.#n.current}track(e){this.#n=e,this.#a()}hostConnected(){this.#a()}hostDisconnected(){this.#i(),this.#i=E,this.#r=void 0}#a(){if(this.#i(),!this.#t){this.#i=this.#n.subscribe(()=>this.#e.requestUpdate());return}let e=this.#t;this.#r=e(this.#n.current),this.#i=this.#n.subscribe(()=>{let t=e(this.#n.current);o(this.#r,t)||(this.#r=t,this.#e.requestUpdate())})}},$e=class{#e;#t;#n;constructor(e,t,n){this.#e=n??E,we(t)?(this.#n=t,this.#t=null):(this.#n=null,this.#t=new y(e,{context:t,callback:e=>this.#e(e),subscribe:!1})),e.addController(this)}get value(){return this.#t?this.#t.value??null:this.#n}hostConnected(){this.#n&&this.#e(this.#n)}},et=class{#e;#t;#n;#r=null;constructor(e,t,n){this.#e=e,this.#t=n,this.#n=new $e(e,t,e=>this.#i(e)),e.addController(this)}get value(){let e=this.#n.value;if(S(e))throw Error(`Store not available`);return C(this.#t)?e:this.#r.value}hostConnected(){}#i(e){C(this.#t)||(this.#r?this.#r.track(e.$state):this.#r=new Qe(this.#e,e.$state,this.#t))}},$=class{#e;#t;#n;#r=null;constructor(e,t,n){this.#e=e,this.#t=n,this.#n=new y(e,{context:t,callback:e=>this.#i(e),subscribe:!0}),e.addController(this)}get value(){let e=this.#n.value;if(e)return this.#t?this.#r?.value:e}get displayName(){return this.#t?.displayName}hostConnected(){let e=this.#n.value;e&&this.#i(e)}hostDisconnected(){this.#r=null}#i(e){!this.#r&&this.#t&&(this.#r=new et(this.#e,e,this.#t))}};function tt(e){return t=>{class n extends t{#e=e.factory();#t=null;#n=null;#r=null;#i=!1;#a=e=>{this.#n!==e&&(this.#n=e,this.#c.setValue({media:e,setMedia:this.#a}),this.#u())};#o=e=>{this.#r!==e&&(this.#r=e,this.#l.setValue({container:e,setContainer:this.#o}),this.#u())};#s=new b(this,{context:e.playerContext,initialValue:this.store});#c=new b(this,{context:e.mediaContext,initialValue:{media:this.#n,setMedia:this.#a}});#l=new b(this,{context:e.containerContext,initialValue:{container:this.#r,setContainer:this.#o}});get store(){return S(this.#e)&&(this.#e=e.factory()),this.#e}connectedCallback(){super.connectedCallback(),this.#s.setValue(this.store),this.#c.setValue({media:this.#n,setMedia:this.#a}),this.#l.setValue({container:this.#r,setContainer:this.#o}),this.#u(),this.#f()}disconnectedCallback(){super.disconnectedCallback(),this.#d()}destroyCallback(){this.#d(),this.#e?.destroy(),this.#e=null,super.destroyCallback()}#u(){let e=this.#e;if(!e)return;if(!this.#n){this.#d();return}let t={media:this.#n,container:this.#r},n=e.target?.media!==t.media,r=e.target?.container!==t.container;(n||r)&&(this.#d(),this.#t=e.attach(t))}#d(){this.#t?.(),this.#t=null}#f(){this.#n||this.#i||(this.#i=!0,queueMicrotask(()=>{if(this.#i=!1,this.#n)return;let e=this.querySelector(`video, audio`);e&&this.#a(e)}))}}return n}}function nt(e){let t=pe(...e.features);function a(){return Ce()(t)}return{context:r,create:a,PlayerController:$,ProviderMixin:tt({playerContext:r,mediaContext:n,containerContext:i,factory:a}),ContainerMixin:se({playerContext:r,containerContext:i})}}export{b as A,fe as C,C as D,de as E,ie as M,d as N,ue as O,m as P,he as S,S as T,Le as _,Ze as a,xe as b,Z as c,Y as d,J as f,Be as g,W as h,Xe as i,y as j,ce as k,Ke as l,Ue as m,$ as n,Ye as o,We as p,Qe as r,Q as s,nt as t,X as u,Ne as v,x as w,E as x,L as y};
7
+ //# sourceMappingURL=create-player-B-PGzhq2.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-player-B-PGzhq2.js","names":["#destroyed","#trackedControllers","#updatePromise","#instanceProperties","#controllers","#changedProperties","#enqueueUpdate","s","t","t","ContextConsumer","#contextStore","#setContainer","#disconnect","#onPointerUp","#base","#keys","#current","#markPending","#listeners","#pending","TAP_THRESHOLD","#target","#bindings","#recognizers","#connect","#maybeDisconnect","#disconnect","#host","#state","#selector","#cached","#subscribe","#unsubscribe","#onAvailable","#directStore","#consumer","ContextConsumer","#host","#selector","#accessor","#connect","#snapshot","#host","#selector","#consumer","ContextConsumer","#connect","#store","#media","#mediaProvider","#setMedia","#tryAttach","#container","#containerProvider","#setContainer","ContextProvider","#store","#playerProvider","#queueFallbackDiscovery","#detachStore","#detach","#fallbackQueued"],"sources":["../../utils/dist/dom/event.js","../../utils/dist/dom/interactive.js","../../utils/dist/dom/text-track.js","../../utils/dist/dom/time-ranges.js","../../element/dist/default/destroy-mixin.js","../../element/dist/default/reactive-element.js","../../../node_modules/.pnpm/@lit+context@1.1.6/node_modules/@lit/context/lib/controllers/context-consumer.js","../../../node_modules/.pnpm/@lit+context@1.1.6/node_modules/@lit/context/lib/value-notifier.js","../../../node_modules/.pnpm/@lit+context@1.1.6/node_modules/@lit/context/lib/controllers/context-provider.js","../src/store/container-mixin.ts","../src/ui/media-element.ts","../src/media/container-element.ts","../../utils/dist/predicate/predicate.js","../../store/dist/default/core/abort-controller-registry.js","../../store/dist/default/core/combine.js","../../store/dist/default/core/errors.js","../../store/dist/default/core/slice.js","../../utils/dist/function/noop.js","../../store/dist/default/core/state.js","../../store/dist/default/core/store.js","../../core/dist/default/dom/feature.js","../../core/dist/default/dom/media/predicate.js","../../core/dist/default/dom/store/features/buffer.js","../../core/dist/default/dom/presentation/cast.js","../../core/dist/default/dom/presentation/fullscreen.js","../../core/dist/default/dom/store/features/cast.js","../../core/dist/default/dom/gesture/region.js","../../core/dist/default/dom/gesture/coordinator.js","../../core/dist/default/dom/store/features/controls.js","../../core/dist/default/dom/store/features/error.js","../../core/dist/default/dom/presentation/pip.js","../../core/dist/default/dom/store/features/fullscreen.js","../../core/dist/default/dom/store/features/pip.js","../../core/dist/default/dom/store/features/playback.js","../../core/dist/default/dom/store/features/playback-rate.js","../../core/dist/default/dom/store/features/source.js","../../core/dist/default/dom/store/features/text-track.js","../../core/dist/default/dom/store/signal-keys.js","../../core/dist/default/dom/store/features/time.js","../../core/dist/default/dom/store/features/volume.js","../../core/dist/default/dom/store/features/presets.js","../../store/dist/default/html/controllers/snapshot-controller.js","../../store/dist/default/html/store-accessor.js","../../store/dist/default/html/controllers/store-controller.js","../src/player/player-controller.ts","../src/store/provider-mixin.ts","../src/player/create-player.ts"],"sourcesContent":["//#region src/dom/event.ts\n/** Resolve the deepest event target, preferring composedPath for shadow DOM. */\nfunction resolveEventTarget(event) {\n\tconst path = event.composedPath();\n\treturn path.length > 0 ? path[0] : event.target;\n}\nfunction onEvent(target, type, options) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst handleAbort = () => {\n\t\t\treject(options?.signal?.reason ?? \"Aborted\");\n\t\t};\n\t\tif (options?.signal?.aborted) {\n\t\t\thandleAbort();\n\t\t\treturn;\n\t\t}\n\t\toptions?.signal?.addEventListener(\"abort\", handleAbort, { once: true });\n\t\ttarget.addEventListener(type, (event) => {\n\t\t\toptions?.signal?.removeEventListener(\"abort\", handleAbort);\n\t\t\tresolve(event);\n\t\t}, {\n\t\t\t...options,\n\t\t\tonce: true\n\t\t});\n\t});\n}\n//#endregion\nexport { onEvent, resolveEventTarget };\n\n//# sourceMappingURL=event.js.map","import { resolveEventTarget } from \"./event.js\";\n//#region src/dom/interactive.ts\nconst INTERACTIVE_SELECTOR = \"button,input,select,textarea,a[href],[role=\\\"slider\\\"],[role=\\\"button\\\"],[data-interactive]\";\nconst EDITABLE_SELECTOR = [\n\t\"textarea\",\n\t\"select\",\n\t\"input:not([type])\",\n\t...[\n\t\t\"text\",\n\t\t\"search\",\n\t\t\"url\",\n\t\t\"tel\",\n\t\t\"email\",\n\t\t\"password\",\n\t\t\"number\"\n\t].map((type) => `input[type=\"${type}\"]`),\n\t\"[contenteditable]:not([contenteditable=\\\"false\\\"])\"\n].join(\",\");\nfunction isEditableElement(el) {\n\treturn el.matches(EDITABLE_SELECTOR);\n}\n/** Whether the keyboard event target is an editable element (input, textarea, etc). */\nfunction isEditableTarget(event) {\n\tconst target = resolveEventTarget(event);\n\treturn target instanceof Element && isEditableElement(target);\n}\n/** Whether the event originated from an interactive control (button, slider, etc). */\nfunction isInteractiveTarget(event) {\n\tconst target = resolveEventTarget(event);\n\tif (!(target instanceof Element)) return false;\n\treturn target.closest(INTERACTIVE_SELECTOR) !== null;\n}\nconst ACTIVATION_KEYS = new Set([\" \", \"Enter\"]);\n/**\n* Selector for elements that use Space/Enter as a native activation key.\n* Narrower than `INTERACTIVE_SELECTOR` — excludes editable elements like\n* `input`, `textarea`, `select` where Space/Enter is text input, not activation.\n*/\nconst ACTIVATABLE_SELECTOR = \"button,a[href],[role=\\\"slider\\\"],[role=\\\"button\\\"]\";\n/** Whether the event is an activation key on an activatable element (button, link, slider). */\nfunction isInteractiveActivation(event) {\n\tif (!ACTIVATION_KEYS.has(event.key)) return false;\n\tconst target = resolveEventTarget(event);\n\treturn target instanceof Element && target.matches(ACTIVATABLE_SELECTOR);\n}\n//#endregion\nexport { EDITABLE_SELECTOR, INTERACTIVE_SELECTOR, isEditableElement, isEditableTarget, isInteractiveActivation, isInteractiveTarget };\n\n//# sourceMappingURL=interactive.js.map","//#region src/dom/text-track.ts\n/** Find the `<track>` element that owns the given `TextTrack`. */\nfunction findTrackElement(media, track) {\n\tif (!(media instanceof HTMLElement)) return null;\n\tfor (const el of media.querySelectorAll(\"track\")) if (el.track === track) return el;\n\treturn null;\n}\nfunction getTextTrackList(media, filterPred) {\n\tif (!media.textTracks) return [];\n\treturn Array.from(media.textTracks).filter(filterPred).sort(sortByKind);\n}\nfunction sortByKind(a, b) {\n\treturn a.kind > b.kind ? 1 : a.kind < b.kind ? -1 : 0;\n}\n//#endregion\nexport { findTrackElement, getTextTrackList };\n\n//# sourceMappingURL=text-track.js.map","//#region src/dom/time-ranges.ts\n/** Converts a TimeRanges object to an array of [start, end] tuples. */\nfunction serializeTimeRanges(ranges) {\n\tconst result = [];\n\tfor (let i = 0; i < ranges.length; i++) result.push([ranges.start(i), ranges.end(i)]);\n\treturn result;\n}\n//#endregion\nexport { serializeTimeRanges };\n\n//# sourceMappingURL=time-ranges.js.map","//#region src/destroy-mixin.ts\n/**\n* Mixin that adds a deferred destruction lifecycle to a `ReactiveElement`.\n*\n* On disconnect, schedules destruction after two animation frames.\n* If the element reconnects before the frames fire (e.g. DOM shuffling,\n* framework reconciliation), the `isConnected` check prevents destruction.\n*\n* The `keep-alive` attribute prevents automatic destruction entirely —\n* call `destroy()` manually when done.\n*\n* Subclasses override `destroyCallback()` (calling `super.destroyCallback()`)\n* to release heavy resources like stores or imperative APIs.\n*\n* Mirrors `addController`/`removeController` to track controllers\n* (needed because `ReactiveElement.#controllers` is hard-private),\n* calls `hostDestroyed()` on all tracked controllers in `destroyCallback`,\n* and guards `performUpdate()` so no updates run after destruction.\n*/\nfunction DestroyMixin(SuperClass) {\n\tclass DestroyableElement extends SuperClass {\n\t\t#destroyed = false;\n\t\t#trackedControllers = /* @__PURE__ */ new Set();\n\t\tget destroyed() {\n\t\t\treturn this.#destroyed;\n\t\t}\n\t\tdestroy() {\n\t\t\tif (this.#destroyed) return;\n\t\t\tthis.#destroyed = true;\n\t\t\tthis.destroyCallback();\n\t\t}\n\t\tdestroyCallback() {\n\t\t\tfor (const c of this.#trackedControllers) c.hostDestroyed?.();\n\t\t}\n\t\taddController(controller) {\n\t\t\tsuper.addController(controller);\n\t\t\tthis.#trackedControllers.add(controller);\n\t\t}\n\t\tremoveController(controller) {\n\t\t\tsuper.removeController(controller);\n\t\t\tthis.#trackedControllers.delete(controller);\n\t\t}\n\t\tconnectedCallback() {\n\t\t\tif (this.#destroyed) return;\n\t\t\tsuper.connectedCallback();\n\t\t}\n\t\tdisconnectedCallback() {\n\t\t\tsuper.disconnectedCallback();\n\t\t\tif (!this.#destroyed && !this.hasAttribute(\"keep-alive\")) requestAnimationFrame(() => {\n\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\tif (!this.isConnected) this.destroy();\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tperformUpdate() {\n\t\t\tif (this.#destroyed) return;\n\t\t\tsuper.performUpdate();\n\t\t}\n\t}\n\treturn DestroyableElement;\n}\n//#endregion\nexport { DestroyMixin };\n\n//# sourceMappingURL=destroy-mixin.js.map","//#region src/reactive-element.ts\nconst cache = /* @__PURE__ */ new WeakMap();\nconst propertyKeys = /* @__PURE__ */ new Map();\n/**\n* Lightweight reactive custom element base class.\n*\n* Drop-in subset of Lit's `ReactiveElement` — supports `static properties`,\n* attribute reflection, batched async updates, and reactive controllers.\n* No Shadow DOM, no `static styles`, no decorators.\n*\n* Updates are batched using the same Promise-based scheduling as Lit:\n* property changes enqueue a microtask, and the update is gated behind\n* `connectedCallback` so the first update only runs once the element\n* is in the document.\n*\n* Subclasses that extend another element with properties must spread them:\n*\n* @example\n* ```ts\n* class MyButton extends ReactiveElement {\n* static override properties = {\n* label: { type: String },\n* disabled: { type: Boolean },\n* };\n*\n* label = 'Click me';\n* disabled = false;\n*\n* protected override update(changed: PropertyValues): void {\n* super.update(changed);\n* this.textContent = this.label;\n* }\n* }\n*\n* // Inheritance — spread parent properties\n* class FancyButton extends MyButton {\n* static override properties = {\n* ...MyButton.properties,\n* variant: { type: String },\n* };\n*\n* variant = 'primary';\n* }\n* ```\n*/\nvar ReactiveElement = class extends HTMLElement {\n\tstatic {\n\t\tthis.properties = {};\n\t}\n\t/**\n\t* Returns a list of attributes corresponding to the registered properties.\n\t*/\n\tstatic get observedAttributes() {\n\t\treturn [...resolve(this).attrToProp.keys()];\n\t}\n\t#controllers = /* @__PURE__ */ new Set();\n\t#changedProperties = /* @__PURE__ */ new Map();\n\t#instanceProperties;\n\t/**\n\t* Promise that gates the first update until `connectedCallback`. Also\n\t* used to serialize updates — each `#enqueueUpdate` awaits the previous\n\t* `#updatePromise`, so property changes are batched and updates never\n\t* overlap. Matches Lit's scheduling model.\n\t*/\n\t#updatePromise;\n\tconstructor() {\n\t\tsuper();\n\t\tthis.isUpdatePending = false;\n\t\tthis.hasUpdated = false;\n\t\tthis.#updatePromise = new Promise((res) => this.enableUpdating = res);\n\t\tconst { props } = resolve(this.constructor);\n\t\tfor (const name of props.keys()) if (Object.hasOwn(this, name)) {\n\t\t\t(this.#instanceProperties ??= /* @__PURE__ */ new Map()).set(name, this[name]);\n\t\t\tdelete this[name];\n\t\t}\n\t\tthis.requestUpdate();\n\t}\n\t/**\n\t* Note, this method should be considered final and not overridden. It is\n\t* overridden on the element instance with a function that triggers the\n\t* first update.\n\t*/\n\tenableUpdating(_requestedUpdate) {}\n\t/**\n\t* Registers a {@linkcode ReactiveController} to participate in the\n\t* element's reactive update cycle. The element automatically calls into\n\t* any registered controllers during its lifecycle callbacks.\n\t*\n\t* If the element is connected when `addController()` is called, the\n\t* controller's `hostConnected()` callback will be immediately called.\n\t*/\n\taddController(controller) {\n\t\tthis.#controllers.add(controller);\n\t\tif (this.isConnected) controller.hostConnected?.();\n\t}\n\t/** Removes a {@linkcode ReactiveController} from the element. */\n\tremoveController(controller) {\n\t\tthis.#controllers.delete(controller);\n\t}\n\t/**\n\t* On first connection, enables updating and notifies controllers.\n\t*/\n\tconnectedCallback() {\n\t\tthis.enableUpdating(true);\n\t\tfor (const c of this.#controllers) c.hostConnected?.();\n\t}\n\tdisconnectedCallback() {\n\t\tfor (const c of this.#controllers) c.hostDisconnected?.();\n\t}\n\t/**\n\t* Synchronizes property values when attributes change.\n\t*\n\t* Specifically, when an attribute is set, the corresponding property is\n\t* set. You should rarely need to implement this callback. If this method\n\t* is overridden, `super.attributeChangedCallback(name, _old, value)` must\n\t* be called.\n\t*/\n\tattributeChangedCallback(attr, oldValue, newValue) {\n\t\tif (oldValue === newValue) return;\n\t\tconst { props, attrToProp } = resolve(this.constructor);\n\t\tconst propName = attrToProp.get(attr);\n\t\tif (!propName) return;\n\t\tconst decl = props.get(propName);\n\t\tif (!decl) return;\n\t\tlet value = newValue;\n\t\tif (decl.type === Boolean) value = newValue !== null;\n\t\telse if (decl.type === Number) value = newValue === null ? null : Number(newValue);\n\t\tthis[propName] = value;\n\t}\n\t/**\n\t* Requests an update which is processed asynchronously. This should be\n\t* called when an element should update based on some state not triggered\n\t* by setting a reactive property. In this case, pass no arguments. It\n\t* should also be called when manually implementing a property setter. In\n\t* this case, pass the property `name` and `oldValue` to ensure that any\n\t* configured property options are honored.\n\t*/\n\trequestUpdate(name, oldValue) {\n\t\tif (name !== void 0) this.#changedProperties.set(name, oldValue);\n\t\tif (this.isUpdatePending) return;\n\t\tthis.#updatePromise = this.#enqueueUpdate();\n\t}\n\t/**\n\t* Sets up the element to asynchronously update. Awaits the previous\n\t* `#updatePromise` which both serializes updates and (on first update)\n\t* waits for `connectedCallback` to resolve the gate.\n\t*/\n\tasync #enqueueUpdate() {\n\t\tthis.isUpdatePending = true;\n\t\ttry {\n\t\t\tawait this.#updatePromise;\n\t\t} catch (e) {\n\t\t\tPromise.reject(e);\n\t\t}\n\t\tconst result = this.scheduleUpdate();\n\t\tif (result != null) await result;\n\t\treturn !this.isUpdatePending;\n\t}\n\t/**\n\t* Schedules an element update. You can override this method to change the\n\t* timing of updates by returning a Promise. The update will await the\n\t* returned Promise, and you should resolve the Promise to allow the update\n\t* to proceed. If this method is overridden, `super.scheduleUpdate()` must\n\t* be called.\n\t*\n\t* For instance, to schedule updates to occur just before the next frame:\n\t*\n\t* ```ts\n\t* override protected async scheduleUpdate(): Promise<unknown> {\n\t* await new Promise((resolve) => requestAnimationFrame(() => resolve()));\n\t* super.scheduleUpdate();\n\t* }\n\t* ```\n\t*/\n\tscheduleUpdate() {\n\t\tthis.performUpdate();\n\t}\n\t/**\n\t* Performs an element update. Note, if an exception is thrown during the\n\t* update, `firstUpdated` and `updated` will not be called.\n\t*\n\t* Call `performUpdate()` to immediately process a pending update. This\n\t* should generally not be needed, but it can be done in rare cases when\n\t* you need to update synchronously.\n\t*/\n\tperformUpdate() {\n\t\tif (!this.isUpdatePending) return;\n\t\tif (!this.hasUpdated && this.#instanceProperties) {\n\t\t\tfor (const [name, value] of this.#instanceProperties) this[name] = value;\n\t\t\tthis.#instanceProperties = void 0;\n\t\t}\n\t\tconst changed = this.#changedProperties;\n\t\tthis.willUpdate(changed);\n\t\tfor (const c of this.#controllers) c.hostUpdate?.();\n\t\tthis.update(changed);\n\t\tthis.#changedProperties = /* @__PURE__ */ new Map();\n\t\tthis.isUpdatePending = false;\n\t\tfor (const c of this.#controllers) c.hostUpdated?.();\n\t\tif (!this.hasUpdated) {\n\t\t\tthis.hasUpdated = true;\n\t\t\tthis.firstUpdated(changed);\n\t\t}\n\t\tthis.updated(changed);\n\t}\n\t/**\n\t* Invoked before `update()` to compute values needed during the update.\n\t*\n\t* Implement `willUpdate` to compute property values that depend on other\n\t* properties and are used in the rest of the update process.\n\t*\n\t* ```ts\n\t* willUpdate(changed) {\n\t* if (changed.has('firstName') || changed.has('lastName')) {\n\t* this.sha = computeSHA(`${this.firstName} ${this.lastName}`);\n\t* }\n\t* }\n\t* ```\n\t*/\n\twillUpdate(_changed) {}\n\t/**\n\t* Updates the element. This method reflects property values to attributes\n\t* and can be overridden to render and keep updated element DOM. Setting\n\t* properties inside this method will *not* trigger another update.\n\t*/\n\tupdate(_changed) {}\n\t/**\n\t* Invoked when the element is first updated. Implement to perform one\n\t* time work on the element after update.\n\t*\n\t* Setting properties inside this method will trigger the element to\n\t* update again after this update cycle completes.\n\t*/\n\tfirstUpdated(_changed) {}\n\t/**\n\t* Invoked whenever the element is updated. Implement to perform\n\t* post-updating tasks via DOM APIs, for example, focusing an element.\n\t*\n\t* Setting properties inside this method will trigger the element to\n\t* update again after this update cycle completes.\n\t*/\n\tupdated(_changed) {}\n\t/**\n\t* Returns a Promise that resolves when the element has completed updating.\n\t* The Promise value is a boolean that is `true` if the element completed\n\t* the update without triggering another update. The Promise result is\n\t* `false` if a property was set inside `updated()`.\n\t*/\n\tget updateComplete() {\n\t\treturn this.#updatePromise;\n\t}\n};\n/**\n* Resolve `ctor.properties` into lookup Maps and install reactive accessors\n* on the prototype. Runs once per class, result is cached.\n*\n* Subclasses that need parent properties must spread them:\n* `static override properties = { ...Parent.properties, ... }`.\n*/\nfunction resolve(ctor) {\n\tconst existing = cache.get(ctor);\n\tif (existing) return existing;\n\tconst props = /* @__PURE__ */ new Map();\n\tconst attrToProp = /* @__PURE__ */ new Map();\n\tfor (const [name, decl] of Object.entries(ctor.properties)) {\n\t\tprops.set(name, decl);\n\t\tattrToProp.set(decl.attribute ?? name, name);\n\t\tif (!Object.getOwnPropertyDescriptor(ctor.prototype, name)?.get) {\n\t\t\tlet key = propertyKeys.get(name);\n\t\t\tif (!key) {\n\t\t\t\tkey = Symbol(name);\n\t\t\t\tpropertyKeys.set(name, key);\n\t\t\t}\n\t\t\tObject.defineProperty(ctor.prototype, name, {\n\t\t\t\tget() {\n\t\t\t\t\treturn this[key];\n\t\t\t\t},\n\t\t\t\tset(value) {\n\t\t\t\t\tconst old = this[key];\n\t\t\t\t\tthis[key] = value;\n\t\t\t\t\tif (!Object.is(old, value)) this.requestUpdate(name, old);\n\t\t\t\t},\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true\n\t\t\t});\n\t\t}\n\t}\n\tconst meta = {\n\t\tprops,\n\t\tattrToProp\n\t};\n\tcache.set(ctor, meta);\n\treturn meta;\n}\n//#endregion\nexport { ReactiveElement };\n\n//# sourceMappingURL=reactive-element.js.map","import{ContextRequestEvent as t}from\"../context-request-event.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class s{constructor(t,s,i,h){if(this.subscribe=!1,this.provided=!1,this.value=void 0,this.t=(t,s)=>{this.unsubscribe&&(this.unsubscribe!==s&&(this.provided=!1,this.unsubscribe()),this.subscribe||this.unsubscribe()),this.value=t,this.host.requestUpdate(),this.provided&&!this.subscribe||(this.provided=!0,this.callback&&this.callback(t,s)),this.unsubscribe=s},this.host=t,void 0!==s.context){const t=s;this.context=t.context,this.callback=t.callback,this.subscribe=t.subscribe??!1}else this.context=s,this.callback=i,this.subscribe=h??!1;this.host.addController(this)}hostConnected(){this.dispatchRequest()}hostDisconnected(){this.unsubscribe&&(this.unsubscribe(),this.unsubscribe=void 0)}dispatchRequest(){this.host.dispatchEvent(new t(this.context,this.host,this.t,this.subscribe))}}export{s as ContextConsumer};\n//# sourceMappingURL=context-consumer.js.map\n","/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */\nclass s{get value(){return this.o}set value(s){this.setValue(s)}setValue(s,t=!1){const i=t||!Object.is(s,this.o);this.o=s,i&&this.updateObservers()}constructor(s){this.subscriptions=new Map,this.updateObservers=()=>{for(const[s,{disposer:t}]of this.subscriptions)s(this.o,t)},void 0!==s&&(this.value=s)}addCallback(s,t,i){if(!i)return void s(this.value);this.subscriptions.has(s)||this.subscriptions.set(s,{disposer:()=>{this.subscriptions.delete(s)},consumerHost:t});const{disposer:h}=this.subscriptions.get(s);s(this.value,h)}clearCallbacks(){this.subscriptions.clear()}}export{s as ValueNotifier};\n//# sourceMappingURL=value-notifier.js.map\n","import{ContextRequestEvent as t}from\"../context-request-event.js\";import{ValueNotifier as s}from\"../value-notifier.js\";\n/**\n * @license\n * Copyright 2021 Google LLC\n * SPDX-License-Identifier: BSD-3-Clause\n */class e extends Event{constructor(t,s){super(\"context-provider\",{bubbles:!0,composed:!0}),this.context=t,this.contextTarget=s}}class i extends s{constructor(s,e,i){super(void 0!==e.context?e.initialValue:i),this.onContextRequest=t=>{if(t.context!==this.context)return;const s=t.contextTarget??t.composedPath()[0];s!==this.host&&(t.stopPropagation(),this.addCallback(t.callback,s,t.subscribe))},this.onProviderRequest=s=>{if(s.context!==this.context)return;if((s.contextTarget??s.composedPath()[0])===this.host)return;const e=new Set;for(const[s,{consumerHost:i}]of this.subscriptions)e.has(s)||(e.add(s),i.dispatchEvent(new t(this.context,i,s,!0)));s.stopPropagation()},this.host=s,void 0!==e.context?this.context=e.context:this.context=e,this.attachListeners(),this.host.addController?.(this)}attachListeners(){this.host.addEventListener(\"context-request\",this.onContextRequest),this.host.addEventListener(\"context-provider\",this.onProviderRequest)}hostConnected(){this.host.dispatchEvent(new e(this.context,this.host))}}export{i as ContextProvider,e as ContextProviderEvent};\n//# sourceMappingURL=context-provider.js.map\n","import type { MediaContainer, PlayerStore } from '@videojs/core/dom';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { MediaElementConstructor } from '@/ui/media-element';\nimport type { ContainerContext, PlayerContext } from '../player/context';\nimport type { PlayerConsumer, PlayerConsumerConstructor } from './types';\n\nexport interface ContainerMixinConfig<Store extends PlayerStore> {\n playerContext: PlayerContext<Store>;\n containerContext: ContainerContext;\n}\n\nexport type ContainerMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(\n BaseClass: Class\n) => Class & PlayerConsumerConstructor<Store>;\n\n/**\n * Create a mixin that consumes player context and registers itself as the\n * container element with the provider via `containerContext`.\n *\n * @param config - Container configuration with player and container contexts.\n */\nexport function createContainerMixin<Store extends PlayerStore>(\n config: ContainerMixinConfig<Store>\n): ContainerMixin<Store> {\n return <Class extends MediaElementConstructor>(BaseClass: Class) => {\n class PlayerContainerElement extends BaseClass implements PlayerConsumer<Store>, MediaContainer {\n #contextStore: Store | null = null;\n #setContainer: ((container: MediaContainer | null) => void) | null = null;\n\n constructor(...args: any[]) {\n super(...args);\n\n new ContextConsumer(this, {\n context: config.playerContext,\n callback: (value) => {\n this.#contextStore = value ?? null;\n },\n subscribe: true,\n });\n\n new ContextConsumer(this, {\n context: config.containerContext,\n callback: (value) => {\n this.#setContainer = value?.setContainer ?? null;\n if (this.isConnected) this.#setContainer?.(this);\n },\n subscribe: true,\n });\n }\n\n get store(): Store | null {\n return this.#contextStore;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.#setContainer?.(this);\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.#setContainer?.(null);\n }\n }\n\n return PlayerContainerElement;\n };\n}\n","import { DestroyMixin, ReactiveElement } from '@videojs/element';\nimport type { Constructor } from '@videojs/utils/types';\n\n/** Base class for interactive media UI elements. */\nexport class MediaElement extends DestroyMixin(ReactiveElement) {}\n\nexport interface MediaElementConstructor extends Constructor<MediaElement> {}\n","import { listen } from '@videojs/utils/dom';\n\nimport { containerContext, playerContext } from '../player/context';\nimport { createContainerMixin } from '../store/container-mixin';\nimport { MediaElement } from '../ui/media-element';\n\nconst ContainerMixin = createContainerMixin({ playerContext, containerContext });\n\nexport class MediaContainerElement extends ContainerMixin(MediaElement) {\n static readonly tagName = 'media-container';\n\n #disconnect: AbortController | null = null;\n\n override connectedCallback(): void {\n super.connectedCallback();\n\n // Make focusable so keyboard events reach hotkey listeners.\n if (!this.hasAttribute('tabindex')) {\n this.setAttribute('tabindex', '0');\n }\n\n this.#disconnect = new AbortController();\n listen(this, 'pointerup', this.#onPointerUp, { signal: this.#disconnect.signal });\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.#disconnect?.abort();\n this.#disconnect = null;\n }\n\n #onPointerUp = (): void => {\n // If nothing inside the container has focus, grab it so keyboard\n // events reach the hotkey coordinator's listener.\n if (!this.contains(document.activeElement) || document.activeElement === document.body) {\n this.focus({ preventScroll: true });\n }\n };\n}\n","//#region src/predicate/predicate.ts\nfunction isString(value) {\n\treturn typeof value === \"string\";\n}\nfunction isNumber(value) {\n\treturn typeof value === \"number\";\n}\nfunction isBoolean(value) {\n\treturn typeof value === \"boolean\";\n}\nfunction isFunction(value) {\n\treturn typeof value === \"function\";\n}\nfunction isNull(value) {\n\treturn value === null;\n}\nfunction isUndefined(value) {\n\treturn typeof value === \"undefined\";\n}\nfunction isNil(value) {\n\treturn value == null;\n}\nfunction isPromise(value) {\n\treturn value instanceof Promise;\n}\n/**\n* Check if a value is an object, excluding null.\n*/\nfunction isObject(value) {\n\treturn value !== null && typeof value === \"object\";\n}\n/**\n* Check if a value is a plain object (not a class instance like Date, Map, etc).\n*/\nfunction isPlainObject(value) {\n\tif (!isObject(value)) return false;\n\tconst proto = Object.getPrototypeOf(value);\n\treturn proto === null || proto === Object.prototype;\n}\n/**\n* Check if a value is an AbortError.\n*/\nfunction isAbortError(value) {\n\treturn value instanceof Error && value.name === \"AbortError\";\n}\n//#endregion\nexport { isAbortError, isBoolean, isFunction, isNil, isNull, isNumber, isObject, isPlainObject, isPromise, isString, isUndefined };\n\n//# sourceMappingURL=predicate.js.map","import { anyAbortSignal } from \"@videojs/utils/events\";\n//#region src/core/abort-controller-registry.ts\nvar AbortControllerRegistry = class {\n\t#base = new AbortController();\n\t#keys = /* @__PURE__ */ new Map();\n\t/** The attach-scoped signal. Aborts on detach or reattach. */\n\tget base() {\n\t\treturn this.#base.signal;\n\t}\n\t/** Clears all keyed signals, leaving base intact. */\n\tclear() {\n\t\tfor (const controller of this.#keys.values()) controller.abort();\n\t\tthis.#keys.clear();\n\t}\n\t/** Resets base and clears all keyed signals. */\n\treset() {\n\t\tthis.clear();\n\t\tthis.#base.abort();\n\t\tthis.#base = new AbortController();\n\t}\n\t/** Creates a new signal for the key, superseding any previous signal. */\n\tsupersede(key) {\n\t\tthis.#keys.get(key)?.abort();\n\t\tconst controller = new AbortController();\n\t\tthis.#keys.set(key, controller);\n\t\treturn anyAbortSignal([this.#base.signal, controller.signal]);\n\t}\n};\n//#endregion\nexport { AbortControllerRegistry };\n\n//# sourceMappingURL=abort-controller-registry.js.map","//#region src/core/combine.ts\n/**\n* Combines multiple slices into a single slice.\n*\n* @param slices - The slices to combine.\n* @returns A new slice that represents the combination of the input slices.\n*/\nfunction combine(...slices) {\n\treturn {\n\t\tstate: (ctx) => {\n\t\t\tconst states = slices.map((slice) => slice.state(ctx));\n\t\t\treturn Object.assign({}, ...states);\n\t\t},\n\t\tattach: (ctx) => {\n\t\t\tfor (const slice of slices) try {\n\t\t\t\tslice.attach?.(ctx);\n\t\t\t} catch (err) {\n\t\t\t\tctx.reportError(err);\n\t\t\t}\n\t\t}\n\t};\n}\n//#endregion\nexport { combine };\n\n//# sourceMappingURL=combine.js.map","//#region src/core/errors.ts\nvar StoreError = class extends Error {\n\tcode;\n\tcause;\n\tconstructor(code, options) {\n\t\tsuper(options?.message ?? code);\n\t\tthis.name = \"StoreError\";\n\t\tthis.code = code;\n\t\tthis.cause = options?.cause;\n\t}\n};\nfunction isStoreError(error) {\n\treturn error instanceof StoreError;\n}\nfunction throwNoTargetError() {\n\tthrow new StoreError(\"NO_TARGET\");\n}\nfunction throwDestroyedError() {\n\tthrow new StoreError(\"DESTROYED\");\n}\n//#endregion\nexport { StoreError, isStoreError, throwDestroyedError, throwNoTargetError };\n\n//# sourceMappingURL=errors.js.map","//#region src/core/slice.ts\nfunction defineSlice() {\n\treturn (config) => config;\n}\n//#endregion\nexport { defineSlice };\n\n//# sourceMappingURL=slice.js.map","//#region src/function/noop.ts\nfunction noop(..._args) {}\n//#endregion\nexport { noop };\n\n//# sourceMappingURL=noop.js.map","import { noop } from \"@videojs/utils/function\";\n//#region src/core/state.ts\nlet isFlushScheduled = false;\nfunction scheduleFlush() {\n\tif (isFlushScheduled) return;\n\tisFlushScheduled = true;\n\tqueueMicrotask(flush);\n}\nconst pendingContainers = /* @__PURE__ */ new Set();\nfunction flush() {\n\tisFlushScheduled = false;\n\tfor (const container of pendingContainers) container.flush();\n\tpendingContainers.clear();\n}\nconst hasOwnProp = Object.prototype.hasOwnProperty;\nvar StateContainer = class {\n\t#current;\n\t#listeners = /* @__PURE__ */ new Set();\n\t#pending = false;\n\tconstructor(initial) {\n\t\tthis.#current = Object.freeze({ ...initial });\n\t}\n\tget current() {\n\t\treturn this.#current;\n\t}\n\tpatch(partial) {\n\t\tconst next = { ...this.#current };\n\t\tlet changed = false;\n\t\tfor (const key in partial) {\n\t\t\tif (!hasOwnProp.call(partial, key)) continue;\n\t\t\tconst value = partial[key];\n\t\t\tif (!Object.is(this.#current[key], value)) {\n\t\t\t\tnext[key] = value;\n\t\t\t\tchanged = true;\n\t\t\t}\n\t\t}\n\t\tif (changed) {\n\t\t\tthis.#current = Object.freeze(next);\n\t\t\tthis.#markPending();\n\t\t}\n\t}\n\tsubscribe(callback, options) {\n\t\tconst signal = options?.signal;\n\t\tif (signal?.aborted) return noop;\n\t\tthis.#listeners.add(callback);\n\t\tif (!signal) return () => this.#listeners.delete(callback);\n\t\tconst onAbort = () => this.#listeners.delete(callback);\n\t\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\t\treturn () => {\n\t\t\tsignal.removeEventListener(\"abort\", onAbort);\n\t\t\tthis.#listeners.delete(callback);\n\t\t};\n\t}\n\tflush() {\n\t\tif (!this.#pending) return;\n\t\tthis.#pending = false;\n\t\tfor (const fn of this.#listeners) fn();\n\t}\n\t#markPending() {\n\t\tthis.#pending = true;\n\t\tpendingContainers.add(this);\n\t\tscheduleFlush();\n\t}\n};\nfunction createState(initial) {\n\treturn new StateContainer(initial);\n}\nfunction isState(value) {\n\treturn value instanceof StateContainer;\n}\n//#endregion\nexport { createState, flush, isState };\n\n//# sourceMappingURL=state.js.map","import { AbortControllerRegistry } from \"./abort-controller-registry.js\";\nimport { throwDestroyedError, throwNoTargetError } from \"./errors.js\";\nimport { createState } from \"./state.js\";\nimport { isNull, isObject } from \"@videojs/utils/predicate\";\n//#region src/core/store.ts\nconst STORE_SYMBOL = Symbol(\"@videojs/store\");\nfunction createStore() {\n\treturn (slice, options = {}) => {\n\t\tlet target = null;\n\t\tlet destroyed = false;\n\t\tconst setupAbort = new AbortController();\n\t\tconst signals = new AbortControllerRegistry();\n\t\tlet state;\n\t\tfunction validate() {\n\t\t\tif (destroyed) throwDestroyedError();\n\t\t\tif (!target) throwNoTargetError();\n\t\t}\n\t\tconst initialState = slice.state({\n\t\t\ttarget: () => {\n\t\t\t\tvalidate();\n\t\t\t\treturn target;\n\t\t\t},\n\t\t\tsignals,\n\t\t\tget: () => state.current,\n\t\t\tset: (partial) => state.patch(partial)\n\t\t});\n\t\tstate = createState(initialState);\n\t\tconst store = {\n\t\t\t[STORE_SYMBOL]: true,\n\t\t\tget $state() {\n\t\t\t\treturn state;\n\t\t\t},\n\t\t\tget target() {\n\t\t\t\treturn target;\n\t\t\t},\n\t\t\tget destroyed() {\n\t\t\t\treturn destroyed;\n\t\t\t},\n\t\t\tget state() {\n\t\t\t\treturn state.current;\n\t\t\t},\n\t\t\tattach,\n\t\t\tdestroy,\n\t\t\tsubscribe\n\t\t};\n\t\tfor (const key of Object.keys(initialState)) Object.defineProperty(store, key, {\n\t\t\tget: () => state.current[key],\n\t\t\tenumerable: true\n\t\t});\n\t\ttry {\n\t\t\toptions.onSetup?.({\n\t\t\t\tstore,\n\t\t\t\tsignal: setupAbort.signal\n\t\t\t});\n\t\t} catch (error) {\n\t\t\treportError(error);\n\t\t}\n\t\treturn store;\n\t\tfunction attach(newTarget) {\n\t\t\tif (destroyed) throwDestroyedError();\n\t\t\tsignals.reset();\n\t\t\ttarget = newTarget;\n\t\t\tconst attachContext = {\n\t\t\t\ttarget: newTarget,\n\t\t\t\tsignal: signals.base,\n\t\t\t\tget: () => state.current,\n\t\t\t\tset: (partial) => state.patch(partial),\n\t\t\t\treportError,\n\t\t\t\tstore: {\n\t\t\t\t\tget state() {\n\t\t\t\t\t\treturn state.current;\n\t\t\t\t\t},\n\t\t\t\t\tsubscribe\n\t\t\t\t}\n\t\t\t};\n\t\t\ttry {\n\t\t\t\tslice.attach?.(attachContext);\n\t\t\t} catch (error) {\n\t\t\t\treportError(error);\n\t\t\t}\n\t\t\ttry {\n\t\t\t\toptions.onAttach?.({\n\t\t\t\t\tstore,\n\t\t\t\t\ttarget: newTarget,\n\t\t\t\t\tsignal: signals.base\n\t\t\t\t});\n\t\t\t} catch (error) {\n\t\t\t\treportError(error);\n\t\t\t}\n\t\t\treturn detach;\n\t\t}\n\t\tfunction detach() {\n\t\t\tif (isNull(target)) return;\n\t\t\tsignals.reset();\n\t\t\ttarget = null;\n\t\t\tstate.patch(initialState);\n\t\t}\n\t\tfunction destroy() {\n\t\t\tif (destroyed) return;\n\t\t\tdestroyed = true;\n\t\t\tdetach();\n\t\t\tsetupAbort.abort();\n\t\t}\n\t\tfunction subscribe(callback, options) {\n\t\t\treturn state.subscribe(callback, options);\n\t\t}\n\t\tfunction reportError(error) {\n\t\t\tif (options.onError) options.onError({\n\t\t\t\tstore,\n\t\t\t\terror\n\t\t\t});\n\t\t\telse console.error(\"[vjs-store]\", error);\n\t\t}\n\t};\n}\nfunction isStore(value) {\n\treturn isObject(value) && STORE_SYMBOL in value;\n}\n//#endregion\nexport { createStore, isStore };\n\n//# sourceMappingURL=store.js.map","import { defineSlice } from \"@videojs/store\";\n//#region src/dom/feature.ts\nconst definePlayerFeature = defineSlice();\n//#endregion\nexport { definePlayerFeature };\n\n//# sourceMappingURL=feature.js.map","import { isFunction, isObject } from \"@videojs/utils/predicate\";\n//#region src/dom/media/predicate.ts\nfunction hasMetadata(media) {\n\treturn media.readyState >= 1;\n}\nfunction isMediaPauseCapable(value) {\n\treturn isObject(value) && \"paused\" in value && \"ended\" in value && isFunction(value.pause);\n}\nfunction isMediaSeekCapable(value) {\n\treturn isObject(value) && \"currentTime\" in value && \"duration\" in value && \"seeking\" in value;\n}\nfunction isMediaSourceCapable(value) {\n\treturn isObject(value) && \"src\" in value && \"currentSrc\" in value && \"readyState\" in value && isFunction(value.load);\n}\nfunction isMediaVolumeCapable(value) {\n\treturn isObject(value) && \"volume\" in value && \"muted\" in value;\n}\nfunction isMediaPlaybackRateCapable(value) {\n\treturn isObject(value) && \"playbackRate\" in value;\n}\nfunction isMediaBufferCapable(value) {\n\treturn isObject(value) && \"buffered\" in value && \"seekable\" in value;\n}\nfunction isMediaErrorCapable(value) {\n\treturn isObject(value) && \"error\" in value;\n}\nfunction isMediaTextTrackCapable(value) {\n\treturn isObject(value) && \"textTracks\" in value;\n}\nfunction isMediaRemotePlaybackCapable(value) {\n\treturn isObject(value) && \"remote\" in value && isObject(value.remote);\n}\nfunction isQuerySelectorAllCapable(value) {\n\treturn isObject(value) && \"querySelectorAll\" in value && isFunction(value.querySelectorAll);\n}\n//#endregion\nexport { hasMetadata, isMediaBufferCapable, isMediaErrorCapable, isMediaPauseCapable, isMediaPlaybackRateCapable, isMediaRemotePlaybackCapable, isMediaSeekCapable, isMediaSourceCapable, isMediaTextTrackCapable, isMediaVolumeCapable, isQuerySelectorAllCapable };\n\n//# sourceMappingURL=predicate.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { isMediaBufferCapable } from \"../../media/predicate.js\";\nimport { listen, serializeTimeRanges } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/buffer.ts\nconst bufferFeature = definePlayerFeature({\n\tname: \"buffer\",\n\tstate: () => ({\n\t\tbuffered: [],\n\t\tseekable: []\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaBufferCapable(media)) return;\n\t\tconst sync = () => set({\n\t\t\tbuffered: serializeTimeRanges(media.buffered),\n\t\t\tseekable: serializeTimeRanges(media.seekable)\n\t\t});\n\t\tsync();\n\t\tlisten(media, \"progress\", sync, { signal });\n\t\tlisten(media, \"emptied\", sync, { signal });\n\t}\n});\n//#endregion\nexport { bufferFeature };\n\n//# sourceMappingURL=buffer.js.map","import { isObject } from \"@videojs/utils/predicate\";\n//#region src/dom/presentation/cast.ts\nfunction resolveRemote(media) {\n\tconst target = media;\n\tif (isObject(target.remote) && \"state\" in target.remote && \"prompt\" in target.remote) return target.remote;\n}\nfunction isCastConnected(media) {\n\treturn resolveRemote(media)?.state === \"connected\";\n}\nfunction isCastConnecting(media) {\n\treturn resolveRemote(media)?.state === \"connecting\";\n}\nasync function requestCast(media) {\n\tconst remote = resolveRemote(media);\n\tif (!remote) throw new DOMException(\"Remote playback not supported\", \"NotSupportedError\");\n\treturn remote.prompt();\n}\n//#endregion\nexport { isCastConnected, isCastConnecting, requestCast };\n\n//# sourceMappingURL=cast.js.map","import { isFunction } from \"@videojs/utils/predicate\";\n//#region src/dom/presentation/fullscreen.ts\nfunction isFullscreenEnabled() {\n\tconst doc = document;\n\tif (doc.fullscreenEnabled || doc.webkitFullscreenEnabled) return true;\n\treturn isFunction(document.createElement(\"video\").webkitEnterFullscreen);\n}\nfunction getFullscreenElement() {\n\tconst doc = document;\n\treturn doc.fullscreenElement ?? doc.webkitFullscreenElement ?? null;\n}\nfunction isFullscreenElement(container, media) {\n\tif (media instanceof HTMLMediaElement) {\n\t\tconst video = media;\n\t\tif (video.webkitDisplayingFullscreen && video.webkitPresentationMode === \"fullscreen\") return true;\n\t}\n\tconst target = container ?? media;\n\tif (getFullscreenElement() === target) return true;\n\tif (target instanceof Element) try {\n\t\treturn target.matches(\":fullscreen\");\n\t} catch {\n\t\treturn false;\n\t}\n\treturn false;\n}\nasync function requestFullscreen(container, media) {\n\tconst doc = document;\n\tif (container && (doc.fullscreenEnabled || doc.webkitFullscreenEnabled)) {\n\t\tconst el = container;\n\t\tif (isFunction(el.requestFullscreen)) return el.requestFullscreen();\n\t\tif (isFunction(el.webkitRequestFullscreen)) return el.webkitRequestFullscreen();\n\t}\n\tif (media instanceof HTMLMediaElement) {\n\t\tconst video = media;\n\t\tif (isFunction(video.webkitEnterFullscreen)) {\n\t\t\tvideo.webkitEnterFullscreen();\n\t\t\treturn;\n\t\t}\n\t\tif (isFunction(media.requestFullscreen)) return media.requestFullscreen();\n\t}\n\tthrow new DOMException(\"Fullscreen not supported\", \"NotSupportedError\");\n}\nasync function exitFullscreen(media) {\n\tconst doc = document;\n\tif (media instanceof HTMLMediaElement) {\n\t\tconst video = media;\n\t\tif (isFunction(video.webkitExitFullscreen) && video.webkitDisplayingFullscreen) {\n\t\t\tvideo.webkitExitFullscreen();\n\t\t\treturn;\n\t\t}\n\t}\n\tif (isFunction(doc.exitFullscreen)) return doc.exitFullscreen();\n\tif (isFunction(doc.webkitExitFullscreen)) return doc.webkitExitFullscreen();\n}\n//#endregion\nexport { exitFullscreen, isFullscreenElement, isFullscreenEnabled, requestFullscreen };\n\n//# sourceMappingURL=fullscreen.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { isMediaRemotePlaybackCapable } from \"../../media/predicate.js\";\nimport { isCastConnected, requestCast } from \"../../presentation/cast.js\";\nimport { exitFullscreen, isFullscreenElement } from \"../../presentation/fullscreen.js\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/cast.ts\nconst castFeature = definePlayerFeature({\n\tname: \"cast\",\n\tstate: ({ target }) => ({\n\t\tcastState: \"disconnected\",\n\t\tcastAvailability: \"unavailable\",\n\t\tasync toggleCast() {\n\t\t\tconst { media, container } = target();\n\t\t\tif (isCastConnected(media)) return requestCast(media);\n\t\t\tif (isFullscreenElement(container, media)) await exitFullscreen();\n\t\t\treturn requestCast(media);\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaRemotePlaybackCapable(media)) return;\n\t\tconst syncState = () => set({ castState: media.remote.state });\n\t\tsyncState();\n\t\tlisten(media.remote, \"connect\", syncState, { signal });\n\t\tlisten(media.remote, \"connecting\", syncState, { signal });\n\t\tlisten(media.remote, \"disconnect\", syncState, { signal });\n\t\tmedia.remote.watchAvailability((available) => {\n\t\t\tset({ castAvailability: available ? \"available\" : \"unavailable\" });\n\t\t}).catch(() => {\n\t\t\tset({ castAvailability: \"unsupported\" });\n\t\t});\n\t\tsignal.addEventListener(\"abort\", () => {\n\t\t\tmedia.remote?.cancelWatchAvailability().catch(() => {});\n\t\t});\n\t}\n});\n//#endregion\nexport { castFeature };\n\n//# sourceMappingURL=cast.js.map","//#region src/dom/gesture/region.ts\n/**\n* Determine which named region a pointer position falls into.\n*\n* Regions divide the container width equally based on how many are active:\n* - `left` + `right` → halves (50% / 50%)\n* - `left` + `center` + `right` → thirds (33% / 34% / 33%)\n*\n* Single region: `left` covers the left half, `right` the right half,\n* and `center` covers the full surface. Partial two-region combos\n* (e.g. `left` + `center`) use the same natural zones — positions outside\n* all active zones return `null` so full-surface gestures can handle them.\n*/\nfunction resolveRegion(clientX, containerRect, activeRegions) {\n\tif (activeRegions.size === 0) return null;\n\tconst relativeX = clientX - containerRect.left;\n\tconst width = containerRect.width;\n\tif (width === 0) return null;\n\tconst ratio = relativeX / width;\n\tif (activeRegions.size === 2 && activeRegions.has(\"left\") && activeRegions.has(\"right\")) return ratio < .5 ? \"left\" : \"right\";\n\tif (activeRegions.size === 3) {\n\t\tif (ratio < 1 / 3) return \"left\";\n\t\tif (ratio < 2 / 3) return \"center\";\n\t\treturn \"right\";\n\t}\n\tif (activeRegions.has(\"left\") && ratio < .5) return \"left\";\n\tif (activeRegions.has(\"right\") && ratio >= .5) return \"right\";\n\tif (activeRegions.has(\"center\")) {\n\t\tif (activeRegions.size === 1) return \"center\";\n\t\tif (ratio >= 1 / 3 && ratio < 2 / 3) return \"center\";\n\t}\n\treturn null;\n}\n//#endregion\nexport { resolveRegion };\n\n//# sourceMappingURL=region.js.map","import { resolveRegion } from \"./region.js\";\nimport { isInteractiveTarget, listen } from \"@videojs/utils/dom\";\n//#region src/dom/gesture/coordinator.ts\nconst TAP_THRESHOLD = 250;\nvar GestureCoordinator = class {\n\t#target;\n\t#bindings = [];\n\t#recognizers = /* @__PURE__ */ new Set();\n\t#disconnect = null;\n\tconstructor(target) {\n\t\tthis.#target = target;\n\t}\n\tget bindings() {\n\t\treturn this.#bindings;\n\t}\n\tadd(binding) {\n\t\tthis.#bindings.push(binding);\n\t\tthis.#recognizers.add(binding.recognizer);\n\t\tthis.#connect();\n\t\tlet removed = false;\n\t\treturn () => {\n\t\t\tif (removed) return;\n\t\t\tremoved = true;\n\t\t\tconst idx = this.#bindings.indexOf(binding);\n\t\t\tif (idx !== -1) this.#bindings.splice(idx, 1);\n\t\t\tthis.#maybeDisconnect();\n\t\t};\n\t}\n\t#connect() {\n\t\tif (this.#disconnect) return;\n\t\tthis.#disconnect = new AbortController();\n\t\tconst { signal } = this.#disconnect;\n\t\tlet pointerDownTime = 0;\n\t\tlisten(this.#target, \"pointerdown\", (event) => {\n\t\t\tif (event.button !== 0) return;\n\t\t\tpointerDownTime = Date.now();\n\t\t}, { signal });\n\t\tlisten(this.#target, \"pointerup\", (event) => {\n\t\t\tif (event.button !== 0) return;\n\t\t\tif (Date.now() - pointerDownTime > TAP_THRESHOLD) return;\n\t\t\tif (isInteractiveTarget(event)) return;\n\t\t\tconst pointerType = event.pointerType;\n\t\t\tconst clientX = event.clientX;\n\t\t\tconst target = this.#target;\n\t\t\tconst bindings = this.#bindings;\n\t\t\tconst matches = { resolve: (type) => matchBindings(bindings, type, pointerType, clientX, target) };\n\t\t\tfor (const recognizer of this.#recognizers) recognizer.handleUp(matches, event);\n\t\t}, { signal });\n\t}\n\t#maybeDisconnect() {\n\t\tif (this.#bindings.length > 0) return;\n\t\tfor (const recognizer of this.#recognizers) recognizer.reset();\n\t\tthis.#recognizers.clear();\n\t\tthis.#disconnect?.abort();\n\t\tthis.#disconnect = null;\n\t}\n};\nconst coordinators = /* @__PURE__ */ new WeakMap();\n/** Look up the gesture coordinator for a target element, if one exists. */\nfunction findGestureCoordinator(target) {\n\treturn coordinators.get(target);\n}\nfunction getGestureCoordinator(target) {\n\tlet coordinator = coordinators.get(target);\n\tif (!coordinator) {\n\t\tcoordinator = new GestureCoordinator(target);\n\t\tcoordinators.set(target, coordinator);\n\t}\n\treturn coordinator;\n}\nfunction matchBindings(bindings, type, pointerType, clientX, target) {\n\tconst rect = target.getBoundingClientRect();\n\tconst activeRegions = getActiveRegions(bindings, type, pointerType);\n\tconst region = activeRegions.size > 0 ? resolveRegion(clientX, rect, activeRegions) : null;\n\tconst matches = [];\n\tfor (const binding of bindings) {\n\t\tif (binding.disabled) continue;\n\t\tif (binding.type !== type) continue;\n\t\tif (binding.pointer && binding.pointer !== pointerType) continue;\n\t\tif (binding.region) {\n\t\t\tif (binding.region !== region) continue;\n\t\t} else if (region !== null) continue;\n\t\tmatches.push(binding);\n\t}\n\treturn matches;\n}\nfunction getActiveRegions(bindings, type, pointerType) {\n\tconst regions = /* @__PURE__ */ new Set();\n\tfor (const binding of bindings) {\n\t\tif (binding.disabled) continue;\n\t\tif (binding.type !== type) continue;\n\t\tif (binding.pointer && binding.pointer !== pointerType) continue;\n\t\tif (binding.region) regions.add(binding.region);\n\t}\n\treturn regions;\n}\n//#endregion\nexport { GestureCoordinator, findGestureCoordinator, getGestureCoordinator };\n\n//# sourceMappingURL=coordinator.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { isMediaPauseCapable, isMediaRemotePlaybackCapable } from \"../../media/predicate.js\";\nimport { isCastConnected, isCastConnecting } from \"../../presentation/cast.js\";\nimport { findGestureCoordinator } from \"../../gesture/coordinator.js\";\nimport { isNull } from \"@videojs/utils/predicate\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/controls.ts\nconst IDLE_DELAY = 2e3;\nconst TAP_THRESHOLD = 250;\nconst controlsFeature = definePlayerFeature({\n\tname: \"controls\",\n\tstate: ({ get, set }) => ({\n\t\tuserActive: true,\n\t\tcontrolsVisible: true,\n\t\ttoggleControls() {\n\t\t\tconst next = !get().userActive;\n\t\t\tset({\n\t\t\t\tuserActive: next,\n\t\t\t\tcontrolsVisible: next\n\t\t\t});\n\t\t\treturn next;\n\t\t}\n\t}),\n\tattach({ target, signal, get, set }) {\n\t\tconst { media, container } = target;\n\t\tif (!isMediaPauseCapable(media) || isNull(container)) return;\n\t\tconst computeVisible = (userActive) => {\n\t\t\treturn userActive || media.paused || isCastConnected(media) || isCastConnecting(media);\n\t\t};\n\t\tlet idleTimer;\n\t\tfunction clearIdle() {\n\t\t\tclearTimeout(idleTimer);\n\t\t\tidleTimer = void 0;\n\t\t}\n\t\tfunction scheduleIdle() {\n\t\t\tclearIdle();\n\t\t\tidleTimer = setTimeout(setInactive, IDLE_DELAY);\n\t\t}\n\t\tfunction setActive() {\n\t\t\tif (!get().userActive) set({\n\t\t\t\tuserActive: true,\n\t\t\t\tcontrolsVisible: true\n\t\t\t});\n\t\t\tscheduleIdle();\n\t\t}\n\t\tfunction setInactive() {\n\t\t\tclearIdle();\n\t\t\tset({\n\t\t\t\tuserActive: false,\n\t\t\t\tcontrolsVisible: computeVisible(false)\n\t\t\t});\n\t\t}\n\t\tset({ toggleControls() {\n\t\t\tif (get().controlsVisible) setInactive();\n\t\t\telse setActive();\n\t\t\treturn get().controlsVisible;\n\t\t} });\n\t\tlet pointerDownTime = 0;\n\t\tfunction onPointerDown() {\n\t\t\tpointerDownTime = Date.now();\n\t\t}\n\t\tfunction onPointerUp(event) {\n\t\t\tif (event.pointerType === \"touch\" && Date.now() - pointerDownTime < TAP_THRESHOLD) {\n\t\t\t\tif (findGestureCoordinator(container)?.bindings.some((b) => b.type === \"tap\" && b.action === \"toggleControls\" && (!b.pointer || b.pointer === \"touch\"))) return;\n\t\t\t\tconst isMediaOrContainer = [media, container].includes(event.target);\n\t\t\t\tif (get().controlsVisible && isMediaOrContainer) setInactive();\n\t\t\t\telse setActive();\n\t\t\t} else setActive();\n\t\t}\n\t\tconst onPlaybackChange = () => {\n\t\t\tconst { userActive } = get();\n\t\t\tset({ controlsVisible: computeVisible(userActive) });\n\t\t\tif (!media.paused && userActive) scheduleIdle();\n\t\t};\n\t\tlisten(container, \"pointermove\", setActive, { signal });\n\t\tlisten(container, \"pointerdown\", onPointerDown, { signal });\n\t\tlisten(container, \"pointerup\", onPointerUp, { signal });\n\t\tlisten(container, \"keyup\", setActive, { signal });\n\t\tlisten(container, \"focusin\", setActive, { signal });\n\t\tlisten(container, \"mouseleave\", setInactive, { signal });\n\t\tlisten(media, \"play\", onPlaybackChange, { signal });\n\t\tlisten(media, \"pause\", onPlaybackChange, { signal });\n\t\tlisten(media, \"ended\", onPlaybackChange, { signal });\n\t\tif (isMediaRemotePlaybackCapable(media)) {\n\t\t\tconst onCastChange = () => {\n\t\t\t\tconst { userActive } = get();\n\t\t\t\tset({ controlsVisible: computeVisible(userActive) });\n\t\t\t};\n\t\t\tlisten(media.remote, \"connect\", onCastChange, { signal });\n\t\t\tlisten(media.remote, \"connecting\", onCastChange, { signal });\n\t\t\tlisten(media.remote, \"disconnect\", onCastChange, { signal });\n\t\t}\n\t\tsignal.addEventListener(\"abort\", clearIdle, { once: true });\n\t\tscheduleIdle();\n\t}\n});\n//#endregion\nexport { controlsFeature };\n\n//# sourceMappingURL=controls.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { isMediaErrorCapable } from \"../../media/predicate.js\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/error.ts\nconst errorFeature = definePlayerFeature({\n\tname: \"error\",\n\tstate: ({ set }) => ({\n\t\terror: null,\n\t\tdismissError() {\n\t\t\tset({ error: null });\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaErrorCapable(media)) return;\n\t\tconst syncError = () => set({ error: media.error });\n\t\tlisten(media, \"error\", syncError, { signal });\n\t\tlisten(media, \"emptied\", () => set({ error: null }), { signal });\n\t}\n});\n//#endregion\nexport { errorFeature };\n\n//# sourceMappingURL=error.js.map","import { isFunction } from \"@videojs/utils/predicate\";\n//#region src/dom/presentation/pip.ts\nfunction resolveMediaTarget(media) {\n\tconst target = media.target;\n\treturn target instanceof HTMLMediaElement ? target : media;\n}\nfunction isPictureInPictureEnabled() {\n\tif (document.pictureInPictureEnabled) {\n\t\tconst isSafari = /.*Version\\/.*Safari\\/.*/.test(navigator.userAgent);\n\t\tconst isPWA = typeof matchMedia === \"function\" && matchMedia(\"(display-mode: standalone)\").matches;\n\t\treturn !isSafari || !isPWA;\n\t}\n\treturn isFunction(document.createElement(\"video\").webkitSetPresentationMode);\n}\nfunction isPictureInPictureElement(media) {\n\tconst target = resolveMediaTarget(media);\n\tif (document.pictureInPictureElement === target) return true;\n\tif (target instanceof HTMLVideoElement) return target.webkitPresentationMode === \"picture-in-picture\";\n\treturn false;\n}\nasync function requestPictureInPicture(media) {\n\tconst target = resolveMediaTarget(media);\n\tif (!(target instanceof HTMLVideoElement)) throw new DOMException(\"Picture-in-Picture not supported\", \"NotSupportedError\");\n\tconst video = target;\n\tif (isFunction(video.webkitSetPresentationMode)) {\n\t\tvideo.webkitSetPresentationMode(\"picture-in-picture\");\n\t\treturn;\n\t}\n\tif (isFunction(video.requestPictureInPicture)) {\n\t\tawait video.requestPictureInPicture();\n\t\treturn;\n\t}\n\tthrow new DOMException(\"Picture-in-Picture not supported\", \"NotSupportedError\");\n}\nasync function exitPictureInPicture(media) {\n\tif (media) {\n\t\tconst target = resolveMediaTarget(media);\n\t\tif (target instanceof HTMLVideoElement) {\n\t\t\tconst video = target;\n\t\t\tif (isFunction(video.webkitSetPresentationMode) && video.webkitPresentationMode === \"picture-in-picture\") {\n\t\t\t\tvideo.webkitSetPresentationMode(\"inline\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\tif (isFunction(document.exitPictureInPicture)) return document.exitPictureInPicture();\n}\n//#endregion\nexport { exitPictureInPicture, isPictureInPictureElement, isPictureInPictureEnabled, requestPictureInPicture };\n\n//# sourceMappingURL=pip.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { exitFullscreen, isFullscreenElement, isFullscreenEnabled, requestFullscreen } from \"../../presentation/fullscreen.js\";\nimport { exitPictureInPicture, isPictureInPictureElement } from \"../../presentation/pip.js\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/fullscreen.ts\nconst fullscreenFeature = definePlayerFeature({\n\tname: \"fullscreen\",\n\tstate: ({ target }) => ({\n\t\tfullscreen: false,\n\t\tfullscreenAvailability: \"unavailable\",\n\t\tasync requestFullscreen() {\n\t\t\tconst { media, container } = target();\n\t\t\tif (isPictureInPictureElement(media)) await exitPictureInPicture(media);\n\t\t\treturn requestFullscreen(container, media);\n\t\t},\n\t\tasync exitFullscreen() {\n\t\t\tconst { media } = target();\n\t\t\treturn exitFullscreen(media);\n\t\t},\n\t\tasync toggleFullscreen() {\n\t\t\tconst { media, container } = target();\n\t\t\tif (isFullscreenElement(container, media)) return exitFullscreen(media);\n\t\t\tif (isPictureInPictureElement(media)) await exitPictureInPicture(media);\n\t\t\treturn requestFullscreen(container, media);\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media, container } = target;\n\t\tset({ fullscreenAvailability: isFullscreenEnabled() ? \"available\" : \"unsupported\" });\n\t\tconst sync = () => set({ fullscreen: isFullscreenElement(container, media) });\n\t\tsync();\n\t\tlisten(document, \"fullscreenchange\", sync, { signal });\n\t\tlisten(document, \"webkitfullscreenchange\", sync, { signal });\n\t\tif (\"webkitPresentationMode\" in media) listen(media, \"webkitpresentationmodechanged\", sync, { signal });\n\t}\n});\n//#endregion\nexport { fullscreenFeature };\n\n//# sourceMappingURL=fullscreen.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { exitFullscreen, isFullscreenElement } from \"../../presentation/fullscreen.js\";\nimport { exitPictureInPicture, isPictureInPictureElement, isPictureInPictureEnabled, requestPictureInPicture } from \"../../presentation/pip.js\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/pip.ts\nconst pipFeature = definePlayerFeature({\n\tname: \"pip\",\n\tstate: ({ target }) => ({\n\t\tpip: false,\n\t\tpipAvailability: \"unavailable\",\n\t\tasync requestPictureInPicture() {\n\t\t\tconst { media, container } = target();\n\t\t\tif (isFullscreenElement(container, media)) await exitFullscreen();\n\t\t\treturn requestPictureInPicture(media);\n\t\t},\n\t\tasync exitPictureInPicture() {\n\t\t\tconst { media } = target();\n\t\t\treturn exitPictureInPicture(media);\n\t\t},\n\t\tasync togglePictureInPicture() {\n\t\t\tconst { media, container } = target();\n\t\t\tif (isPictureInPictureElement(media)) return exitPictureInPicture(media);\n\t\t\tif (isFullscreenElement(container, media)) await exitFullscreen();\n\t\t\treturn requestPictureInPicture(media);\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tset({ pipAvailability: isPictureInPictureEnabled() ? \"available\" : \"unsupported\" });\n\t\tconst sync = () => set({ pip: isPictureInPictureElement(media) });\n\t\tsync();\n\t\tlisten(media, \"enterpictureinpicture\", sync, { signal });\n\t\tlisten(media, \"leavepictureinpicture\", sync, { signal });\n\t\tif (\"webkitPresentationMode\" in media) listen(media, \"webkitpresentationmodechanged\", sync, { signal });\n\t}\n});\n//#endregion\nexport { pipFeature };\n\n//# sourceMappingURL=pip.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { isMediaPauseCapable, isMediaSeekCapable, isMediaSourceCapable } from \"../../media/predicate.js\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/playback.ts\nconst playbackFeature = definePlayerFeature({\n\tname: \"playback\",\n\tstate: ({ target }) => ({\n\t\tpaused: true,\n\t\tended: false,\n\t\tstarted: false,\n\t\twaiting: false,\n\t\tplay() {\n\t\t\treturn target().media.play();\n\t\t},\n\t\tpause() {\n\t\t\tconst { media } = target();\n\t\t\tif (isMediaPauseCapable(media)) media.pause();\n\t\t},\n\t\ttogglePaused() {\n\t\t\tconst media = target().media;\n\t\t\tif (!isMediaPauseCapable(media)) return false;\n\t\t\tif (media.paused) {\n\t\t\t\tmedia.play();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t\tmedia.pause();\n\t\t\treturn false;\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaPauseCapable(media) || !isMediaSeekCapable(media) || !isMediaSourceCapable(media)) return;\n\t\tconst sync = () => set({\n\t\t\tpaused: media.paused,\n\t\t\tended: media.ended,\n\t\t\tstarted: !media.paused || media.currentTime > 0,\n\t\t\twaiting: media.readyState < HTMLMediaElement.HAVE_FUTURE_DATA && !media.paused\n\t\t});\n\t\tsync();\n\t\tlisten(media, \"emptied\", sync, { signal });\n\t\tlisten(media, \"play\", sync, { signal });\n\t\tlisten(media, \"pause\", sync, { signal });\n\t\tlisten(media, \"ended\", sync, { signal });\n\t\tlisten(media, \"playing\", sync, { signal });\n\t\tlisten(media, \"waiting\", sync, { signal });\n\t\tlisten(media, \"seeked\", sync, { signal });\n\t}\n});\n//#endregion\nexport { playbackFeature };\n\n//# sourceMappingURL=playback.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { isMediaPlaybackRateCapable } from \"../../media/predicate.js\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/playback-rate.ts\nconst DEFAULT_RATES = [\n\t.2,\n\t.5,\n\t.7,\n\t1,\n\t1.2,\n\t1.5,\n\t1.7,\n\t2\n];\nconst playbackRateFeature = definePlayerFeature({\n\tname: \"playbackRate\",\n\tstate: ({ target }) => ({\n\t\tplaybackRates: DEFAULT_RATES,\n\t\tplaybackRate: 1,\n\t\tsetPlaybackRate(rate) {\n\t\t\tconst { media } = target();\n\t\t\tif (isMediaPlaybackRateCapable(media)) media.playbackRate = rate;\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaPlaybackRateCapable(media)) return;\n\t\tconst sync = () => set({ playbackRate: media.playbackRate });\n\t\tsync();\n\t\tlisten(media, \"ratechange\", sync, { signal });\n\t}\n});\n//#endregion\nexport { playbackRateFeature };\n\n//# sourceMappingURL=playback-rate.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { isMediaSourceCapable } from \"../../media/predicate.js\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/source.ts\nconst sourceFeature = definePlayerFeature({\n\tname: \"source\",\n\tstate: ({ target, signals }) => ({\n\t\tsource: null,\n\t\tcanPlay: false,\n\t\tloadSource(src) {\n\t\t\tsignals.clear();\n\t\t\tconst { media } = target();\n\t\t\tif (!isMediaSourceCapable(media)) return src;\n\t\t\tmedia.src = src;\n\t\t\tmedia.load();\n\t\t\treturn src;\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaSourceCapable(media)) return;\n\t\tconst sync = () => set({\n\t\t\tsource: media.currentSrc || media.src || null,\n\t\t\tcanPlay: media.readyState >= HTMLMediaElement.HAVE_ENOUGH_DATA\n\t\t});\n\t\tsync();\n\t\tlisten(media, \"canplay\", sync, { signal });\n\t\tlisten(media, \"canplaythrough\", sync, { signal });\n\t\tlisten(media, \"loadstart\", sync, { signal });\n\t\tlisten(media, \"emptied\", sync, { signal });\n\t}\n});\n//#endregion\nexport { sourceFeature };\n\n//# sourceMappingURL=source.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { isMediaTextTrackCapable, isQuerySelectorAllCapable } from \"../../media/predicate.js\";\nimport { findTrackElement, getTextTrackList, listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/text-track.ts\nconst textTrackFeature = definePlayerFeature({\n\tname: \"textTrack\",\n\tstate: ({ target }) => ({\n\t\tchaptersCues: [],\n\t\tthumbnailCues: [],\n\t\tthumbnailTrackSrc: null,\n\t\ttextTrackList: [],\n\t\tsubtitlesShowing: false,\n\t\ttoggleSubtitles(forceShow) {\n\t\t\tconst { media } = target();\n\t\t\tif (!isMediaTextTrackCapable(media)) return false;\n\t\t\tconst subtitlesTracks = getTextTrackList(media, (track) => track.kind === \"subtitles\" || track.kind === \"captions\");\n\t\t\tif (!subtitlesTracks.length) return false;\n\t\t\tconst showing = subtitlesTracks.some((track) => track.mode === \"showing\");\n\t\t\tconst nextShowing = forceShow ?? !showing;\n\t\t\tfor (const track of subtitlesTracks) track.mode = nextShowing ? \"showing\" : \"disabled\";\n\t\t\treturn nextShowing;\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaTextTrackCapable(media)) return;\n\t\tlet trackCleanup = null;\n\t\tconst sync = () => {\n\t\t\ttrackCleanup?.abort();\n\t\t\ttrackCleanup = new AbortController();\n\t\t\tlet chaptersTrack = null;\n\t\t\tlet thumbnailTrack = null;\n\t\t\tconst textTrackList = [];\n\t\t\tlet subtitlesShowing = false;\n\t\t\tfor (let i = 0; i < media.textTracks.length; i++) {\n\t\t\t\tconst track = media.textTracks[i];\n\t\t\t\tif (!chaptersTrack && track.kind === \"chapters\") chaptersTrack = track;\n\t\t\t\tif (!thumbnailTrack && track.kind === \"metadata\" && track.label === \"thumbnails\") thumbnailTrack = track;\n\t\t\t\ttextTrackList.push({\n\t\t\t\t\tkind: track.kind,\n\t\t\t\t\tlabel: track.label,\n\t\t\t\t\tlanguage: track.language,\n\t\t\t\t\tmode: track.mode\n\t\t\t\t});\n\t\t\t\tif ((track.kind === \"captions\" || track.kind === \"subtitles\") && track.mode === \"showing\") subtitlesShowing = true;\n\t\t\t}\n\t\t\tconst chaptersCues = chaptersTrack?.cues ? Array.from(chaptersTrack.cues) : [];\n\t\t\tconst thumbnailCues = thumbnailTrack?.cues ? Array.from(thumbnailTrack.cues) : [];\n\t\t\tlet thumbnailTrackSrc = null;\n\t\t\tif (thumbnailTrack) thumbnailTrackSrc = findTrackElement(media, thumbnailTrack)?.src ?? null;\n\t\t\tconst tracks = isQuerySelectorAllCapable(media) && media.querySelectorAll(\"track\") || [];\n\t\t\tconst shadowTracks = media instanceof HTMLElement && media.shadowRoot?.querySelectorAll(\"track\") || [];\n\t\t\tfor (const trackEl of [...tracks, ...shadowTracks]) if (!trackEl.track?.cues?.length) listen(trackEl, \"load\", sync, { signal: trackCleanup.signal });\n\t\t\tset({\n\t\t\t\tchaptersCues,\n\t\t\t\tthumbnailCues,\n\t\t\t\tthumbnailTrackSrc,\n\t\t\t\ttextTrackList,\n\t\t\t\tsubtitlesShowing\n\t\t\t});\n\t\t};\n\t\tsync();\n\t\tconst textTracks = media.textTracks;\n\t\tif (textTracks instanceof EventTarget) {\n\t\t\tlisten(textTracks, \"addtrack\", sync, { signal });\n\t\t\tlisten(textTracks, \"removetrack\", sync, { signal });\n\t\t\tlisten(textTracks, \"change\", sync, { signal });\n\t\t}\n\t\tlisten(media, \"loadstart\", sync, { signal });\n\t\tsignal.addEventListener(\"abort\", () => trackCleanup?.abort(), { once: true });\n\t}\n});\n//#endregion\nexport { textTrackFeature };\n\n//# sourceMappingURL=text-track.js.map","//#region src/dom/store/signal-keys.ts\nconst signalKeys = { seek: Symbol.for(\"@videojs/seek\") };\n//#endregion\nexport { signalKeys };\n\n//# sourceMappingURL=signal-keys.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { hasMetadata, isMediaSeekCapable, isMediaSourceCapable } from \"../../media/predicate.js\";\nimport { signalKeys } from \"../signal-keys.js\";\nimport { listen, onEvent } from \"@videojs/utils/dom\";\nimport { noop } from \"@videojs/utils/function\";\n//#region src/dom/store/features/time.ts\nconst timeFeature = definePlayerFeature({\n\tname: \"time\",\n\tstate: ({ target, signals, set }) => ({\n\t\tcurrentTime: 0,\n\t\tduration: 0,\n\t\tseeking: false,\n\t\tasync seek(time) {\n\t\t\tconst { media } = target(), signal = signals.supersede(signalKeys.seek);\n\t\t\tif (!isMediaSeekCapable(media) || !isMediaSourceCapable(media)) return 0;\n\t\t\tif (!hasMetadata(media)) {\n\t\t\t\tif (!await onEvent(media, \"loadedmetadata\", { signal }).catch(() => false)) return media.currentTime;\n\t\t\t}\n\t\t\tconst clampedTime = Math.max(0, Math.min(time, media.duration || Infinity));\n\t\t\tset({\n\t\t\t\tcurrentTime: clampedTime,\n\t\t\t\tseeking: true\n\t\t\t});\n\t\t\tmedia.currentTime = clampedTime;\n\t\t\tawait onEvent(media, \"seeked\", { signal }).catch(noop);\n\t\t\treturn media.currentTime;\n\t\t}\n\t}),\n\tattach({ target, signal, set, get }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaSeekCapable(media)) return;\n\t\tconst sync = () => set({\n\t\t\tcurrentTime: media.currentTime,\n\t\t\tduration: Number.isFinite(media.duration) ? media.duration : 0,\n\t\t\tseeking: media.seeking\n\t\t});\n\t\tconst onTimeUpdate = () => {\n\t\t\tif (get().seeking) return;\n\t\t\tsync();\n\t\t};\n\t\tsync();\n\t\tlisten(media, \"timeupdate\", onTimeUpdate, { signal });\n\t\tlisten(media, \"durationchange\", sync, { signal });\n\t\tlisten(media, \"seeking\", sync, { signal });\n\t\tlisten(media, \"seeked\", sync, { signal });\n\t\tlisten(media, \"loadedmetadata\", sync, { signal });\n\t\tlisten(media, \"emptied\", sync, { signal });\n\t}\n});\n//#endregion\nexport { timeFeature };\n\n//# sourceMappingURL=time.js.map","import { definePlayerFeature } from \"../../feature.js\";\nimport { isMediaVolumeCapable } from \"../../media/predicate.js\";\nimport { listen } from \"@videojs/utils/dom\";\n//#region src/dom/store/features/volume.ts\n/** Volume to restore when unmuting at zero. */\nconst UNMUTE_VOLUME = .25;\nconst volumeFeature = definePlayerFeature({\n\tname: \"volume\",\n\tstate: ({ target }) => ({\n\t\tvolume: 1,\n\t\tmuted: false,\n\t\tvolumeAvailability: \"unavailable\",\n\t\tsetVolume(volume) {\n\t\t\tconst { media } = target();\n\t\t\tif (!isMediaVolumeCapable(media)) return 0;\n\t\t\tconst clamped = Math.max(0, Math.min(1, volume));\n\t\t\tif (clamped > 0 && media.muted) media.muted = false;\n\t\t\tmedia.volume = clamped;\n\t\t\treturn media.volume;\n\t\t},\n\t\ttoggleMuted() {\n\t\t\tconst { media } = target();\n\t\t\tif (!isMediaVolumeCapable(media)) return false;\n\t\t\tif (media.muted || media.volume === 0) {\n\t\t\t\tmedia.muted = false;\n\t\t\t\tif (media.volume === 0) media.volume = UNMUTE_VOLUME;\n\t\t\t} else media.muted = true;\n\t\t\treturn media.muted;\n\t\t}\n\t}),\n\tattach({ target, signal, set }) {\n\t\tconst { media } = target;\n\t\tif (!isMediaVolumeCapable(media)) return;\n\t\tset({ volumeAvailability: canSetVolume() });\n\t\tconst sync = () => set({\n\t\t\tvolume: media.volume,\n\t\t\tmuted: media.muted\n\t\t});\n\t\tsync();\n\t\tlisten(media, \"volumechange\", sync, { signal });\n\t}\n});\n/** Check if volume can be programmatically set (fails on iOS Safari). */\nfunction canSetVolume() {\n\tconst video = document.createElement(\"video\");\n\ttry {\n\t\tvideo.volume = .5;\n\t\treturn video.volume === .5 ? \"available\" : \"unsupported\";\n\t} catch {\n\t\treturn \"unsupported\";\n\t}\n}\n//#endregion\nexport { volumeFeature };\n\n//# sourceMappingURL=volume.js.map","import { bufferFeature } from \"./buffer.js\";\nimport { castFeature } from \"./cast.js\";\nimport { controlsFeature } from \"./controls.js\";\nimport { errorFeature } from \"./error.js\";\nimport { fullscreenFeature } from \"./fullscreen.js\";\nimport { pipFeature } from \"./pip.js\";\nimport { playbackFeature } from \"./playback.js\";\nimport { playbackRateFeature } from \"./playback-rate.js\";\nimport { sourceFeature } from \"./source.js\";\nimport { textTrackFeature } from \"./text-track.js\";\nimport { timeFeature } from \"./time.js\";\nimport { volumeFeature } from \"./volume.js\";\n//#region src/dom/store/features/presets.ts\nconst videoFeatures = [\n\tplaybackFeature,\n\tplaybackRateFeature,\n\tvolumeFeature,\n\ttimeFeature,\n\tsourceFeature,\n\tbufferFeature,\n\tfullscreenFeature,\n\tpipFeature,\n\tcastFeature,\n\tcontrolsFeature,\n\ttextTrackFeature,\n\terrorFeature\n];\nconst audioFeatures = [\n\tplaybackFeature,\n\tplaybackRateFeature,\n\tvolumeFeature,\n\ttimeFeature,\n\tsourceFeature,\n\tbufferFeature,\n\terrorFeature\n];\nconst backgroundFeatures = [];\n//#endregion\nexport { audioFeatures, backgroundFeatures, videoFeatures };\n\n//# sourceMappingURL=presets.js.map","import { shallowEqual } from \"../../core/shallow-equal.js\";\nimport { noop } from \"@videojs/utils/function\";\n//#region src/html/controllers/snapshot-controller.ts\n/**\n* Subscribe to a `State<T>` container with optional selector.\n*\n* Without selector: returns full state, re-renders on any state change.\n* With selector: returns selected slice, re-renders only when the slice changes (shallowEqual).\n*\n* @example\n* ```ts\n* #state = new SnapshotController(this, sliderState, (s) => s.value);\n* ```\n*/\nvar SnapshotController = class {\n\t#host;\n\t#selector;\n\t#state;\n\t#cached;\n\t#unsubscribe = noop;\n\tconstructor(host, state, selector) {\n\t\tthis.#host = host;\n\t\tthis.#state = state;\n\t\tthis.#selector = selector;\n\t\thost.addController(this);\n\t}\n\tget value() {\n\t\tif (!this.#selector) return this.#state.current;\n\t\tthis.#cached ??= this.#selector(this.#state.current);\n\t\treturn this.#cached;\n\t}\n\t/** Switch to tracking a different state container. */\n\ttrack(state) {\n\t\tthis.#state = state;\n\t\tthis.#subscribe();\n\t}\n\thostConnected() {\n\t\tthis.#subscribe();\n\t}\n\thostDisconnected() {\n\t\tthis.#unsubscribe();\n\t\tthis.#unsubscribe = noop;\n\t\tthis.#cached = void 0;\n\t}\n\t#subscribe() {\n\t\tthis.#unsubscribe();\n\t\tif (!this.#selector) {\n\t\t\tthis.#unsubscribe = this.#state.subscribe(() => this.#host.requestUpdate());\n\t\t\treturn;\n\t\t}\n\t\tconst selector = this.#selector;\n\t\tthis.#cached = selector(this.#state.current);\n\t\tthis.#unsubscribe = this.#state.subscribe(() => {\n\t\t\tconst next = selector(this.#state.current);\n\t\t\tif (!shallowEqual(this.#cached, next)) {\n\t\t\t\tthis.#cached = next;\n\t\t\t\tthis.#host.requestUpdate();\n\t\t\t}\n\t\t});\n\t}\n};\n//#endregion\nexport { SnapshotController };\n\n//# sourceMappingURL=snapshot-controller.js.map","import { isStore } from \"../core/store.js\";\nimport { noop } from \"@videojs/utils/function\";\nimport { ContextConsumer } from \"@videojs/element/context\";\n//#region src/html/store-accessor.ts\n/**\n* Resolves a store from either a direct instance or context.\n*\n* When given a direct store, provides immediate access.\n* When given a context, sets up a ContextConsumer to receive the store.\n*\n* @example Direct store\n* ```ts\n* const accessor = new StoreAccessor(host, store, (s) => console.log('available', s));\n* accessor.value; // Store (immediately available)\n* ```\n*\n* @example Context source\n* ```ts\n* const accessor = new StoreAccessor(host, context, (s) => console.log('available', s));\n* accessor.value; // null until context provides store\n* ```\n*/\nvar StoreAccessor = class {\n\t#onAvailable;\n\t#consumer;\n\t#directStore;\n\tconstructor(host, source, onAvailable) {\n\t\tthis.#onAvailable = onAvailable ?? noop;\n\t\tif (isStore(source)) {\n\t\t\tthis.#directStore = source;\n\t\t\tthis.#consumer = null;\n\t\t} else {\n\t\t\tthis.#directStore = null;\n\t\t\tthis.#consumer = new ContextConsumer(host, {\n\t\t\t\tcontext: source,\n\t\t\t\tcallback: (store) => this.#onAvailable(store),\n\t\t\t\tsubscribe: false\n\t\t\t});\n\t\t}\n\t\thost.addController(this);\n\t}\n\t/** Returns the store, or null if not yet available from context. */\n\tget value() {\n\t\tif (this.#consumer) return this.#consumer.value ?? null;\n\t\treturn this.#directStore;\n\t}\n\thostConnected() {\n\t\tif (this.#directStore) this.#onAvailable(this.#directStore);\n\t}\n};\n//#endregion\nexport { StoreAccessor };\n\n//# sourceMappingURL=store-accessor.js.map","import { SnapshotController } from \"./snapshot-controller.js\";\nimport { StoreAccessor } from \"../store-accessor.js\";\nimport { isNull, isUndefined } from \"@videojs/utils/predicate\";\n//#region src/html/controllers/store-controller.ts\n/**\n* Access store state and actions.\n*\n* Without selector: Returns the store, does NOT subscribe to changes.\n* With selector: Returns selected state, triggers update when selected state changes (shallowEqual).\n*\n* @example\n* ```ts\n* // Store access (no subscription) - access actions\n* class Controls extends LitElement {\n* #store = new StoreController(this, storeSource);\n*\n* handleClick() {\n* this.#store.value.setVolume(0.5);\n* }\n* }\n*\n* // Selector-based subscription - re-renders when playback changes\n* class PlayButton extends LitElement {\n* #playback = new StoreController(this, storeSource, selectPlayback);\n*\n* render() {\n* const playback = this.#playback.value;\n* if (!playback) return nothing;\n* return html`<button @click=${playback.toggle}>\n* ${playback.paused ? 'Play' : 'Pause'}\n* </button>`;\n* }\n* }\n* ```\n*/\nvar StoreController = class {\n\t#host;\n\t#selector;\n\t#accessor;\n\t#snapshot = null;\n\tconstructor(host, source, selector) {\n\t\tthis.#host = host;\n\t\tthis.#selector = selector;\n\t\tthis.#accessor = new StoreAccessor(host, source, (store) => this.#connect(store));\n\t\thost.addController(this);\n\t}\n\tget value() {\n\t\tconst store = this.#accessor.value;\n\t\tif (isNull(store)) throw new Error(\"Store not available\");\n\t\tif (isUndefined(this.#selector)) return store;\n\t\treturn this.#snapshot.value;\n\t}\n\thostConnected() {}\n\t#connect(store) {\n\t\tif (isUndefined(this.#selector)) return;\n\t\tif (!this.#snapshot) this.#snapshot = new SnapshotController(this.#host, store.$state, this.#selector);\n\t\telse this.#snapshot.track(store.$state);\n\t}\n};\n//#endregion\nexport { StoreController };\n\n//# sourceMappingURL=store-controller.js.map","import type { PlayerStore } from '@videojs/core/dom';\nimport type { ReactiveController, ReactiveControllerHost } from '@videojs/element';\nimport { ContextConsumer } from '@videojs/element/context';\nimport type { InferStoreState, Selector } from '@videojs/store';\nimport { StoreController } from '@videojs/store/html';\n\nimport type { PlayerContext } from './context';\n\nexport type PlayerControllerHost = ReactiveControllerHost & HTMLElement;\n\n/**\n * Reactive controller for accessing player store state.\n *\n * Without selector: Returns the store, does NOT subscribe to changes.\n * With selector: Returns selected state, subscribes with shallowEqual comparison.\n *\n * @example\n * ```ts\n * // Store access (no subscription)\n * class Controls extends MediaElement {\n * #player = new PlayerController(this, playerContext);\n *\n * handleClick() {\n * this.#player.value.setVolume(0.5);\n * }\n * }\n *\n * // Selector-based subscription\n * class PlayButton extends MediaElement {\n * #playback = new PlayerController(this, playerContext, selectPlayback);\n * }\n * ```\n */\nexport class PlayerController<Store extends PlayerStore, Result = Store> implements ReactiveController {\n readonly #host: PlayerControllerHost;\n readonly #selector: Selector<InferStoreState<Store>, Result> | undefined;\n\n #consumer: ContextConsumer<PlayerContext<Store>, PlayerControllerHost>;\n #store: StoreController<Store, Result> | null = null;\n\n /**\n * @label Without Selector\n * @param host - The host element that owns this controller.\n * @param context - Player context to resolve the store from.\n */\n constructor(host: PlayerControllerHost, context: PlayerContext<Store>);\n /**\n * @label With Selector\n * @param host - The host element that owns this controller.\n * @param context - Player context to resolve the store from.\n * @param selector - Derives a value from the player store state.\n */\n constructor(\n host: PlayerControllerHost,\n context: PlayerContext<Store>,\n selector: Selector<InferStoreState<Store>, Result>\n );\n constructor(\n host: PlayerControllerHost,\n context: PlayerContext<Store>,\n selector?: Selector<InferStoreState<Store>, Result>\n ) {\n this.#host = host;\n this.#selector = selector;\n\n this.#consumer = new ContextConsumer(host, {\n context,\n callback: (ctx) => this.#connect(ctx),\n subscribe: true,\n });\n\n host.addController(this);\n }\n\n get value(): Result | undefined {\n const store = this.#consumer.value;\n if (!store) return undefined;\n\n // Without selector: return store directly\n if (!this.#selector) return store as unknown as Result;\n\n // With selector: use StoreController\n return this.#store?.value;\n }\n\n get displayName(): string | undefined {\n return this.#selector?.displayName;\n }\n\n hostConnected(): void {\n const store = this.#consumer.value;\n if (store) this.#connect(store);\n }\n\n hostDisconnected(): void {\n this.#store = null;\n }\n\n #connect(store: Store): void {\n if (!this.#store && this.#selector) {\n this.#store = new StoreController(this.#host, store, this.#selector);\n }\n }\n}\n\nexport namespace PlayerController {\n export type Host = PlayerControllerHost;\n\n export type Constructor<Store extends PlayerStore = PlayerStore, Result = Store> = typeof PlayerController<\n Store,\n Result\n >;\n}\n","import type { Media, MediaContainer, PlayerStore, PlayerTarget } from '@videojs/core/dom';\nimport { ContextProvider } from '@videojs/element/context';\nimport { isNull } from '@videojs/utils/predicate';\nimport type { MediaElementConstructor } from '@/ui/media-element';\nimport type { ContainerContext, MediaContext, PlayerContext } from '../player/context';\nimport type { PlayerProvider, PlayerProviderConstructor } from './types';\n\nexport interface ProviderMixinConfig<Store extends PlayerStore> {\n playerContext: PlayerContext<Store>;\n mediaContext: MediaContext;\n containerContext: ContainerContext;\n factory: () => Store;\n}\n\nexport type ProviderMixin<Store extends PlayerStore> = <Class extends MediaElementConstructor>(\n BaseClass: Class\n) => Class & PlayerProviderConstructor<Store>;\n\n/**\n * Create a mixin that provides player context to descendant elements and\n * owns the `store.attach()` lifecycle.\n *\n * Media and container elements register themselves via media/container\n * contexts that carry both the current value and a setter. When a media\n * element is available, the provider calls `store.attach({ media, container })`.\n *\n * As a fallback for plain `<video>`/`<audio>` that can't consume context,\n * the provider queries its subtree after a microtask.\n *\n * @param config - Provider configuration with contexts and store factory.\n */\nexport function createProviderMixin<Store extends PlayerStore>(\n config: ProviderMixinConfig<Store>\n): ProviderMixin<Store> {\n return <Class extends MediaElementConstructor>(BaseClass: Class) => {\n class PlayerProviderElement extends BaseClass implements PlayerProvider<Store> {\n #store: Store | null = config.factory();\n #detach: (() => void) | null = null;\n #media: Media | null = null;\n #container: MediaContainer | null = null;\n #fallbackQueued = false;\n\n #setMedia = (media: Media | null): void => {\n if (this.#media === media) return;\n this.#media = media;\n this.#mediaProvider.setValue({ media, setMedia: this.#setMedia });\n this.#tryAttach();\n };\n\n #setContainer = (container: MediaContainer | null): void => {\n if (this.#container === container) return;\n this.#container = container;\n this.#containerProvider.setValue({ container, setContainer: this.#setContainer });\n this.#tryAttach();\n };\n\n #playerProvider = new ContextProvider(this, {\n context: config.playerContext,\n initialValue: this.store,\n });\n\n #mediaProvider = new ContextProvider(this, {\n context: config.mediaContext,\n initialValue: { media: this.#media, setMedia: this.#setMedia },\n });\n\n #containerProvider = new ContextProvider(this, {\n context: config.containerContext,\n initialValue: { container: this.#container, setContainer: this.#setContainer },\n });\n\n get store(): Store {\n if (isNull(this.#store)) {\n this.#store = config.factory();\n }\n\n return this.#store;\n }\n\n override connectedCallback() {\n super.connectedCallback();\n this.#playerProvider.setValue(this.store);\n this.#mediaProvider.setValue({ media: this.#media, setMedia: this.#setMedia });\n this.#containerProvider.setValue({ container: this.#container, setContainer: this.#setContainer });\n this.#tryAttach();\n this.#queueFallbackDiscovery();\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.#detachStore();\n }\n\n override destroyCallback() {\n this.#detachStore();\n this.#store?.destroy();\n this.#store = null;\n super.destroyCallback();\n }\n\n #tryAttach(): void {\n const store = this.#store;\n if (!store) return;\n\n if (!this.#media) {\n this.#detachStore();\n return;\n }\n\n const target: PlayerTarget = {\n media: this.#media,\n container: this.#container,\n };\n\n const hasMediaChanged = store.target?.media !== target.media;\n const hasContainerChanged = store.target?.container !== target.container;\n\n if (hasMediaChanged || hasContainerChanged) {\n this.#detachStore();\n this.#detach = store.attach(target);\n }\n }\n\n #detachStore(): void {\n this.#detach?.();\n this.#detach = null;\n }\n\n #queueFallbackDiscovery(): void {\n if (this.#media || this.#fallbackQueued) return;\n this.#fallbackQueued = true;\n\n queueMicrotask(() => {\n this.#fallbackQueued = false;\n\n // Context already registered media — skip fallback.\n if (this.#media) return;\n\n const media = this.querySelector<HTMLMediaElement>('video, audio');\n if (media) {\n this.#setMedia(media);\n }\n });\n }\n }\n\n return PlayerProviderElement;\n };\n}\n","import type {\n AnyPlayerFeature,\n AudioFeatures,\n AudioPlayerStore,\n PlayerStore,\n PlayerTarget,\n VideoFeatures,\n VideoPlayerStore,\n} from '@videojs/core/dom';\nimport { combine, createStore } from '@videojs/store';\n\nimport { type ContainerMixin, createContainerMixin } from '../store/container-mixin';\nimport { createProviderMixin, type ProviderMixin } from '../store/provider-mixin';\nimport { containerContext, mediaContext, type PlayerContext, playerContext } from './context';\nimport { PlayerController } from './player-controller';\n\nexport interface CreatePlayerConfig<Features extends AnyPlayerFeature[]> {\n features: Features;\n}\n\nexport interface CreatePlayerResult<Store extends PlayerStore> {\n /** Context for consuming player in controllers. */\n context: PlayerContext<Store>;\n\n /** Creates a store instance for imperative access. */\n create: () => Store;\n\n /** Player controller bound to this player's context. */\n PlayerController: PlayerController.Constructor<Store>;\n\n /** Mixin that provides player context to descendants. */\n ProviderMixin: ProviderMixin<Store>;\n\n /** Mixin that consumes player context and registers as the container element. */\n ContainerMixin: ContainerMixin<Store>;\n}\n\n/**\n * Creates a player factory with typed store, mixins, and controller.\n *\n * @example\n * ```ts\n * import { createPlayer, MediaElement, selectPlayback } from '@videojs/html';\n * import { videoFeatures } from '@videojs/html/video';\n *\n * const { ProviderMixin, ContainerMixin, PlayerController, context } = createPlayer({\n * features: videoFeatures,\n * });\n *\n * // Provider element: owns the store, provides context to descendants\n * class VideoPlayer extends ProviderMixin(MediaElement) {}\n * customElements.define('video-player', VideoPlayer);\n *\n * // Control element with selector\n * class PlayButton extends MediaElement {\n * #playback = new PlayerController(this, context, selectPlayback);\n * }\n * ```\n *\n * @label Video\n * @param config - Player configuration with features.\n */\nexport function createPlayer(config: CreatePlayerConfig<VideoFeatures>): CreatePlayerResult<VideoPlayerStore>;\n\n/**\n * Creates a player factory for audio media.\n *\n * @label Audio\n * @param config - Player configuration with features.\n */\nexport function createPlayer(config: CreatePlayerConfig<AudioFeatures>): CreatePlayerResult<AudioPlayerStore>;\n\n/**\n * Creates a player factory with custom features.\n *\n * @label Generic\n * @param config - Player configuration with features.\n */\nexport function createPlayer<const Features extends AnyPlayerFeature[]>(\n config: CreatePlayerConfig<Features>\n): CreatePlayerResult<PlayerStore<Features>>;\n\nexport function createPlayer(config: CreatePlayerConfig<AnyPlayerFeature[]>): CreatePlayerResult<PlayerStore> {\n const slice = combine<PlayerTarget, AnyPlayerFeature[]>(...config.features);\n\n function create(): PlayerStore {\n return createStore<PlayerTarget>()(slice);\n }\n\n const ProviderMixin = createProviderMixin<PlayerStore>({\n playerContext,\n mediaContext,\n containerContext,\n factory: create,\n });\n\n const ContainerMixin = createContainerMixin<PlayerStore>({\n playerContext,\n containerContext,\n });\n\n return {\n context: playerContext,\n create,\n PlayerController,\n ProviderMixin,\n ContainerMixin,\n };\n}\n"],"x_google_ignoreList":[6,7,8],"mappings":"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"}
@@ -31,7 +31,7 @@ function onEvent(target, type, options) {
31
31
 
32
32
  //#endregion
33
33
  //#region ../utils/dist/dom/interactive.js
34
- const INTERACTIVE_SELECTOR = "button,input,select,textarea,a[href],[role=\"slider\"],[role=\"button\"]";
34
+ const INTERACTIVE_SELECTOR = "button,input,select,textarea,a[href],[role=\"slider\"],[role=\"button\"],[data-interactive]";
35
35
  const EDITABLE_SELECTOR = [
36
36
  "textarea",
37
37
  "select",
@@ -1061,6 +1061,9 @@ function isMediaErrorCapable(value) {
1061
1061
  function isMediaTextTrackCapable(value) {
1062
1062
  return isObject(value) && "textTracks" in value;
1063
1063
  }
1064
+ function isMediaRemotePlaybackCapable(value) {
1065
+ return isObject(value) && "remote" in value && isObject(value.remote);
1066
+ }
1064
1067
  function isQuerySelectorAllCapable(value) {
1065
1068
  return isObject(value) && "querySelectorAll" in value && isFunction(value.querySelectorAll);
1066
1069
  }
@@ -1086,6 +1089,112 @@ const bufferFeature = definePlayerFeature({
1086
1089
  }
1087
1090
  });
1088
1091
 
1092
+ //#endregion
1093
+ //#region ../core/dist/dev/dom/presentation/cast.js
1094
+ function resolveRemote(media) {
1095
+ const target = media;
1096
+ if (isObject(target.remote) && "state" in target.remote && "prompt" in target.remote) return target.remote;
1097
+ }
1098
+ function isCastConnected(media) {
1099
+ return resolveRemote(media)?.state === "connected";
1100
+ }
1101
+ function isCastConnecting(media) {
1102
+ return resolveRemote(media)?.state === "connecting";
1103
+ }
1104
+ async function requestCast(media) {
1105
+ const remote = resolveRemote(media);
1106
+ if (!remote) throw new DOMException("Remote playback not supported", "NotSupportedError");
1107
+ return remote.prompt();
1108
+ }
1109
+
1110
+ //#endregion
1111
+ //#region ../core/dist/dev/dom/presentation/fullscreen.js
1112
+ function isFullscreenEnabled() {
1113
+ const doc = document;
1114
+ if (doc.fullscreenEnabled || doc.webkitFullscreenEnabled) return true;
1115
+ return isFunction(document.createElement("video").webkitEnterFullscreen);
1116
+ }
1117
+ function getFullscreenElement() {
1118
+ const doc = document;
1119
+ return doc.fullscreenElement ?? doc.webkitFullscreenElement ?? null;
1120
+ }
1121
+ function isFullscreenElement(container, media) {
1122
+ if (media instanceof HTMLMediaElement) {
1123
+ const video = media;
1124
+ if (video.webkitDisplayingFullscreen && video.webkitPresentationMode === "fullscreen") return true;
1125
+ }
1126
+ const target = container ?? media;
1127
+ if (getFullscreenElement() === target) return true;
1128
+ if (target instanceof Element) try {
1129
+ return target.matches(":fullscreen");
1130
+ } catch {
1131
+ return false;
1132
+ }
1133
+ return false;
1134
+ }
1135
+ async function requestFullscreen(container, media) {
1136
+ const doc = document;
1137
+ if (container && (doc.fullscreenEnabled || doc.webkitFullscreenEnabled)) {
1138
+ const el = container;
1139
+ if (isFunction(el.requestFullscreen)) return el.requestFullscreen();
1140
+ if (isFunction(el.webkitRequestFullscreen)) return el.webkitRequestFullscreen();
1141
+ }
1142
+ if (media instanceof HTMLMediaElement) {
1143
+ const video = media;
1144
+ if (isFunction(video.webkitEnterFullscreen)) {
1145
+ video.webkitEnterFullscreen();
1146
+ return;
1147
+ }
1148
+ if (isFunction(media.requestFullscreen)) return media.requestFullscreen();
1149
+ }
1150
+ throw new DOMException("Fullscreen not supported", "NotSupportedError");
1151
+ }
1152
+ async function exitFullscreen(media) {
1153
+ const doc = document;
1154
+ if (media instanceof HTMLMediaElement) {
1155
+ const video = media;
1156
+ if (isFunction(video.webkitExitFullscreen) && video.webkitDisplayingFullscreen) {
1157
+ video.webkitExitFullscreen();
1158
+ return;
1159
+ }
1160
+ }
1161
+ if (isFunction(doc.exitFullscreen)) return doc.exitFullscreen();
1162
+ if (isFunction(doc.webkitExitFullscreen)) return doc.webkitExitFullscreen();
1163
+ }
1164
+
1165
+ //#endregion
1166
+ //#region ../core/dist/dev/dom/store/features/cast.js
1167
+ const castFeature = definePlayerFeature({
1168
+ name: "cast",
1169
+ state: ({ target }) => ({
1170
+ castState: "disconnected",
1171
+ castAvailability: "unavailable",
1172
+ async toggleCast() {
1173
+ const { media, container } = target();
1174
+ if (isCastConnected(media)) return requestCast(media);
1175
+ if (isFullscreenElement(container, media)) await exitFullscreen();
1176
+ return requestCast(media);
1177
+ }
1178
+ }),
1179
+ attach({ target, signal, set }) {
1180
+ const { media } = target;
1181
+ if (!isMediaRemotePlaybackCapable(media)) return;
1182
+ const syncState = () => set({ castState: media.remote.state });
1183
+ syncState();
1184
+ listen(media.remote, "connect", syncState, { signal });
1185
+ listen(media.remote, "connecting", syncState, { signal });
1186
+ listen(media.remote, "disconnect", syncState, { signal });
1187
+ media.remote.watchAvailability((available) => {
1188
+ set({ castAvailability: available ? "available" : "unavailable" });
1189
+ }).catch(() => {
1190
+ set({ castAvailability: "unsupported" });
1191
+ });
1192
+ signal.addEventListener("abort", () => {
1193
+ media.remote?.cancelWatchAvailability().catch(() => {});
1194
+ });
1195
+ }
1196
+ });
1197
+
1089
1198
  //#endregion
1090
1199
  //#region ../core/dist/dev/dom/gesture/region.js
1091
1200
  /**
@@ -1242,7 +1351,7 @@ const controlsFeature = definePlayerFeature({
1242
1351
  return;
1243
1352
  }
1244
1353
  const computeVisible = (userActive) => {
1245
- return userActive || media.paused;
1354
+ return userActive || media.paused || isCastConnected(media) || isCastConnecting(media);
1246
1355
  };
1247
1356
  let idleTimer;
1248
1357
  function clearIdle() {
@@ -1298,6 +1407,15 @@ const controlsFeature = definePlayerFeature({
1298
1407
  listen(media, "play", onPlaybackChange, { signal });
1299
1408
  listen(media, "pause", onPlaybackChange, { signal });
1300
1409
  listen(media, "ended", onPlaybackChange, { signal });
1410
+ if (isMediaRemotePlaybackCapable(media)) {
1411
+ const onCastChange = () => {
1412
+ const { userActive } = get();
1413
+ set({ controlsVisible: computeVisible(userActive) });
1414
+ };
1415
+ listen(media.remote, "connect", onCastChange, { signal });
1416
+ listen(media.remote, "connecting", onCastChange, { signal });
1417
+ listen(media.remote, "disconnect", onCastChange, { signal });
1418
+ }
1301
1419
  signal.addEventListener("abort", clearIdle, { once: true });
1302
1420
  scheduleIdle();
1303
1421
  }
@@ -1322,61 +1440,6 @@ const errorFeature = definePlayerFeature({
1322
1440
  }
1323
1441
  });
1324
1442
 
1325
- //#endregion
1326
- //#region ../core/dist/dev/dom/presentation/fullscreen.js
1327
- function isFullscreenEnabled() {
1328
- const doc = document;
1329
- if (doc.fullscreenEnabled || doc.webkitFullscreenEnabled) return true;
1330
- return isFunction(document.createElement("video").webkitEnterFullscreen);
1331
- }
1332
- function getFullscreenElement() {
1333
- const doc = document;
1334
- return doc.fullscreenElement ?? doc.webkitFullscreenElement ?? null;
1335
- }
1336
- function isFullscreenElement(container, media) {
1337
- if (media instanceof HTMLMediaElement) {
1338
- const video = media;
1339
- if (video.webkitDisplayingFullscreen && video.webkitPresentationMode === "fullscreen") return true;
1340
- }
1341
- const target = container ?? media;
1342
- if (getFullscreenElement() === target) return true;
1343
- if (target instanceof Element) try {
1344
- return target.matches(":fullscreen");
1345
- } catch {
1346
- return false;
1347
- }
1348
- return false;
1349
- }
1350
- async function requestFullscreen(container, media) {
1351
- const doc = document;
1352
- if (container && (doc.fullscreenEnabled || doc.webkitFullscreenEnabled)) {
1353
- const el = container;
1354
- if (isFunction(el.requestFullscreen)) return el.requestFullscreen();
1355
- if (isFunction(el.webkitRequestFullscreen)) return el.webkitRequestFullscreen();
1356
- }
1357
- if (media instanceof HTMLMediaElement) {
1358
- const video = media;
1359
- if (isFunction(video.webkitEnterFullscreen)) {
1360
- video.webkitEnterFullscreen();
1361
- return;
1362
- }
1363
- if (isFunction(media.requestFullscreen)) return media.requestFullscreen();
1364
- }
1365
- throw new DOMException("Fullscreen not supported", "NotSupportedError");
1366
- }
1367
- async function exitFullscreen(media) {
1368
- const doc = document;
1369
- if (media instanceof HTMLMediaElement) {
1370
- const video = media;
1371
- if (isFunction(video.webkitExitFullscreen) && video.webkitDisplayingFullscreen) {
1372
- video.webkitExitFullscreen();
1373
- return;
1374
- }
1375
- }
1376
- if (isFunction(doc.exitFullscreen)) return doc.exitFullscreen();
1377
- if (isFunction(doc.webkitExitFullscreen)) return doc.webkitExitFullscreen();
1378
- }
1379
-
1380
1443
  //#endregion
1381
1444
  //#region ../core/dist/dev/dom/presentation/pip.js
1382
1445
  function resolveMediaTarget(media) {
@@ -1785,6 +1848,7 @@ const videoFeatures = [
1785
1848
  bufferFeature,
1786
1849
  fullscreenFeature,
1787
1850
  pipFeature,
1851
+ castFeature,
1788
1852
  controlsFeature,
1789
1853
  textTrackFeature,
1790
1854
  errorFeature
@@ -2178,5 +2242,5 @@ function createPlayer(config) {
2178
2242
  }
2179
2243
 
2180
2244
  //#endregion
2181
- export { ContextConsumer as A, isFunction as C, MediaContainerElement as D, isUndefined as E, isEditableTarget as M, isInteractiveActivation as N, MediaElement as O, AbortControllerRegistry as S, isNumber as T, getGestureCoordinator as _, backgroundFeatures as a, noop as b, timeFeature as c, playbackRateFeature as d, playbackFeature as f, controlsFeature as g, errorFeature as h, audioFeatures as i, ReactiveElement as j, ContextProvider as k, textTrackFeature as l, fullscreenFeature as m, PlayerController as n, videoFeatures as o, pipFeature as p, SnapshotController as r, volumeFeature as s, createPlayer as t, sourceFeature as u, bufferFeature as v, isNull as w, throwNoTargetError as x, createState as y };
2182
- //# sourceMappingURL=create-player-Bi6WUwDZ.js.map
2245
+ export { ContextProvider as A, AbortControllerRegistry as C, isUndefined as D, isNumber as E, ReactiveElement as M, isEditableTarget as N, MediaContainerElement as O, isInteractiveActivation as P, throwNoTargetError as S, isNull as T, getGestureCoordinator as _, backgroundFeatures as a, createState as b, timeFeature as c, playbackRateFeature as d, playbackFeature as f, controlsFeature as g, errorFeature as h, audioFeatures as i, ContextConsumer as j, MediaElement as k, textTrackFeature as l, fullscreenFeature as m, PlayerController as n, videoFeatures as o, pipFeature as p, SnapshotController as r, volumeFeature as s, createPlayer as t, sourceFeature as u, castFeature as v, isFunction as w, noop as x, bufferFeature as y };
2246
+ //# sourceMappingURL=create-player-BKLw7l1a.js.map