@videts/vide 0.8.0 → 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 (147) hide show
  1. package/README.md +9 -9
  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-JRU2FKRB.mjs +2 -0
  7. package/dist/chunk-LPSJOF2I.mjs +2 -0
  8. package/dist/chunk-NA4C7W64.mjs +2 -0
  9. package/dist/chunk-UY5CGRNN.mjs +1 -0
  10. package/dist/chunk-VPH4JIJV.mjs +1 -0
  11. package/dist/chunk-WINCDUN5.mjs +1 -0
  12. package/dist/dash/index.d.ts +3 -9
  13. package/dist/dash/index.js +1 -0
  14. package/dist/dash/index.mjs +1 -2
  15. package/dist/drm/index.d.ts +4 -31
  16. package/dist/drm/index.js +1 -0
  17. package/dist/drm/index.mjs +1 -1
  18. package/dist/hls/index.d.ts +3 -9
  19. package/dist/hls/index.js +1 -0
  20. package/dist/hls/index.mjs +1 -2
  21. package/dist/index.d.ts +2 -2
  22. package/dist/index.js +1 -0
  23. package/dist/index.mjs +1 -1
  24. package/dist/omid/index.d.ts +2 -2
  25. package/dist/omid/index.js +2 -0
  26. package/dist/react/index.d.ts +240 -0
  27. package/dist/react/index.js +2 -0
  28. package/dist/react/index.mjs +2 -0
  29. package/dist/simid/index.d.ts +2 -2
  30. package/dist/simid/index.js +1 -0
  31. package/dist/ssai/index.d.ts +4 -40
  32. package/dist/ssai/index.js +1 -0
  33. package/dist/ssai/index.mjs +1 -1
  34. package/dist/svelte/DashPlugin.svelte +23 -0
  35. package/dist/svelte/DashPlugin.svelte.d.ts +4 -0
  36. package/dist/svelte/DrmPlugin.svelte +20 -0
  37. package/dist/svelte/DrmPlugin.svelte.d.ts +4 -0
  38. package/dist/svelte/HlsPlugin.svelte +23 -0
  39. package/dist/svelte/HlsPlugin.svelte.d.ts +4 -0
  40. package/dist/svelte/SsaiPlugin.svelte +23 -0
  41. package/dist/svelte/SsaiPlugin.svelte.d.ts +4 -0
  42. package/dist/svelte/VastPlugin.svelte +20 -0
  43. package/dist/svelte/VastPlugin.svelte.d.ts +4 -0
  44. package/dist/svelte/VideControls.svelte +22 -0
  45. package/dist/svelte/VideControls.svelte.d.ts +8 -0
  46. package/dist/svelte/VideUI.svelte +49 -0
  47. package/dist/svelte/VideUI.svelte.d.ts +9 -0
  48. package/dist/svelte/Video.svelte +31 -0
  49. package/dist/svelte/Video.svelte.d.ts +10 -0
  50. package/dist/svelte/VmapPlugin.svelte +20 -0
  51. package/dist/svelte/VmapPlugin.svelte.d.ts +4 -0
  52. package/dist/svelte/components/AdCountdown.svelte +37 -0
  53. package/dist/svelte/components/AdCountdown.svelte.d.ts +7 -0
  54. package/dist/svelte/components/AdLabel.svelte +26 -0
  55. package/dist/svelte/components/AdLabel.svelte.d.ts +8 -0
  56. package/dist/svelte/components/AdLearnMore.svelte +42 -0
  57. package/dist/svelte/components/AdLearnMore.svelte.d.ts +9 -0
  58. package/dist/svelte/components/AdOverlay.svelte +46 -0
  59. package/dist/svelte/components/AdOverlay.svelte.d.ts +8 -0
  60. package/dist/svelte/components/AdSkip.svelte +67 -0
  61. package/dist/svelte/components/AdSkip.svelte.d.ts +8 -0
  62. package/dist/svelte/components/BigPlayButton.svelte +46 -0
  63. package/dist/svelte/components/BigPlayButton.svelte.d.ts +8 -0
  64. package/dist/svelte/components/ClickPlay.svelte +76 -0
  65. package/dist/svelte/components/ClickPlay.svelte.d.ts +7 -0
  66. package/dist/svelte/components/ErrorDisplay.svelte +27 -0
  67. package/dist/svelte/components/ErrorDisplay.svelte.d.ts +6 -0
  68. package/dist/svelte/components/FullscreenButton.svelte +65 -0
  69. package/dist/svelte/components/FullscreenButton.svelte.d.ts +9 -0
  70. package/dist/svelte/components/Loader.svelte +11 -0
  71. package/dist/svelte/components/Loader.svelte.d.ts +6 -0
  72. package/dist/svelte/components/MuteButton.svelte +57 -0
  73. package/dist/svelte/components/MuteButton.svelte.d.ts +8 -0
  74. package/dist/svelte/components/PlayButton.svelte +63 -0
  75. package/dist/svelte/components/PlayButton.svelte.d.ts +8 -0
  76. package/dist/svelte/components/Poster.svelte +13 -0
  77. package/dist/svelte/components/Poster.svelte.d.ts +8 -0
  78. package/dist/svelte/components/Progress.svelte +101 -0
  79. package/dist/svelte/components/Progress.svelte.d.ts +6 -0
  80. package/dist/svelte/components/TimeDisplay.svelte +33 -0
  81. package/dist/svelte/components/TimeDisplay.svelte.d.ts +7 -0
  82. package/dist/svelte/components/Volume.svelte +117 -0
  83. package/dist/svelte/components/Volume.svelte.d.ts +8 -0
  84. package/dist/svelte/context.d.ts +6 -0
  85. package/dist/svelte/context.js +10 -0
  86. package/dist/svelte/create-vide-player.svelte.d.ts +2 -0
  87. package/dist/svelte/create-vide-player.svelte.js +22 -0
  88. package/dist/svelte/helpers.d.ts +17 -0
  89. package/dist/svelte/helpers.js +31 -0
  90. package/dist/svelte/icons/IconFullscreenEnter.svelte +3 -0
  91. package/dist/svelte/icons/IconFullscreenEnter.svelte.d.ts +26 -0
  92. package/dist/svelte/icons/IconFullscreenExit.svelte +3 -0
  93. package/dist/svelte/icons/IconFullscreenExit.svelte.d.ts +26 -0
  94. package/dist/svelte/icons/IconPause.svelte +3 -0
  95. package/dist/svelte/icons/IconPause.svelte.d.ts +26 -0
  96. package/dist/svelte/icons/IconPlay.svelte +3 -0
  97. package/dist/svelte/icons/IconPlay.svelte.d.ts +26 -0
  98. package/dist/svelte/icons/IconVolumeHigh.svelte +3 -0
  99. package/dist/svelte/icons/IconVolumeHigh.svelte.d.ts +26 -0
  100. package/dist/svelte/icons/IconVolumeLow.svelte +3 -0
  101. package/dist/svelte/icons/IconVolumeLow.svelte.d.ts +26 -0
  102. package/dist/svelte/icons/IconVolumeMute.svelte +3 -0
  103. package/dist/svelte/icons/IconVolumeMute.svelte.d.ts +26 -0
  104. package/dist/svelte/index.d.ts +42 -0
  105. package/dist/svelte/index.js +39 -0
  106. package/dist/svelte/use-ad-state.svelte.d.ts +7 -0
  107. package/dist/svelte/use-ad-state.svelte.js +40 -0
  108. package/dist/svelte/use-autohide.svelte.d.ts +2 -0
  109. package/dist/svelte/use-autohide.svelte.js +68 -0
  110. package/dist/svelte/use-keyboard.svelte.d.ts +7 -0
  111. package/dist/svelte/use-keyboard.svelte.js +96 -0
  112. package/dist/svelte/use-plugin.svelte.d.ts +15 -0
  113. package/dist/svelte/use-plugin.svelte.js +40 -0
  114. package/dist/svelte/use-vide-event.svelte.d.ts +3 -0
  115. package/dist/svelte/use-vide-event.svelte.js +9 -0
  116. package/dist/{types-vxIcXgJz.d.ts → types-BsEF8iWC.d.ts} +106 -1
  117. package/dist/types-C1_eVsFF.d.ts +49 -0
  118. package/dist/types-C6XFF6w_.d.ts +30 -0
  119. package/dist/types-COeag8fU.d.ts +173 -0
  120. package/dist/types-CwjR99DL.d.ts +10 -0
  121. package/dist/types-DsixuzNX.d.ts +52 -0
  122. package/dist/types-DzY1cmXC.d.ts +10 -0
  123. package/dist/types-SuT99_Z3.d.ts +40 -0
  124. package/dist/ui/index.d.ts +7 -37
  125. package/dist/ui/index.js +1 -0
  126. package/dist/ui/index.mjs +1 -2
  127. package/dist/ui/theme.css +138 -46
  128. package/dist/vast/index.d.ts +188 -4
  129. package/dist/vast/index.js +1 -0
  130. package/dist/vast/index.mjs +1 -1
  131. package/dist/vide.core.global.js +1 -1
  132. package/dist/vide.global.js +2 -2
  133. package/dist/vide.ssai.global.js +1 -1
  134. package/dist/vide.ui.css +138 -46
  135. package/dist/vide.ui.global.js +1 -1
  136. package/dist/vide.vast.global.js +1 -1
  137. package/dist/vide.vmap.global.js +1 -1
  138. package/dist/vmap/index.d.ts +5 -49
  139. package/dist/vmap/index.js +1 -0
  140. package/dist/vmap/index.mjs +1 -1
  141. package/dist/vue/index.d.ts +354 -0
  142. package/dist/vue/index.js +2 -0
  143. package/dist/vue/index.mjs +2 -0
  144. package/package.json +46 -5
  145. package/dist/chunk-726XNUGZ.mjs +0 -1
  146. package/dist/chunk-G4Q7R3SH.mjs +0 -1
  147. package/dist/types-CAJmacV6.d.ts +0 -98
