@vuetify/nightly 3.9.2-master.2025-07-22 → 3.9.2-master.2025-07-24

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 (237) hide show
  1. package/CHANGELOG.md +32 -3
  2. package/dist/_component-variables-labs.sass +2 -1
  3. package/dist/json/attributes.json +3014 -2750
  4. package/dist/json/importMap-labs.json +34 -22
  5. package/dist/json/importMap.json +168 -168
  6. package/dist/json/tags.json +81 -0
  7. package/dist/json/web-types.json +6647 -5536
  8. package/dist/vuetify-labs.cjs +765 -23
  9. package/dist/vuetify-labs.css +4300 -3958
  10. package/dist/vuetify-labs.d.ts +6519 -844
  11. package/dist/vuetify-labs.esm.js +766 -24
  12. package/dist/vuetify-labs.esm.js.map +1 -1
  13. package/dist/vuetify-labs.js +765 -23
  14. package/dist/vuetify-labs.min.css +2 -2
  15. package/dist/vuetify.cjs +50 -16
  16. package/dist/vuetify.cjs.map +1 -1
  17. package/dist/vuetify.css +5769 -5762
  18. package/dist/vuetify.d.ts +96 -82
  19. package/dist/vuetify.esm.js +50 -16
  20. package/dist/vuetify.esm.js.map +1 -1
  21. package/dist/vuetify.js +50 -16
  22. package/dist/vuetify.js.map +1 -1
  23. package/dist/vuetify.min.css +2 -2
  24. package/dist/vuetify.min.js +276 -274
  25. package/dist/vuetify.min.js.map +1 -1
  26. package/lib/components/VBottomSheet/VBottomSheet.d.ts +6 -6
  27. package/lib/components/VCarousel/VCarousel.d.ts +7 -13
  28. package/lib/components/VCarousel/VCarousel.js.map +1 -1
  29. package/lib/components/VColorPicker/VColorPicker.css +1 -0
  30. package/lib/components/VColorPicker/VColorPicker.sass +1 -0
  31. package/lib/components/VDataTable/VDataTableHeaders.js +0 -1
  32. package/lib/components/VDataTable/VDataTableHeaders.js.map +1 -1
  33. package/lib/components/VDialog/VDialog.d.ts +6 -6
  34. package/lib/components/VFileInput/VFileInput.css +3 -0
  35. package/lib/components/VFileInput/VFileInput.sass +3 -0
  36. package/lib/components/VOverlay/VOverlay.js +1 -0
  37. package/lib/components/VOverlay/VOverlay.js.map +1 -1
  38. package/lib/components/VOverlay/scrollStrategies.d.ts +1 -0
  39. package/lib/components/VOverlay/scrollStrategies.js +6 -4
  40. package/lib/components/VOverlay/scrollStrategies.js.map +1 -1
  41. package/lib/components/VProgressLinear/VProgressLinear.css +4 -1
  42. package/lib/components/VProgressLinear/VProgressLinear.js +2 -1
  43. package/lib/components/VProgressLinear/VProgressLinear.js.map +1 -1
  44. package/lib/components/VProgressLinear/VProgressLinear.sass +5 -2
  45. package/lib/components/VRangeSlider/VRangeSlider.d.ts +13 -0
  46. package/lib/components/VSlider/VSlider.d.ts +13 -0
  47. package/lib/components/VSlider/VSlider.js +3 -1
  48. package/lib/components/VSlider/VSlider.js.map +1 -1
  49. package/lib/components/VSlider/VSliderThumb.d.ts +13 -0
  50. package/lib/components/VSlider/VSliderThumb.js +2 -0
  51. package/lib/components/VSlider/VSliderThumb.js.map +1 -1
  52. package/lib/components/VSlider/slider.d.ts +6 -0
  53. package/lib/components/VSlider/slider.js +2 -0
  54. package/lib/components/VSlider/slider.js.map +1 -1
  55. package/lib/components/VTextField/VTextField.js +2 -2
  56. package/lib/components/VTextField/VTextField.js.map +1 -1
  57. package/lib/components/VTreeview/VTreeview.d.ts +7 -7
  58. package/lib/components/VTreeview/VTreeview.js +0 -1
  59. package/lib/components/VTreeview/VTreeview.js.map +1 -1
  60. package/lib/components/VTreeview/VTreeviewChildren.d.ts +13 -0
  61. package/lib/components/VTreeview/VTreeviewChildren.js +2 -1
  62. package/lib/components/VTreeview/VTreeviewChildren.js.map +1 -1
  63. package/lib/components/index.js +1 -1
  64. package/lib/components/index.js.map +1 -1
  65. package/lib/composables/date/adapters/vuetify.js +8 -2
  66. package/lib/composables/date/adapters/vuetify.js.map +1 -1
  67. package/lib/entry-bundler.js +1 -1
  68. package/lib/framework.d.ts +59 -55
  69. package/lib/framework.js +1 -1
  70. package/lib/iconsets/fa.js +9 -1
  71. package/lib/iconsets/fa.js.map +1 -1
  72. package/lib/iconsets/fa4.js +9 -1
  73. package/lib/iconsets/fa4.js.map +1 -1
  74. package/lib/iconsets/md.js +9 -1
  75. package/lib/iconsets/md.js.map +1 -1
  76. package/lib/iconsets/mdi-svg.js +9 -1
  77. package/lib/iconsets/mdi-svg.js.map +1 -1
  78. package/lib/iconsets/mdi.js +9 -1
  79. package/lib/iconsets/mdi.js.map +1 -1
  80. package/lib/labs/VFileUpload/VFileUploadItem.js +1 -1
  81. package/lib/labs/VFileUpload/VFileUploadItem.js.map +1 -1
  82. package/lib/labs/VStepperVertical/VStepperVerticalItem.css +1 -0
  83. package/lib/labs/VStepperVertical/VStepperVerticalItem.sass +1 -0
  84. package/lib/labs/VVideo/VVideo.css +319 -0
  85. package/lib/labs/VVideo/VVideo.d.ts +6932 -0
  86. package/lib/labs/VVideo/VVideo.js +424 -0
  87. package/lib/labs/VVideo/VVideo.js.map +1 -0
  88. package/lib/labs/VVideo/VVideo.sass +301 -0
  89. package/lib/labs/VVideo/VVideoControls.d.ts +3524 -0
  90. package/lib/labs/VVideo/VVideoControls.js +232 -0
  91. package/lib/labs/VVideo/VVideoControls.js.map +1 -0
  92. package/lib/labs/VVideo/VVideoVolume.d.ts +3088 -0
  93. package/lib/labs/VVideo/VVideoVolume.js +90 -0
  94. package/lib/labs/VVideo/VVideoVolume.js.map +1 -0
  95. package/lib/labs/VVideo/_variables.scss +58 -0
  96. package/lib/labs/VVideo/index.d.ts +3 -0
  97. package/lib/labs/VVideo/index.js +4 -0
  98. package/lib/labs/VVideo/index.js.map +1 -0
  99. package/lib/labs/components.d.ts +1 -0
  100. package/lib/labs/components.js +1 -0
  101. package/lib/labs/components.js.map +1 -1
  102. package/lib/locale/af.d.ts +11 -0
  103. package/lib/locale/af.js +11 -0
  104. package/lib/locale/af.js.map +1 -1
  105. package/lib/locale/ar.d.ts +11 -0
  106. package/lib/locale/ar.js +11 -0
  107. package/lib/locale/ar.js.map +1 -1
  108. package/lib/locale/az.d.ts +11 -0
  109. package/lib/locale/az.js +11 -0
  110. package/lib/locale/az.js.map +1 -1
  111. package/lib/locale/bg.d.ts +11 -0
  112. package/lib/locale/bg.js +11 -0
  113. package/lib/locale/bg.js.map +1 -1
  114. package/lib/locale/ca.d.ts +11 -0
  115. package/lib/locale/ca.js +11 -0
  116. package/lib/locale/ca.js.map +1 -1
  117. package/lib/locale/ckb.d.ts +11 -0
  118. package/lib/locale/ckb.js +11 -0
  119. package/lib/locale/ckb.js.map +1 -1
  120. package/lib/locale/cs.d.ts +11 -0
  121. package/lib/locale/cs.js +11 -0
  122. package/lib/locale/cs.js.map +1 -1
  123. package/lib/locale/da.d.ts +11 -0
  124. package/lib/locale/da.js +11 -0
  125. package/lib/locale/da.js.map +1 -1
  126. package/lib/locale/de.d.ts +11 -0
  127. package/lib/locale/de.js +11 -0
  128. package/lib/locale/de.js.map +1 -1
  129. package/lib/locale/el.d.ts +11 -0
  130. package/lib/locale/el.js +11 -0
  131. package/lib/locale/el.js.map +1 -1
  132. package/lib/locale/en.d.ts +11 -0
  133. package/lib/locale/en.js +11 -0
  134. package/lib/locale/en.js.map +1 -1
  135. package/lib/locale/es.d.ts +11 -0
  136. package/lib/locale/es.js +11 -0
  137. package/lib/locale/es.js.map +1 -1
  138. package/lib/locale/et.d.ts +11 -0
  139. package/lib/locale/et.js +11 -0
  140. package/lib/locale/et.js.map +1 -1
  141. package/lib/locale/fa.d.ts +11 -0
  142. package/lib/locale/fa.js +11 -0
  143. package/lib/locale/fa.js.map +1 -1
  144. package/lib/locale/fi.d.ts +11 -0
  145. package/lib/locale/fi.js +11 -0
  146. package/lib/locale/fi.js.map +1 -1
  147. package/lib/locale/fr.d.ts +11 -0
  148. package/lib/locale/fr.js +11 -0
  149. package/lib/locale/fr.js.map +1 -1
  150. package/lib/locale/he.d.ts +11 -0
  151. package/lib/locale/he.js +11 -0
  152. package/lib/locale/he.js.map +1 -1
  153. package/lib/locale/hr.d.ts +11 -0
  154. package/lib/locale/hr.js +11 -0
  155. package/lib/locale/hr.js.map +1 -1
  156. package/lib/locale/hu.d.ts +11 -0
  157. package/lib/locale/hu.js +11 -0
  158. package/lib/locale/hu.js.map +1 -1
  159. package/lib/locale/id.d.ts +11 -0
  160. package/lib/locale/id.js +11 -0
  161. package/lib/locale/id.js.map +1 -1
  162. package/lib/locale/it.d.ts +11 -0
  163. package/lib/locale/it.js +11 -0
  164. package/lib/locale/it.js.map +1 -1
  165. package/lib/locale/ja.d.ts +11 -0
  166. package/lib/locale/ja.js +11 -0
  167. package/lib/locale/ja.js.map +1 -1
  168. package/lib/locale/km.d.ts +11 -0
  169. package/lib/locale/km.js +11 -0
  170. package/lib/locale/km.js.map +1 -1
  171. package/lib/locale/ko.d.ts +11 -0
  172. package/lib/locale/ko.js +11 -0
  173. package/lib/locale/ko.js.map +1 -1
  174. package/lib/locale/lt.d.ts +11 -0
  175. package/lib/locale/lt.js +11 -0
  176. package/lib/locale/lt.js.map +1 -1
  177. package/lib/locale/lv.d.ts +11 -0
  178. package/lib/locale/lv.js +11 -0
  179. package/lib/locale/lv.js.map +1 -1
  180. package/lib/locale/nl.d.ts +11 -0
  181. package/lib/locale/nl.js +11 -0
  182. package/lib/locale/nl.js.map +1 -1
  183. package/lib/locale/no.d.ts +11 -0
  184. package/lib/locale/no.js +11 -0
  185. package/lib/locale/no.js.map +1 -1
  186. package/lib/locale/pl.d.ts +11 -0
  187. package/lib/locale/pl.js +11 -0
  188. package/lib/locale/pl.js.map +1 -1
  189. package/lib/locale/pt.d.ts +11 -0
  190. package/lib/locale/pt.js +11 -0
  191. package/lib/locale/pt.js.map +1 -1
  192. package/lib/locale/ro.d.ts +11 -0
  193. package/lib/locale/ro.js +11 -0
  194. package/lib/locale/ro.js.map +1 -1
  195. package/lib/locale/ru.d.ts +11 -0
  196. package/lib/locale/ru.js +11 -0
  197. package/lib/locale/ru.js.map +1 -1
  198. package/lib/locale/sk.d.ts +11 -0
  199. package/lib/locale/sk.js +11 -0
  200. package/lib/locale/sk.js.map +1 -1
  201. package/lib/locale/sl.d.ts +11 -0
  202. package/lib/locale/sl.js +11 -0
  203. package/lib/locale/sl.js.map +1 -1
  204. package/lib/locale/sr-Cyrl.d.ts +11 -0
  205. package/lib/locale/sr-Cyrl.js +11 -0
  206. package/lib/locale/sr-Cyrl.js.map +1 -1
  207. package/lib/locale/sr-Latn.d.ts +11 -0
  208. package/lib/locale/sr-Latn.js +11 -0
  209. package/lib/locale/sr-Latn.js.map +1 -1
  210. package/lib/locale/sv.d.ts +11 -0
  211. package/lib/locale/sv.js +11 -0
  212. package/lib/locale/sv.js.map +1 -1
  213. package/lib/locale/th.d.ts +11 -0
  214. package/lib/locale/th.js +11 -0
  215. package/lib/locale/th.js.map +1 -1
  216. package/lib/locale/tr.d.ts +11 -0
  217. package/lib/locale/tr.js +11 -0
  218. package/lib/locale/tr.js.map +1 -1
  219. package/lib/locale/uk.d.ts +11 -0
  220. package/lib/locale/uk.js +11 -0
  221. package/lib/locale/uk.js.map +1 -1
  222. package/lib/locale/vi.d.ts +11 -0
  223. package/lib/locale/vi.js +11 -0
  224. package/lib/locale/vi.js.map +1 -1
  225. package/lib/locale/zh-Hans.d.ts +11 -0
  226. package/lib/locale/zh-Hans.js +11 -0
  227. package/lib/locale/zh-Hans.js.map +1 -1
  228. package/lib/locale/zh-Hant.d.ts +11 -0
  229. package/lib/locale/zh-Hant.js +11 -0
  230. package/lib/locale/zh-Hant.js.map +1 -1
  231. package/lib/util/index.d.ts +1 -0
  232. package/lib/util/index.js +1 -0
  233. package/lib/util/index.js.map +1 -1
  234. package/lib/util/timeUtils.d.ts +1 -0
  235. package/lib/util/timeUtils.js +4 -0
  236. package/lib/util/timeUtils.js.map +1 -0
  237. package/package.json +1 -1
