@videts/vide 0.7.4 → 0.9.2

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 (155) hide show
  1. package/README.md +10 -10
  2. package/dist/chunk-2OVLZ27V.mjs +1 -0
  3. package/dist/chunk-3RDTWUHH.mjs +1 -0
  4. package/dist/chunk-6DWWYSH4.mjs +1 -0
  5. package/dist/chunk-G74QBLVV.mjs +1 -0
  6. package/dist/chunk-H3OXPFD3.mjs +1 -0
  7. package/dist/chunk-JRU2FKRB.mjs +2 -0
  8. package/dist/chunk-LPSJOF2I.mjs +2 -0
  9. package/dist/chunk-NA4C7W64.mjs +2 -0
  10. package/dist/chunk-UY5CGRNN.mjs +1 -0
  11. package/dist/chunk-VPH4JIJV.mjs +1 -0
  12. package/dist/chunk-WINCDUN5.mjs +1 -0
  13. package/dist/dash/index.d.ts +3 -7
  14. package/dist/dash/index.js +1 -0
  15. package/dist/dash/index.mjs +1 -2
  16. package/dist/drm/index.d.ts +5 -32
  17. package/dist/drm/index.js +1 -0
  18. package/dist/drm/index.mjs +1 -1
  19. package/dist/hls/index.d.ts +3 -7
  20. package/dist/hls/index.js +1 -0
  21. package/dist/hls/index.mjs +1 -2
  22. package/dist/index.d.ts +5 -5
  23. package/dist/index.js +1 -0
  24. package/dist/index.mjs +1 -1
  25. package/dist/omid/index.d.ts +2 -2
  26. package/dist/omid/index.js +2 -0
  27. package/dist/omid/index.mjs +2 -2
  28. package/dist/react/index.d.ts +240 -0
  29. package/dist/react/index.js +2 -0
  30. package/dist/react/index.mjs +2 -0
  31. package/dist/simid/index.d.ts +2 -2
  32. package/dist/simid/index.js +1 -0
  33. package/dist/ssai/index.d.ts +4 -40
  34. package/dist/ssai/index.js +1 -0
  35. package/dist/ssai/index.mjs +1 -1
  36. package/dist/svelte/DashPlugin.svelte +23 -0
  37. package/dist/svelte/DashPlugin.svelte.d.ts +4 -0
  38. package/dist/svelte/DrmPlugin.svelte +20 -0
  39. package/dist/svelte/DrmPlugin.svelte.d.ts +4 -0
  40. package/dist/svelte/HlsPlugin.svelte +23 -0
  41. package/dist/svelte/HlsPlugin.svelte.d.ts +4 -0
  42. package/dist/svelte/SsaiPlugin.svelte +23 -0
  43. package/dist/svelte/SsaiPlugin.svelte.d.ts +4 -0
  44. package/dist/svelte/VastPlugin.svelte +20 -0
  45. package/dist/svelte/VastPlugin.svelte.d.ts +4 -0
  46. package/dist/svelte/VideControls.svelte +22 -0
  47. package/dist/svelte/VideControls.svelte.d.ts +8 -0
  48. package/dist/svelte/VideUI.svelte +49 -0
  49. package/dist/svelte/VideUI.svelte.d.ts +9 -0
  50. package/dist/svelte/Video.svelte +31 -0
  51. package/dist/svelte/Video.svelte.d.ts +10 -0
  52. package/dist/svelte/VmapPlugin.svelte +20 -0
  53. package/dist/svelte/VmapPlugin.svelte.d.ts +4 -0
  54. package/dist/svelte/components/AdCountdown.svelte +37 -0
  55. package/dist/svelte/components/AdCountdown.svelte.d.ts +7 -0
  56. package/dist/svelte/components/AdLabel.svelte +26 -0
  57. package/dist/svelte/components/AdLabel.svelte.d.ts +8 -0
  58. package/dist/svelte/components/AdLearnMore.svelte +42 -0
  59. package/dist/svelte/components/AdLearnMore.svelte.d.ts +9 -0
  60. package/dist/svelte/components/AdOverlay.svelte +46 -0
  61. package/dist/svelte/components/AdOverlay.svelte.d.ts +8 -0
  62. package/dist/svelte/components/AdSkip.svelte +67 -0
  63. package/dist/svelte/components/AdSkip.svelte.d.ts +8 -0
  64. package/dist/svelte/components/BigPlayButton.svelte +46 -0
  65. package/dist/svelte/components/BigPlayButton.svelte.d.ts +8 -0
  66. package/dist/svelte/components/ClickPlay.svelte +76 -0
  67. package/dist/svelte/components/ClickPlay.svelte.d.ts +7 -0
  68. package/dist/svelte/components/ErrorDisplay.svelte +27 -0
  69. package/dist/svelte/components/ErrorDisplay.svelte.d.ts +6 -0
  70. package/dist/svelte/components/FullscreenButton.svelte +65 -0
  71. package/dist/svelte/components/FullscreenButton.svelte.d.ts +9 -0
  72. package/dist/svelte/components/Loader.svelte +11 -0
  73. package/dist/svelte/components/Loader.svelte.d.ts +6 -0
  74. package/dist/svelte/components/MuteButton.svelte +57 -0
  75. package/dist/svelte/components/MuteButton.svelte.d.ts +8 -0
  76. package/dist/svelte/components/PlayButton.svelte +63 -0
  77. package/dist/svelte/components/PlayButton.svelte.d.ts +8 -0
  78. package/dist/svelte/components/Poster.svelte +13 -0
  79. package/dist/svelte/components/Poster.svelte.d.ts +8 -0
  80. package/dist/svelte/components/Progress.svelte +101 -0
  81. package/dist/svelte/components/Progress.svelte.d.ts +6 -0
  82. package/dist/svelte/components/TimeDisplay.svelte +33 -0
  83. package/dist/svelte/components/TimeDisplay.svelte.d.ts +7 -0
  84. package/dist/svelte/components/Volume.svelte +117 -0
  85. package/dist/svelte/components/Volume.svelte.d.ts +8 -0
  86. package/dist/svelte/context.d.ts +6 -0
  87. package/dist/svelte/context.js +10 -0
  88. package/dist/svelte/create-vide-player.svelte.d.ts +2 -0
  89. package/dist/svelte/create-vide-player.svelte.js +22 -0
  90. package/dist/svelte/helpers.d.ts +17 -0
  91. package/dist/svelte/helpers.js +31 -0
  92. package/dist/svelte/icons/IconFullscreenEnter.svelte +3 -0
  93. package/dist/svelte/icons/IconFullscreenEnter.svelte.d.ts +26 -0
  94. package/dist/svelte/icons/IconFullscreenExit.svelte +3 -0
  95. package/dist/svelte/icons/IconFullscreenExit.svelte.d.ts +26 -0
  96. package/dist/svelte/icons/IconPause.svelte +3 -0
  97. package/dist/svelte/icons/IconPause.svelte.d.ts +26 -0
  98. package/dist/svelte/icons/IconPlay.svelte +3 -0
  99. package/dist/svelte/icons/IconPlay.svelte.d.ts +26 -0
  100. package/dist/svelte/icons/IconVolumeHigh.svelte +3 -0
  101. package/dist/svelte/icons/IconVolumeHigh.svelte.d.ts +26 -0
  102. package/dist/svelte/icons/IconVolumeLow.svelte +3 -0
  103. package/dist/svelte/icons/IconVolumeLow.svelte.d.ts +26 -0
  104. package/dist/svelte/icons/IconVolumeMute.svelte +3 -0
  105. package/dist/svelte/icons/IconVolumeMute.svelte.d.ts +26 -0
  106. package/dist/svelte/index.d.ts +42 -0
  107. package/dist/svelte/index.js +39 -0
  108. package/dist/svelte/use-ad-state.svelte.d.ts +7 -0
  109. package/dist/svelte/use-ad-state.svelte.js +40 -0
  110. package/dist/svelte/use-autohide.svelte.d.ts +2 -0
  111. package/dist/svelte/use-autohide.svelte.js +68 -0
  112. package/dist/svelte/use-keyboard.svelte.d.ts +7 -0
  113. package/dist/svelte/use-keyboard.svelte.js +96 -0
  114. package/dist/svelte/use-plugin.svelte.d.ts +15 -0
  115. package/dist/svelte/use-plugin.svelte.js +40 -0
  116. package/dist/svelte/use-vide-event.svelte.d.ts +3 -0
  117. package/dist/svelte/use-vide-event.svelte.js +9 -0
  118. package/dist/types-BsEF8iWC.d.ts +316 -0
  119. package/dist/types-C1_eVsFF.d.ts +49 -0
  120. package/dist/types-C6XFF6w_.d.ts +30 -0
  121. package/dist/types-COeag8fU.d.ts +173 -0
  122. package/dist/types-CwjR99DL.d.ts +10 -0
  123. package/dist/types-DsixuzNX.d.ts +52 -0
  124. package/dist/types-DzY1cmXC.d.ts +10 -0
  125. package/dist/types-SuT99_Z3.d.ts +40 -0
  126. package/dist/ui/index.d.ts +8 -38
  127. package/dist/ui/index.js +1 -0
  128. package/dist/ui/index.mjs +1 -2
  129. package/dist/ui/theme.css +138 -46
  130. package/dist/vast/index.d.ts +188 -4
  131. package/dist/vast/index.js +1 -0
  132. package/dist/vast/index.mjs +1 -1
  133. package/dist/vide.core.global.js +1 -0
  134. package/dist/vide.dash.global.js +2 -0
  135. package/dist/vide.drm.global.js +1 -0
  136. package/dist/vide.global.js +2 -0
  137. package/dist/vide.hls.global.js +2 -0
  138. package/dist/vide.omid.global.js +2 -0
  139. package/dist/vide.simid.global.js +1 -0
  140. package/dist/vide.ssai.global.js +1 -0
  141. package/dist/vide.ui.css +956 -0
  142. package/dist/vide.ui.global.js +2 -0
  143. package/dist/vide.vast.global.js +1 -0
  144. package/dist/vide.vmap.global.js +1 -0
  145. package/dist/vmap/index.d.ts +5 -49
  146. package/dist/vmap/index.js +1 -0
  147. package/dist/vmap/index.mjs +1 -1
  148. package/dist/vue/index.d.ts +354 -0
  149. package/dist/vue/index.js +2 -0
  150. package/dist/vue/index.mjs +2 -0
  151. package/package.json +48 -5
  152. package/dist/chunk-726XNUGZ.mjs +0 -1
  153. package/dist/chunk-G4Q7R3SH.mjs +0 -1
  154. package/dist/types-8aPf_wxJ.d.ts +0 -98
  155. package/dist/types-Cine0xi3.d.ts +0 -142
