@vuetify/nightly 3.9.2-master.2025-07-23 → 3.9.2-master.2025-07-25

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 (246) hide show
  1. package/CHANGELOG.md +15 -3
  2. package/dist/_component-variables-labs.sass +3 -1
  3. package/dist/json/attributes.json +4029 -3617
  4. package/dist/json/importMap-labs.json +38 -14
  5. package/dist/json/importMap.json +148 -148
  6. package/dist/json/tags.json +133 -0
  7. package/dist/json/web-types.json +13484 -11867
  8. package/dist/vuetify-labs.cjs +1525 -126
  9. package/dist/vuetify-labs.css +5448 -5007
  10. package/dist/vuetify-labs.d.ts +7670 -974
  11. package/dist/vuetify-labs.esm.js +1526 -127
  12. package/dist/vuetify-labs.esm.js.map +1 -1
  13. package/dist/vuetify-labs.js +1525 -126
  14. package/dist/vuetify-labs.min.css +2 -2
  15. package/dist/vuetify.cjs +74 -34
  16. package/dist/vuetify.cjs.map +1 -1
  17. package/dist/vuetify.css +3415 -3415
  18. package/dist/vuetify.d.ts +86 -61
  19. package/dist/vuetify.esm.js +74 -34
  20. package/dist/vuetify.esm.js.map +1 -1
  21. package/dist/vuetify.js +74 -34
  22. package/dist/vuetify.js.map +1 -1
  23. package/dist/vuetify.min.css +2 -2
  24. package/dist/vuetify.min.js +976 -977
  25. package/dist/vuetify.min.js.map +1 -1
  26. package/lib/components/VBottomSheet/VBottomSheet.d.ts +6 -6
  27. package/lib/components/VDialog/VDialog.d.ts +6 -6
  28. package/lib/components/VOverlay/VOverlay.js +1 -0
  29. package/lib/components/VOverlay/VOverlay.js.map +1 -1
  30. package/lib/components/VOverlay/locationStrategies.js +16 -10
  31. package/lib/components/VOverlay/locationStrategies.js.map +1 -1
  32. package/lib/components/VOverlay/scrollStrategies.d.ts +1 -0
  33. package/lib/components/VOverlay/scrollStrategies.js +6 -4
  34. package/lib/components/VOverlay/scrollStrategies.js.map +1 -1
  35. package/lib/components/VRangeSlider/VRangeSlider.d.ts +13 -0
  36. package/lib/components/VSlider/VSlider.d.ts +13 -0
  37. package/lib/components/VSlider/VSlider.js +3 -1
  38. package/lib/components/VSlider/VSlider.js.map +1 -1
  39. package/lib/components/VSlider/VSliderThumb.d.ts +13 -0
  40. package/lib/components/VSlider/VSliderThumb.js +2 -0
  41. package/lib/components/VSlider/VSliderThumb.js.map +1 -1
  42. package/lib/components/VSlider/slider.d.ts +6 -0
  43. package/lib/components/VSlider/slider.js +2 -0
  44. package/lib/components/VSlider/slider.js.map +1 -1
  45. package/lib/components/index.js +2 -2
  46. package/lib/components/index.js.map +1 -1
  47. package/lib/composables/goto.d.ts +3 -2
  48. package/lib/composables/goto.js +2 -16
  49. package/lib/composables/goto.js.map +1 -1
  50. package/lib/composables/reveal.d.ts +36 -0
  51. package/lib/composables/reveal.js +30 -0
  52. package/lib/composables/reveal.js.map +1 -0
  53. package/lib/entry-bundler.js +1 -1
  54. package/lib/framework.d.ts +142 -133
  55. package/lib/framework.js +1 -1
  56. package/lib/iconsets/fa.js +9 -1
  57. package/lib/iconsets/fa.js.map +1 -1
  58. package/lib/iconsets/fa4.js +9 -1
  59. package/lib/iconsets/fa4.js.map +1 -1
  60. package/lib/iconsets/md.js +9 -1
  61. package/lib/iconsets/md.js.map +1 -1
  62. package/lib/iconsets/mdi-svg.js +9 -1
  63. package/lib/iconsets/mdi-svg.js.map +1 -1
  64. package/lib/iconsets/mdi.js +9 -1
  65. package/lib/iconsets/mdi.js.map +1 -1
  66. package/lib/labs/VPie/VPie.css +105 -0
  67. package/lib/labs/VPie/VPie.d.ts +891 -0
  68. package/lib/labs/VPie/VPie.js +291 -0
  69. package/lib/labs/VPie/VPie.js.map +1 -0
  70. package/lib/labs/VPie/VPie.sass +109 -0
  71. package/lib/labs/VPie/VPieSegment.d.ts +310 -0
  72. package/lib/labs/VPie/VPieSegment.js +103 -0
  73. package/lib/labs/VPie/VPieSegment.js.map +1 -0
  74. package/lib/labs/VPie/VPieTooltip.d.ts +279 -0
  75. package/lib/labs/VPie/VPieTooltip.js +84 -0
  76. package/lib/labs/VPie/VPieTooltip.js.map +1 -0
  77. package/lib/labs/VPie/_variables.scss +11 -0
  78. package/lib/labs/VPie/index.d.ts +3 -0
  79. package/lib/labs/VPie/index.js +4 -0
  80. package/lib/labs/VPie/index.js.map +1 -0
  81. package/lib/labs/VPie/types.d.ts +16 -0
  82. package/lib/labs/VPie/types.js +2 -0
  83. package/lib/labs/VPie/types.js.map +1 -0
  84. package/lib/labs/VPie/utils.d.ts +23 -0
  85. package/lib/labs/VPie/utils.js +49 -0
  86. package/lib/labs/VPie/utils.js.map +1 -0
  87. package/lib/labs/VVideo/VVideo.css +322 -0
  88. package/lib/labs/VVideo/VVideo.d.ts +6932 -0
  89. package/lib/labs/VVideo/VVideo.js +424 -0
  90. package/lib/labs/VVideo/VVideo.js.map +1 -0
  91. package/lib/labs/VVideo/VVideo.sass +304 -0
  92. package/lib/labs/VVideo/VVideoControls.d.ts +3524 -0
  93. package/lib/labs/VVideo/VVideoControls.js +236 -0
  94. package/lib/labs/VVideo/VVideoControls.js.map +1 -0
  95. package/lib/labs/VVideo/VVideoVolume.d.ts +3088 -0
  96. package/lib/labs/VVideo/VVideoVolume.js +94 -0
  97. package/lib/labs/VVideo/VVideoVolume.js.map +1 -0
  98. package/lib/labs/VVideo/_variables.scss +58 -0
  99. package/lib/labs/VVideo/index.d.ts +3 -0
  100. package/lib/labs/VVideo/index.js +4 -0
  101. package/lib/labs/VVideo/index.js.map +1 -0
  102. package/lib/labs/components.d.ts +2 -0
  103. package/lib/labs/components.js +2 -0
  104. package/lib/labs/components.js.map +1 -1
  105. package/lib/locale/af.d.ts +11 -0
  106. package/lib/locale/af.js +11 -0
  107. package/lib/locale/af.js.map +1 -1
  108. package/lib/locale/ar.d.ts +11 -0
  109. package/lib/locale/ar.js +11 -0
  110. package/lib/locale/ar.js.map +1 -1
  111. package/lib/locale/az.d.ts +11 -0
  112. package/lib/locale/az.js +11 -0
  113. package/lib/locale/az.js.map +1 -1
  114. package/lib/locale/bg.d.ts +11 -0
  115. package/lib/locale/bg.js +11 -0
  116. package/lib/locale/bg.js.map +1 -1
  117. package/lib/locale/ca.d.ts +11 -0
  118. package/lib/locale/ca.js +11 -0
  119. package/lib/locale/ca.js.map +1 -1
  120. package/lib/locale/ckb.d.ts +11 -0
  121. package/lib/locale/ckb.js +11 -0
  122. package/lib/locale/ckb.js.map +1 -1
  123. package/lib/locale/cs.d.ts +11 -0
  124. package/lib/locale/cs.js +11 -0
  125. package/lib/locale/cs.js.map +1 -1
  126. package/lib/locale/da.d.ts +11 -0
  127. package/lib/locale/da.js +11 -0
  128. package/lib/locale/da.js.map +1 -1
  129. package/lib/locale/de.d.ts +11 -0
  130. package/lib/locale/de.js +11 -0
  131. package/lib/locale/de.js.map +1 -1
  132. package/lib/locale/el.d.ts +11 -0
  133. package/lib/locale/el.js +11 -0
  134. package/lib/locale/el.js.map +1 -1
  135. package/lib/locale/en.d.ts +11 -0
  136. package/lib/locale/en.js +11 -0
  137. package/lib/locale/en.js.map +1 -1
  138. package/lib/locale/es.d.ts +11 -0
  139. package/lib/locale/es.js +11 -0
  140. package/lib/locale/es.js.map +1 -1
  141. package/lib/locale/et.d.ts +11 -0
  142. package/lib/locale/et.js +11 -0
  143. package/lib/locale/et.js.map +1 -1
  144. package/lib/locale/fa.d.ts +11 -0
  145. package/lib/locale/fa.js +11 -0
  146. package/lib/locale/fa.js.map +1 -1
  147. package/lib/locale/fi.d.ts +11 -0
  148. package/lib/locale/fi.js +11 -0
  149. package/lib/locale/fi.js.map +1 -1
  150. package/lib/locale/fr.d.ts +11 -0
  151. package/lib/locale/fr.js +11 -0
  152. package/lib/locale/fr.js.map +1 -1
  153. package/lib/locale/he.d.ts +11 -0
  154. package/lib/locale/he.js +11 -0
  155. package/lib/locale/he.js.map +1 -1
  156. package/lib/locale/hr.d.ts +11 -0
  157. package/lib/locale/hr.js +11 -0
  158. package/lib/locale/hr.js.map +1 -1
  159. package/lib/locale/hu.d.ts +11 -0
  160. package/lib/locale/hu.js +11 -0
  161. package/lib/locale/hu.js.map +1 -1
  162. package/lib/locale/id.d.ts +11 -0
  163. package/lib/locale/id.js +11 -0
  164. package/lib/locale/id.js.map +1 -1
  165. package/lib/locale/it.d.ts +11 -0
  166. package/lib/locale/it.js +11 -0
  167. package/lib/locale/it.js.map +1 -1
  168. package/lib/locale/ja.d.ts +11 -0
  169. package/lib/locale/ja.js +11 -0
  170. package/lib/locale/ja.js.map +1 -1
  171. package/lib/locale/km.d.ts +11 -0
  172. package/lib/locale/km.js +11 -0
  173. package/lib/locale/km.js.map +1 -1
  174. package/lib/locale/ko.d.ts +11 -0
  175. package/lib/locale/ko.js +11 -0
  176. package/lib/locale/ko.js.map +1 -1
  177. package/lib/locale/lt.d.ts +11 -0
  178. package/lib/locale/lt.js +11 -0
  179. package/lib/locale/lt.js.map +1 -1
  180. package/lib/locale/lv.d.ts +11 -0
  181. package/lib/locale/lv.js +11 -0
  182. package/lib/locale/lv.js.map +1 -1
  183. package/lib/locale/nl.d.ts +11 -0
  184. package/lib/locale/nl.js +11 -0
  185. package/lib/locale/nl.js.map +1 -1
  186. package/lib/locale/no.d.ts +11 -0
  187. package/lib/locale/no.js +11 -0
  188. package/lib/locale/no.js.map +1 -1
  189. package/lib/locale/pl.d.ts +11 -0
  190. package/lib/locale/pl.js +11 -0
  191. package/lib/locale/pl.js.map +1 -1
  192. package/lib/locale/pt.d.ts +11 -0
  193. package/lib/locale/pt.js +11 -0
  194. package/lib/locale/pt.js.map +1 -1
  195. package/lib/locale/ro.d.ts +11 -0
  196. package/lib/locale/ro.js +11 -0
  197. package/lib/locale/ro.js.map +1 -1
  198. package/lib/locale/ru.d.ts +11 -0
  199. package/lib/locale/ru.js +11 -0
  200. package/lib/locale/ru.js.map +1 -1
  201. package/lib/locale/sk.d.ts +11 -0
  202. package/lib/locale/sk.js +11 -0
  203. package/lib/locale/sk.js.map +1 -1
  204. package/lib/locale/sl.d.ts +11 -0
  205. package/lib/locale/sl.js +11 -0
  206. package/lib/locale/sl.js.map +1 -1
  207. package/lib/locale/sr-Cyrl.d.ts +11 -0
  208. package/lib/locale/sr-Cyrl.js +11 -0
  209. package/lib/locale/sr-Cyrl.js.map +1 -1
  210. package/lib/locale/sr-Latn.d.ts +11 -0
  211. package/lib/locale/sr-Latn.js +11 -0
  212. package/lib/locale/sr-Latn.js.map +1 -1
  213. package/lib/locale/sv.d.ts +11 -0
  214. package/lib/locale/sv.js +11 -0
  215. package/lib/locale/sv.js.map +1 -1
  216. package/lib/locale/th.d.ts +11 -0
  217. package/lib/locale/th.js +11 -0
  218. package/lib/locale/th.js.map +1 -1
  219. package/lib/locale/tr.d.ts +11 -0
  220. package/lib/locale/tr.js +11 -0
  221. package/lib/locale/tr.js.map +1 -1
  222. package/lib/locale/uk.d.ts +11 -0
  223. package/lib/locale/uk.js +11 -0
  224. package/lib/locale/uk.js.map +1 -1
  225. package/lib/locale/vi.d.ts +11 -0
  226. package/lib/locale/vi.js +11 -0
  227. package/lib/locale/vi.js.map +1 -1
  228. package/lib/locale/zh-Hans.d.ts +11 -0
  229. package/lib/locale/zh-Hans.js +11 -0
  230. package/lib/locale/zh-Hans.js.map +1 -1
  231. package/lib/locale/zh-Hant.d.ts +11 -0
  232. package/lib/locale/zh-Hant.js +11 -0
  233. package/lib/locale/zh-Hant.js.map +1 -1
  234. package/lib/util/easing.d.ts +22 -0
  235. package/lib/util/easing.js +53 -0
  236. package/lib/util/easing.js.map +1 -1
  237. package/lib/util/index.d.ts +1 -0
  238. package/lib/util/index.js +1 -0
  239. package/lib/util/index.js.map +1 -1
  240. package/lib/util/svg-arc-corners.d.ts +4 -0
  241. package/lib/util/svg-arc-corners.js +73 -0
  242. package/lib/util/svg-arc-corners.js.map +1 -0
  243. package/lib/util/timeUtils.d.ts +1 -0
  244. package/lib/util/timeUtils.js +4 -0
  245. package/lib/util/timeUtils.js.map +1 -0
  246. package/package.json +1 -1