package/dist/ui/theme.css CHANGED
@@ -62,10 +62,10 @@
62
62
  --vide-ad-overlay-gap: 12px;
63
63
 
64
64
  /* ── Skip ── */
65
- --vide-skip-bg: rgba(24, 24, 28, 0.85);
65
+ --vide-skip-bg: rgba(24, 24, 28, 0.5);
66
66
  --vide-skip-border: rgba(255, 255, 255, 0.22);
67
67
  --vide-skip-color: #fff;
68
- --vide-skip-padding-y: 10px;
68
+ --vide-skip-padding-y: 7px;
69
69
  --vide-skip-padding-x: 16px;
70
70
  --vide-skip-font-size: 14px;
71
71
  --vide-skip-gap: 6px;
@@ -91,6 +91,14 @@
91
91
  outline: none;
92
92
  overflow: hidden;
93
93
  box-sizing: border-box;
94
+ container-type: inline-size;
95
+ }
96
+
97
+ .vide-ui:fullscreen {
98
+ display: flex;
99
+ flex-direction: column;
100
+ justify-content: center;
101
+ background: #000;
94
102
  }
95
103
 
96
104
  .vide-ui *,
@@ -99,6 +107,36 @@
99
107
  box-sizing: border-box;
100
108
  }
101
109
 
110
+ /* ── Mini progress bar (always visible at bottom) ── */
111
+
112
+ .vide-ui::after {
113
+ content: "";
114
+ position: absolute;
115
+ bottom: 0;
116
+ left: 0;
117
+ right: 0;
118
+ height: 2px;
119
+ background: var(--vide-accent);
120
+ transform: scaleX(var(--vide-progress, 0));
121
+ transform-origin: left;
122
+ z-index: 3;
123
+ opacity: 0;
124
+ transition: opacity 0.3s var(--vide-ease);
125
+ pointer-events: none;
126
+ }
127
+
128
+ .vide-ui--autohide::after,
129
+ .vide-ui--playing:not(:hover)::after,
130
+ .vide-ui--ad-playing:not(:hover)::after {
131
+ opacity: 1;
132
+ }
133
+
134
+ .vide-ui--ad-loading::after,
135
+ .vide-ui--ad-playing::after,
136
+ .vide-ui--ad-paused::after {
137
+ background: var(--vide-accent-ad);
138
+ }
139
+
102
140
  /* ═══════════════════════════════════════════
103
141
  AUTOHIDE (mouse-idle during playback)
104
142
  ═══════════════════════════════════════════ */
@@ -116,6 +154,18 @@
116
154
  display: none;
117
155
  }
118
156
 
157
+ /* Slide ad elements down when controls fade out */
158
+ .vide-ui--autohide .vide-skip,
159
+ .vide-ui--autohide .vide-ad-cta,
160
+ .vide-ui--autohide .vide-ad-label,
161
+ .vide-ui--autohide .vide-ad-countdown,
162
+ .vide-ui--ad-playing:not(:hover) .vide-skip,
163
+ .vide-ui--ad-playing:not(:hover) .vide-ad-cta,
164
+ .vide-ui--ad-playing:not(:hover) .vide-ad-label,
165
+ .vide-ui--ad-playing:not(:hover) .vide-ad-countdown {
166
+ transform: translateY(calc(var(--vide-controls-height) - 12px));
167
+ }
168
+
119
169
  /* ═══════════════════════════════════════════
120
170
  CONTROLS BAR
121
171
  ═══════════════════════════════════════════ */
@@ -146,7 +196,8 @@
146
196
  .vide-ui:hover .vide-controls,
147
197
  .vide-ui--paused .vide-controls,
148
198
  .vide-ui--ready .vide-controls,