@@ -0,0 +1,2 @@
1
+ import {d}from'../chunk-2OVLZ27V.mjs';import {e,b as b$1,c,x}from'../chunk-LPSJOF2I.mjs';import {a as a$3}from'../chunk-6DWWYSH4.mjs';import {a as a$2}from'../chunk-3RDTWUHH.mjs';import {c as c$1}from'../chunk-WINCDUN5.mjs';import'../chunk-G74QBLVV.mjs';import'../chunk-UY5CGRNN.mjs';import {a}from'../chunk-NA4C7W64.mjs';import {a as a$1}from'../chunk-JRU2FKRB.mjs';import'../chunk-H3OXPFD3.mjs';import {e as e$1}from'../chunk-VPH4JIJV.mjs';import'../chunk-DWXOYV4E.mjs';import {defineComponent,ref,inject,onMounted,h as h$1,watch,onScopeDispose,shallowRef,provide}from'vue';var _=Symbol("vide-player"),R=Symbol("vide-register");function u(){let e=inject(_);if(!e)throw new Error("useVideContext must be used within <VideVideo>");return e}function Fe(){let e=shallowRef(null),i=l=>{e.value&&(e.value.destroy(),e.value=null),e.value=a$3(l);};return provide(_,e),provide(R,i),onScopeDispose(()=>{e.value?.destroy(),e.value=null;}),e}function v(e,i,l){let r;watch(e,n=>{r?.(),r=void 0,n&&(n.on(i,l),r=()=>n.off(i,l));},{immediate:true}),onScopeDispose(()=>{r?.();});}function E(e,i,l){let r;watch(e,n=>{if(r?.(),r=void 0,!n)return;r=i(l).setup(n)??void 0;},{immediate:true}),onScopeDispose(()=>{r?.();});}function Ne(e,i){E(e,a,i??{});}function qe(e,i){E(e,a$1,i??{});}function Ge(e,i){E(e,e$1,i);}function Xe(e,i){E(e,a$2,i);}function $e(e,i){E(e,c$1,i);}function Je(e,i){E(e,d,i??{});}function Qe(e,i){E(e,x,i);}var N=defineComponent({name:"VideVideo",inheritAttrs:false,slots:Object,setup(e,{attrs:i,slots:l,expose:r}){let n=ref(null),t=inject(R);return r({video:n}),onMounted(()=>{n.value&&t&&t(n.value);}),()=>{let{class:a,...o}=i;return h$1("div",{class:a},[h$1("video",{...o,ref:n}),l.default?.()])}}});function w(e,i,l){return defineComponent({name:e,props:l.reduce((r,n)=>(r[n]=null,r),{}),setup(r){let n=u(),t;return watch(n,a=>{if(t?.(),t=void 0,!a)return;t=i({...r}).setup(a)??void 0;},{immediate:true}),onScopeDispose(()=>{t?.();}),()=>null}})}var q=w("VideHlsPlugin",a,["hlsConfig","recovery"]),G=w("VideDashPlugin",a$1,["dashConfig","recovery"]),X=w("VideDrmPlugin",e$1,["widevine","fairplay"]),$=w("VideVastPlugin",a$2,["tagUrl","timeout","allowSkip","adPlugins"]),J=w("VideVmapPlugin",c$1,["url","timeout","vastOptions","adPlugins"]),Q=w("VideSsaiPlugin",d,["tolerance","parser"]);var b={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:24,height:24,fill:"currentColor","aria-hidden":"true"},j=defineComponent({name:"IconPlay",render(){return h$1("svg",b,[h$1("path",{d:"M8 5v14l11-7z"})])}}),Pe=defineComponent({name:"IconPause",render(){return h$1("svg",b,[h$1("path",{d:"M6 19h4V5H6v14zm8-14v14h4V5h-4z"})])}}),O=defineComponent({name:"IconVolumeHigh",render(){return h$1("svg",b,[h$1("path",{d:"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"})])}}),B=defineComponent({name:"IconVolumeLow",render(){return h$1("svg",b,[h$1("path",{d:"M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z"})])}}),H=defineComponent({name:"IconVolumeMute",render(){return h$1("svg",b,[h$1("path",{d:"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4l-1.88 1.88L12 7.76V4z"})])}}),xe=defineComponent({name:"IconFullscreenEnter",render(){return h$1("svg",b,[h$1("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"})])}}),Ee=defineComponent({name:"IconFullscreenExit",render(){return h$1("svg",b,[h$1("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"})])}});function at(...e){return e.filter(Boolean).join(" ")}var W=defineComponent({name:"VidePlayButton",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),n=ref(false);v(r,"statechange",({to:a})=>{a==="playing"||a==="ad:playing"?n.value=true:(a==="paused"||a==="ready"||a==="ended"||a==="ad:paused")&&(n.value=false);});let t=()=>{let a=r.value;a&&(a.state==="playing"||a.state==="ad:playing"?a.pause():a.play().catch(()=>{}));};return ()=>h$1("button",{type:"button",class:at("vide-play",i.class),"aria-label":n.value?"Pause":"Play","data-playing":n.value||void 0,onClick:t},l.default?.()??[h$1(n.value?Pe:j)])}});function mt(...e){return e.filter(Boolean).join(" ")}var Z=defineComponent({name:"VideMuteButton",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),n=ref(false),t=ref(1),a;watch(r,s=>{if(a?.(),a=void 0,!s)return;let f=()=>{n.value=s.muted||s.volume===0,t.value=s.volume;};s.el.addEventListener("volumechange",f),f(),a=()=>s.el.removeEventListener("volumechange",f);},{immediate:true}),onScopeDispose(()=>{a?.();});let o=()=>{let s=r.value;s&&(s.muted=!s.muted);};return ()=>h$1("button",{type:"button",class:mt("vide-mute",i.class),"aria-label":n.value?"Unmute":"Mute","data-muted":n.value||void 0,onClick:o},l.default?.()??[h$1(n.value?H:t.value<.5?B:O)])}});function pt(...e){return e.filter(Boolean).join(" ")}var ee=defineComponent({name:"VideProgress",inheritAttrs:false,setup(e,{attrs:i}){let l=u(),r=ref(0),n=ref(0),t=ref(false),a=ref(false),o=ref(null);v(l,"timeupdate",({currentTime:d,duration:c})=>{!a.value&&c>0&&(r.value=d/c);let m=l.value;if(m&&m.el.buffered.length>0&&c>0){let p=m.el.buffered.end(m.el.buffered.length-1);n.value=Math.min(1,p/c);}}),v(l,"statechange",({to:d})=>{let c=d==="ad:loading"||d==="ad:playing"||d==="ad:paused";t.value=c;});let s=d=>{if(!o.value)return 0;let c=o.value.getBoundingClientRect();return c.width===0?0:Math.max(0,Math.min(1,(d.clientX-c.left)/c.width))},f=d=>{!l.value||t.value||(a.value=true,o.value?.setPointerCapture(d.pointerId),r.value=s(d));},g=d=>{a.value&&(r.value=s(d));},V=d=>{if(!a.value||!l.value)return;a.value=false,o.value?.releasePointerCapture(d.pointerId);let c=s(d),m=l.value.el.duration;Number.isFinite(m)&&m>0&&(l.value.currentTime=c*m);};return ()=>h$1("div",{ref:o,class:pt("vide-progress",i.class),role:"slider",tabindex:0,"aria-label":"Seek","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(r.value*100),"data-disabled":t.value||void 0,style:{"--vide-progress":r.value,"--vide-progress-buffered":n.value},onPointerdown:f,onPointermove:g,onPointerup:V},[h$1("div",{class:"vide-progress__buffered"}),h$1("div",{class:"vide-progress__bar"}),h$1("div",{class:"vide-progress__handle"})])}});function gt(...e){return e.filter(Boolean).join(" ")}var te=defineComponent({name:"VideVolume",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),n=ref(1),t=ref(false),a=ref(false),o=ref(null),s;watch(r,m=>{if(s?.(),s=void 0,!m)return;let p=()=>{a.value||(n.value=m.muted?0:m.volume),t.value=m.muted||m.volume===0;};m.el.addEventListener("volumechange",p),p(),s=()=>m.el.removeEventListener("volumechange",p);},{immediate:true}),onScopeDispose(()=>{s?.();});let f=()=>{let m=r.value;m&&(m.muted=!m.muted);},g=m=>{if(!o.value)return 0;let p=o.value.getBoundingClientRect();return p.width===0?0:Math.max(0,Math.min(1,(m.clientX-p.left)/p.width))},V=m=>{let p=r.value;if(!p)return;a.value=true,o.value?.setPointerCapture(m.pointerId);let P=g(m);p.volume=P,p.muted&&P>0&&(p.muted=false),n.value=P,t.value=P===0;},d=m=>{let p=r.value;if(!a.value||!p)return;let P=g(m);p.volume=P,p.muted&&P>0&&(p.muted=false),n.value=P,t.value=P===0;},c=m=>{a.value&&(a.value=false,o.value?.releasePointerCapture(m.pointerId));};return ()=>h$1("div",{class:gt("vide-volume",i.class),"data-muted":t.value||void 0,style:{"--vide-volume":n.value}},[h$1("button",{type:"button",class:"vide-volume__button","aria-label":t.value?"Unmute":"Mute",onClick:f},l.default?.()??[h$1(t.value?H:n.value<.5?B:O)]),h$1("div",{ref:o,class:"vide-volume__slider",role:"slider",tabindex:0,"aria-label":"Volume","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(n.value*100),onPointerdown:V,onPointermove:d,onPointerup:c},[h$1("div",{class:"vide-volume__track"}),h$1("div",{class:"vide-volume__filled"})])])}});function Et(...e){return e.filter(Boolean).join(" ")}var ne=defineComponent({name:"VideFullscreenButton",inheritAttrs:false,props:{target:{type:Object,default:null}},setup(e,{attrs:i,slots:l}){let r=u(),n=ref(false),t=()=>{n.value=document.fullscreenElement!=null||document.webkitFullscreenElement!=null;};onMounted(()=>{document.addEventListener("fullscreenchange",t),document.addEventListener("webkitfullscreenchange",t);}),onScopeDispose(()=>{document.removeEventListener("fullscreenchange",t),document.removeEventListener("webkitfullscreenchange",t);});let a=()=>{let o=e.target??r.value?.el.closest(".vide-ui")??r.value?.el.parentElement;o&&(document.fullscreenElement?document.exitFullscreen().catch(()=>{}):o.requestFullscreen().catch(()=>{}));};return ()=>h$1("button",{type:"button",class:Et("vide-fullscreen",i.class),"aria-label":n.value?"Exit fullscreen":"Fullscreen","data-fullscreen":n.value||void 0,onClick:a},l.default?.()??[h$1(n.value?Ee:xe)])}});function bt(...e){return e.filter(Boolean).join(" ")}var re=defineComponent({name:"VideTimeDisplay",inheritAttrs:false,props:{separator:{type:String,default:"/"}},setup(e$1,{attrs:i}){let l=u(),r=ref(0),n=ref(0);return v(l,"timeupdate",t=>{r.value=t.currentTime,n.value=t.duration;}),()=>h$1("div",{class:bt("vide-time",i.class),"aria-label":"Time"},[h$1("span",e(r.value)),h$1("span",e$1.separator),h$1("span",e(n.value))])}});function Ct(...e){return e.filter(Boolean).join(" ")}var oe=defineComponent({name:"VideLoader",inheritAttrs:false,setup(e,{attrs:i}){return ()=>h$1("div",{class:Ct("vide-loader",i.class)},[h$1("div",{class:"vide-loader__spinner"})])}});function kt(...e){return e.filter(Boolean).join(" ")}var ie=defineComponent({name:"VidePoster",inheritAttrs:false,props:{src:{type:String,required:true},alt:{type:String,default:""}},setup(e,{attrs:i}){return ()=>h$1("div",{class:kt("vide-poster",i.class)},[h$1("img",{class:"vide-poster__image",src:e.src,alt:e.alt})])}});function It(...e){return e.filter(Boolean).join(" ")}var le=defineComponent({name:"VideErrorDisplay",inheritAttrs:false,setup(e,{attrs:i}){let l=u(),r=ref(""),n;return watch(l,t=>{if(n?.(),n=void 0,!t)return;let a=({message:o})=>{r.value=o;};t.on("error",a),n=()=>t.off("error",a);},{immediate:true}),onScopeDispose(()=>{n?.();}),()=>h$1("div",{class:It("vide-error",i.class)},[h$1("span",{class:"vide-error__message"},r.value)])}});function Rt(...e){return e.filter(Boolean).join(" ")}var ae=defineComponent({name:"VideBigPlayButton",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),n=()=>{let t=r.value;if(t){if(t.state==="ended"){let s=function({to:f}){f==="ready"&&(o.off("statechange",s),o.play().catch(()=>{}));};let o=t;o.on("statechange",s),o.el.currentTime=0,o.el.load();return}t.play().catch(()=>{});}};return ()=>h$1("button",{type:"button",class:Rt("vide-bigplay",i.class),"aria-label":"Play video",onClick:n},l.default?.()??[h$1(j)])}});var Ht=200;function Ft(...e){return e.filter(Boolean).join(" ")}var se=defineComponent({name:"VideClickPlay",inheritAttrs:false,props:{enableFullscreen:{type:Boolean,default:true}},setup(e,{attrs:i}){let l=u(),r=null,n=()=>{let o=l.value;o&&(o.state==="playing"||o.state==="ad:playing"?o.pause():o.play().catch(()=>{}));},t=()=>{if(!e.enableFullscreen)return;let o=l.value,s=o?.el.closest(".vide-ui")??o?.el.parentElement;s&&(document.fullscreenElement!=null?document.exitFullscreen().catch(()=>{}):s.requestFullscreen&&s.requestFullscreen().catch(()=>{}));},a=()=>{let o=l.value;if(o){if(c(o.state)){o.el.click(),n();return}if(r!==null){clearTimeout(r),r=null,t();return}r=setTimeout(()=>{r=null,n();},Ht);}};return onScopeDispose(()=>{r!==null&&(clearTimeout(r),r=null);}),()=>h$1("div",{class:Ft("vide-clickplay",i.class),onClick:a})}});function h(e){let i=ref(false),l=shallowRef(null);return v(e,"ad:start",r=>{i.value=true,l.value={adId:r.adId,clickThrough:r.clickThrough,skipOffset:r.skipOffset,duration:r.duration,adTitle:r.adTitle,adStartTime:Date.now()};}),v(e,"ad:end",()=>{i.value=false,l.value=null;}),v(e,"ad:skip",()=>{i.value=false,l.value=null;}),{active:i,meta:l}}function Nt(...e){return e.filter(Boolean).join(" ")}var ue=defineComponent({name:"VideAdOverlay",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),{active:n,meta:t}=h(r),a=()=>{let o=r.value;if(!o)return;o.el.click();let s=t.value?.clickThrough;s?(window.open(s,"_blank"),o.el.pause()):o.el.paused?Promise.resolve(o.el.play()).catch(()=>{}):o.el.pause();};return ()=>n.value?h$1("div",{class:Nt("vide-ad-overlay",i.class),onClick:a},l.default?.()):null}});function Xt(...e){return e.filter(Boolean).join(" ")}var de=defineComponent({name:"VideAdSkip",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),{active:n,meta:t}=h(r),a=ref(false),o=ref(0);v(r,"timeupdate",({currentTime:f})=>{!n.value||!t.value||t.value.skipOffset===void 0||(f>=t.value.skipOffset?a.value=true:(a.value=false,o.value=Math.max(0,Math.ceil(t.value.skipOffset-f))));});let s=()=>{let f=r.value;!f||!a.value||!t.value||f.emit("ad:skip",{adId:t.value.adId});};return ()=>!n.value||!t.value||t.value.skipOffset===void 0?null:h$1("button",{type:"button",class:Xt("vide-skip",!a.value&&"vide-skip--disabled",i.class),"aria-label":"Skip ad",onClick:s,disabled:!a.value},a.value?l.default?.()??"Skip Ad":`Skip in ${o.value}s`)}});function Wt(...e){return e.filter(Boolean).join(" ")}var me=defineComponent({name:"VideAdCountdown",inheritAttrs:false,props:{format:{type:Function,default:void 0}},setup(e,{attrs:i}){let l=u(),{active:r,meta:n}=h(l),t=ref(0);return v(l,"timeupdate",({currentTime:a})=>{if(!r.value||!n.value)return;let o=l.value,s=n.value.duration??(o&&Number.isFinite(o.duration)?o.duration:0);t.value=Math.max(0,Math.ceil(s-a));}),()=>r.value?h$1("div",{class:Wt("vide-ad-countdown",i.class)},e.format?e.format(t.value):`Ad \xB7 ${t.value}s`):null}});function tn(...e){return e.filter(Boolean).join(" ")}var fe=defineComponent({name:"VideAdLabel",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),{active:n}=h(r);return ()=>n.value?h$1("div",{class:tn("vide-ad-label",i.class)},l.default?.()??"Ad"):null}});function rn(...e){return e.filter(Boolean).join(" ")}var pe=defineComponent({name:"VideAdLearnMore",inheritAttrs:false,props:{showTitle:{type:Boolean,default:false}},setup(e,{attrs:i,slots:l}){let r=u(),{active:n,meta:t}=h(r),a=()=>{let o=r.value;!o||!t.value?.clickThrough||(o.el.click(),window.open(t.value.clickThrough,"_blank"),o.el.pause());};return ()=>{if(!n.value||!t.value?.clickThrough)return null;let o=[];return e.showTitle&&t.value.adTitle&&o.push(h$1("span",{class:"vide-ad-cta__title"},t.value.adTitle)),o.push(l.default?.()??"Learn More"),h$1("button",{type:"button",class:rn("vide-ad-cta",i.class),onClick:a},o)}}});var an=3e3;function sn(e,i){let l=null,r;watch([e,i],([n,t])=>{if(r?.(),r=void 0,!n||!t)return;function a(){if(!t)return true;let d=t.state;return d==="paused"||d==="ended"||d==="idle"||d==="ready"||c(d)}function o(){n?.classList.remove("vide-ui--autohide");}function s(){l!==null&&(clearTimeout(l),l=null);}function f(){s(),!a()&&(l=setTimeout(()=>{n?.classList.add("vide-ui--autohide");},an));}function g(){o(),f();}function V({to:d}){d==="paused"||d==="ended"||d==="idle"||d==="ready"||c(d)?(s(),o()):f();}n.addEventListener("mousemove",g),n.addEventListener("touchstart",g),n.addEventListener("keydown",g),t.on("statechange",V),f(),r=()=>{s(),n.removeEventListener("mousemove",g),n.removeEventListener("touchstart",g),n.removeEventListener("keydown",g),n.classList.remove("vide-ui--autohide"),t.off("statechange",V);};},{immediate:true}),onScopeDispose(()=>{r?.();});}function mn(e,i,l={}){let r;watch([e,i],([n,t])=>{if(r?.(),r=void 0,!n||!t)return;n.setAttribute("tabindex","0");function a(o){if(!t)return;let s=!l.disableSeek,f=!l.disableVolume,g=!l.disableFullscreen,V=c(t.state);switch(o.key){case " ":case "k":case "K":o.preventDefault(),t.state==="playing"||t.state==="ad:playing"?t.pause():t.play().catch(()=>{});break;case "ArrowLeft":if(!s||V)return;o.preventDefault(),t.currentTime=Math.max(0,t.el.currentTime-5);break;case "ArrowRight":if(!s||V)return;o.preventDefault(),t.currentTime=Math.min(t.el.duration||0,t.el.currentTime+5);break;case "ArrowUp":if(!f)return;o.preventDefault(),t.volume=Math.min(1,t.volume+.1),t.muted&&(t.muted=false);break;case "ArrowDown":if(!f)return;o.preventDefault(),t.volume=Math.max(0,t.volume-.1);break;case "m":case "M":if(!f)return;o.preventDefault(),t.muted=!t.muted;break;case "f":case "F":if(!g)return;o.preventDefault(),document.fullscreenElement!=null?document.exitFullscreen().catch(()=>{}):(n?.closest(".vide-ui")??n)?.requestFullscreen().catch(()=>{});break;default:if(o.key.length===1&&o.key>="0"&&o.key<="9"&&s&&!V){o.preventDefault();let d=Number.parseInt(o.key,10)/10,c=t.el.duration;Number.isFinite(c)&&c>0&&(t.currentTime=d*c);}break}}n.addEventListener("keydown",a),r=()=>{n.removeEventListener("keydown",a),n.removeAttribute("tabindex");};},{immediate:true}),onScopeDispose(()=>{r?.();});}function je(...e){return e.filter(Boolean).join(" ")}var ce=defineComponent({name:"VideUI",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),n=ref("");return watch(r,(t,a,o)=>{if(!t){n.value="";return}n.value=b$1(t.state);let s=({to:f})=>{n.value=b$1(f);};t.on("statechange",s),o(()=>t.off("statechange",s));},{immediate:true}),()=>h$1("div",{class:je("vide-ui",n.value,i.class),role:"region","aria-label":"Video player"},l.default?.())}}),ve=defineComponent({name:"VideControls",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u();return ()=>r.value?h$1("div",{class:je("vide-controls",i.class)},l.default?.()):null}});var Io={Video:N,HlsPlugin:q,DashPlugin:G,DrmPlugin:X,VastPlugin:$,VmapPlugin:J,SsaiPlugin:Q,PlayButton:W,MuteButton:Z,Progress:ee,Volume:te,FullscreenButton:ne,TimeDisplay:re,Loader:oe,Poster:ie,ErrorDisplay:le,BigPlayButton:ae,ClickPlay:se,UI:ce,Controls:ve,AdOverlay:ue,AdSkip:de,AdCountdown:me,AdLabel:fe,AdLearnMore:pe};
2
+ export{_ as VIDE_PLAYER_KEY,Io as Vide,me as VideAdCountdown,fe as VideAdLabel,pe as VideAdLearnMore,ue as VideAdOverlay,de as VideAdSkip,ae as VideBigPlayButton,se as VideClickPlay,ve as VideControls,G as VideDashPlugin,X as VideDrmPlugin,le as VideErrorDisplay,ne as VideFullscreenButton,q as VideHlsPlugin,oe as VideLoader,Z as VideMuteButton,W as VidePlayButton,ie as VidePoster,ee as VideProgress,Q as VideSsaiPlugin,re as VideTimeDisplay,ce as VideUI,$ as VideVastPlugin,N as VideVideo,J as VideVmapPlugin,te as VideVolume,h as useAdState,sn as useAutohide,qe as useDash,Ge as useDrm,Ne as useHls,mn as useKeyboard,Je as useSsai,Qe as useUi,Xe as useVast,u as useVideContext,v as useVideEvent,Fe as useVidePlayer,$e as useVmap};
@@ -0,0 +1,2 @@
1
+ import {d}from'../chunk-2OVLZ27V.mjs';import {e,b as b$1,c,x}from'../chunk-LPSJOF2I.mjs';import {a as a$3}from'../chunk-6DWWYSH4.mjs';import {a as a$2}from'../chunk-3RDTWUHH.mjs';import {c as c$1}from'../chunk-WINCDUN5.mjs';import'../chunk-G74QBLVV.mjs';import'../chunk-UY5CGRNN.mjs';import {a}from'../chunk-NA4C7W64.mjs';import {a as a$1}from'../chunk-JRU2FKRB.mjs';import'../chunk-H3OXPFD3.mjs';import {e as e$1}from'../chunk-VPH4JIJV.mjs';import'../chunk-DWXOYV4E.mjs';import {defineComponent,ref,inject,onMounted,h as h$1,watch,onScopeDispose,shallowRef,provide}from'vue';var _=Symbol("vide-player"),R=Symbol("vide-register");function u(){let e=inject(_);if(!e)throw new Error("useVideContext must be used within <VideVideo>");return e}function Fe(){let e=shallowRef(null),i=l=>{e.value&&(e.value.destroy(),e.value=null),e.value=a$3(l);};return provide(_,e),provide(R,i),onScopeDispose(()=>{e.value?.destroy(),e.value=null;}),e}function v(e,i,l){let r;watch(e,n=>{r?.(),r=void 0,n&&(n.on(i,l),r=()=>n.off(i,l));},{immediate:true}),onScopeDispose(()=>{r?.();});}function E(e,i,l){let r;watch(e,n=>{if(r?.(),r=void 0,!n)return;r=i(l).setup(n)??void 0;},{immediate:true}),onScopeDispose(()=>{r?.();});}function Ne(e,i){E(e,a,i??{});}function qe(e,i){E(e,a$1,i??{});}function Ge(e,i){E(e,e$1,i);}function Xe(e,i){E(e,a$2,i);}function $e(e,i){E(e,c$1,i);}function Je(e,i){E(e,d,i??{});}function Qe(e,i){E(e,x,i);}var N=defineComponent({name:"VideVideo",inheritAttrs:false,slots:Object,setup(e,{attrs:i,slots:l,expose:r}){let n=ref(null),t=inject(R);return r({video:n}),onMounted(()=>{n.value&&t&&t(n.value);}),()=>{let{class:a,...o}=i;return h$1("div",{class:a},[h$1("video",{...o,ref:n}),l.default?.()])}}});function w(e,i,l){return defineComponent({name:e,props:l.reduce((r,n)=>(r[n]=null,r),{}),setup(r){let n=u(),t;return watch(n,a=>{if(t?.(),t=void 0,!a)return;t=i({...r}).setup(a)??void 0;},{immediate:true}),onScopeDispose(()=>{t?.();}),()=>null}})}var q=w("VideHlsPlugin",a,["hlsConfig","recovery"]),G=w("VideDashPlugin",a$1,["dashConfig","recovery"]),X=w("VideDrmPlugin",e$1,["widevine","fairplay"]),$=w("VideVastPlugin",a$2,["tagUrl","timeout","allowSkip","adPlugins"]),J=w("VideVmapPlugin",c$1,["url","timeout","vastOptions","adPlugins"]),Q=w("VideSsaiPlugin",d,["tolerance","parser"]);var b={xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",width:24,height:24,fill:"currentColor","aria-hidden":"true"},j=defineComponent({name:"IconPlay",render(){return h$1("svg",b,[h$1("path",{d:"M8 5v14l11-7z"})])}}),Pe=defineComponent({name:"IconPause",render(){return h$1("svg",b,[h$1("path",{d:"M6 19h4V5H6v14zm8-14v14h4V5h-4z"})])}}),O=defineComponent({name:"IconVolumeHigh",render(){return h$1("svg",b,[h$1("path",{d:"M3 9v6h4l5 5V4L7 9H3zm13.5 3c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM14 3.23v2.06c2.89.86 5 3.54 5 6.71s-2.11 5.85-5 6.71v2.06c4.01-.91 7-4.49 7-8.77s-2.99-7.86-7-8.77z"})])}}),B=defineComponent({name:"IconVolumeLow",render(){return h$1("svg",b,[h$1("path",{d:"M18.5 12c0-1.77-1.02-3.29-2.5-4.03v8.05c1.48-.73 2.5-2.25 2.5-4.02zM5 9v6h4l5 5V4L9 9H5z"})])}}),H=defineComponent({name:"IconVolumeMute",render(){return h$1("svg",b,[h$1("path",{d:"M16.5 12c0-1.77-1.02-3.29-2.5-4.03v2.21l2.45 2.45c.03-.2.05-.41.05-.63zm2.5 0c0 .94-.2 1.82-.54 2.64l1.51 1.51C20.63 14.91 21 13.5 21 12c0-4.28-2.99-7.86-7-8.77v2.06c2.89.86 5 3.54 5 6.71zM4.27 3L3 4.27 7.73 9H3v6h4l5 5v-6.73l4.25 4.25c-.67.52-1.42.93-2.25 1.18v2.06c1.38-.31 2.63-.95 3.69-1.81L19.73 21 21 19.73l-9-9L4.27 3zM12 4l-1.88 1.88L12 7.76V4z"})])}}),xe=defineComponent({name:"IconFullscreenEnter",render(){return h$1("svg",b,[h$1("path",{d:"M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"})])}}),Ee=defineComponent({name:"IconFullscreenExit",render(){return h$1("svg",b,[h$1("path",{d:"M5 16h3v3h2v-5H5v2zm3-8H5v2h5V5H8v3zm6 11h2v-3h3v-2h-5v5zm2-11V5h-2v5h5V8h-3z"})])}});function at(...e){return e.filter(Boolean).join(" ")}var W=defineComponent({name:"VidePlayButton",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),n=ref(false);v(r,"statechange",({to:a})=>{a==="playing"||a==="ad:playing"?n.value=true:(a==="paused"||a==="ready"||a==="ended"||a==="ad:paused")&&(n.value=false);});let t=()=>{let a=r.value;a&&(a.state==="playing"||a.state==="ad:playing"?a.pause():a.play().catch(()=>{}));};return ()=>h$1("button",{type:"button",class:at("vide-play",i.class),"aria-label":n.value?"Pause":"Play","data-playing":n.value||void 0,onClick:t},l.default?.()??[h$1(n.value?Pe:j)])}});function mt(...e){return e.filter(Boolean).join(" ")}var Z=defineComponent({name:"VideMuteButton",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),n=ref(false),t=ref(1),a;watch(r,s=>{if(a?.(),a=void 0,!s)return;let f=()=>{n.value=s.muted||s.volume===0,t.value=s.volume;};s.el.addEventListener("volumechange",f),f(),a=()=>s.el.removeEventListener("volumechange",f);},{immediate:true}),onScopeDispose(()=>{a?.();});let o=()=>{let s=r.value;s&&(s.muted=!s.muted);};return ()=>h$1("button",{type:"button",class:mt("vide-mute",i.class),"aria-label":n.value?"Unmute":"Mute","data-muted":n.value||void 0,onClick:o},l.default?.()??[h$1(n.value?H:t.value<.5?B:O)])}});function pt(...e){return e.filter(Boolean).join(" ")}var ee=defineComponent({name:"VideProgress",inheritAttrs:false,setup(e,{attrs:i}){let l=u(),r=ref(0),n=ref(0),t=ref(false),a=ref(false),o=ref(null);v(l,"timeupdate",({currentTime:d,duration:c})=>{!a.value&&c>0&&(r.value=d/c);let m=l.value;if(m&&m.el.buffered.length>0&&c>0){let p=m.el.buffered.end(m.el.buffered.length-1);n.value=Math.min(1,p/c);}}),v(l,"statechange",({to:d})=>{let c=d==="ad:loading"||d==="ad:playing"||d==="ad:paused";t.value=c;});let s=d=>{if(!o.value)return 0;let c=o.value.getBoundingClientRect();return c.width===0?0:Math.max(0,Math.min(1,(d.clientX-c.left)/c.width))},f=d=>{!l.value||t.value||(a.value=true,o.value?.setPointerCapture(d.pointerId),r.value=s(d));},g=d=>{a.value&&(r.value=s(d));},V=d=>{if(!a.value||!l.value)return;a.value=false,o.value?.releasePointerCapture(d.pointerId);let c=s(d),m=l.value.el.duration;Number.isFinite(m)&&m>0&&(l.value.currentTime=c*m);};return ()=>h$1("div",{ref:o,class:pt("vide-progress",i.class),role:"slider",tabindex:0,"aria-label":"Seek","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(r.value*100),"data-disabled":t.value||void 0,style:{"--vide-progress":r.value,"--vide-progress-buffered":n.value},onPointerdown:f,onPointermove:g,onPointerup:V},[h$1("div",{class:"vide-progress__buffered"}),h$1("div",{class:"vide-progress__bar"}),h$1("div",{class:"vide-progress__handle"})])}});function gt(...e){return e.filter(Boolean).join(" ")}var te=defineComponent({name:"VideVolume",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),n=ref(1),t=ref(false),a=ref(false),o=ref(null),s;watch(r,m=>{if(s?.(),s=void 0,!m)return;let p=()=>{a.value||(n.value=m.muted?0:m.volume),t.value=m.muted||m.volume===0;};m.el.addEventListener("volumechange",p),p(),s=()=>m.el.removeEventListener("volumechange",p);},{immediate:true}),onScopeDispose(()=>{s?.();});let f=()=>{let m=r.value;m&&(m.muted=!m.muted);},g=m=>{if(!o.value)return 0;let p=o.value.getBoundingClientRect();return p.width===0?0:Math.max(0,Math.min(1,(m.clientX-p.left)/p.width))},V=m=>{let p=r.value;if(!p)return;a.value=true,o.value?.setPointerCapture(m.pointerId);let P=g(m);p.volume=P,p.muted&&P>0&&(p.muted=false),n.value=P,t.value=P===0;},d=m=>{let p=r.value;if(!a.value||!p)return;let P=g(m);p.volume=P,p.muted&&P>0&&(p.muted=false),n.value=P,t.value=P===0;},c=m=>{a.value&&(a.value=false,o.value?.releasePointerCapture(m.pointerId));};return ()=>h$1("div",{class:gt("vide-volume",i.class),"data-muted":t.value||void 0,style:{"--vide-volume":n.value}},[h$1("button",{type:"button",class:"vide-volume__button","aria-label":t.value?"Unmute":"Mute",onClick:f},l.default?.()??[h$1(t.value?H:n.value<.5?B:O)]),h$1("div",{ref:o,class:"vide-volume__slider",role:"slider",tabindex:0,"aria-label":"Volume","aria-valuemin":0,"aria-valuemax":100,"aria-valuenow":Math.round(n.value*100),onPointerdown:V,onPointermove:d,onPointerup:c},[h$1("div",{class:"vide-volume__track"}),h$1("div",{class:"vide-volume__filled"})])])}});function Et(...e){return e.filter(Boolean).join(" ")}var ne=defineComponent({name:"VideFullscreenButton",inheritAttrs:false,props:{target:{type:Object,default:null}},setup(e,{attrs:i,slots:l}){let r=u(),n=ref(false),t=()=>{n.value=document.fullscreenElement!=null||document.webkitFullscreenElement!=null;};onMounted(()=>{document.addEventListener("fullscreenchange",t),document.addEventListener("webkitfullscreenchange",t);}),onScopeDispose(()=>{document.removeEventListener("fullscreenchange",t),document.removeEventListener("webkitfullscreenchange",t);});let a=()=>{let o=e.target??r.value?.el.closest(".vide-ui")??r.value?.el.parentElement;o&&(document.fullscreenElement?document.exitFullscreen().catch(()=>{}):o.requestFullscreen().catch(()=>{}));};return ()=>h$1("button",{type:"button",class:Et("vide-fullscreen",i.class),"aria-label":n.value?"Exit fullscreen":"Fullscreen","data-fullscreen":n.value||void 0,onClick:a},l.default?.()??[h$1(n.value?Ee:xe)])}});function bt(...e){return e.filter(Boolean).join(" ")}var re=defineComponent({name:"VideTimeDisplay",inheritAttrs:false,props:{separator:{type:String,default:"/"}},setup(e$1,{attrs:i}){let l=u(),r=ref(0),n=ref(0);return v(l,"timeupdate",t=>{r.value=t.currentTime,n.value=t.duration;}),()=>h$1("div",{class:bt("vide-time",i.class),"aria-label":"Time"},[h$1("span",e(r.value)),h$1("span",e$1.separator),h$1("span",e(n.value))])}});function Ct(...e){return e.filter(Boolean).join(" ")}var oe=defineComponent({name:"VideLoader",inheritAttrs:false,setup(e,{attrs:i}){return ()=>h$1("div",{class:Ct("vide-loader",i.class)},[h$1("div",{class:"vide-loader__spinner"})])}});function kt(...e){return e.filter(Boolean).join(" ")}var ie=defineComponent({name:"VidePoster",inheritAttrs:false,props:{src:{type:String,required:true},alt:{type:String,default:""}},setup(e,{attrs:i}){return ()=>h$1("div",{class:kt("vide-poster",i.class)},[h$1("img",{class:"vide-poster__image",src:e.src,alt:e.alt})])}});function It(...e){return e.filter(Boolean).join(" ")}var le=defineComponent({name:"VideErrorDisplay",inheritAttrs:false,setup(e,{attrs:i}){let l=u(),r=ref(""),n;return watch(l,t=>{if(n?.(),n=void 0,!t)return;let a=({message:o})=>{r.value=o;};t.on("error",a),n=()=>t.off("error",a);},{immediate:true}),onScopeDispose(()=>{n?.();}),()=>h$1("div",{class:It("vide-error",i.class)},[h$1("span",{class:"vide-error__message"},r.value)])}});function Rt(...e){return e.filter(Boolean).join(" ")}var ae=defineComponent({name:"VideBigPlayButton",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),n=()=>{let t=r.value;if(t){if(t.state==="ended"){let s=function({to:f}){f==="ready"&&(o.off("statechange",s),o.play().catch(()=>{}));};let o=t;o.on("statechange",s),o.el.currentTime=0,o.el.load();return}t.play().catch(()=>{});}};return ()=>h$1("button",{type:"button",class:Rt("vide-bigplay",i.class),"aria-label":"Play video",onClick:n},l.default?.()??[h$1(j)])}});var Ht=200;function Ft(...e){return e.filter(Boolean).join(" ")}var se=defineComponent({name:"VideClickPlay",inheritAttrs:false,props:{enableFullscreen:{type:Boolean,default:true}},setup(e,{attrs:i}){let l=u(),r=null,n=()=>{let o=l.value;o&&(o.state==="playing"||o.state==="ad:playing"?o.pause():o.play().catch(()=>{}));},t=()=>{if(!e.enableFullscreen)return;let o=l.value,s=o?.el.closest(".vide-ui")??o?.el.parentElement;s&&(document.fullscreenElement!=null?document.exitFullscreen().catch(()=>{}):s.requestFullscreen&&s.requestFullscreen().catch(()=>{}));},a=()=>{let o=l.value;if(o){if(c(o.state)){o.el.click(),n();return}if(r!==null){clearTimeout(r),r=null,t();return}r=setTimeout(()=>{r=null,n();},Ht);}};return onScopeDispose(()=>{r!==null&&(clearTimeout(r),r=null);}),()=>h$1("div",{class:Ft("vide-clickplay",i.class),onClick:a})}});function h(e){let i=ref(false),l=shallowRef(null);return v(e,"ad:start",r=>{i.value=true,l.value={adId:r.adId,clickThrough:r.clickThrough,skipOffset:r.skipOffset,duration:r.duration,adTitle:r.adTitle,adStartTime:Date.now()};}),v(e,"ad:end",()=>{i.value=false,l.value=null;}),v(e,"ad:skip",()=>{i.value=false,l.value=null;}),{active:i,meta:l}}function Nt(...e){return e.filter(Boolean).join(" ")}var ue=defineComponent({name:"VideAdOverlay",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),{active:n,meta:t}=h(r),a=()=>{let o=r.value;if(!o)return;o.el.click();let s=t.value?.clickThrough;s?(window.open(s,"_blank"),o.el.pause()):o.el.paused?Promise.resolve(o.el.play()).catch(()=>{}):o.el.pause();};return ()=>n.value?h$1("div",{class:Nt("vide-ad-overlay",i.class),onClick:a},l.default?.()):null}});function Xt(...e){return e.filter(Boolean).join(" ")}var de=defineComponent({name:"VideAdSkip",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),{active:n,meta:t}=h(r),a=ref(false),o=ref(0);v(r,"timeupdate",({currentTime:f})=>{!n.value||!t.value||t.value.skipOffset===void 0||(f>=t.value.skipOffset?a.value=true:(a.value=false,o.value=Math.max(0,Math.ceil(t.value.skipOffset-f))));});let s=()=>{let f=r.value;!f||!a.value||!t.value||f.emit("ad:skip",{adId:t.value.adId});};return ()=>!n.value||!t.value||t.value.skipOffset===void 0?null:h$1("button",{type:"button",class:Xt("vide-skip",!a.value&&"vide-skip--disabled",i.class),"aria-label":"Skip ad",onClick:s,disabled:!a.value},a.value?l.default?.()??"Skip Ad":`Skip in ${o.value}s`)}});function Wt(...e){return e.filter(Boolean).join(" ")}var me=defineComponent({name:"VideAdCountdown",inheritAttrs:false,props:{format:{type:Function,default:void 0}},setup(e,{attrs:i}){let l=u(),{active:r,meta:n}=h(l),t=ref(0);return v(l,"timeupdate",({currentTime:a})=>{if(!r.value||!n.value)return;let o=l.value,s=n.value.duration??(o&&Number.isFinite(o.duration)?o.duration:0);t.value=Math.max(0,Math.ceil(s-a));}),()=>r.value?h$1("div",{class:Wt("vide-ad-countdown",i.class)},e.format?e.format(t.value):`Ad \xB7 ${t.value}s`):null}});function tn(...e){return e.filter(Boolean).join(" ")}var fe=defineComponent({name:"VideAdLabel",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),{active:n}=h(r);return ()=>n.value?h$1("div",{class:tn("vide-ad-label",i.class)},l.default?.()??"Ad"):null}});function rn(...e){return e.filter(Boolean).join(" ")}var pe=defineComponent({name:"VideAdLearnMore",inheritAttrs:false,props:{showTitle:{type:Boolean,default:false}},setup(e,{attrs:i,slots:l}){let r=u(),{active:n,meta:t}=h(r),a=()=>{let o=r.value;!o||!t.value?.clickThrough||(o.el.click(),window.open(t.value.clickThrough,"_blank"),o.el.pause());};return ()=>{if(!n.value||!t.value?.clickThrough)return null;let o=[];return e.showTitle&&t.value.adTitle&&o.push(h$1("span",{class:"vide-ad-cta__title"},t.value.adTitle)),o.push(l.default?.()??"Learn More"),h$1("button",{type:"button",class:rn("vide-ad-cta",i.class),onClick:a},o)}}});var an=3e3;function sn(e,i){let l=null,r;watch([e,i],([n,t])=>{if(r?.(),r=void 0,!n||!t)return;function a(){if(!t)return true;let d=t.state;return d==="paused"||d==="ended"||d==="idle"||d==="ready"||c(d)}function o(){n?.classList.remove("vide-ui--autohide");}function s(){l!==null&&(clearTimeout(l),l=null);}function f(){s(),!a()&&(l=setTimeout(()=>{n?.classList.add("vide-ui--autohide");},an));}function g(){o(),f();}function V({to:d}){d==="paused"||d==="ended"||d==="idle"||d==="ready"||c(d)?(s(),o()):f();}n.addEventListener("mousemove",g),n.addEventListener("touchstart",g),n.addEventListener("keydown",g),t.on("statechange",V),f(),r=()=>{s(),n.removeEventListener("mousemove",g),n.removeEventListener("touchstart",g),n.removeEventListener("keydown",g),n.classList.remove("vide-ui--autohide"),t.off("statechange",V);};},{immediate:true}),onScopeDispose(()=>{r?.();});}function mn(e,i,l={}){let r;watch([e,i],([n,t])=>{if(r?.(),r=void 0,!n||!t)return;n.setAttribute("tabindex","0");function a(o){if(!t)return;let s=!l.disableSeek,f=!l.disableVolume,g=!l.disableFullscreen,V=c(t.state);switch(o.key){case " ":case "k":case "K":o.preventDefault(),t.state==="playing"||t.state==="ad:playing"?t.pause():t.play().catch(()=>{});break;case "ArrowLeft":if(!s||V)return;o.preventDefault(),t.currentTime=Math.max(0,t.el.currentTime-5);break;case "ArrowRight":if(!s||V)return;o.preventDefault(),t.currentTime=Math.min(t.el.duration||0,t.el.currentTime+5);break;case "ArrowUp":if(!f)return;o.preventDefault(),t.volume=Math.min(1,t.volume+.1),t.muted&&(t.muted=false);break;case "ArrowDown":if(!f)return;o.preventDefault(),t.volume=Math.max(0,t.volume-.1);break;case "m":case "M":if(!f)return;o.preventDefault(),t.muted=!t.muted;break;case "f":case "F":if(!g)return;o.preventDefault(),document.fullscreenElement!=null?document.exitFullscreen().catch(()=>{}):(n?.closest(".vide-ui")??n)?.requestFullscreen().catch(()=>{});break;default:if(o.key.length===1&&o.key>="0"&&o.key<="9"&&s&&!V){o.preventDefault();let d=Number.parseInt(o.key,10)/10,c=t.el.duration;Number.isFinite(c)&&c>0&&(t.currentTime=d*c);}break}}n.addEventListener("keydown",a),r=()=>{n.removeEventListener("keydown",a),n.removeAttribute("tabindex");};},{immediate:true}),onScopeDispose(()=>{r?.();});}function je(...e){return e.filter(Boolean).join(" ")}var ce=defineComponent({name:"VideUI",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u(),n=ref("");return watch(r,(t,a,o)=>{if(!t){n.value="";return}n.value=b$1(t.state);let s=({to:f})=>{n.value=b$1(f);};t.on("statechange",s),o(()=>t.off("statechange",s));},{immediate:true}),()=>h$1("div",{class:je("vide-ui",n.value,i.class),role:"region","aria-label":"Video player"},l.default?.())}}),ve=defineComponent({name:"VideControls",inheritAttrs:false,setup(e,{attrs:i,slots:l}){let r=u();return ()=>r.value?h$1("div",{class:je("vide-controls",i.class)},l.default?.()):null}});var Io={Video:N,HlsPlugin:q,DashPlugin:G,DrmPlugin:X,VastPlugin:$,VmapPlugin:J,SsaiPlugin:Q,PlayButton:W,MuteButton:Z,Progress:ee,Volume:te,FullscreenButton:ne,TimeDisplay:re,Loader:oe,Poster:ie,ErrorDisplay:le,BigPlayButton:ae,ClickPlay:se,UI:ce,Controls:ve,AdOverlay:ue,AdSkip:de,AdCountdown:me,AdLabel:fe,AdLearnMore:pe};
2
+ export{_ as VIDE_PLAYER_KEY,Io as Vide,me as VideAdCountdown,fe as VideAdLabel,pe as VideAdLearnMore,ue as VideAdOverlay,de as VideAdSkip,ae as VideBigPlayButton,se as VideClickPlay,ve as VideControls,G as VideDashPlugin,X as VideDrmPlugin,le as VideErrorDisplay,ne as VideFullscreenButton,q as VideHlsPlugin,oe as VideLoader,Z as VideMuteButton,W as VidePlayButton,ie as VidePoster,ee as VideProgress,Q as VideSsaiPlugin,re as VideTimeDisplay,ce as VideUI,$ as VideVastPlugin,N as VideVideo,J as VideVmapPlugin,te as VideVolume,h as useAdState,sn as useAutohide,qe as useDash,Ge as useDrm,Ne as useHls,mn as useKeyboard,Je as useSsai,Qe as useUi,Xe as useVast,u as useVideContext,v as useVideEvent,Fe as useVidePlayer,$e as useVmap};
package/package.json CHANGED
@@ -1,8 +1,10 @@
1
1
  {
2
2
  "name": "@videts/vide",
3
- "version": "0.7.4",
3
+ "version": "0.9.2",
4
4
  "description": "Zero-config, web-standard-first modular video player. VAST, VMAP, HLS, DASH, DRM, SSAI, OMID, SIMID — all as plugins. Core under 2KB gzip.",
5
5
  "type": "module",
6
+ "unpkg": "dist/vide.global.js",
7
+ "jsdelivr": "dist/vide.global.js",
6
8
  "exports": {
7
9
  ".": {
8
10
  "types": "./dist/index.d.ts",
@@ -44,14 +46,28 @@
44
46
  "types": "./dist/ui/index.d.ts",
45
47
  "import": "./dist/ui/index.mjs"
46
48
  },
47
- "./ui/theme.css": "./dist/ui/theme.css"
49
+ "./ui/theme.css": "./dist/ui/theme.css",
50
+ "./react": {
51
+ "types": "./dist/react/index.d.ts",
52
+ "import": "./dist/react/index.mjs"
53
+ },
54
+ "./vue": {
55
+ "types": "./dist/vue/index.d.ts",
56
+ "import": "./dist/vue/index.mjs"
57
+ },
58
+ "./svelte": {
59
+ "types": "./dist/svelte/index.d.ts",
60
+ "svelte": "./dist/svelte/index.js",
61
+ "default": "./dist/svelte/index.js"
62
+ }
48
63
  },
49
64
  "files": [
50
65
  "dist"
51
66
  ],
52
67
  "sideEffects": false,
53
68
  "scripts": {
54
- "build": "tsup",
69
+ "build": "tsup && pnpm build:svelte",
70
+ "build:svelte": "svelte-package -i src/svelte -o dist/svelte && find src -name '*.d.ts' -o -name '*.d.ts.map' | xargs rm -f",
55
71
  "test": "vitest run",
56
72
  "test:watch": "vitest",
57
73
  "test:e2e": "playwright test",
@@ -67,19 +83,34 @@
67
83
  "devDependencies": {
68
84
  "@biomejs/biome": "^1.9.0",
69
85
  "@playwright/test": "^1.58.2",
86
+ "@testing-library/react": "^16.0.0",
87
+ "@types/react": "^19.0.0",
88
+ "@types/react-dom": "^19.0.0",
89
+ "@sveltejs/package": "^2.0.0",
90
+ "@sveltejs/vite-plugin-svelte": "^4.0.0",
91
+ "@testing-library/svelte": "^5.0.0",
92
+ "@vue/test-utils": "^2.4.6",
70
93
  "dashjs": "^4.7.0",
71
94
  "hls.js": "^1.6.15",
72
95
  "jsdom": "^25.0.0",
96
+ "react": "^19.0.0",
97
+ "react-dom": "^19.0.0",
73
98
  "tsup": "^8.0.0",
74
99
  "typedoc": "^0.28.17",
75
100
  "typedoc-plugin-markdown": "^4.10.0",
76
101
  "typescript": "^5.6.0",
77
102
  "vitepress": "^1.6.4",
78
- "vitest": "^2.0.0"
103
+ "vitest": "^2.0.0",
104
+ "svelte": "^5.0.0",
105
+ "vue": "^3.5.29"
79
106
  },
80
107
  "peerDependencies": {
81
108
  "dashjs": "^4.0.0",
82
- "hls.js": "^1.0.0"
109
+ "hls.js": "^1.0.0",
110
+ "react": "^18.0.0 || ^19.0.0",
111
+ "react-dom": "^18.0.0 || ^19.0.0",
112
+ "svelte": "^5.0.0",
113
+ "vue": "^3.3.0"
83
114
  },
84
115
  "peerDependenciesMeta": {
85
116
  "dashjs": {
@@ -87,6 +118,18 @@
87
118
  },
88
119
  "hls.js": {
89
120
  "optional": true
121
+ },
122
+ "react": {
123
+ "optional": true
124
+ },
125
+ "react-dom": {
126
+ "optional": true
127
+ },
128
+ "svelte": {
129
+ "optional": true
130
+ },
131
+ "vue": {
132
+ "optional": true
90
133
  }
91
134
  },
92
135
  "repository": {
@@ -1 +0,0 @@
1
- function C(e){let r=new DOMParser().parseFromString(e,"text/xml");if(r.querySelector("parsererror"))return {version:"",ads:[],errors:["VAST XML parse error"]};let n=r.documentElement;if(n.tagName!=="VAST")return {version:"",ads:[],errors:["Document is not a VAST response"]};let s=n.getAttribute("version")??"",o=A(n,"Error"),a=g(n,"Ad"),c=[];for(let l of a){let u=S(l);u&&c.push(u);}return {version:s,ads:c,errors:o}}function S(e){let t=T(e,"InLine");if(!t)return null;let r=e.getAttribute("id")??"",i=e.getAttribute("sequence"),n=m(i,void 0),s=v(t,"AdSystem"),o=v(t,"AdTitle"),a=k(t,"Impression"),c=A(t,"Error"),l=t.querySelector("Creatives"),u=[];if(l){let d=g(l,"Creative");for(let E of d)u.push(N(E));}let f=x(t),p=F(t);return {id:r,sequence:n,adSystem:s,adTitle:o,impressions:a,creatives:u,errors:c,verifications:f,categories:p}}function x(e){let t=e.querySelector("AdVerifications");if(!t)return;let r=[],i=g(t,"Verification");for(let n of i){let s=n.getAttribute("vendor")??"",o="",a,c=n.querySelector("JavaScriptResource");if(c)o=(c.textContent??"").trim(),a=c.getAttribute("apiFramework")??void 0;else {let f=n.querySelector("ExecutableResource");f&&(o=(f.textContent??"").trim(),a=f.getAttribute("apiFramework")??void 0);}let l=n.querySelector("VerificationParameters"),u=l&&(l.textContent??"").trim()||void 0;r.push({vendor:s,resourceUrl:o,apiFramework:a,parameters:u});}return r.length>0?r:void 0}function F(e){let t=g(e,"Category");if(t.length===0)return;let r=[];for(let i of t){let n=i.getAttribute("authority")??"",s=(i.textContent??"").trim();s&&r.push({authority:n,value:s});}return r.length>0?r:void 0}function N(e){let t=e.getAttribute("id")??void 0,r=e.getAttribute("sequence"),i=m(r,void 0),n=e.querySelector("Linear"),s=n?w(n):null;return {id:t,sequence:i,linear:s}}function w(e){let t=v(e,"Duration"),r=b(t),i=e.getAttribute("skipoffset"),n=i!==null?y(i,r):void 0,s=q(e),o=I(e),a=V(e),c=e.querySelector("VideoClicks"),l=c&&v(c,"ClickThrough")||void 0,u=c?k(c,"ClickTracking"):[];return {duration:r,skipOffset:n,mediaFiles:s,interactiveCreativeFiles:o,trackingEvents:a,clickThrough:l,clickTracking:u}}function q(e){let t=e.querySelector("MediaFiles");if(!t)return [];let r=[],i=g(t,"MediaFile");for(let n of i){let s=(n.textContent??"").trim();if(!s)continue;let o=n.getAttribute("delivery");r.push({url:s,mimeType:n.getAttribute("type")??"",width:m(n.getAttribute("width"),0),height:m(n.getAttribute("height"),0),bitrate:m(n.getAttribute("bitrate"),void 0),delivery:o==="streaming"?"streaming":"progressive"});}return r}function I(e){let t=e.querySelector("MediaFiles");if(!t)return [];let r=[],i=g(t,"InteractiveCreativeFile");for(let n of i){let s=(n.textContent??"").trim();if(!s)continue;let o=n.getAttribute("apiFramework")??"",a=n.getAttribute("variableDuration"),c=a==="true"?true:a==="false"?false:void 0;r.push({url:s,apiFramework:o,variableDuration:c});}return r}var M=new Set(["start","firstQuartile","midpoint","thirdQuartile","complete","pause","resume","skip","loaded","mute","unmute","rewind","playerExpand","playerCollapse","closeLinear","notUsed","otherAdInteraction","creativeView"]);function V(e){let t=h(),r=e.querySelector("TrackingEvents");if(!r)return t;let i=r.querySelectorAll("Tracking");for(let n of i){let s=n.getAttribute("event"),o=(n.textContent??"").trim();if(!(!s||!o))if(s==="progress"){let a=n.getAttribute("offset"),c=a?y(a,0):0;t.progress.push({offset:c,url:o});}else M.has(s)&&t[s].push(o);}return t}function b(e){if(!e)return 0;let t=e.split(":");if(t.length!==3)return 0;let r=Number.parseInt(t[0],10),i=Number.parseInt(t[1],10),n=Number.parseFloat(t[2]);return Number.isNaN(r)||Number.isNaN(i)||Number.isNaN(n)?0:r*3600+i*60+n}function y(e,t){if(e.endsWith("%")){let r=Number.parseFloat(e);return Number.isNaN(r)?0:r/100*t}return b(e)}function g(e,t){let r=[];for(let i=0;i<e.children.length;i++)e.children[i].tagName===t&&r.push(e.children[i]);return r}function T(e,t){for(let r=0;r<e.children.length;r++)if(e.children[r].tagName===t)return e.children[r];return null}function A(e,t){let r=[];for(let i of g(e,t)){let n=(i.textContent??"").trim();n&&r.push(n);}return r}function v(e,t){let r=e.querySelector(t);return r?(r.textContent??"").trim():""}function k(e,t){let r=e.querySelectorAll(t),i=[];for(let n of r){let s=(n.textContent??"").trim();s&&i.push(s);}return i}async function D(e,t){let r=t?.timeout??5e3,i=new AbortController,n=setTimeout(()=>i.abort(),r);try{let s=await fetch(e,{signal:i.signal});if(!s.ok)throw new Error(`VAST fetch failed: ${s.status}`);return await s.text()}finally{clearTimeout(n);}}async function U(e,t){let r=t?.timeout??1e4,i=t?.maxDepth??5,n=Date.now()+r,s=new Set,o=[],a=e;for(let c=0;c<=i;c++){let l=n-Date.now();if(l<=0)return {version:"",ads:[],errors:["VAST resolve timeout"]};if(s.has(a))return {version:"",ads:[],errors:["VAST circular reference detected"]};s.add(a);let u;try{u=await D(a,{timeout:l});}catch(d){return {version:"",ads:[],errors:[d instanceof Error?d.message:String(d)]}}let f=C(u);if(f.ads.length>0)return {version:f.version,ads:f.ads.map(d=>O(d,o)),errors:f.errors};let p=R(u);if(!p)return f;o.push(p),a=p.adTagUri;}return {version:"",ads:[],errors:["VAST wrapper depth limit exceeded"]}}function R(e){let i=new DOMParser().parseFromString(e,"text/xml").documentElement;if(i.tagName!=="VAST")return null;for(let n of g(i,"Ad")){let s=T(n,"Wrapper");if(!s)continue;let o=v(s,"VASTAdTagURI").trim();if(!o)continue;let a=A(s,"Error"),c=k(s,"Impression"),l=h(),u=[],f=s.querySelector("Creatives");if(f)for(let p of g(f,"Creative")){let d=p.querySelector("Linear");if(d){l=V(d);let E=d.querySelector("VideoClicks");E&&(u=k(E,"ClickTracking"));break}}return {adTagUri:o,errors:a,impressions:c,trackingEvents:l,clickTracking:u}}return null}function h(){return {start:[],firstQuartile:[],midpoint:[],thirdQuartile:[],complete:[],pause:[],resume:[],skip:[],loaded:[],mute:[],unmute:[],rewind:[],playerExpand:[],playerCollapse:[],closeLinear:[],notUsed:[],otherAdInteraction:[],creativeView:[],progress:[]}}function L(e,t){let r=h();for(let i of Object.keys(r)){if(i==="progress")continue;let n=r[i];for(let s of e)n.push(...s[i]);n.push(...t[i]);}for(let i of e)r.progress.push(...i.progress);return r.progress.push(...t.progress),r}function O(e,t){if(t.length===0)return e;let r=[...t.flatMap(s=>s.errors),...e.errors],i=[...t.flatMap(s=>s.impressions),...e.impressions],n=e.creatives.map(s=>s.linear?{...s,linear:{...s.linear,trackingEvents:L(t.map(o=>o.trackingEvents),s.linear.trackingEvents),clickTracking:[...t.flatMap(o=>o.clickTracking),...s.linear.clickTracking]}}:s);return {...e,errors:r,impressions:i,creatives:n}}function m(e,t){if(e==null)return t;let r=Number.parseInt(e,10);return Number.isNaN(r)?t:r}export{C as a,D as b,U as c};
@@ -1 +0,0 @@
1
- function c(r){for(let e of r)typeof navigator<"u"&&typeof navigator.sendBeacon=="function"?navigator.sendBeacon(e):new Image().src=e;}function f(r,e){if(e<=0)return null;let t=r/e;return t>=1?"complete":t>=.75?"thirdQuartile":t>=.5?"midpoint":t>=.25?"firstQuartile":r>=0?"start":null}function s(r,e){let t=new Set,o=["start","firstQuartile","midpoint","thirdQuartile","complete"];return a=>{let n=f(a,r);if(!n||t.has(n))return;let l=o.indexOf(n);for(let i=0;i<=l;i++){let u=o[i];t.has(u)||(t.add(u),e(u));}}}export{c as a,f as b,s as c};
@@ -1,98 +0,0 @@
1
- import { P as Player } from './types-Cine0xi3.js';
2
-
3
- interface VastResponse {
4
- version: string;
5
- ads: VastAd[];
6
- errors: string[];
7
- }
8
- interface VastAd {
9
- id: string;
10
- sequence?: number | undefined;
11
- adSystem: string;
12
- adTitle: string;
13
- impressions: string[];
14
- creatives: VastCreative[];
15
- errors: string[];
16
- verifications?: AdVerification[] | undefined;
17
- categories?: AdCategory[] | undefined;
18
- }
19
- interface AdVerification {
20
- vendor: string;
21
- resourceUrl: string;
22
- apiFramework?: string | undefined;
23
- parameters?: string | undefined;
24
- }
25
- interface AdCategory {
26
- authority: string;
27
- value: string;
28
- }
29
- interface VastCreative {
30
- id?: string | undefined;
31
- sequence?: number | undefined;
32
- linear: VastLinear | null;
33
- }
34
- interface VastLinear {
35
- duration: number;
36
- skipOffset?: number | undefined;
37
- mediaFiles: VastMediaFile[];
38
- interactiveCreativeFiles: InteractiveCreativeFile[];
39
- trackingEvents: VastTrackingEvents;
40
- clickThrough?: string | undefined;
41
- clickTracking: string[];
42
- }
43
- interface VastMediaFile {
44
- url: string;
45
- mimeType: string;
46
- width: number;
47
- height: number;
48
- bitrate?: number | undefined;
49
- delivery: "progressive" | "streaming";
50
- }
51
- interface InteractiveCreativeFile {
52
- url: string;
53
- apiFramework: string;
54
- variableDuration?: boolean | undefined;
55
- }
56
- interface VastProgressEvent {
57
- offset: number;
58
- url: string;
59
- }
60
- interface VastTrackingEvents {
61
- start: string[];
62
- firstQuartile: string[];
63
- midpoint: string[];
64
- thirdQuartile: string[];
65
- complete: string[];
66
- pause: string[];
67
- resume: string[];
68
- skip: string[];
69
- loaded: string[];
70
- mute: string[];
71
- unmute: string[];
72
- rewind: string[];
73
- playerExpand: string[];
74
- playerCollapse: string[];
75
- closeLinear: string[];
76
- notUsed: string[];
77
- otherAdInteraction: string[];
78
- creativeView: string[];
79
- progress: VastProgressEvent[];
80
- }
81
- /** Plugin scoped to a single ad. Created per-ad, cleaned up on ad end. */
82
- interface AdPlugin {
83
- name: string;
84
- setup(player: Player, ad: VastAd): (() => void) | undefined;
85
- }
86
- interface VastPluginOptions {
87
- tagUrl: string;
88
- timeout?: number | undefined;
89
- allowSkip?: boolean | undefined;
90
- /** Create per-ad plugins. Called once per ad with the parsed VastAd. */
91
- adPlugins?: ((ad: VastAd) => AdPlugin[]) | undefined;
92
- }
93
- interface ResolveOptions {
94
- timeout?: number | undefined;
95
- maxDepth?: number | undefined;
96
- }
97
-
98
- export type { AdCategory as A, ResolveOptions as R, VastResponse as V, VastPluginOptions as a, AdPlugin as b, AdVerification as c, VastProgressEvent as d, VastAd as e };
@@ -1,142 +0,0 @@
1
- type PlayerState = "idle" | "loading" | "ready" | "playing" | "paused" | "buffering" | "ad:loading" | "ad:playing" | "ad:paused" | "ended" | "error";
2
- type AdQuartile = "start" | "firstQuartile" | "midpoint" | "thirdQuartile" | "complete";
3
- interface PlayerEventMap {
4
- statechange: {
5
- from: PlayerState;
6
- to: PlayerState;
7
- };
8
- play: undefined;
9
- pause: undefined;
10
- ended: undefined;
11
- timeupdate: {
12
- currentTime: number;
13
- duration: number;
14
- };
15
- error: {
16
- code: number;
17
- message: string;
18
- source: string;
19
- };
20
- "ad:start": {
21
- adId: string;
22
- };
23
- "ad:end": {
24
- adId: string;
25
- };
26
- "ad:skip": {
27
- adId: string;
28
- };
29
- "ad:click": {
30
- clickThrough: string | undefined;
31
- clickTracking: string[];
32
- };
33
- "ad:error": {
34
- error: Error;
35
- source: string;
36
- };
37
- "ad:impression": {
38
- adId: string;
39
- };
40
- "ad:loaded": {
41
- adId: string;
42
- };
43
- "ad:quartile": {
44
- adId: string;
45
- quartile: AdQuartile;
46
- };
47
- "ad:mute": {
48
- adId: string;
49
- };
50
- "ad:unmute": {
51
- adId: string;
52
- };
53
- "ad:volumeChange": {
54
- adId: string;
55
- volume: number;
56
- };
57
- "ad:fullscreen": {
58
- adId: string;
59
- fullscreen: boolean;
60
- };
61
- "ad:breakStart": {
62
- breakId: string | undefined;
63
- };
64
- "ad:breakEnd": {
65
- breakId: string | undefined;
66
- };
67
- destroy: undefined;
68
- }
69
- type PlayerEvent = keyof PlayerEventMap;
70
- type EventHandler<T> = (data: T) => void;
71
- /** HTMLVideoElement event names not already covered by PlayerEventMap. */
72
- type NativeVideoEvent = Exclude<keyof HTMLVideoElementEventMap, keyof PlayerEventMap>;
73
- interface EventBus {
74
- on<K extends PlayerEvent>(event: K, handler: EventHandler<PlayerEventMap[K]>): void;
75
- on<K extends NativeVideoEvent>(event: K, handler: (ev: HTMLVideoElementEventMap[K]) => void): void;
76
- on(event: string, handler: (...args: any[]) => void): void;
77
- off<K extends PlayerEvent>(event: K, handler: EventHandler<PlayerEventMap[K]>): void;
78
- off<K extends NativeVideoEvent>(event: K, handler: (ev: HTMLVideoElementEventMap[K]) => void): void;
79
- off(event: string, handler: (...args: any[]) => void): void;
80
- emit<K extends PlayerEvent>(event: K, data: PlayerEventMap[K]): void;
81
- once<K extends PlayerEvent>(event: K, handler: EventHandler<PlayerEventMap[K]>): void;
82
- once<K extends NativeVideoEvent>(event: K, handler: (ev: HTMLVideoElementEventMap[K]) => void): void;
83
- once(event: string, handler: (...args: any[]) => void): void;
84
- }
85
- interface SourceHandler {
86
- /** Whether this handler can process the given URL/type. */
87
- canHandle(url: string, type?: string): boolean;
88
- /** Load the source into the video element. */
89
- load(url: string, videoElement: HTMLVideoElement): void;
90
- /** Unload the source and clean up. */
91
- unload(videoElement: HTMLVideoElement): void;
92
- }
93
- interface Plugin {
94
- name: string;
95
- setup(player: Player): (() => void) | undefined;
96
- }
97
- interface Player extends EventBus {
98
- readonly el: HTMLVideoElement;
99
- readonly state: PlayerState;
100
- play(): Promise<void>;
101
- pause(): void;
102
- currentTime: number;
103
- duration: number;
104
- volume: number;
105
- muted: boolean;
106
- playbackRate: number;
107
- readonly paused: boolean;
108
- readonly ended: boolean;
109
- readonly readyState: number;
110
- readonly buffered: TimeRanges;
111
- readonly seekable: TimeRanges;
112
- readonly seeking: boolean;
113
- readonly videoWidth: number;
114
- readonly videoHeight: number;
115
- readonly networkState: number;
116
- loop: boolean;
117
- autoplay: boolean;
118
- poster: string;
119
- preload: "" | "none" | "metadata" | "auto";
120
- defaultPlaybackRate: number;
121
- defaultMuted: boolean;
122
- crossOrigin: string | null;
123
- controls: boolean;
124
- /** Web-standard addEventListener, delegates to the underlying HTMLVideoElement. */
125
- addEventListener<K extends keyof HTMLVideoElementEventMap>(type: K, listener: (ev: HTMLVideoElementEventMap[K]) => void, options?: boolean | AddEventListenerOptions): void;
126
- addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
127
- /** Web-standard removeEventListener, delegates to the underlying HTMLVideoElement. */
128
- removeEventListener<K extends keyof HTMLVideoElementEventMap>(type: K, listener: (ev: HTMLVideoElementEventMap[K]) => void, options?: boolean | EventListenerOptions): void;
129
- removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
130
- /** Current media source URL. Setting triggers SourceHandler lookup. */
131
- src: string;
132
- /** Register a handler for custom source types (e.g., HLS, DASH). */
133
- registerSourceHandler(handler: SourceHandler): void;
134
- use(plugin: Plugin): void;
135
- destroy(): void;
136
- /** Store data for cross-plugin communication. */
137
- setPluginData(key: string, data: unknown): void;
138
- /** Retrieve data stored by another plugin. Returns undefined if not set. */
139
- getPluginData(key: string): unknown;
140
- }
141
-
142
- export type { AdQuartile as A, EventBus as E, Player as P, SourceHandler as S, EventHandler as a, PlayerEvent as b, PlayerEventMap as c, PlayerState as d, Plugin as e };