@@ -0,0 +1,424 @@
1
+ import { createVNode as _createVNode, createElementVNode as _createElementVNode, mergeProps as _mergeProps, normalizeClass as _normalizeClass, normalizeStyle as _normalizeStyle } from "vue";
2
+ // Styles
3
+ import "./VVideo.css";
4
+
5
+ // Components
6
+ import { makeVVideoControlsProps, VVideoControls } from "./VVideoControls.js";
7
+ import { VFadeTransition } from "../../components/transitions/index.js";
8
+ import { VSpacer } from "../../components/VGrid/VSpacer.js";
9
+ import { VImg } from "../../components/VImg/VImg.js";
10
+ import { VOverlay } from "../../components/VOverlay/VOverlay.js";
11
+ import { VProgressCircular } from "../../components/VProgressCircular/VProgressCircular.js";
12
+ import { VIconBtn } from "../VIconBtn/VIconBtn.js"; // Composables
13
+ import { useDisplay } from "../../composables/index.js";
14
+ import { makeComponentProps } from "../../composables/component.js";
15
+ import { makeDensityProps, useDensity } from "../../composables/density.js";
16
+ import { makeDimensionProps, useDimension } from "../../composables/dimensions.js";
17
+ import { useElevation } from "../../composables/elevation.js";
18
+ import { forwardRefs } from "../../composables/forwardRefs.js";
19
+ import { useProxiedModel } from "../../composables/proxiedModel.js";
20
+ import { useRounded } from "../../composables/rounded.js";
21
+ import { makeThemeProps, provideTheme } from "../../composables/theme.js";
22
+ import { MaybeTransition } from "../../composables/transition.js"; // Utilities
23
+ import { nextTick, onBeforeUnmount, onMounted, ref, shallowRef, toRef, watch } from 'vue';
24
+ import { createRange, genericComponent, omit, pick, propsFactory, useRender } from "../../util/index.js"; // Types
25
+ const allowedVariants = ['background', 'player'];
26
+ export const makeVVideoProps = propsFactory({
27
+ autoplay: Boolean,
28
+ muted: Boolean,
29
+ eager: Boolean,
30
+ src: String,
31
+ type: String,
32
+ // e.g. video/mp4
33
+ image: String,
34
+ hideOverlay: Boolean,
35
+ noFullscreen: Boolean,
36
+ startAt: [Number, String],
37
+ variant: {
38
+ type: String,
39
+ default: 'player',
40
+ validator: v => allowedVariants.includes(v)
41
+ },
42
+ controlsTransition: {
43
+ type: [Boolean, String, Object],
44
+ component: VFadeTransition
45
+ },
46
+ controlsVariant: {
47
+ type: String,
48
+ default: 'default'
49
+ },
50
+ controlsProps: {
51
+ type: Object
52
+ },
53
+ rounded: [Boolean, Number, String, Array],
54
+ ...makeComponentProps(),
55
+ ...makeDensityProps(),
56
+ ...makeDimensionProps(),
57
+ ...makeThemeProps(),
58
+ ...omit(makeVVideoControlsProps(), ['fullscreen', 'variant'])
59
+ }, 'VVideo');
60
+ export const VVideo = genericComponent()({
61
+ name: 'VVideo',
62
+ inheritAttrs: false,
63
+ props: makeVVideoProps(),
64
+ emits: {
65
+ loaded: element => true,
66
+ 'update:playing': val => true,
67
+ 'update:progress': val => true,
68
+ 'update:volume': val => true
69
+ },
70
+ setup(props, _ref) {
71
+ let {
72
+ attrs,
73
+ emit,
74
+ slots
75
+ } = _ref;
76
+ const {
77
+ themeClasses
78
+ } = provideTheme(props);
79
+ const {
80
+ densityClasses
81
+ } = useDensity(props);
82
+ const {
83
+ dimensionStyles
84
+ } = useDimension(props);
85
+ const {
86
+ elevationClasses
87
+ } = useElevation(props);
88
+ const {
89
+ ssr
90
+ } = useDisplay();
91
+ const roundedForContainer = toRef(() => Array.isArray(props.rounded) ? props.rounded[0] : props.rounded);
92
+ const roundedForControls = toRef(() => Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded ?? false);
93
+ const {
94
+ roundedClasses: roundedContainerClasses
95
+ } = useRounded(roundedForContainer);
96
+ const {
97
+ roundedClasses: roundedControlsClasses
98
+ } = useRounded(roundedForControls);
99
+ const containerRef = ref();
100
+ const videoRef = ref();
101
+ const controlsRef = ref();
102
+ const playing = useProxiedModel(props, 'playing');
103
+ const progress = useProxiedModel(props, 'progress');
104
+ const volume = useProxiedModel(props, 'volume', 0, v => Number(v ?? 0));
105
+ const fullscreen = shallowRef(false);
106
+ const waiting = shallowRef(false);
107
+ const triggered = shallowRef(false);
108
+ const startAfterLoad = shallowRef(false);
109
+ const state = shallowRef(props.autoplay ? 'loading' : 'idle');
110
+ const duration = shallowRef(0);
111
+ const fullscreenEnabled = toRef(() => !props.noFullscreen && !String(attrs.controlsList ?? '').includes('nofullscreen'));
112
+ function onTimeupdate() {
113
+ const {
114
+ currentTime,
115
+ duration
116
+ } = videoRef.value;
117
+ progress.value = duration === 0 ? 0 : 100 * currentTime / duration;
118
+ }
119
+ async function onTriggered() {
120
+ await nextTick();
121
+ if (!videoRef.value) return;
122
+ videoRef.value.addEventListener('timeupdate', onTimeupdate);
123
+ videoRef.value.volume = volume.value / 100;
124
+ if (state.value !== 'loaded') {
125
+ state.value = 'loading';
126
+ }
127
+ }
128
+ function onVideoLoaded() {
129
+ state.value = 'loaded';
130
+ duration.value = videoRef.value.duration;
131
+ const startTime = Number(props.startAt ?? 0);
132
+ if (startTime && startTime <= duration.value) {
133
+ videoRef.value.currentTime = startTime;
134
+ progress.value = duration.value === 0 ? 0 : 100 * startTime / duration.value;
135
+ }
136
+ if (startAfterLoad.value) {
137
+ setTimeout(() => playing.value = true, 100);
138
+ }
139
+ emit('loaded', videoRef.value);
140
+ }
141
+ function onClick() {
142
+ if (state.value !== 'loaded') {
143
+ triggered.value = true;
144
+ startAfterLoad.value = !startAfterLoad.value;
145
+ }
146
+ }
147
+ function onKeydown(e) {
148
+ if (!videoRef.value || e.ctrlKey) return;
149
+ if (e.key.startsWith('Arrow')) {
150
+ e.preventDefault();
151
+ }
152
+ switch (true) {
153
+ case e.key === ' ':
154
+ {
155
+ if (!['A', 'BUTTON'].includes(e.target?.tagName)) {
156
+ e.preventDefault();
157
+ playing.value = !playing.value;
158
+ }
159
+ break;
160
+ }
161
+ case e.key === 'ArrowRight':
162
+ {
163
+ const step = 10 * (e.shiftKey ? 6 : 1);
164
+ videoRef.value.currentTime = Math.min(videoRef.value.currentTime + step, duration.value);
165
+ // TODO: show skip indicator
166
+ break;
167
+ }
168
+ case e.key === 'ArrowLeft':
169
+ {
170
+ const step = 10 * (e.shiftKey ? 6 : 1);
171
+ videoRef.value.currentTime = Math.max(videoRef.value.currentTime - step, 0);
172
+ // TODO: show skip indicator
173
+ break;
174
+ }
175
+ case createRange(10).map(String).includes(e.key):
176
+ {
177
+ skipTo(Number(e.key) * 10);
178
+ break;
179
+ }
180
+ case e.key === 'ArrowUp':
181
+ {
182
+ volume.value = Math.min(volume.value + 10, 100);
183
+ // TODO: show volume change indicator
184
+ break;
185
+ }
186
+ case e.key === 'ArrowDown':
187
+ {
188
+ volume.value = Math.max(volume.value - 10, 0);
189
+ // TODO: show volume change indicator
190
+ break;
191
+ }
192
+ case e.key === 'm':
193
+ {
194
+ controlsRef.value?.toggleMuted();
195
+ break;
196
+ }
197
+ case e.key === 'f':
198
+ {
199
+ toggleFullscreen();
200
+ break;
201
+ }
202
+ }
203
+ }
204
+ function skipTo(v) {
205
+ if (!videoRef.value) return;
206
+ progress.value = v;
207
+ videoRef.value.currentTime = duration.value * v / 100;
208
+ }
209
+ watch(() => props.src, v => {
210
+ progress.value = 0;
211
+ });
212
+ watch(playing, v => {
213
+ if (!videoRef.value) return;
214
+ if (v) {
215
+ videoRef.value.play();
216
+ } else {
217
+ videoRef.value.pause();
218
+ }
219
+ });
220
+ watch(volume, v => {
221
+ if (!videoRef.value) return;
222
+ videoRef.value.volume = v / 100;
223
+ });
224
+ watch(triggered, () => onTriggered(), {
225
+ once: true
226
+ });
227
+ watch(() => props.eager, v => v && (triggered.value = true), {
228
+ immediate: true
229
+ });
230
+ onMounted(() => {
231
+ if (props.autoplay && !ssr) {
232
+ triggered.value = true;
233
+ startAfterLoad.value = true;
234
+ }
235
+ });
236
+ onBeforeUnmount(() => {
237
+ videoRef.value?.removeEventListener('timeupdate', onTimeupdate);
238
+ });
239
+ function focusSlider() {
240
+ const container = videoRef.value?.closest('.v-video');
241
+ const innerSlider = container?.querySelector('[role="slider"]');
242
+ innerSlider?.focus();
243
+ }
244
+ function fullscreenExitShortcut(e) {
245
+ if (['ESC', 'f'].includes(e.key)) {
246
+ toggleFullscreen();
247
+ document.body.removeEventListener('keydown', fullscreenExitShortcut);
248
+ }
249
+ }
250
+ async function toggleFullscreen() {
251
+ if (!fullscreenEnabled.value || !document.fullscreenEnabled) {
252
+ return;
253
+ }
254
+ if (document.fullscreenElement) {
255
+ document.exitFullscreen();
256
+ onFullscreenExit();
257
+ } else {
258
+ await containerRef.value?.requestFullscreen();
259
+ document.body.addEventListener('keydown', fullscreenExitShortcut);
260
+ document.addEventListener('fullscreenchange', onFullscreenExit);
261
+ fullscreen.value = true;
262
+ }
263
+ }
264
+ function onFullscreenExit() {
265
+ // event fires with a delay after requestFullscreen(), ignore first run
266
+ if (document.fullscreenElement) return;
267
+ focusSlider();
268
+ fullscreen.value = false;
269
+ document.body.removeEventListener('keydown', fullscreenExitShortcut);
270
+ document.removeEventListener('fullscreenchange', onFullscreenExit);
271
+ }
272
+ function onVideoClick(e) {
273
+ e.preventDefault();
274
+ if (state.value === 'loaded') {
275
+ playing.value = !playing.value;
276
+ focusSlider();
277
+ }
278
+ }
279
+ function onDoubleClick(e) {
280
+ e.preventDefault();
281
+ toggleFullscreen();
282
+ }
283
+ let lastTap = 0;
284
+ function onTouchend(e) {
285
+ const now = performance.now();
286
+ if (now - lastTap < 500) {
287
+ e.preventDefault();
288
+ toggleFullscreen();
289
+ } else {
290
+ lastTap = now;
291
+ }
292
+ }
293
+ useRender(() => {
294
+ const showControls = state.value === 'loaded' && props.variant === 'player' && props.controlsVariant !== 'hidden';
295
+ const posterTransition = props.variant === 'background' ? 'poster-fade-out' : 'fade-transition';
296
+ const overlayProps = {
297
+ contained: true,
298
+ persistent: true,
299
+ contentClass: 'v-video__overlay-fill'
300
+ };
301
+ const controlsProps = {
302
+ ...VVideoControls.filterProps(omit(props, ['variant', 'rounded', 'hideVolume'])),
303
+ rounded: Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded,
304
+ fullscreen: fullscreen.value,
305
+ hideVolume: props.hideVolume || props.muted,
306
+ hideFullscreen: props.hideFullscreen || !fullscreenEnabled.value,
307
+ density: props.density,
308
+ variant: props.controlsVariant,
309
+ playing: playing.value,
310
+ progress: progress.value,
311
+ duration: duration.value,
312
+ volume: volume.value,
313
+ ...props.controlsProps
314
+ };
315
+ const controlsEventHandlers = {
316
+ onSkip: v => skipTo(v),
317
+ 'onClick:fullscreen': () => toggleFullscreen(),
318
+ 'onUpdate:playing': v => playing.value = v,
319
+ 'onUpdate:progress': v => skipTo(v),
320
+ 'onUpdate:volume': v => volume.value = v,
321
+ onClick: e => e.stopPropagation()
322
+ };
323
+ const controlslist = [attrs.controlslist, props.noFullscreen ? 'nofullscreen' : ''].filter(Boolean).join(' ');
324
+ const loadingIndicator = _createVNode(VProgressCircular, {
325
+ "indeterminate": true,
326
+ "color": props.color,
327
+ "width": "3",
328
+ "size": Math.min(100, Number(props.height) / 2 || 50)
329
+ }, null);
330
+ const overlayPlayIcon = _createVNode(VIconBtn, {
331
+ "icon": "$play",
332
+ "size": "80",
333
+ "color": "#fff",
334
+ "variant": "outlined",
335
+ "iconSize": "50",
336
+ "class": "v-video__center-icon"
337
+ }, null);
338
+ return _createElementVNode("div", {
339
+ "ref": containerRef,
340
+ "class": _normalizeClass(['v-video', `v-video--variant-${props.variant}`, `v-video--${state.value}`, {
341
+ 'v-video--playing': playing.value
342
+ }, themeClasses.value, densityClasses.value, roundedContainerClasses.value, props.class]),
343
+ "style": _normalizeStyle([props.variant === 'background' ? [] : pick(dimensionStyles.value, ['width', 'min-width', 'max-width']), props.style]),
344
+ "onKeydown": onKeydown,
345
+ "onClick": onClick
346
+ }, [_createElementVNode("div", {
347
+ "class": _normalizeClass(['v-video__content', elevationClasses.value]),
348
+ "style": _normalizeStyle([props.variant === 'background' ? [] : dimensionStyles.value])
349
+ }, [(props.eager || triggered.value) && _createElementVNode("video", _mergeProps({
350
+ "key": "video-element",
351
+ "class": ['v-video__video', roundedContainerClasses.value]
352
+ }, omit(attrs, ['controlslist', 'class', 'style']), {
353
+ "controlslist": controlslist,
354
+ "autoplay": props.autoplay,
355
+ "muted": props.muted,
356
+ "playsinline": true,
357
+ "ref": videoRef,
358
+ "onLoadeddata": onVideoLoaded,
359
+ "onPlay": () => playing.value = true,
360
+ "onPause": () => playing.value = false,
361
+ "onWaiting": () => waiting.value = true,
362
+ "onPlaying": () => waiting.value = false,
363
+ "onClick": onVideoClick,
364
+ "onDblclick": onDoubleClick,
365
+ "onTouchend": onTouchend
366
+ }), [slots.sources?.() ?? _createElementVNode("source", {
367
+ "src": props.src,
368
+ "type": props.type
369
+ }, null)]), props.variant === 'player' && !props.hideOverlay && _createVNode(VOverlay, _mergeProps({
370
+ "key": "pause-overlay",
371
+ "modelValue": state.value === 'loaded',
372
+ "opacity": "0"
373
+ }, overlayProps), {
374
+ default: () => [_createVNode(VSpacer, null, null), _createVNode(MaybeTransition, {
375
+ "name": "fade-transition"
376
+ }, {
377
+ default: () => [!playing.value && overlayPlayIcon]
378
+ }), _createVNode(VSpacer, null, null)]
379
+ }), props.variant === 'player' && !!slots.header ? _createElementVNode("div", {
380
+ "key": "header",
381
+ "class": "v-video__header"
382
+ }, [slots.header()]) : '', _createVNode(VOverlay, _mergeProps({
383
+ "key": "poster-overlay",
384
+ "modelValue": state.value !== 'loaded',
385
+ "transition": posterTransition
386
+ }, overlayProps), {
387
+ default: () => [_createVNode(VImg, {
388
+ "cover": true,
389
+ "src": props.image
390
+ }, {
391
+ default: () => [_createElementVNode("div", {
392
+ "class": _normalizeClass(['v-video__overlay-fill', ...roundedContainerClasses.value])
393
+ }, [overlayPlayIcon])]
394
+ })]
395
+ }), _createVNode(VOverlay, _mergeProps({
396
+ "key": "loading-overlay",
397
+ "modelValue": state.value === 'loading' || waiting.value,
398
+ "opacity": ".1"
399
+ }, overlayProps), {
400
+ default: () => [loadingIndicator]
401
+ })]), _createVNode(MaybeTransition, {
402
+ "key": "actions",
403
+ "transition": props.controlsTransition
404
+ }, {
405
+ default: () => [showControls && _createVNode(VVideoControls, _mergeProps({
406
+ "ref": controlsRef,
407
+ "class": roundedControlsClasses.value
408
+ }, controlsProps, controlsEventHandlers), {
409
+ default: slots.controls,
410
+ prepend: slots.prepend,
411
+ append: slots.append
412
+ })]
413
+ })]);
414
+ });
415
+ return {
416
+ video: videoRef,
417
+ ...forwardRefs({
418
+ skipTo,
419
+ toggleFullscreen
420
+ }, controlsRef)
421
+ };
422
+ }
423
+ });
424
+ //# sourceMappingURL=VVideo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VVideo.js","names":["makeVVideoControlsProps","VVideoControls","VFadeTransition","VSpacer","VImg","VOverlay","VProgressCircular","VIconBtn","useDisplay","makeComponentProps","makeDensityProps","useDensity","makeDimensionProps","useDimension","useElevation","forwardRefs","useProxiedModel","useRounded","makeThemeProps","provideTheme","MaybeTransition","nextTick","onBeforeUnmount","onMounted","ref","shallowRef","toRef","watch","createRange","genericComponent","omit","pick","propsFactory","useRender","allowedVariants","makeVVideoProps","autoplay","Boolean","muted","eager","src","String","type","image","hideOverlay","noFullscreen","startAt","Number","variant","default","validator","v","includes","controlsTransition","Object","component","controlsVariant","controlsProps","rounded","Array","VVideo","name","inheritAttrs","props","emits","loaded","element","val","setup","_ref","attrs","emit","slots","themeClasses","densityClasses","dimensionStyles","elevationClasses","ssr","roundedForContainer","isArray","roundedForControls","at","roundedClasses","roundedContainerClasses","roundedControlsClasses","containerRef","videoRef","controlsRef","playing","progress","volume","fullscreen","waiting","triggered","startAfterLoad","state","duration","fullscreenEnabled","controlsList","onTimeupdate","currentTime","value","onTriggered","addEventListener","onVideoLoaded","startTime","setTimeout","onClick","onKeydown","e","ctrlKey","key","startsWith","preventDefault","target","tagName","step","shiftKey","Math","min","max","map","skipTo","toggleMuted","toggleFullscreen","play","pause","once","immediate","removeEventListener","focusSlider","container","closest","innerSlider","querySelector","focus","fullscreenExitShortcut","document","body","fullscreenElement","exitFullscreen","onFullscreenExit","requestFullscreen","onVideoClick","onDoubleClick","lastTap","onTouchend","now","performance","showControls","posterTransition","overlayProps","contained","persistent","contentClass","filterProps","hideVolume","hideFullscreen","density","controlsEventHandlers","onSkip","onClick:fullscreen","stopPropagation","controlslist","filter","join","loadingIndicator","_createVNode","color","height","overlayPlayIcon","_createElementVNode","_normalizeClass","class","_normalizeStyle","style","_mergeProps","onPlay","onPause","onWaiting","onPlaying","sources","header","controls","prepend","append","video"],"sources":["../../../src/labs/VVideo/VVideo.tsx"],"sourcesContent":["// Styles\nimport './VVideo.sass'\n\n// Components\nimport { makeVVideoControlsProps, VVideoControls } from './VVideoControls'\nimport { VFadeTransition } from '@/components/transitions'\nimport { VSpacer } from '@/components/VGrid/VSpacer'\nimport { VImg } from '@/components/VImg/VImg'\nimport { VOverlay } from '@/components/VOverlay/VOverlay'\nimport { VProgressCircular } from '@/components/VProgressCircular/VProgressCircular'\nimport { VIconBtn } from '@/labs/VIconBtn/VIconBtn'\n\n// Composables\nimport { useDisplay } from '@/composables'\nimport { makeComponentProps } from '@/composables/component'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeDimensionProps, useDimension } from '@/composables/dimensions'\nimport { useElevation } from '@/composables/elevation'\nimport { forwardRefs } from '@/composables/forwardRefs'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { useRounded } from '@/composables/rounded'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\nimport { MaybeTransition } from '@/composables/transition'\n\n// Utilities\nimport { nextTick, onBeforeUnmount, onMounted, ref, shallowRef, toRef, watch } from 'vue'\nimport { createRange, genericComponent, omit, pick, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { Component, PropType, TransitionProps } from 'vue'\nimport type { VVideoControlsActionsSlot, VVideoControlsVariant } from './VVideoControls'\nimport type { LoaderSlotProps } from '@/composables/loader'\n\nexport type VVideoSlots = {\n header: never\n controls: VVideoControlsActionsSlot\n prepend: VVideoControlsActionsSlot\n append: VVideoControlsActionsSlot\n loader: LoaderSlotProps\n sources: never\n}\n\nconst allowedVariants = ['background', 'player'] as const\ntype Variant = typeof allowedVariants[number]\n\nexport const makeVVideoProps = propsFactory({\n autoplay: Boolean,\n muted: Boolean,\n eager: Boolean,\n src: String,\n type: String, // e.g. video/mp4\n image: String,\n hideOverlay: Boolean,\n noFullscreen: Boolean,\n startAt: [Number, String],\n variant: {\n type: String as PropType<Variant>,\n default: 'player',\n validator: (v: any) => allowedVariants.includes(v),\n },\n controlsTransition: {\n type: [Boolean, String, Object] as PropType<null | string | boolean | TransitionProps & { component?: any }>,\n component: VFadeTransition as Component,\n },\n controlsVariant: {\n type: String as PropType<VVideoControlsVariant>,\n default: 'default',\n },\n controlsProps: {\n type: Object as PropType<VVideoControls['$props']>,\n },\n rounded: [Boolean, Number, String, Array] as PropType<boolean | number | string | (boolean | number | string)[]>,\n\n ...makeComponentProps(),\n ...makeDensityProps(),\n ...makeDimensionProps(),\n ...makeThemeProps(),\n ...omit(makeVVideoControlsProps(), [\n 'fullscreen',\n 'variant',\n ]),\n}, 'VVideo')\n\nexport const VVideo = genericComponent<VVideoSlots>()({\n name: 'VVideo',\n\n inheritAttrs: false,\n\n props: makeVVideoProps(),\n\n emits: {\n loaded: (element: HTMLVideoElement) => true,\n 'update:playing': (val: boolean) => true,\n 'update:progress': (val: number) => true,\n 'update:volume': (val: number) => true,\n },\n\n setup (props, { attrs, emit, slots }) {\n const { themeClasses } = provideTheme(props)\n const { densityClasses } = useDensity(props)\n const { dimensionStyles } = useDimension(props)\n const { elevationClasses } = useElevation(props)\n const { ssr } = useDisplay()\n\n const roundedForContainer = toRef(() => Array.isArray(props.rounded) ? props.rounded[0] : props.rounded)\n const roundedForControls = toRef(() => Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded ?? false)\n const { roundedClasses: roundedContainerClasses } = useRounded(roundedForContainer)\n const { roundedClasses: roundedControlsClasses } = useRounded(roundedForControls)\n\n const containerRef = ref<HTMLDivElement>()\n const videoRef = ref<HTMLVideoElement>()\n const controlsRef = ref<VVideoControls>()\n\n const playing = useProxiedModel(props, 'playing')\n const progress = useProxiedModel(props, 'progress')\n const volume = useProxiedModel(props, 'volume', 0, (v?: number | string) => Number(v ?? 0))\n\n const fullscreen = shallowRef(false)\n const waiting = shallowRef(false)\n const triggered = shallowRef(false)\n const startAfterLoad = shallowRef(false)\n const state = shallowRef<'idle' | 'loading' | 'loaded' | 'error'>(props.autoplay ? 'loading' : 'idle')\n const duration = shallowRef(0)\n\n const fullscreenEnabled = toRef(() => !props.noFullscreen && !String(attrs.controlsList ?? '').includes('nofullscreen'))\n\n function onTimeupdate () {\n const { currentTime, duration } = videoRef.value!\n progress.value = duration === 0 ? 0 : 100 * currentTime / duration\n }\n\n async function onTriggered () {\n await nextTick()\n if (!videoRef.value) return\n videoRef.value.addEventListener('timeupdate', onTimeupdate)\n videoRef.value.volume = volume.value / 100\n if (state.value !== 'loaded') {\n state.value = 'loading'\n }\n }\n\n function onVideoLoaded () {\n state.value = 'loaded'\n duration.value = videoRef.value!.duration\n\n const startTime = Number(props.startAt ?? 0)\n if (startTime && startTime <= duration.value) {\n videoRef.value!.currentTime = startTime\n progress.value = duration.value === 0 ? 0 : 100 * startTime / duration.value\n }\n\n if (startAfterLoad.value) {\n setTimeout(() => playing.value = true, 100)\n }\n\n emit('loaded', videoRef.value!)\n }\n\n function onClick () {\n if (state.value !== 'loaded') {\n triggered.value = true\n startAfterLoad.value = !startAfterLoad.value\n }\n }\n\n function onKeydown (e: KeyboardEvent) {\n if (!videoRef.value || e.ctrlKey) return\n if (e.key.startsWith('Arrow')) {\n e.preventDefault()\n }\n switch (true) {\n case e.key === ' ': {\n if (!['A', 'BUTTON'].includes((e.target as Element)?.tagName)) {\n e.preventDefault()\n playing.value = !playing.value\n }\n break\n }\n case e.key === 'ArrowRight': {\n const step = 10 * (e.shiftKey ? 6 : 1)\n videoRef.value.currentTime = Math.min(videoRef.value.currentTime + step, duration.value)\n // TODO: show skip indicator\n break\n }\n case e.key === 'ArrowLeft': {\n const step = 10 * (e.shiftKey ? 6 : 1)\n videoRef.value.currentTime = Math.max(videoRef.value.currentTime - step, 0)\n // TODO: show skip indicator\n break\n }\n case createRange(10).map(String).includes(e.key): {\n skipTo(Number(e.key) * 10)\n break\n }\n case e.key === 'ArrowUp': {\n volume.value = Math.min(volume.value + 10, 100)\n // TODO: show volume change indicator\n break\n }\n case e.key === 'ArrowDown': {\n volume.value = Math.max(volume.value - 10, 0)\n // TODO: show volume change indicator\n break\n }\n case e.key === 'm': {\n controlsRef.value?.toggleMuted()\n break\n }\n case e.key === 'f': {\n toggleFullscreen()\n break\n }\n }\n }\n\n function skipTo (v: number) {\n if (!videoRef.value) return\n progress.value = v\n videoRef.value.currentTime = duration.value * v / 100\n }\n\n watch(() => props.src, v => {\n progress.value = 0\n })\n\n watch(playing, v => {\n if (!videoRef.value) return\n if (v) {\n videoRef.value.play()\n } else {\n videoRef.value.pause()\n }\n })\n\n watch(volume, v => {\n if (!videoRef.value) return\n videoRef.value.volume = v / 100\n })\n\n watch(triggered, () => onTriggered(), { once: true })\n\n watch(() => props.eager, v => v && (triggered.value = true), { immediate: true })\n\n onMounted(() => {\n if (props.autoplay && !ssr) {\n triggered.value = true\n startAfterLoad.value = true\n }\n })\n\n onBeforeUnmount(() => {\n videoRef.value?.removeEventListener('timeupdate', onTimeupdate)\n })\n\n function focusSlider () {\n const container = videoRef.value?.closest('.v-video') as HTMLElement\n const innerSlider = container?.querySelector('[role=\"slider\"]') as HTMLElement\n innerSlider?.focus()\n }\n\n function fullscreenExitShortcut (e: KeyboardEvent) {\n if (['ESC', 'f'].includes(e.key)) {\n toggleFullscreen()\n document.body.removeEventListener('keydown', fullscreenExitShortcut)\n }\n }\n\n async function toggleFullscreen () {\n if (!fullscreenEnabled.value || !document.fullscreenEnabled) {\n return\n }\n if (document.fullscreenElement) {\n document.exitFullscreen()\n onFullscreenExit()\n } else {\n await containerRef.value?.requestFullscreen()\n document.body.addEventListener('keydown', fullscreenExitShortcut)\n document.addEventListener('fullscreenchange', onFullscreenExit)\n fullscreen.value = true\n }\n }\n\n function onFullscreenExit () {\n // event fires with a delay after requestFullscreen(), ignore first run\n if (document.fullscreenElement) return\n\n focusSlider()\n fullscreen.value = false\n document.body.removeEventListener('keydown', fullscreenExitShortcut)\n document.removeEventListener('fullscreenchange', onFullscreenExit)\n }\n\n function onVideoClick (e: Event) {\n e.preventDefault()\n if (state.value === 'loaded') {\n playing.value = !playing.value\n focusSlider()\n }\n }\n\n function onDoubleClick (e: Event) {\n e.preventDefault()\n toggleFullscreen()\n }\n\n let lastTap = 0\n function onTouchend (e: Event) {\n const now = performance.now()\n if ((now - lastTap) < 500) {\n e.preventDefault()\n toggleFullscreen()\n } else {\n lastTap = now\n }\n }\n\n useRender(() => {\n const showControls = state.value === 'loaded' &&\n props.variant === 'player' &&\n props.controlsVariant !== 'hidden'\n\n const posterTransition = props.variant === 'background'\n ? 'poster-fade-out'\n : 'fade-transition'\n\n const overlayProps = {\n contained: true,\n persistent: true,\n contentClass: 'v-video__overlay-fill',\n }\n\n const controlsProps = {\n ...VVideoControls.filterProps(omit(props, ['variant', 'rounded', 'hideVolume'])),\n rounded: Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded,\n fullscreen: fullscreen.value,\n hideVolume: props.hideVolume || props.muted,\n hideFullscreen: props.hideFullscreen || !fullscreenEnabled.value,\n density: props.density,\n variant: props.controlsVariant,\n playing: playing.value,\n progress: progress.value,\n duration: duration.value,\n volume: volume.value,\n ...props.controlsProps,\n }\n\n const controlsEventHandlers = {\n onSkip: (v: number) => skipTo(v),\n 'onClick:fullscreen': () => toggleFullscreen(),\n 'onUpdate:playing': (v: boolean) => playing.value = v,\n 'onUpdate:progress': (v: number) => skipTo(v),\n 'onUpdate:volume': (v: number) => volume.value = v,\n onClick: (e: Event) => e.stopPropagation(),\n }\n\n const controlslist = [\n attrs.controlslist,\n props.noFullscreen ? 'nofullscreen' : '',\n ].filter(Boolean).join(' ')\n\n const loadingIndicator = (\n <VProgressCircular\n indeterminate\n color={ props.color }\n width=\"3\"\n size={ Math.min(100, Number(props.height) / 2 || 50) }\n />\n )\n\n const overlayPlayIcon = (\n <VIconBtn\n icon=\"$play\"\n size=\"80\"\n color=\"#fff\"\n variant=\"outlined\"\n iconSize=\"50\"\n class=\"v-video__center-icon\"\n />\n )\n\n return (\n <div\n ref={ containerRef }\n class={[\n 'v-video',\n `v-video--variant-${props.variant}`,\n `v-video--${state.value}`,\n { 'v-video--playing': playing.value },\n themeClasses.value,\n densityClasses.value,\n roundedContainerClasses.value,\n props.class,\n ]}\n style={[\n props.variant === 'background' ? [] : pick(dimensionStyles.value, ['width', 'min-width', 'max-width']),\n props.style,\n ]}\n onKeydown={ onKeydown }\n onClick={ onClick }\n >\n <div\n class={[\n 'v-video__content',\n elevationClasses.value,\n ]}\n style={[\n props.variant === 'background' ? [] : dimensionStyles.value,\n ]}\n >\n { (props.eager || triggered.value) && (\n <video\n key=\"video-element\"\n class={[\n 'v-video__video',\n roundedContainerClasses.value,\n ]}\n { ...omit(attrs, ['controlslist', 'class', 'style']) }\n controlslist={ controlslist }\n autoplay={ props.autoplay }\n muted={ props.muted }\n playsinline\n ref={ videoRef }\n onLoadeddata={ onVideoLoaded }\n onPlay={ () => playing.value = true }\n onPause={ () => playing.value = false }\n onWaiting={ () => waiting.value = true }\n onPlaying={ () => waiting.value = false }\n onClick={ onVideoClick }\n onDblclick={ onDoubleClick }\n onTouchend={ onTouchend }\n >\n { slots.sources?.() ?? <source src={ props.src } type={ props.type } /> }\n </video>\n )}\n { props.variant === 'player' && !props.hideOverlay && (\n <VOverlay\n key=\"pause-overlay\"\n modelValue={ state.value === 'loaded' }\n opacity=\"0\"\n { ...overlayProps }\n >\n <VSpacer />\n <MaybeTransition name=\"fade-transition\">\n { !playing.value && overlayPlayIcon }\n </MaybeTransition>\n <VSpacer />\n </VOverlay>\n )}\n { props.variant === 'player' && !!slots.header\n ? (\n <div key=\"header\" class=\"v-video__header\">\n { slots.header() }\n </div>\n )\n : '' }\n <VOverlay\n key=\"poster-overlay\"\n modelValue={ state.value !== 'loaded' }\n transition={ posterTransition }\n { ...overlayProps }\n >\n <VImg cover src={ props.image }>\n <div\n class={[\n 'v-video__overlay-fill',\n ...roundedContainerClasses.value,\n ]}\n >\n { overlayPlayIcon }\n </div>\n </VImg>\n </VOverlay>\n <VOverlay\n key=\"loading-overlay\"\n modelValue={ state.value === 'loading' || waiting.value }\n opacity=\".1\"\n { ...overlayProps }\n >\n { loadingIndicator }\n </VOverlay>\n </div>\n <MaybeTransition key=\"actions\" transition={ props.controlsTransition }>\n { showControls && (\n <VVideoControls\n ref={ controlsRef }\n class={ roundedControlsClasses.value }\n { ...controlsProps }\n { ...controlsEventHandlers }\n >\n {{\n default: slots.controls,\n prepend: slots.prepend,\n append: slots.append,\n }}\n </VVideoControls>\n )}\n </MaybeTransition>\n </div>\n )\n })\n\n return {\n video: videoRef,\n ...forwardRefs({\n skipTo,\n toggleFullscreen,\n }, controlsRef),\n }\n },\n})\n\nexport type VVideo = InstanceType<typeof VVideo>\n"],"mappings":"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","ignoreList":[]}