149
- .vide-ui--ended .vide-controls {
199
+ .vide-ui--ended .vide-controls,
200
+ .vide-ui--ad-paused .vide-controls {
150
201
  opacity: 1;
151
202
  pointer-events: auto;
152
203
  }
@@ -476,7 +527,7 @@
476
527
  .vide-ui--ad-loading .vide-clickplay,
477
528
  .vide-ui--ad-playing .vide-clickplay,
478
529
  .vide-ui--ad-paused .vide-clickplay {
479
- display: none;
530
+ z-index: 2;
480
531
  }
481
532
 
482
533
  /* ═══════════════════════════════════════════
@@ -612,73 +663,53 @@
612
663
 
613
664
  .vide-ad-label {
614
665
  position: absolute;
615
- top: var(--vide-ad-overlay-gap);
666
+ bottom: calc(var(--vide-controls-height) + var(--vide-ad-overlay-gap) + 52px);
616
667
  left: var(--vide-ad-overlay-gap);
617
668
  z-index: 4;
618
669
 
619
670
  display: inline-flex;
620
- align-items: stretch;
621
- overflow: hidden;
671
+ align-items: center;
622
672
  margin: 0;
623
673
 
624
- background: var(--vide-chip);
625
- border-radius: var(--vide-radius-sm);
626
- padding: var(--vide-ad-label-pad-y) var(--vide-ad-label-pad-x)
627
- var(--vide-ad-label-pad-y) 0;
628
-
629
674
  font-family: var(--vide-font);
630
- font-size: var(--vide-font-size-sm);
631
- font-weight: 600;
675
+ font-size: var(--vide-font-size-xs);
676
+ font-weight: 500;
632
677
  letter-spacing: 0.03em;
633
678
  line-height: var(--vide-line-height);
634
- color: var(--vide-text);
635
- gap: 7px;
636
- }
637
-
638
- /* Yellow left stripe */
639
- .vide-ad-label::before {
640
- content: "";
641
- display: block;
642
- width: var(--vide-ad-label-stripe);
643
- min-height: 100%;
644
- margin: 0;
645
- padding: 0;
646
- background: var(--vide-accent-ad);
647
- flex-shrink: 0;
679
+ color: var(--vide-text-dim);
680
+ text-shadow: 0 0 3px rgba(0, 0, 0, 0.6);
681
+ transition: transform 0.25s var(--vide-ease);
648
682
  }
649
683
 
650
684
  /* ─────────────────────────────────────────
651
685
  Ad Countdown
652
- Stacked below label. Same chip language.
686
+ Inline next to label with separator.
653
687
  ───────────────────────────────────────── */
654
688
 
655
689
  .vide-ad-countdown {
656
690
  position: absolute;
657
- top: calc(var(--vide-ad-overlay-gap) + 30px);
658
- left: var(--vide-ad-overlay-gap);
691
+ bottom: calc(var(--vide-controls-height) + var(--vide-ad-overlay-gap) + 52px);
692
+ left: calc(var(--vide-ad-overlay-gap) + 28px);
659
693
  z-index: 4;
660
694
 
661
695
  display: inline-flex;
662
696
  align-items: center;
663
- gap: 4px;
664
697
  margin: 0;
665
698
 
666
- background: var(--vide-chip-light);
667
- border-radius: var(--vide-radius-sm);
668
- padding: 5px 9px;
669
-
670
699
  font-family: var(--vide-font-mono);
671
- font-size: var(--vide-font-size-sm);
700
+ font-size: var(--vide-font-size-xs);
672
701
  font-weight: 400;
673
702
  line-height: var(--vide-line-height);
674
703
  color: var(--vide-text-dim);
704
+ text-shadow: 0 0 3px rgba(0, 0, 0, 0.6);
675
705
  font-variant-numeric: tabular-nums;
676
706
  white-space: nowrap;
707
+ transition: transform 0.25s var(--vide-ease);
677
708
  }
678
709
 
679
- .vide-ad-countdown strong {
680
- color: var(--vide-text);
681
- font-weight: 600;
710
+ .vide-ad-countdown::before {
711
+ content: "\00b7";
712
+ margin-right: 5px;
682
713
  }
683
714
 
684
715
  /* ─────────────────────────────────────────
@@ -699,10 +730,10 @@
699
730
  border: 1px solid var(--vide-skip-border);
700
731
  background: var(--vide-skip-bg);
701
732
  color: var(--vide-skip-color);
702
- border-radius: var(--vide-radius-sm);
733
+ border-radius: 999px;
703
734
 
704
735
  padding: var(--vide-skip-padding-y) var(--vide-skip-padding-x);
705
- min-height: 40px;
736
+ min-height: 36px;
706
737
  min-width: 0;
707
738
 
708
739
  font-family: var(--vide-font);
@@ -718,7 +749,7 @@
718
749
  gap: var(--vide-skip-gap);
719
750
 
720
751
  transition: background var(--vide-duration-fast), border-color
721
- var(--vide-duration-fast);
752
+ var(--vide-duration-fast), transform 0.25s var(--vide-ease);
722
753
  }
723
754
 
724
755
  .vide-skip svg {
@@ -733,7 +764,7 @@
733
764
  }
734
765
 
735
766
  .vide-skip:hover {
736
- background: rgba(60, 60, 68, 0.95);
767
+ background: rgba(40, 40, 46, 0.8);
737
768
  border-color: rgba(255, 255, 255, 0.48);
738
769
  }
739
770
 
@@ -769,7 +800,7 @@
769
800
  gap: 8px;
770
801
  margin: 0;
771
802
 
772
- background: var(--vide-chip);
803
+ background: rgba(0, 0, 0, 0.7);
773
804
  border: 1px solid rgba(255, 255, 255, 0.06);
774
805
  border-radius: var(--vide-radius);
775
806
  padding: 8px 12px;
@@ -779,10 +810,12 @@
779
810
  text-decoration: none;
780
811
  color: var(--vide-text);
781
812
 
782
- transition: border-color var(--vide-duration-fast);
813
+ transition: background var(--vide-duration-fast), border-color
814
+ var(--vide-duration-fast), transform 0.25s var(--vide-ease);
783
815
  }
784
816
 
785
817
  .vide-ad-cta:hover {
818
+ background: rgba(0, 0, 0, 0.85);
786
819
  border-color: rgba(255, 255, 255, 0.14);
787
820
  }
788
821
 
@@ -815,6 +848,9 @@
815
848
  gap: 2px;
816
849
  margin: 0;
817
850
  padding: 0;
851
+ text-align: left;
852
+ min-width: 0;
853
+ overflow: hidden;
818
854
  }
819
855
 
820
856
  .vide-ad-cta__title {
@@ -825,6 +861,9 @@
825
861
  font-weight: 500;
826
862
  line-height: 1.3;
827
863
  color: var(--vide-text);
864
+ overflow: hidden;
865
+ text-overflow: ellipsis;
866
+ white-space: nowrap;
828
867
  }
829
868
 
830
869
  .vide-ad-cta__url {
@@ -835,6 +874,9 @@
835
874
  font-weight: 400;
836
875
  line-height: 1.2;
837
876
  color: var(--vide-text-dim);
877
+ overflow: hidden;
878
+ text-overflow: ellipsis;
879
+ white-space: nowrap;
838
880
  }
839
881
 
840
882
  /* ── Ad progress accent ── */
@@ -862,3 +904,53 @@
862
904
  .vide-ui--ad-paused .vide-progress__buffered {
863
905
  opacity: 0.25;
864
906
  }
907
+
908
+ /* ═══════════════════════════════════════════
909
+ RESPONSIVE — small player (<480px)
910
+ ═══════════════════════════════════════════ */
911
+
912
+ @container (max-width: 480px) {
913
+ /* Learn More → top-left */
914
+ .vide-ad-cta {
915
+ top: var(--vide-ad-overlay-gap);
916
+ bottom: auto;
917
+ left: var(--vide-ad-overlay-gap);
918
+ max-width: 60%;
919
+ }
920
+
921
+ /* Label/countdown → bottom-left (above controls) */
922
+ .vide-ad-label {
923
+ bottom: calc(var(--vide-controls-height) + var(--vide-ad-overlay-gap));
924
+ }
925
+
926
+ .vide-ad-countdown {
927
+ bottom: calc(var(--vide-controls-height) + var(--vide-ad-overlay-gap));
928
+ }
929
+
930
+ /* Skip → stays bottom-right, smaller */
931
+ .vide-skip {
932
+ padding: 5px 12px;
933
+ min-height: 32px;
934
+ font-size: 12px;
935
+ }
936
+
937
+ .vide-skip svg {
938
+ width: 14px;
939
+ height: 14px;
940
+ min-width: 14px;
941
+ min-height: 14px;
942
+ }
943
+
944
+ /* Disable slide-down for top-positioned CTA */
945
+ .vide-ui--ad-playing:not(:hover) .vide-ad-cta {
946
+ transform: none;
947
+ }
948
+ }
949
+
950
+ /* Non-fullscreen: slightly smaller skip */
951
+ @container (max-width: 800px) {
952
+ .vide-skip {
953
+ padding: var(--vide-skip-padding-y) 14px;
954
+ font-size: 13px;
955
+ }
956
+ }
@@ -1,6 +1,6 @@
1
- import { e as Plugin } from '../types-vxIcXgJz.js';
2
- import { V as VastResponse, R as ResolveOptions, a as VastPluginOptions } from '../types-CAJmacV6.js';
3
- export { A as AdCategory, b as AdPlugin, c as AdVerification, d as VastProgressEvent } from '../types-CAJmacV6.js';
1
+ import { P as Player, f as Plugin } from '../types-BsEF8iWC.js';
2
+ import { V as VastResponse, R as ResolveOptions, a as VastCompanionAd, b as VastNonLinearAds, c as VastAd, d as VastLinear, A as AdPlugin, e as VastPluginOptions } from '../types-COeag8fU.js';
3
+ export { f as AdCategory, g as AdVerification, C as CompanionHTMLResource, h as CompanionIFrameResource, i as CompanionRenderingMode, j as CompanionRequired, k as CompanionResource, l as CompanionStaticResource, m as CompanionTrackingEvents, N as NonLinearAd, n as VastCompanionAds, o as VastExtension, p as VastProgressEvent, q as VastViewableImpression } from '../types-COeag8fU.js';
4
4
 
5
5
  /**
6
6
  * Parse a VAST XML string into a VastResponse object.
@@ -17,13 +17,197 @@ declare function fetchVast(tagUrl: string, options?: {
17
17
  */
18
18
  declare function resolveVast(tagUrl: string, options?: ResolveOptions | undefined): Promise<VastResponse>;
19
19
 
20
+ /**
21
+ * Fire error tracking URLs, replacing the [ERRORCODE] macro with the given code.
22
+ * Per VAST 4.2 Section 2.3.6.
23
+ */
24
+ declare function trackError(urls: string[], errorCode: number): void;
20
25
  /** Fire-and-forget tracking. Response is ignored. */
21
26
  declare function track(urls: string[]): void;
22
27
  type QuartileEvent = "start" | "firstQuartile" | "midpoint" | "thirdQuartile" | "complete";
23
28
  /** Determine which quartile the current playback position represents. */
24
29
  declare function getQuartile(currentTime: number, duration: number): QuartileEvent | null;
30
+ /** Fire creativeView tracking beacons for a companion ad.
31
+ * Call when the companion is actually displayed to the user. */
32
+ declare function trackCompanionView(companion: VastCompanionAd): void;
33
+ /** Fire a tracking event for a NonLinear ad container.
34
+ * Looks up the event name in the container-level trackingEvents. */
35
+ declare function trackNonLinear(nonLinearAds: VastNonLinearAds, event: string): void;
36
+
37
+ /** Select the best media file: prefer mp4, then highest bitrate. */
38
+ declare function selectMediaFile(files: {
39
+ url: string;
40
+ mimeType: string;
41
+ bitrate?: number | undefined;
42
+ }[]): {
43
+ url: string;
44
+ mimeType: string;
45
+ } | null;
46
+
47
+ interface PlaySingleAdOptions {
48
+ player: Player;
49
+ ad: VastAd;
50
+ linear: VastLinear;
51
+ source: "vast" | "vmap";
52
+ adPlugins?: ((ad: VastAd) => AdPlugin[]) | undefined;
53
+ /** Called synchronously when the ad finishes, before the Promise resolves. */
54
+ onFinish?: ((result: SingleAdResult) => void) | undefined;
55
+ }
56
+ interface SingleAdResult {
57
+ outcome: "completed" | "skipped" | "error";
58
+ errorPhase?: "load" | "playback";
59
+ adId: string;
60
+ }
61
+ /**
62
+ * Play a single ad creative. Returns a Promise that resolves when the ad
63
+ * finishes (completed, skipped, or error), plus an abort function.
64
+ *
65
+ * Does NOT call setState("playing") on completion — caller's responsibility.
66
+ * Does NOT save/restore content src — caller's responsibility.
67
+ */
68
+ declare function playSingleAd(options: PlaySingleAdOptions): {
69
+ promise: Promise<SingleAdResult>;
70
+ abort: () => void;
71
+ };
72
+
73
+ /** A playable ad: the VastAd plus its first linear creative. */
74
+ interface PlayableAd {
75
+ ad: VastAd;
76
+ linear: VastLinear;
77
+ }
78
+ interface ClassifiedAds {
79
+ type: "single" | "pod" | "waterfall";
80
+ ads: PlayableAd[];
81
+ /**
82
+ * Stand-alone ads (no sequence) available for substitution when a pod ad fails.
83
+ * Per VAST 3.3.1: "Should an ad in the Pod fail to play, the media player
84
+ * should substitute an un-played stand-alone ad from the response."
85
+ * Only populated when type is "pod" and unsequenced ads exist.
86
+ */
87
+ standalonePool: PlayableAd[];
88
+ }
89
+ interface PodResult {
90
+ completed: number;
91
+ skipped: number;
92
+ failed: number;
93
+ }
94
+ /**
95
+ * Classify ads from a VAST response into single, pod, or waterfall.
96
+ * Pure function — no side effects.
97
+ *
98
+ * - All have sequence → pod (sorted by sequence)
99
+ * - None have sequence + multiple → waterfall (original order)
100
+ * - Mixed → pod from sequenced only
101
+ * - 0 or 1 playable → single
102
+ */
103
+ declare function classifyAds(vastAds: VastAd[]): ClassifiedAds;
104
+ /**
105
+ * Play all ads in a pod sequentially.
106
+ * Individual failures or skips advance to the next ad.
107
+ *
108
+ * Per VAST 3.3.1: when a pod ad fails, a stand-alone ad from
109
+ * `standalonePool` is substituted before moving to the next pod ad.
110
+ */
111
+ declare function playPod(player: Player, ads: PlayableAd[], options: {
112
+ source: "vast" | "vmap";
113
+ adPlugins?: ((ad: VastAd) => AdPlugin[]) | undefined;
114
+ /** Called synchronously when the last ad in the pod finishes. */
115
+ onFinish?: ((result: SingleAdResult) => void) | undefined;
116
+ /**
117
+ * Stand-alone ads available for substitution when a pod ad fails.
118
+ * Each ad is used at most once.
119
+ */
120
+ standalonePool?: PlayableAd[] | undefined;
121
+ }): Promise<PodResult>;
122
+ /**
123
+ * Try ads in waterfall order. Play the first one that loads successfully.
124
+ * Returns the result of the first successful ad, or null if all fail.
125
+ */
126
+ declare function playWaterfall(player: Player, ads: PlayableAd[], options: {
127
+ source: "vast" | "vmap";
128
+ adPlugins?: ((ad: VastAd) => AdPlugin[]) | undefined;
129
+ /** Called synchronously when the winning ad finishes (or last failure). */
130
+ onFinish?: ((result: SingleAdResult) => void) | undefined;
131
+ }): Promise<SingleAdResult | null>;
132
+
133
+ /** 100: XML parsing error. */
134
+ declare const VAST_XML_PARSE_ERROR = 100;
135
+ /** 101: VAST schema validation error. */
136
+ declare const VAST_SCHEMA_ERROR = 101;
137
+ /** 102: VAST version of response not supported. */
138
+ declare const VAST_VERSION_UNSUPPORTED = 102;
139
+ /** 200: Trafficking error. Media player received an Ad type it was not expecting and/or cannot play. */
140
+ declare const VAST_TRAFFICKING_ERROR = 200;
141
+ /** 201: Media player expecting different linearity. */
142
+ declare const VAST_LINEARITY_ERROR = 201;
143
+ /** 202: Media player expecting different duration. */
144
+ declare const VAST_DURATION_ERROR = 202;
145
+ /** 203: Media player expecting different size. */
146
+ declare const VAST_SIZE_ERROR = 203;
147
+ /** 204: Ad category was required but not provided. */
148
+ declare const VAST_CATEGORY_REQUIRED = 204;
149
+ /** 205: InLine Category violates Wrapper BlockedAdCategories. */
150
+ declare const VAST_CATEGORY_BLOCKED = 205;
151
+ /** 206: Ad Break shortened. Ad was not served. */
152
+ declare const VAST_BREAK_SHORTENED = 206;
153
+ /** 300: General Wrapper error. */
154
+ declare const VAST_WRAPPER_ERROR = 300;
155
+ /** 301: Timeout of VAST URI provided in Wrapper element. */
156
+ declare const VAST_WRAPPER_TIMEOUT = 301;
157
+ /** 302: Wrapper limit reached, too many Wrapper responses with no InLine response. */
158
+ declare const VAST_WRAPPER_LIMIT = 302;
159
+ /** 303: No VAST response after one or more Wrappers. */
160
+ declare const VAST_NO_ADS = 303;
161
+ /** 304: InLine response returned ad unit that failed to result in ad display within defined time limit. */
162
+ declare const VAST_INLINE_TIMEOUT = 304;
163
+ /** 400: General Linear error. Media player is unable to display the Linear Ad. */
164
+ declare const VAST_LINEAR_ERROR = 400;
165
+ /** 401: File not found. Unable to find Linear/MediaFile from URI. */
166
+ declare const VAST_MEDIA_NOT_FOUND = 401;
167
+ /** 402: Timeout of MediaFile URI. */
168
+ declare const VAST_MEDIA_TIMEOUT = 402;
169
+ /** 403: Couldn't find MediaFile that is supported by this media player. */
170
+ declare const VAST_MEDIA_UNSUPPORTED = 403;
171
+ /** 405: Problem displaying MediaFile. MediaFile may include unsupported codecs, different MIME type, etc. */
172
+ declare const VAST_MEDIA_DISPLAY_ERROR = 405;
173
+ /** 406: Mezzanine was required but not provided. Ad not served. */
174
+ declare const VAST_MEZZANINE_REQUIRED = 406;
175
+ /** 407: Mezzanine is in the process of being downloaded. Ad will not be served until mezzanine is transcoded. */
176
+ declare const VAST_MEZZANINE_DOWNLOADING = 407;
177
+ /** 408: Conditional ad rejected (deprecated along with conditionalAd). */
178
+ declare const VAST_CONDITIONAL_REJECTED = 408;
179
+ /** 409: Interactive unit in the InteractiveCreativeFile node was not executed. */
180
+ declare const VAST_INTERACTIVE_NOT_EXECUTED = 409;
181
+ /** 410: Verification unit in the Verification node was not executed. */
182
+ declare const VAST_VERIFICATION_NOT_EXECUTED = 410;
183
+ /** 411: Mezzanine was provided but did not meet required specification. Ad not served. */
184
+ declare const VAST_MEZZANINE_INVALID = 411;
185
+ /** 500: General NonLinearAds error. */
186
+ declare const VAST_NONLINEAR_ERROR = 500;
187
+ /** 501: Unable to display NonLinearAd because creative dimensions do not align with creative display area. */
188
+ declare const VAST_NONLINEAR_SIZE_ERROR = 501;
189
+ /** 502: Unable to fetch NonLinearAds/NonLinear resource. */
190
+ declare const VAST_NONLINEAR_FETCH_ERROR = 502;
191
+ /** 503: Couldn't find NonLinear resource with supported type. */
192
+ declare const VAST_NONLINEAR_UNSUPPORTED = 503;
193
+ /** 600: General CompanionAds error. */
194
+ declare const VAST_COMPANION_ERROR = 600;
195
+ /** 601: Unable to display Companion because creative dimensions do not fit within Companion display area. */
196
+ declare const VAST_COMPANION_SIZE_ERROR = 601;
197
+ /** 602: Unable to display required Companion. */
198
+ declare const VAST_COMPANION_REQUIRED_ERROR = 602;
199
+ /** 603: Unable to fetch CompanionAds/Companion resource. */
200
+ declare const VAST_COMPANION_FETCH_ERROR = 603;
201
+ /** 604: Couldn't find Companion resource with supported type. */
202
+ declare const VAST_COMPANION_UNSUPPORTED = 604;
203
+ /** 900: Undefined Error. */
204
+ declare const VAST_UNDEFINED_ERROR = 900;
205
+ /** 901: General VPAID error. */
206
+ declare const VAST_VPAID_ERROR = 901;
207
+ /** 902: General InteractiveCreativeFile error. */
208
+ declare const VAST_INTERACTIVE_ERROR = 902;
25
209
 
26
210
  /** Create a VAST ad plugin for vide. */
27
211
  declare function vast(options: VastPluginOptions): Plugin;
28
212
 
29
- export { ResolveOptions, VastPluginOptions, fetchVast, getQuartile, parseVast, resolveVast, track, vast };
213
+ export { AdPlugin, type ClassifiedAds, type PlaySingleAdOptions, type PlayableAd, type PodResult, ResolveOptions, type SingleAdResult, VAST_BREAK_SHORTENED, VAST_CATEGORY_BLOCKED, VAST_CATEGORY_REQUIRED, VAST_COMPANION_ERROR, VAST_COMPANION_FETCH_ERROR, VAST_COMPANION_REQUIRED_ERROR, VAST_COMPANION_SIZE_ERROR, VAST_COMPANION_UNSUPPORTED, VAST_CONDITIONAL_REJECTED, VAST_DURATION_ERROR, VAST_INLINE_TIMEOUT, VAST_INTERACTIVE_ERROR, VAST_INTERACTIVE_NOT_EXECUTED, VAST_LINEARITY_ERROR, VAST_LINEAR_ERROR, VAST_MEDIA_DISPLAY_ERROR, VAST_MEDIA_NOT_FOUND, VAST_MEDIA_TIMEOUT, VAST_MEDIA_UNSUPPORTED, VAST_MEZZANINE_DOWNLOADING, VAST_MEZZANINE_INVALID, VAST_MEZZANINE_REQUIRED, VAST_NONLINEAR_ERROR, VAST_NONLINEAR_FETCH_ERROR, VAST_NONLINEAR_SIZE_ERROR, VAST_NONLINEAR_UNSUPPORTED, VAST_NO_ADS, VAST_SCHEMA_ERROR, VAST_SIZE_ERROR, VAST_TRAFFICKING_ERROR, VAST_UNDEFINED_ERROR, VAST_VERIFICATION_NOT_EXECUTED, VAST_VERSION_UNSUPPORTED, VAST_VPAID_ERROR, VAST_WRAPPER_ERROR, VAST_WRAPPER_LIMIT, VAST_WRAPPER_TIMEOUT, VAST_XML_PARSE_ERROR, VastCompanionAd, VastNonLinearAds, VastPluginOptions, classifyAds, fetchVast, getQuartile, parseVast, playPod, playSingleAd, playWaterfall, resolveVast, selectMediaFile, track, trackCompanionView, trackError, trackNonLinear, vast };
@@ -0,0 +1 @@
1
+ export{a as vast}from'../chunk-3RDTWUHH.mjs';export{j as VAST_BREAK_SHORTENED,i as VAST_CATEGORY_BLOCKED,h as VAST_CATEGORY_REQUIRED,E as VAST_COMPANION_ERROR,H as VAST_COMPANION_FETCH_ERROR,G as VAST_COMPANION_REQUIRED_ERROR,F as VAST_COMPANION_SIZE_ERROR,I as VAST_COMPANION_UNSUPPORTED,w as VAST_CONDITIONAL_REJECTED,f as VAST_DURATION_ERROR,o as VAST_INLINE_TIMEOUT,L as VAST_INTERACTIVE_ERROR,x as VAST_INTERACTIVE_NOT_EXECUTED,e as VAST_LINEARITY_ERROR,p as VAST_LINEAR_ERROR,t as VAST_MEDIA_DISPLAY_ERROR,q as VAST_MEDIA_NOT_FOUND,r as VAST_MEDIA_TIMEOUT,s as VAST_MEDIA_UNSUPPORTED,v as VAST_MEZZANINE_DOWNLOADING,z as VAST_MEZZANINE_INVALID,u as VAST_MEZZANINE_REQUIRED,A as VAST_NONLINEAR_ERROR,C as VAST_NONLINEAR_FETCH_ERROR,B as VAST_NONLINEAR_SIZE_ERROR,D as VAST_NONLINEAR_UNSUPPORTED,n as VAST_NO_ADS,b as VAST_SCHEMA_ERROR,g as VAST_SIZE_ERROR,d as VAST_TRAFFICKING_ERROR,J as VAST_UNDEFINED_ERROR,y as VAST_VERIFICATION_NOT_EXECUTED,c as VAST_VERSION_UNSUPPORTED,K as VAST_VPAID_ERROR,k as VAST_WRAPPER_ERROR,m as VAST_WRAPPER_LIMIT,l as VAST_WRAPPER_TIMEOUT,a as VAST_XML_PARSE_ERROR,R as classifyAds,N as fetchVast,M as parseVast,S as playPod,Q as playSingleAd,T as playWaterfall,O as resolveVast,P as selectMediaFile}from'../chunk-G74QBLVV.mjs';export{c as getQuartile,b as track,e as trackCompanionView,a as trackError,f as trackNonLinear}from'../chunk-UY5CGRNN.mjs';
@@ -1 +1 @@
1
- import {b,a as a$1}from'../chunk-726XNUGZ.mjs';export{b as fetchVast,a as parseVast,c as resolveVast}from'../chunk-726XNUGZ.mjs';import {a,c}from'../chunk-G4Q7R3SH.mjs';export{b as getQuartile,a as track}from'../chunk-G4Q7R3SH.mjs';function de(u){return {name:"vast",setup(e){let c$1=false,d=null,s=e._setState;async function q(){if(!c$1){s("ad:loading");try{let N=function(n){if(t)for(let i of t.trackingEvents.progress)!I.has(i.offset)&&n>=i.offset&&(I.add(i.offset),a([i.url]));},v=function(){for(let n of L)n();L.length=0;},g=function(){e.emit("ad:end",{adId:a$2}),s("playing"),U();},U=function(){function n({to:i}){i==="ready"&&(e.off("statechange",n),R>0&&(e.el.currentTime=R),e.play().catch(()=>{e.el.muted=!0,e.play().catch(()=>{});}));}e.on("statechange",n),e.src=D;},V=function(){!t||o||(a(t.clickTracking),e.emit("ad:click",{clickThrough:t.clickThrough,clickTracking:t.clickTracking}));},b$1=function(){!t||o||(a(t.trackingEvents.skip),o=!0,m(),v(),g());},S=function(){!t||o||e.state==="ad:playing"&&(a(t.trackingEvents.pause),s("ad:paused"));},w=function(){!t||o||e.state==="ad:paused"&&(a(t.trackingEvents.resume),s("ad:playing"));},A=function(){_(e.el.currentTime),N(e.el.currentTime);},F=function(){if(!t||o)return;let n=e.el.muted||e.el.volume===0;n&&!P?(a(t.trackingEvents.mute),e.emit("ad:mute",{adId:a$2})):!n&&P&&(a(t.trackingEvents.unmute),e.emit("ad:unmute",{adId:a$2})),P=n,e.emit("ad:volumeChange",{adId:a$2,volume:e.el.muted?0:e.el.volume});},x=function(){if(!t||o)return;let n=!!document.fullscreenElement;n&&!T?(a(t.trackingEvents.playerExpand),e.emit("ad:fullscreen",{adId:a$2,fullscreen:!0})):!n&&T&&(a(t.trackingEvents.playerCollapse),e.emit("ad:fullscreen",{adId:a$2,fullscreen:!1})),T=n;},C=function(){o||(o=!0,m(),v(),e.emit("ad:error",{error:new Error("Ad media playback failed"),source:"vast"}),g());},O=function(){o||(o=!0,t&&_(t.duration),m(),v(),g());},E=function(){e.el.removeEventListener("canplay",E),t&&(a(t.trackingEvents.loaded),a(t.trackingEvents.creativeView),e.emit("ad:loaded",{adId:a$2}),s("ad:playing"),e.el.play().catch(()=>{e.el.muted=!0,e.el.play().catch(()=>{});}));},m=function(){e.el.removeEventListener("timeupdate",A),e.el.removeEventListener("ended",O),e.el.removeEventListener("error",C),e.el.removeEventListener("canplay",E),e.el.removeEventListener("pause",S),e.el.removeEventListener("play",w),e.el.removeEventListener("click",V),e.el.removeEventListener("volumechange",F),document.removeEventListener("fullscreenchange",x),e.off("ad:skip",b$1);};var M=N,K=v,W=g,X=U,Y=V,Z=b$1,$=S,y=w,ee=A,te=F,ne=x,ie=C,re=O,se=E,oe=m;let f=u.timeout!==void 0?{timeout:u.timeout}:void 0,B=await b(u.tagUrl,f);if(c$1)return;let h=a$1(B);if(h.ads.length===0){s("playing");return}let t=null,l=null;for(let n of h.ads){for(let i of n.creatives)if(i.linear&&i.linear.mediaFiles.length>0){t=i.linear,l=n;break}if(t)break}if(!t||!l){s("playing");return}let a$2=l.id;e.emit("ad:start",{adId:a$2});let L=[];if(u.adPlugins)for(let n of u.adPlugins(l)){let i=n.setup(e,l);i&&L.push(i);}for(let n of h.ads)a(n.impressions);e.emit("ad:impression",{adId:a$2});let Q=J(t.mediaFiles);if(!Q){e.emit("ad:error",{error:new Error("No suitable media file found"),source:"vast"}),s("playing");return}let R=e.el.currentTime,D=e.src,_=c(t.duration,n=>{if(!t)return;let i=t.trackingEvents[n];i&&a(i),e.emit("ad:quartile",{adId:a$2,quartile:n});}),I=new Set,P=e.el.muted||e.el.volume===0,T=!!document.fullscreenElement,o=!1;e.el.addEventListener("canplay",E),e.el.addEventListener("timeupdate",A),e.el.addEventListener("ended",O),e.el.addEventListener("error",C),e.el.addEventListener("pause",S),e.el.addEventListener("play",w),e.el.addEventListener("click",V),e.el.addEventListener("volumechange",F),document.addEventListener("fullscreenchange",x),e.on("ad:skip",b$1),d=m,e.src="",e.el.src=Q.url,e.el.load();}catch(f){if(c$1)return;e.emit("ad:error",{error:f instanceof Error?f:new Error(String(f)),source:"vast"}),s("playing");}}}function k({to:M}){M==="ready"&&!c$1&&(e.off("statechange",k),q());}return e.state==="ready"||e.state==="playing"||e.state==="paused"?q():e.on("statechange",k),()=>{c$1=true,e.off("statechange",k),d&&d();}}}}function J(u){if(u.length===0)return null;let e=u.filter(d=>d.mimeType==="video/mp4");return (e.length>0?e:u).sort((d,s)=>(s.bitrate??0)-(d.bitrate??0))[0]}export{de as vast};
1
+ export{a as vast}from'../chunk-3RDTWUHH.mjs';export{j as VAST_BREAK_SHORTENED,i as VAST_CATEGORY_BLOCKED,h as VAST_CATEGORY_REQUIRED,E as VAST_COMPANION_ERROR,H as VAST_COMPANION_FETCH_ERROR,G as VAST_COMPANION_REQUIRED_ERROR,F as VAST_COMPANION_SIZE_ERROR,I as VAST_COMPANION_UNSUPPORTED,w as VAST_CONDITIONAL_REJECTED,f as VAST_DURATION_ERROR,o as VAST_INLINE_TIMEOUT,L as VAST_INTERACTIVE_ERROR,x as VAST_INTERACTIVE_NOT_EXECUTED,e as VAST_LINEARITY_ERROR,p as VAST_LINEAR_ERROR,t as VAST_MEDIA_DISPLAY_ERROR,q as VAST_MEDIA_NOT_FOUND,r as VAST_MEDIA_TIMEOUT,s as VAST_MEDIA_UNSUPPORTED,v as VAST_MEZZANINE_DOWNLOADING,z as VAST_MEZZANINE_INVALID,u as VAST_MEZZANINE_REQUIRED,A as VAST_NONLINEAR_ERROR,C as VAST_NONLINEAR_FETCH_ERROR,B as VAST_NONLINEAR_SIZE_ERROR,D as VAST_NONLINEAR_UNSUPPORTED,n as VAST_NO_ADS,b as VAST_SCHEMA_ERROR,g as VAST_SIZE_ERROR,d as VAST_TRAFFICKING_ERROR,J as VAST_UNDEFINED_ERROR,y as VAST_VERIFICATION_NOT_EXECUTED,c as VAST_VERSION_UNSUPPORTED,K as VAST_VPAID_ERROR,k as VAST_WRAPPER_ERROR,m as VAST_WRAPPER_LIMIT,l as VAST_WRAPPER_TIMEOUT,a as VAST_XML_PARSE_ERROR,R as classifyAds,N as fetchVast,M as parseVast,S as playPod,Q as playSingleAd,T as playWaterfall,O as resolveVast,P as selectMediaFile}from'../chunk-G74QBLVV.mjs';export{c as getQuartile,b as track,e as trackCompanionView,a as trackError,f as trackNonLinear}from'../chunk-UY5CGRNN.mjs';
@@ -1 +1 @@
1
- var Vide=(function(exports){'use strict';var F=1e3,B=2e3,$=2001,z=2002,G=3e3,J=3001,X=4e3,Z=4001,ee=4002,te=4003;var ne={idle:["loading","playing","error"],loading:["ready","playing","error"],ready:["playing","loading","ad:loading","error"],playing:["paused","buffering","loading","ad:loading","ended","error"],paused:["playing","loading","ad:loading","ended","error"],buffering:["playing","loading","error"],"ad:loading":["ad:playing","playing","error"],"ad:playing":["ad:paused","playing","error"],"ad:paused":["ad:playing","playing","error"],ended:["idle","loading","error"],error:["idle","loading"]};function re(t,a){return ne[t].includes(a)}function ae(t){return t.readyState>=3?t.paused?"ready":"playing":t.readyState>=1?"loading":"idle"}function ie(t){let a=ae(t),g=t instanceof HTMLAudioElement,E=new Map,y=[],c=false,k=[],d=null,m=t.getAttribute("src")??"",L=false,o=new Map,b=t.duration===Number.POSITIVE_INFINITY,R=null;function x(e){let n=E.get(e);return n||(n=new Set,E.set(e,n)),n}function i(e,n){let r=E.get(e);if(r)for(let u of r)try{u(n);}catch(p){console.error("[vide] Event handler error:",p);}}function s(e){if(e===a)return;if(!re(a,e)){console.warn(`[vide] Invalid transition: ${a} \u2192 ${e}`);return}let n=a;a=e,i("statechange",{from:n,to:e});}function v(){return a==="ad:loading"||a==="ad:playing"||a==="ad:paused"}function h(){!v()&&t.paused&&s("loading");}function S(){a==="loading"&&s("ready");}function P(){v()||s("playing"),i("play",void 0);}function _(){v()||s("paused"),i("pause",void 0);}function I(){a==="playing"&&s("buffering");}function H(){(a==="buffering"||a==="ready")&&s("playing");}function M(){v()||s("ended"),i("ended",void 0);}function A(){i("timeupdate",{currentTime:t.currentTime,duration:t.duration});}function C(){let e=t.error;v()||s("error"),i("error",{code:e?.code??1e3,message:e?.message??"Unknown error",source:"core"});}function w(){let e=t.duration===Number.POSITIVE_INFINITY;e!==b&&(b=e,i("livestatechange",{isLive:e}));}t.addEventListener("durationchange",w),t.addEventListener("loadstart",h),t.addEventListener("canplay",S),t.addEventListener("play",P),t.addEventListener("pause",_),t.addEventListener("waiting",I),t.addEventListener("playing",H),t.addEventListener("ended",M),t.addEventListener("timeupdate",A),t.addEventListener("error",C);function T(e,n){return {id:n,label:e.label,language:e.language,kind:e.kind,active:e.mode==="showing"}}function D(e){if(!e)return [];let n=[];for(let r=0;r<e.length;r++){let u=e[r];n.push({startTime:u.startTime,endTime:u.endTime,text:u.text??""});}return n}let l=new Map;function O(e){if(l.has(e))return;let n=()=>{e.mode==="showing"&&i("cuechange",{cues:D(e.activeCues)});};l.set(e,n),e.addEventListener("cuechange",n);}function K(e){let n=l.get(e);n&&(e.removeEventListener("cuechange",n),l.delete(e));}function V(){let e=[];for(let n=0;n<t.textTracks.length;n++)e.push(T(t.textTracks[n],n));i("texttracksavailable",{tracks:e});}function N(){for(let e=0;e<t.textTracks.length;e++)O(t.textTracks[e]);V();}function Q(e){e.track&&K(e.track),V();}let q=typeof t.textTracks.addEventListener=="function";if(q){t.textTracks.addEventListener("addtrack",N),t.textTracks.addEventListener("removetrack",Q);for(let e=0;e<t.textTracks.length;e++)O(t.textTracks[e]);}let U=new Set(["statechange","play","pause","ended","timeupdate","livestatechange","error","ad:start","ad:end","ad:skip","ad:click","ad:error","ad:impression","ad:loaded","ad:quartile","ad:mute","ad:unmute","ad:volumeChange","ad:fullscreen","ad:breakStart","ad:breakEnd","qualitiesavailable","qualitychange","texttrackchange","texttracksavailable","cuechange","destroy"]);function Y(){if(t.removeEventListener("durationchange",w),t.removeEventListener("loadstart",h),t.removeEventListener("canplay",S),t.removeEventListener("play",P),t.removeEventListener("pause",_),t.removeEventListener("waiting",I),t.removeEventListener("playing",H),t.removeEventListener("ended",M),t.removeEventListener("timeupdate",A),t.removeEventListener("error",C),q){t.textTracks.removeEventListener("addtrack",N),t.textTracks.removeEventListener("removetrack",Q);for(let[e,n]of l)e.removeEventListener("cuechange",n);l.clear();}}function j(){if(d||L)return;let e=t.querySelectorAll("source");for(let n of e){let r=n.getAttribute("src"),u=n.getAttribute("type")??void 0;if(r){for(let p of k)if(p.canHandle(r,u)){d=p,m=r,s("loading"),p.load(r,t);for(let W of e)W.remove();return}}}}let f={get el(){return t},get state(){return a},on(e,n){U.has(e)?x(e).add(n):t.addEventListener(e,n);},off(e,n){U.has(e)?x(e).delete(n):t.removeEventListener(e,n);},emit:i,once(e,n){let r=u=>{f.off(e,r),n(u);};f.on(e,r);},play(){return t.play()},pause(){t.pause();},get currentTime(){return t.currentTime},set currentTime(e){t.currentTime=e;},get duration(){return t.duration},set duration(e){},get volume(){return t.volume},set volume(e){t.volume=e;},get muted(){return t.muted},set muted(e){t.muted=e;},get playbackRate(){return t.playbackRate},set playbackRate(e){t.playbackRate=e;},get paused(){return t.paused},get ended(){return t.ended},get readyState(){return t.readyState},get buffered(){return t.buffered},get seekable(){return t.seekable},get seeking(){return t.seeking},get isLive(){return c?false:t.duration===Number.POSITIVE_INFINITY},get seekableRange(){return c||t.seekable.length===0?null:{start:t.seekable.start(0),end:t.seekable.end(0)}},get qualities(){return o.get("qualities")??[]},get currentQuality(){return o.get("currentQuality")??null},get isAutoQuality(){return o.get("autoQuality")??true},get isAudio(){return g},setQuality(e){let n=o.get("qualitySetter");n&&n(e);},get textTracks(){return t.textTracks},getTextTracks(){let e=[];for(let n=0;n<t.textTracks.length;n++)e.push(T(t.textTracks[n],n));return e},getActiveTextTrack(){for(let e=0;e<t.textTracks.length;e++)if(t.textTracks[e].mode==="showing")return T(t.textTracks[e],e);return null},get activeCues(){for(let e=0;e<t.textTracks.length;e++)if(t.textTracks[e].mode==="showing")return D(t.textTracks[e].activeCues);return []},setTextTrack(e){for(let r=0;r<t.textTracks.length;r++)t.textTracks[r].mode=r===e?"showing":"disabled";let n=e>=0&&e<t.textTracks.length?T(t.textTracks[e],e):null;i("texttrackchange",{track:n});},addTextTrack(e){let n=document.createElement("track");n.src=e.src,n.label=e.label,n.srclang=e.language,n.kind=e.kind??"subtitles",e.default&&(n.default=true),t.appendChild(n);},get videoWidth(){return g?0:t.videoWidth},get videoHeight(){return g?0:t.videoHeight},get networkState(){return t.networkState},get loop(){return t.loop},set loop(e){t.loop=e;},get autoplay(){return t.autoplay},set autoplay(e){t.autoplay=e;},get poster(){return g?"":t.poster},set poster(e){g||(t.poster=e);},get preload(){return t.preload},set preload(e){t.preload=e;},get defaultPlaybackRate(){return t.defaultPlaybackRate},set defaultPlaybackRate(e){t.defaultPlaybackRate=e;},get defaultMuted(){return t.defaultMuted},set defaultMuted(e){t.defaultMuted=e;},get crossOrigin(){return t.crossOrigin},set crossOrigin(e){t.crossOrigin=e;},get controls(){return t.controls},set controls(e){t.controls=e;},get src(){return m},set src(e){if(d&&(d.unload(t),d=null),o.delete("qualities"),o.delete("currentQuality"),o.delete("autoQuality"),o.delete("qualitySetter"),R=null,L=true,m=e,!e){t.removeAttribute("src");return}for(let n of k)if(n.canHandle(e)){d=n,s("loading"),n.load(e,t);return}t.src=e;},registerSourceHandler(e){if(c){console.warn("[vide] Cannot register source handler after destroy");return}k.push(e),!L&&!d&&j();},addEventListener(e,n,r){t.addEventListener(e,n,r);},removeEventListener(e,n,r){t.removeEventListener(e,n,r);},use(e){if(c){console.warn("[vide] Cannot use plugin after destroy");return}let n=e.setup(f);n&&y.push(n);},setPluginData(e,n){if(o.set(e,n),e==="qualities")i("qualitiesavailable",{qualities:n});else if(e==="currentQuality"){let r=n;i("qualitychange",{from:R,to:r}),R=r;}},getPluginData(e){return o.get(e)},destroy(){if(!c){c=true,d&&(d.unload(t),d=null);for(let e of y)try{e();}catch(n){console.error("[vide] Plugin cleanup error:",n);}y.length=0,i("destroy",void 0),Y(),E.clear(),o.clear();}}};return f._setState=s,f}exports.ERR_DASH_IMPORT=G;exports.ERR_DASH_PLAYBACK=J;exports.ERR_DRM_CERTIFICATE=te;exports.ERR_DRM_DETECTION=Z;exports.ERR_DRM_LICENSE=ee;exports.ERR_DRM_UNSUPPORTED=X;exports.ERR_HLS_FATAL=z;exports.ERR_HLS_IMPORT=$;exports.ERR_HLS_UNSUPPORTED=B;exports.ERR_MEDIA=F;exports.createPlayer=ie;return exports;})({});
1
+ var Vide=(function(exports){'use strict';var F=1e3,B=2e3,$=2001,z=2002,G=3e3,J=3001,X=4e3,Z=4001,ee=4002,te=4003;var ne={idle:["loading","playing","error"],loading:["ready","playing","error"],ready:["playing","loading","ad:loading","error"],playing:["paused","buffering","loading","ad:loading","ended","error"],paused:["playing","loading","ad:loading","ended","error"],buffering:["playing","loading","error"],"ad:loading":["ad:playing","playing","error"],"ad:playing":["ad:paused","ad:loading","playing","error"],"ad:paused":["ad:playing","ad:loading","playing","error"],ended:["idle","loading","error"],error:["idle","loading"]};function re(t,a){return ne[t].includes(a)}function ae(t){return t.readyState>=3?t.paused?"ready":"playing":t.readyState>=1?"loading":"idle"}function ie(t){let a=ae(t),g=t instanceof HTMLAudioElement,E=new Map,y=[],c=false,k=[],d=null,m=t.getAttribute("src")??"",L=false,o=new Map,b=t.duration===Number.POSITIVE_INFINITY,R=null;function x(e){let n=E.get(e);return n||(n=new Set,E.set(e,n)),n}function i(e,n){let r=E.get(e);if(r)for(let u of r)try{u(n);}catch(p){console.error("[vide] Event handler error:",p);}}function s(e){if(e===a)return;if(!re(a,e)){console.warn(`[vide] Invalid transition: ${a} \u2192 ${e}`);return}let n=a;a=e,i("statechange",{from:n,to:e});}function v(){return a==="ad:loading"||a==="ad:playing"||a==="ad:paused"}function h(){!v()&&t.paused&&s("loading");}function S(){a==="loading"&&s("ready");}function P(){v()||s("playing"),i("play",void 0);}function _(){v()||s("paused"),i("pause",void 0);}function I(){a==="playing"&&s("buffering");}function H(){(a==="buffering"||a==="ready")&&s("playing");}function M(){v()||s("ended"),i("ended",void 0);}function A(){i("timeupdate",{currentTime:t.currentTime,duration:t.duration});}function C(){let e=t.error;v()||s("error"),i("error",{code:e?.code??1e3,message:e?.message??"Unknown error",source:"core"});}function w(){let e=t.duration===Number.POSITIVE_INFINITY;e!==b&&(b=e,i("livestatechange",{isLive:e}));}t.addEventListener("durationchange",w),t.addEventListener("loadstart",h),t.addEventListener("canplay",S),t.addEventListener("play",P),t.addEventListener("pause",_),t.addEventListener("waiting",I),t.addEventListener("playing",H),t.addEventListener("ended",M),t.addEventListener("timeupdate",A),t.addEventListener("error",C);function T(e,n){return {id:n,label:e.label,language:e.language,kind:e.kind,active:e.mode==="showing"}}function D(e){if(!e)return [];let n=[];for(let r=0;r<e.length;r++){let u=e[r];n.push({startTime:u.startTime,endTime:u.endTime,text:u.text??""});}return n}let l=new Map;function O(e){if(l.has(e))return;let n=()=>{e.mode==="showing"&&i("cuechange",{cues:D(e.activeCues)});};l.set(e,n),e.addEventListener("cuechange",n);}function K(e){let n=l.get(e);n&&(e.removeEventListener("cuechange",n),l.delete(e));}function V(){let e=[];for(let n=0;n<t.textTracks.length;n++)e.push(T(t.textTracks[n],n));i("texttracksavailable",{tracks:e});}function N(){for(let e=0;e<t.textTracks.length;e++)O(t.textTracks[e]);V();}function Q(e){e.track&&K(e.track),V();}let q=typeof t.textTracks.addEventListener=="function";if(q){t.textTracks.addEventListener("addtrack",N),t.textTracks.addEventListener("removetrack",Q);for(let e=0;e<t.textTracks.length;e++)O(t.textTracks[e]);}let U=new Set(["statechange","play","pause","ended","timeupdate","livestatechange","error","ad:companions","ad:nonlinears","ad:start","ad:end","ad:skip","ad:click","ad:error","ad:impression","ad:loaded","ad:quartile","ad:mute","ad:unmute","ad:volumeChange","ad:fullscreen","ad:breakStart","ad:breakEnd","ad:pod:start","ad:pod:end","ad:pod:adstart","ad:pod:adend","qualitiesavailable","qualitychange","texttrackchange","texttracksavailable","cuechange","destroy"]);function Y(){if(t.removeEventListener("durationchange",w),t.removeEventListener("loadstart",h),t.removeEventListener("canplay",S),t.removeEventListener("play",P),t.removeEventListener("pause",_),t.removeEventListener("waiting",I),t.removeEventListener("playing",H),t.removeEventListener("ended",M),t.removeEventListener("timeupdate",A),t.removeEventListener("error",C),q){t.textTracks.removeEventListener("addtrack",N),t.textTracks.removeEventListener("removetrack",Q);for(let[e,n]of l)e.removeEventListener("cuechange",n);l.clear();}}function j(){if(d||L)return;let e=t.querySelectorAll("source");for(let n of e){let r=n.getAttribute("src"),u=n.getAttribute("type")??void 0;if(r){for(let p of k)if(p.canHandle(r,u)){d=p,m=r,s("loading"),p.load(r,t);for(let W of e)W.remove();return}}}}let f={get el(){return t},get state(){return a},on(e,n){U.has(e)?x(e).add(n):t.addEventListener(e,n);},off(e,n){U.has(e)?x(e).delete(n):t.removeEventListener(e,n);},emit:i,once(e,n){let r=u=>{f.off(e,r),n(u);};f.on(e,r);},play(){return t.play()},pause(){t.pause();},get currentTime(){return t.currentTime},set currentTime(e){t.currentTime=e;},get duration(){return t.duration},set duration(e){},get volume(){return t.volume},set volume(e){t.volume=e;},get muted(){return t.muted},set muted(e){t.muted=e;},get playbackRate(){return t.playbackRate},set playbackRate(e){t.playbackRate=e;},get paused(){return t.paused},get ended(){return t.ended},get readyState(){return t.readyState},get buffered(){return t.buffered},get seekable(){return t.seekable},get seeking(){return t.seeking},get isLive(){return c?false:t.duration===Number.POSITIVE_INFINITY},get seekableRange(){return c||t.seekable.length===0?null:{start:t.seekable.start(0),end:t.seekable.end(0)}},get qualities(){return o.get("qualities")??[]},get currentQuality(){return o.get("currentQuality")??null},get isAutoQuality(){return o.get("autoQuality")??true},get isAudio(){return g},setQuality(e){let n=o.get("qualitySetter");n&&n(e);},get textTracks(){return t.textTracks},getTextTracks(){let e=[];for(let n=0;n<t.textTracks.length;n++)e.push(T(t.textTracks[n],n));return e},getActiveTextTrack(){for(let e=0;e<t.textTracks.length;e++)if(t.textTracks[e].mode==="showing")return T(t.textTracks[e],e);return null},get activeCues(){for(let e=0;e<t.textTracks.length;e++)if(t.textTracks[e].mode==="showing")return D(t.textTracks[e].activeCues);return []},setTextTrack(e){for(let r=0;r<t.textTracks.length;r++)t.textTracks[r].mode=r===e?"showing":"disabled";let n=e>=0&&e<t.textTracks.length?T(t.textTracks[e],e):null;i("texttrackchange",{track:n});},addTextTrack(e){let n=document.createElement("track");n.src=e.src,n.label=e.label,n.srclang=e.language,n.kind=e.kind??"subtitles",e.default&&(n.default=true),t.appendChild(n);},get videoWidth(){return g?0:t.videoWidth},get videoHeight(){return g?0:t.videoHeight},get networkState(){return t.networkState},get loop(){return t.loop},set loop(e){t.loop=e;},get autoplay(){return t.autoplay},set autoplay(e){t.autoplay=e;},get poster(){return g?"":t.poster},set poster(e){g||(t.poster=e);},get preload(){return t.preload},set preload(e){t.preload=e;},get defaultPlaybackRate(){return t.defaultPlaybackRate},set defaultPlaybackRate(e){t.defaultPlaybackRate=e;},get defaultMuted(){return t.defaultMuted},set defaultMuted(e){t.defaultMuted=e;},get crossOrigin(){return t.crossOrigin},set crossOrigin(e){t.crossOrigin=e;},get controls(){return t.controls},set controls(e){t.controls=e;},get src(){return m},set src(e){if(d&&(d.unload(t),d=null),o.delete("qualities"),o.delete("currentQuality"),o.delete("autoQuality"),o.delete("qualitySetter"),R=null,L=true,m=e,!e){t.removeAttribute("src");return}for(let n of k)if(n.canHandle(e)){d=n,s("loading"),n.load(e,t);return}t.src=e;},registerSourceHandler(e){if(c){console.warn("[vide] Cannot register source handler after destroy");return}k.push(e),!L&&!d&&j();},addEventListener(e,n,r){t.addEventListener(e,n,r);},removeEventListener(e,n,r){t.removeEventListener(e,n,r);},use(e){if(c){console.warn("[vide] Cannot use plugin after destroy");return}let n=e.setup(f);n&&y.push(n);},setPluginData(e,n){if(o.set(e,n),e==="qualities")i("qualitiesavailable",{qualities:n});else if(e==="currentQuality"){let r=n;i("qualitychange",{from:R,to:r}),R=r;}},getPluginData(e){return o.get(e)},destroy(){if(!c){c=true,d&&(d.unload(t),d=null);for(let e of y)try{e();}catch(n){console.error("[vide] Plugin cleanup error:",n);}y.length=0,i("destroy",void 0),Y(),E.clear(),o.clear();}}};return f._setState=s,f}exports.ERR_DASH_IMPORT=G;exports.ERR_DASH_PLAYBACK=J;exports.ERR_DRM_CERTIFICATE=te;exports.ERR_DRM_DETECTION=Z;exports.ERR_DRM_LICENSE=ee;exports.ERR_DRM_UNSUPPORTED=X;exports.ERR_HLS_FATAL=z;exports.ERR_HLS_IMPORT=$;exports.ERR_HLS_UNSUPPORTED=B;exports.ERR_MEDIA=F;exports.createPlayer=ie;return exports;})({});