@@ -0,0 +1,232 @@
1
+ import { Fragment as _Fragment, resolveDirective as _resolveDirective, createVNode as _createVNode, withDirectives as _withDirectives, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, createTextVNode as _createTextVNode, mergeProps as _mergeProps, normalizeStyle as _normalizeStyle } from "vue";
2
+ /* eslint-disable complexity */
3
+ // Components
4
+ import { VVideoVolume } from "./VVideoVolume.js";
5
+ import { VDefaultsProvider } from "../../components/VDefaultsProvider/VDefaultsProvider.js";
6
+ import { VSpacer } from "../../components/VGrid/VSpacer.js";
7
+ import { VSlider } from "../../components/VSlider/VSlider.js";
8
+ import { VIconBtn } from "../VIconBtn/VIconBtn.js"; // Composables
9
+ import { useLocale } from "../../composables/index.js";
10
+ import { useBackgroundColor } from "../../composables/color.js";
11
+ import { makeDensityProps, useDensity } from "../../composables/density.js";
12
+ import { makeElevationProps, useElevation } from "../../composables/elevation.js";
13
+ import { useProxiedModel } from "../../composables/proxiedModel.js";
14
+ import { makeThemeProps, provideTheme } from "../../composables/theme.js"; // Utilities
15
+ import { computed, shallowRef } from 'vue';
16
+ import { formatTime, genericComponent, propsFactory, useRender } from "../../util/index.js"; // Types
17
+ const allowedVariants = ['hidden', 'default', 'tube', 'mini'];
18
+ export const makeVVideoControlsProps = propsFactory({
19
+ color: String,
20
+ backgroundColor: String,
21
+ trackColor: String,
22
+ playing: Boolean,
23
+ hidePlay: Boolean,
24
+ hideVolume: Boolean,
25
+ hideFullscreen: Boolean,
26
+ fullscreen: Boolean,
27
+ floating: Boolean,
28
+ splitTime: Boolean,
29
+ pills: Boolean,
30
+ detached: Boolean,
31
+ progress: {
32
+ type: Number,
33
+ default: 0
34
+ },
35
+ duration: {
36
+ type: Number,
37
+ default: 0
38
+ },
39
+ volume: [Number, String],
40
+ variant: {
41
+ type: String,
42
+ default: 'default',
43
+ validator: v => allowedVariants.includes(v)
44
+ },
45
+ volumeProps: Object,
46
+ ...makeDensityProps(),
47
+ ...makeElevationProps(),
48
+ ...makeThemeProps()
49
+ }, 'VVideoControls');
50
+ export const VVideoControls = genericComponent()({
51
+ name: 'VVideoControls',
52
+ props: makeVVideoControlsProps(),
53
+ emits: {
54
+ 'update:playing': val => true,
55
+ 'update:progress': val => true,
56
+ 'update:volume': val => true,
57
+ skip: val => true,
58
+ 'click:fullscreen': () => true
59
+ },
60
+ setup(props, _ref) {
61
+ let {
62
+ emit,
63
+ slots
64
+ } = _ref;
65
+ const {
66
+ t
67
+ } = useLocale();
68
+ const {
69
+ themeClasses
70
+ } = provideTheme(props);
71
+ const {
72
+ densityClasses
73
+ } = useDensity(props);
74
+ const {
75
+ elevationClasses
76
+ } = useElevation(props);
77
+ const {
78
+ backgroundColorClasses,
79
+ backgroundColorStyles
80
+ } = useBackgroundColor(() => {
81
+ const fallbackBackground = props.detached ? 'surface' : undefined;
82
+ return props.backgroundColor ?? fallbackBackground;
83
+ });
84
+ const playing = useProxiedModel(props, 'playing');
85
+ const progress = useProxiedModel(props, 'progress');
86
+ const volume = useProxiedModel(props, 'volume', 0, v => Number(v ?? 0));
87
+ const lastVolume = shallowRef();
88
+ const currentTime = computed(() => {
89
+ const secondsElapsed = Math.round(props.progress / 100 * props.duration);
90
+ return {
91
+ elapsed: formatTime(secondsElapsed),
92
+ remaining: formatTime(props.duration - secondsElapsed),
93
+ total: formatTime(props.duration)
94
+ };
95
+ });
96
+ const labels = computed(() => {
97
+ const playIconLocaleKey = playing.value ? 'pause' : 'play';
98
+ const volumeIconLocaleKey = props.volumeProps?.inline ? volume.value ? 'mute' : 'unmute' : 'showVolume';
99
+ const fullscreenIconLocaleKey = props.fullscreen ? 'exitFullscreen' : 'enterFullscreen';
100
+ return {
101
+ seek: t('$vuetify.video.seek'),
102
+ volume: t('$vuetify.video.volume'),
103
+ playAction: t(`$vuetify.video.${playIconLocaleKey}`),
104
+ volumeAction: t(`$vuetify.video.${volumeIconLocaleKey}`),
105
+ fullscreenAction: t(`$vuetify.video.${fullscreenIconLocaleKey}`)
106
+ };
107
+ });
108
+ function play() {
109
+ playing.value = true;
110
+ }
111
+ function pause() {
112
+ playing.value = false;
113
+ }
114
+ function skipTo(v) {
115
+ progress.value = v;
116
+ }
117
+ function toggleMuted() {
118
+ if (volume.value) {
119
+ lastVolume.value = volume.value;
120
+ volume.value = 0;
121
+ } else {
122
+ volume.value = lastVolume.value ?? 100;
123
+ }
124
+ }
125
+ function toggleFullscreen() {
126
+ emit('click:fullscreen');
127
+ }
128
+ useRender(() => {
129
+ const sizes = props.pills ? [42, 36, 30] : [32, 28, 24];
130
+ const innerDefaults = {
131
+ VIconBtn: {
132
+ size: props.density === 'compact' ? sizes[2] : props.density === 'comfortable' ? sizes[1] : sizes[0],
133
+ iconSize: props.density === 'compact' ? 20 : props.density === 'comfortable' ? 24 : 26,
134
+ variant: 'text',
135
+ color: props.color
136
+ },
137
+ VSlider: {
138
+ thumbSize: props.variant === 'tube' ? 10 : 16,
139
+ hideDetails: true
140
+ }
141
+ };
142
+ const regularBtnSize = innerDefaults.VIconBtn.size;
143
+ const playBtnSize = props.pills ? regularBtnSize + 8 : regularBtnSize;
144
+ const pillClasses = ['v-video-control__pill', props.pills ? elevationClasses.value : []];
145
+ const slotProps = {
146
+ play,
147
+ pause,
148
+ playing: playing.value,
149
+ progress: progress.value,
150
+ currentTime: currentTime.value,
151
+ skipTo,
152
+ volume,
153
+ toggleMuted,
154
+ fullscreen: props.fullscreen,
155
+ toggleFullscreen,
156
+ labels: labels.value
157
+ };
158
+ return _createElementVNode("div", {
159
+ "class": _normalizeClass(['v-video-controls', `v-video-controls--variant-${props.variant}`, {
160
+ 'v-video-controls--pills': props.pills
161
+ }, {
162
+ 'v-video-controls--detached': props.detached
163
+ }, {
164
+ 'v-video-controls--floating': props.floating
165
+ }, {
166
+ 'v-video-controls--split-time': props.splitTime
167
+ }, backgroundColorClasses.value, props.detached && !props.pills ? elevationClasses.value : [], densityClasses.value, themeClasses.value]),
168
+ "style": _normalizeStyle([backgroundColorStyles.value, {
169
+ '--v-video-controls-pill-height': `${regularBtnSize}px`
170
+ }])
171
+ }, [_createVNode(VDefaultsProvider, {
172
+ "defaults": innerDefaults
173
+ }, {
174
+ default: () => [slots.default?.(slotProps) ?? _createElementVNode(_Fragment, null, [props.variant !== 'mini' && _createElementVNode(_Fragment, null, [!props.hidePlay && _createElementVNode("div", {
175
+ "class": _normalizeClass([pillClasses, 'v-video__action-play'])
176
+ }, [_withDirectives(_createVNode(VIconBtn, {
177
+ "icon": playing.value ? '$pause' : '$play',
178
+ "size": playBtnSize,
179
+ "aria-label": labels.value.playAction,
180
+ "onClick": () => playing.value = !playing.value
181
+ }, null), [[_resolveDirective("tooltip"), labels.value.playAction, 'top']])]), slots.prepend && _createElementVNode("div", {
182
+ "class": _normalizeClass(pillClasses)
183
+ }, [slots.prepend(slotProps)]), props.splitTime ? _createElementVNode("span", {
184
+ "class": _normalizeClass([pillClasses, 'v-video__time'])
185
+ }, [currentTime.value.elapsed]) : props.variant !== 'default' ? _createElementVNode("span", {
186
+ "class": _normalizeClass([pillClasses, 'v-video__time'])
187
+ }, [currentTime.value.elapsed, _createTextVNode(" / "), currentTime.value.total]) : '', _createVNode(VSlider, {
188
+ "modelValue": props.progress,
189
+ "noKeyboard": true,
190
+ "color": props.trackColor ?? props.color,
191
+ "trackColor": props.variant === 'tube' ? 'white' : undefined,
192
+ "class": "v-video__track",
193
+ "thumbLabel": "always",
194
+ "aria-label": labels.value.seek,
195
+ "onUpdate:modelValue": skipTo
196
+ }, {
197
+ 'thumb-label': () => currentTime.value.elapsed
198
+ }), props.variant === 'tube' && _createVNode(VSpacer, null, null), props.splitTime ? _createElementVNode("span", {
199
+ "class": _normalizeClass([pillClasses, 'v-video__time'])
200
+ }, [currentTime.value.remaining]) : '']), props.variant === 'mini' && _createElementVNode(_Fragment, null, [_createVNode(VSpacer, null, null), slots.prepend && _createElementVNode("div", {
201
+ "class": _normalizeClass(pillClasses)
202
+ }, [slots.prepend(slotProps)]), !props.hidePlay && _createElementVNode("div", {
203
+ "class": _normalizeClass([pillClasses, 'v-video__action-play'])
204
+ }, [_withDirectives(_createVNode(VIconBtn, {
205
+ "icon": playing.value ? '$pause' : '$play',
206
+ "size": playBtnSize,
207
+ "aria-label": labels.value.playAction,
208
+ "onClick": () => playing.value = !playing.value
209
+ }, null), [[_resolveDirective("tooltip"), labels.value.playAction, 'top']])])]), (!props.hideVolume || !props.hideFullscreen || slots.append) && _createElementVNode("div", {
210
+ "class": _normalizeClass(pillClasses)
211
+ }, [!props.hideVolume && _createVNode(VVideoVolume, _mergeProps({
212
+ "key": "volume-control",
213
+ "sliderProps": {
214
+ color: props.color
215
+ },
216
+ "modelValue": volume.value,
217
+ "label": labels.value.volumeAction,
218
+ "onUpdate:modelValue": v => volume.value = v,
219
+ "onClick": () => props.volumeProps?.inline && toggleMuted()
220
+ }, props.volumeProps), null), slots.append?.(slotProps), !props.hideFullscreen && _withDirectives(_createVNode(VIconBtn, {
221
+ "icon": props.fullscreen ? '$fullscreenExit' : '$fullscreen',
222
+ "aria-label": labels.value.fullscreenAction,
223
+ "onClick": toggleFullscreen
224
+ }, null), [[_resolveDirective("tooltip"), labels.value.fullscreenAction, 'top']])]), props.variant === 'mini' && _createVNode(VSpacer, null, null)])]
225
+ })]);
226
+ });
227
+ return {
228
+ toggleMuted
229
+ };
230
+ }
231
+ });
232
+ //# sourceMappingURL=VVideoControls.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VVideoControls.js","names":["VVideoVolume","VDefaultsProvider","VSpacer","VSlider","VIconBtn","useLocale","useBackgroundColor","makeDensityProps","useDensity","makeElevationProps","useElevation","useProxiedModel","makeThemeProps","provideTheme","computed","shallowRef","formatTime","genericComponent","propsFactory","useRender","allowedVariants","makeVVideoControlsProps","color","String","backgroundColor","trackColor","playing","Boolean","hidePlay","hideVolume","hideFullscreen","fullscreen","floating","splitTime","pills","detached","progress","type","Number","default","duration","volume","variant","validator","v","includes","volumeProps","Object","VVideoControls","name","props","emits","val","skip","click:fullscreen","setup","_ref","emit","slots","t","themeClasses","densityClasses","elevationClasses","backgroundColorClasses","backgroundColorStyles","fallbackBackground","undefined","lastVolume","currentTime","secondsElapsed","Math","round","elapsed","remaining","total","labels","playIconLocaleKey","value","volumeIconLocaleKey","inline","fullscreenIconLocaleKey","seek","playAction","volumeAction","fullscreenAction","play","pause","skipTo","toggleMuted","toggleFullscreen","sizes","innerDefaults","size","density","iconSize","thumbSize","hideDetails","regularBtnSize","playBtnSize","pillClasses","slotProps","_createElementVNode","_normalizeClass","_normalizeStyle","_createVNode","_Fragment","_withDirectives","onClick","_resolveDirective","prepend","_createTextVNode","thumb-label","append","_mergeProps"],"sources":["../../../src/labs/VVideo/VVideoControls.tsx"],"sourcesContent":["/* eslint-disable complexity */\n\n// Components\nimport { VVideoVolume } from './VVideoVolume'\nimport { VDefaultsProvider } from '@/components/VDefaultsProvider/VDefaultsProvider'\nimport { VSpacer } from '@/components/VGrid/VSpacer'\nimport { VSlider } from '@/components/VSlider/VSlider'\nimport { VIconBtn } from '@/labs/VIconBtn/VIconBtn'\n\n// Composables\nimport { useLocale } from '@/composables'\nimport { useBackgroundColor } from '@/composables/color'\nimport { makeDensityProps, useDensity } from '@/composables/density'\nimport { makeElevationProps, useElevation } from '@/composables/elevation'\nimport { useProxiedModel } from '@/composables/proxiedModel'\nimport { makeThemeProps, provideTheme } from '@/composables/theme'\n\n// Utilities\nimport { computed, shallowRef } from 'vue'\nimport { formatTime, genericComponent, propsFactory, useRender } from '@/util'\n\n// Types\nimport type { PropType, Ref } from 'vue'\n\nexport type VVideoControlsActionsSlot = {\n play: () => void\n pause: () => void\n skipTo: (v: number) => void\n volume: Ref<number>\n playing: boolean\n progress: number\n toggleMuted: () => void\n fullscreen: boolean\n toggleFullscreen: () => void\n labels: Record<string, string>\n}\n\nexport type VVideoControlsSlots = {\n default: VVideoControlsActionsSlot\n prepend: VVideoControlsActionsSlot\n append: VVideoControlsActionsSlot\n}\n\nconst allowedVariants = ['hidden', 'default', 'tube', 'mini'] as const\nexport type VVideoControlsVariant = typeof allowedVariants[number]\n\nexport const makeVVideoControlsProps = propsFactory({\n color: String,\n backgroundColor: String,\n trackColor: String,\n playing: Boolean,\n hidePlay: Boolean,\n hideVolume: Boolean,\n hideFullscreen: Boolean,\n fullscreen: Boolean,\n floating: Boolean,\n splitTime: Boolean,\n pills: Boolean,\n detached: Boolean,\n progress: {\n type: Number,\n default: 0,\n },\n duration: {\n type: Number,\n default: 0,\n },\n volume: [Number, String],\n variant: {\n type: String as PropType<VVideoControlsVariant>,\n default: 'default',\n validator: (v: any) => allowedVariants.includes(v),\n },\n volumeProps: Object as PropType<Pick<VVideoVolume['$props'], 'direction' | 'inline' | 'sliderProps' | 'menuProps'>>,\n\n ...makeDensityProps(),\n ...makeElevationProps(),\n ...makeThemeProps(),\n}, 'VVideoControls')\n\nexport const VVideoControls = genericComponent<VVideoControlsSlots>()({\n name: 'VVideoControls',\n\n props: makeVVideoControlsProps(),\n\n emits: {\n 'update:playing': (val: boolean) => true,\n 'update:progress': (val: number) => true,\n 'update:volume': (val: number) => true,\n skip: (val: number) => true,\n 'click:fullscreen': () => true,\n },\n\n setup (props, { emit, slots }) {\n const { t } = useLocale()\n const { themeClasses } = provideTheme(props)\n const { densityClasses } = useDensity(props)\n const { elevationClasses } = useElevation(props)\n\n const { backgroundColorClasses, backgroundColorStyles } = useBackgroundColor(() => {\n const fallbackBackground = props.detached ? 'surface' : undefined\n return props.backgroundColor ?? fallbackBackground\n })\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 const lastVolume = shallowRef<number>()\n\n const currentTime = computed(() => {\n const secondsElapsed = Math.round(props.progress / 100 * props.duration)\n return {\n elapsed: formatTime(secondsElapsed),\n remaining: formatTime(props.duration - secondsElapsed),\n total: formatTime(props.duration),\n }\n })\n\n const labels = computed(() => {\n const playIconLocaleKey = playing.value ? 'pause' : 'play'\n const volumeIconLocaleKey = props.volumeProps?.inline ? (volume.value ? 'mute' : 'unmute') : 'showVolume'\n const fullscreenIconLocaleKey = props.fullscreen ? 'exitFullscreen' : 'enterFullscreen'\n return {\n seek: t('$vuetify.video.seek'),\n volume: t('$vuetify.video.volume'),\n playAction: t(`$vuetify.video.${playIconLocaleKey}`),\n volumeAction: t(`$vuetify.video.${volumeIconLocaleKey}`),\n fullscreenAction: t(`$vuetify.video.${fullscreenIconLocaleKey}`),\n }\n })\n\n function play () {\n playing.value = true\n }\n\n function pause () {\n playing.value = false\n }\n\n function skipTo (v: number) {\n progress.value = v\n }\n\n function toggleMuted () {\n if (volume.value) {\n lastVolume.value = volume.value\n volume.value = 0\n } else {\n volume.value = lastVolume.value ?? 100\n }\n }\n\n function toggleFullscreen () {\n emit('click:fullscreen')\n }\n\n useRender(() => {\n const sizes = props.pills\n ? [42, 36, 30]\n : [32, 28, 24]\n\n const innerDefaults = {\n VIconBtn: {\n size: props.density === 'compact' ? sizes[2]\n : props.density === 'comfortable' ? sizes[1]\n : sizes[0],\n iconSize: props.density === 'compact' ? 20\n : props.density === 'comfortable' ? 24\n : 26,\n variant: 'text',\n color: props.color,\n },\n VSlider: {\n thumbSize: props.variant === 'tube' ? 10 : 16,\n hideDetails: true,\n },\n }\n\n const regularBtnSize = innerDefaults.VIconBtn.size\n const playBtnSize = props.pills ? (regularBtnSize + 8) : regularBtnSize\n\n const pillClasses = [\n 'v-video-control__pill',\n props.pills ? elevationClasses.value : [],\n ]\n\n const slotProps = {\n play,\n pause,\n playing: playing.value,\n progress: progress.value,\n currentTime: currentTime.value,\n skipTo,\n volume,\n toggleMuted,\n fullscreen: props.fullscreen,\n toggleFullscreen,\n labels: labels.value,\n }\n\n return (\n <div\n class={[\n 'v-video-controls',\n `v-video-controls--variant-${props.variant}`,\n { 'v-video-controls--pills': props.pills },\n { 'v-video-controls--detached': props.detached },\n { 'v-video-controls--floating': props.floating },\n { 'v-video-controls--split-time': props.splitTime },\n backgroundColorClasses.value,\n props.detached && !props.pills ? elevationClasses.value : [],\n densityClasses.value,\n themeClasses.value,\n ]}\n style={[\n backgroundColorStyles.value,\n { '--v-video-controls-pill-height': `${regularBtnSize}px` },\n ]}\n >\n <VDefaultsProvider defaults={ innerDefaults }>\n { slots.default?.(slotProps) ?? (\n <>\n { props.variant !== 'mini' && (\n <>\n { !props.hidePlay && (\n <div class={[pillClasses, 'v-video__action-play']}>\n <VIconBtn\n icon={ playing.value ? '$pause' : '$play' }\n size={ playBtnSize }\n aria-label={ labels.value.playAction }\n v-tooltip={[labels.value.playAction, 'top']}\n onClick={ () => playing.value = !playing.value }\n />\n </div>\n )}\n { slots.prepend && (\n <div class={ pillClasses }>\n { slots.prepend(slotProps) }\n </div>\n )}\n { props.splitTime\n ? <span class={[pillClasses, 'v-video__time']}>{ currentTime.value.elapsed }</span>\n : props.variant !== 'default'\n ? <span class={[pillClasses, 'v-video__time']}>{ currentTime.value.elapsed } / { currentTime.value.total }</span>\n : ''\n }\n <VSlider\n modelValue={ props.progress }\n noKeyboard\n color={ props.trackColor ?? props.color }\n trackColor={ props.variant === 'tube' ? 'white' : undefined }\n class=\"v-video__track\"\n thumbLabel=\"always\"\n aria-label={ labels.value.seek }\n onUpdate:modelValue={ skipTo }\n >\n {{\n 'thumb-label': () => currentTime.value.elapsed,\n }}\n </VSlider>\n { props.variant === 'tube' && <VSpacer /> }\n { props.splitTime\n ? <span class={[pillClasses, 'v-video__time']}>{ currentTime.value.remaining }</span>\n : ''\n }\n </>\n )}\n { props.variant === 'mini' && (\n <>\n <VSpacer />\n { slots.prepend && (\n <div class={ pillClasses }>\n { slots.prepend(slotProps) }\n </div>\n )}\n { !props.hidePlay && (\n <div class={[pillClasses, 'v-video__action-play']}>\n <VIconBtn\n icon={ playing.value ? '$pause' : '$play' }\n size={ playBtnSize }\n aria-label={ labels.value.playAction }\n v-tooltip={[labels.value.playAction, 'top']}\n onClick={ () => playing.value = !playing.value }\n />\n </div>\n )}\n </>\n )}\n { (!props.hideVolume || !props.hideFullscreen || slots.append) && (\n <div class={ pillClasses }>\n { !props.hideVolume && (\n <VVideoVolume\n key=\"volume-control\"\n sliderProps={{ color: props.color }}\n modelValue={ volume.value }\n label={ labels.value.volumeAction }\n onUpdate:modelValue={ v => volume.value = v }\n onClick={ () => props.volumeProps?.inline && toggleMuted() }\n { ...props.volumeProps }\n />\n )}\n { slots.append?.(slotProps) }\n { !props.hideFullscreen && (\n <VIconBtn\n icon={ props.fullscreen ? '$fullscreenExit' : '$fullscreen' }\n aria-label={ labels.value.fullscreenAction }\n v-tooltip={[labels.value.fullscreenAction, 'top']}\n onClick={ toggleFullscreen }\n />\n )}\n </div>\n )}\n\n { props.variant === 'mini' && (<VSpacer />) }\n </>\n )}\n </VDefaultsProvider>\n </div>\n )\n })\n\n return {\n toggleMuted,\n }\n },\n})\n\nexport type VVideoControls = InstanceType<typeof VVideoControls>\n"],"mappings":"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","ignoreList":[]}