MCPcopy
hub / github.com/vuetifyjs/vuetify / setup

Function setup

packages/vuetify/src/labs/VVideo/VVideo.tsx:104–579  ·  view source on GitHub ↗
(props, { attrs, emit, slots })

Source from the content-addressed store, hash-verified

102 },
103
104 setup (props, { attrs, emit, slots }) {
105 const { themeClasses } = provideTheme(props)
106 const { densityClasses } = useDensity(props)
107 const { dimensionStyles } = useDimension(props)
108 const { elevationClasses } = useElevation(props)
109 const { ssr } = useDisplay()
110
111 const roundedForContainer = toRef(() => Array.isArray(props.rounded) ? props.rounded[0] : props.rounded)
112 const roundedForControls = toRef(() => Array.isArray(props.rounded) ? props.rounded.at(-1) : props.rounded ?? false)
113 const { roundedClasses: roundedContainerClasses, roundedStyles: roundedContainerStyles } = useRounded(roundedForContainer)
114 const { roundedClasses: roundedControlsClasses, roundedStyles: roundedControlsStyles } = useRounded(roundedForControls)
115
116 const containerRef = ref<HTMLDivElement>()
117 const videoRef = ref<HTMLVideoElement>()
118 const controlsRef = ref<VVideoControls>()
119
120 const playing = useProxiedModel(props, 'playing')
121 const progress = useProxiedModel(props, 'progress')
122 const volume = useProxiedModel(props, 'volume', 0, (v?: number | string) => Number(v ?? 0))
123
124 const fullscreen = shallowRef(false)
125 const waiting = shallowRef(false)
126 const triggered = shallowRef(false)
127 const startAfterLoad = shallowRef(false)
128 const error = useProxiedModel(props, 'error')
129 const state = shallowRef<'idle' | 'loading' | 'loaded' | 'error'>(props.autoplay ? 'loading' : 'idle')
130 const duration = shallowRef(0)
131
132 const fullscreenEnabled = toRef(() => !props.noFullscreen && !String(attrs.controlsList ?? '').includes('nofullscreen'))
133
134 function onTimeupdate () {
135 const { currentTime, duration } = videoRef.value!
136 progress.value = duration === 0 ? 0 : 100 * currentTime / duration
137 }
138
139 async function onTriggered () {
140 await nextTick()
141 if (!videoRef.value) return
142 videoRef.value.addEventListener('timeupdate', onTimeupdate)
143 videoRef.value.volume = volume.value / 100
144 if (state.value !== 'loaded') {
145 state.value = 'loading'
146 }
147 }
148
149 function onVideoLoaded () {
150 state.value = 'loaded'
151 duration.value = videoRef.value!.duration
152
153 const startTime = Number(props.startAt ?? 0)
154 if (startTime && startTime <= duration.value) {
155 videoRef.value!.currentTime = startTime
156 progress.value = duration.value === 0 ? 0 : 100 * startTime / duration.value
157 }
158
159 if (startAfterLoad.value) {
160 setTimeout(() => playing.value = true, 100)
161 }

Callers

nothing calls this directly

Calls 15

provideThemeFunction · 0.90
useDensityFunction · 0.90
useDimensionFunction · 0.90
useElevationFunction · 0.90
useDisplayFunction · 0.90
useRoundedFunction · 0.90
refFunction · 0.90
useProxiedModelFunction · 0.90
useRenderFunction · 0.90
omitFunction · 0.90
pickFunction · 0.90
forwardRefsFunction · 0.90

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…