@nuxt/scripts 0.11.1 → 0.11.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 (37) hide show
  1. package/README.md +71 -71
  2. package/dist/client/200.html +9 -9
  3. package/dist/client/404.html +9 -9
  4. package/dist/client/_nuxt/BwTzWwlf.js +21 -0
  5. package/dist/client/_nuxt/{BSA2bgdb.js → CJaqyBTv.js} +1 -1
  6. package/dist/client/_nuxt/{CtQNcfGE.js → XZaFTD3R.js} +1 -1
  7. package/dist/client/_nuxt/builds/latest.json +1 -1
  8. package/dist/client/_nuxt/builds/meta/ccdd3650-9466-4597-a4e4-6464577f0b3e.json +1 -0
  9. package/dist/client/_nuxt/{entry.ipQkUTQD.css → entry.CJckMUzn.css} +1 -1
  10. package/dist/client/_nuxt/error-404.kHO_CZtx.css +1 -0
  11. package/dist/client/_nuxt/error-500.CICk5yq7.css +1 -0
  12. package/dist/client/_nuxt/{BFM-Ncmx.js → gy_iwf94.js} +1 -1
  13. package/dist/client/index.html +9 -9
  14. package/dist/module.json +1 -1
  15. package/dist/runtime/components/ScriptAriaLoadingIndicator.vue +5 -5
  16. package/dist/runtime/components/ScriptCarbonAds.vue +83 -83
  17. package/dist/runtime/components/ScriptCrisp.vue +94 -94
  18. package/dist/runtime/components/ScriptGoogleAdsense.vue +93 -93
  19. package/dist/runtime/components/ScriptGoogleMaps.vue +470 -469
  20. package/dist/runtime/components/ScriptIntercom.vue +103 -103
  21. package/dist/runtime/components/ScriptLemonSqueezy.vue +52 -52
  22. package/dist/runtime/components/ScriptLoadingIndicator.vue +22 -22
  23. package/dist/runtime/components/ScriptStripePricingTable.vue +74 -74
  24. package/dist/runtime/components/ScriptVimeoPlayer.vue +288 -289
  25. package/dist/runtime/components/ScriptYouTubePlayer.vue +215 -215
  26. package/dist/runtime/composables/useScriptEventPage.js +1 -2
  27. package/dist/runtime/registry/clarity.d.ts +1 -1
  28. package/dist/runtime/registry/cloudflare-web-analytics.d.ts +1 -1
  29. package/dist/runtime/registry/google-adsense.js +1 -1
  30. package/dist/runtime/registry/google-maps.d.ts +1 -1
  31. package/dist/runtime/registry/google-maps.js +4 -2
  32. package/dist/runtime/types.d.ts +3 -10
  33. package/package.json +11 -12
  34. package/dist/client/_nuxt/DuCkB5R-.js +0 -21
  35. package/dist/client/_nuxt/builds/meta/6161796c-413c-4c03-ac47-cad81a701b23.json +0 -1
  36. package/dist/client/_nuxt/error-404.BdjopNsg.css +0 -1
  37. package/dist/client/_nuxt/error-500.Bd7Z7Q7I.css +0 -1
@@ -1,291 +1,290 @@
1
- <script setup lang="ts">
2
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
- // @ts-nocheck
4
-
5
- /// <reference types="vimeo__player" />
6
- import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'
7
- import type { HTMLAttributes, ImgHTMLAttributes } from 'vue'
8
- import { defu } from 'defu'
9
- import { useAsyncData } from 'nuxt/app'
10
- import { useHead } from '@unhead/vue'
11
- import type { ElementScriptTrigger } from '../types'
12
- import { useScriptTriggerElement } from '../composables/useScriptTriggerElement'
13
- import { useScriptVimeoPlayer } from '../registry/vimeo-player'
14
- import ScriptAriaLoadingIndicator from './ScriptAriaLoadingIndicator.vue'
15
-
16
- interface VimeoOptions {
17
- // copied from @types/vimeo__player
18
- id?: number | undefined
19
- url?: string | undefined
20
- autopause?: boolean | undefined
21
- autoplay?: boolean | undefined
22
- background?: boolean | undefined
23
- byline?: boolean | undefined
24
- color?: string | undefined
25
- controls?: boolean | undefined
26
- dnt?: boolean | undefined
27
- height?: number | undefined
28
-
29
- interactive_params?: string | undefined
30
- keyboard?: boolean | undefined
31
- loop?: boolean | undefined
32
- maxheight?: number | undefined
33
- maxwidth?: number | undefined
34
- muted?: boolean | undefined
35
- pip?: boolean | undefined
36
- playsinline?: boolean | undefined
37
- portrait?: boolean | undefined
38
- responsive?: boolean | undefined
39
- speed?: boolean | undefined
40
- quality?: Vimeo.VimeoVideoQuality | undefined
41
- texttrack?: string | undefined
42
- title?: boolean | undefined
43
- transparent?: boolean | undefined
44
- width?: number | undefined
45
- }
46
-
47
- const props = withDefaults(defineProps<{
48
- // custom
49
- trigger?: ElementScriptTrigger
50
- placeholderAttrs?: ImgHTMLAttributes
51
- rootAttrs?: HTMLAttributes
52
- aboveTheFold?: boolean
53
- vimeoOptions?: VimeoOptions
54
- id?: number | undefined
55
- url?: string | undefined
56
- }>(), {
57
- trigger: 'mousedown',
58
- })
59
-
60
- const emits = defineEmits<TEmits>()
61
-
62
- type EventMap<E extends keyof Vimeo.EventMap> = [event: Vimeo.EventMap[E], player: Vimeo]
63
-
64
- // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
65
- type TEmits = {
66
- play: EventMap<'play'>
67
- playing: EventMap<'playing'>
68
- pause: EventMap<'pause'>
69
- ended: EventMap<'ended'>
70
- timeupdate: EventMap<'timeupdate'>
71
- progress: EventMap<'progress'>
72
- seeking: EventMap<'seeking'>
73
- seeked: EventMap<'seeked'>
74
- texttrackchange: EventMap<'texttrackchange'>
75
- chapterchange: EventMap<'chapterchange'>
76
- cuechange: EventMap<'cuechange'>
77
- cuepoint: EventMap<'cuepoint'>
78
- volumechange: EventMap<'volumechange'>
79
- playbackratechange: EventMap<'playbackratechange'>
80
- bufferstart: EventMap<'bufferstart'>
81
- bufferend: EventMap<'bufferend'>
82
- error: EventMap<'error'>
83
- loaded: EventMap<'loaded'>
84
- durationchange: EventMap<'durationchange'>
85
- fullscreenchange: EventMap<'fullscreenchange'>
86
- qualitychange: EventMap<'qualitychange'>
87
- camerachange: EventMap<'camerachange'>
88
- resize: EventMap<'resize'>
89
- enterpictureinpicture: EventMap<'enterpictureinpicture'>
90
- leavepictureinpicture: EventMap<'leavepictureinpicture'>
91
- }
92
-
93
- const events: (keyof TEmits)[] = [
94
- 'play',
95
- 'playing',
96
- 'pause',
97
- 'ended',
98
- 'timeupdate',
99
- 'progress',
100
- 'seeking',
101
- 'seeked',
102
- 'texttrackchange',
103
- 'chapterchange',
104
- 'cuechange',
105
- 'cuepoint',
106
- 'volumechange',
107
- 'playbackratechange',
108
- 'bufferstart',
109
- 'bufferend',
110
- 'error',
111
- 'loaded',
112
- 'durationchange',
113
- 'fullscreenchange',
114
- 'qualitychange',
115
- 'camerachange',
116
- 'resize',
117
- 'enterpictureinpicture',
118
- 'leavepictureinpicture',
119
- ]
120
-
121
- const elVimeo = ref()
122
- const rootEl = ref()
123
-
124
- const trigger = useScriptTriggerElement({ trigger: props.trigger, el: rootEl })
125
- let clickTriggered = false
126
- if (props.trigger === 'mousedown' && trigger instanceof Promise) {
127
- trigger.then((val) => {
128
- if (val) {
129
- clickTriggered = true
130
- }
131
- })
132
- }
133
- const ready = ref(false)
134
- const { onLoaded, status } = useScriptVimeoPlayer({
135
- scriptOptions: {
136
- trigger,
137
- },
138
- })
139
-
140
- if (import.meta.server) {
141
- // dns-prefetch https://i.vimeocdn.com
142
- useHead({
143
- link: [
144
- {
145
- rel: props.aboveTheFold ? 'preconnect' : 'dns-prefetch',
146
- href: 'https://i.vimeocdn.com',
147
- },
148
- ],
149
- })
150
- }
151
-
152
- const id = computed(() => {
153
- return props.vimeoOptions?.id || props.id
154
- })
155
-
156
- const { data: payload } = useAsyncData(
157
- `vimeo-embed:${id.value}`,
158
- // TODO ideally we cache this
159
- () => $fetch(`https://vimeo.com/api/v2/video/${id.value}.json`).then(res => (res as any)[0]),
160
- {
161
- watch: [id],
162
- },
163
- )
164
-
165
- const placeholder = computed(() => payload.value?.thumbnail_large)
166
-
167
- let player: Vimeo | undefined
168
- // we can't directly expose the player as vue will break the proxy
169
- defineExpose({
170
- play: () => player?.play(),
171
- pause: () => player?.pause(),
172
- getDuration: () => player?.getDuration(),
173
- getCurrentTime: () => player?.getCurrentTime(),
174
- setCurrentTime: (time: number) => player?.setCurrentTime(time),
175
- getVolume: () => player?.getVolume(),
176
- setVolume: (volume: number) => player?.setVolume(volume),
177
- getPaused: () => player?.getPaused(),
178
- getEnded: () => player?.getEnded(),
179
- getLoop: () => player?.getLoop(),
180
- setLoop: (loop: boolean) => player?.setLoop(loop),
181
- getPlaybackRate: () => player?.getPlaybackRate(),
182
- setPlaybackRate: (rate: number) => player?.setPlaybackRate(rate),
183
- })
184
-
185
- const width = computed(() => {
186
- return props.vimeoOptions?.width || elVimeo.value?.parentNode?.offsetWidth || 640
187
- })
188
-
189
- const height = computed(() => {
190
- return props.vimeoOptions?.height || elVimeo.value?.parentNode?.offsetHeight || 480
191
- })
192
-
193
- onMounted(() => {
194
- // @ts-ignore failing for end users
195
- onLoaded(async ({ Vimeo }) => {
196
- const vimeoOptions = props.vimeoOptions || {}
197
- if (!vimeoOptions.id && props.id) {
198
- vimeoOptions.id = props.id
199
- }
200
- if (!vimeoOptions.url && props.url) {
201
- vimeoOptions.url = props.url
202
- }
203
- vimeoOptions.width = width.value
204
- vimeoOptions.height = height.value
205
- player = new Vimeo.Player(elVimeo.value, vimeoOptions)
206
- if (clickTriggered) {
207
- player!.play()
208
- clickTriggered = false
209
- }
210
- for (const event of events) {
211
- player!.on(event, (e: EventMap<typeof event>) => {
212
- // @ts-expect-error ts isn't able to infer the correct event type
213
- emits(event, e, player)
214
- if (event === 'loaded')
215
- ready.value = true
216
- })
217
- }
218
- })
219
- })
220
-
221
- watch(() => props.id, (v) => {
222
- if (v) {
223
- player?.loadVideo(Number(v))
224
- }
225
- })
226
- watch(status, (status) => {
227
- if (status === 'error') {
228
- // @ts-expect-error untyped
229
- emits('error')
230
- }
231
- })
232
-
233
- const rootAttrs = computed(() => {
234
- return defu(props.rootAttrs, {
235
- 'aria-busy': status.value === 'loading',
236
- 'aria-label': status.value === 'awaitingLoad'
237
- ? 'Vimeo Player - Placeholder'
238
- : status.value === 'loading'
239
- ? 'Vimeo Player - Loading'
240
- : 'Vimeo Player - Loaded',
241
- 'aria-live': 'polite',
242
- 'role': 'application',
243
- 'style': {
244
- maxWidth: '100%',
245
- width: `auto`,
246
- height: 'auto',
247
- aspectRatio: `16/9`,
248
- position: 'relative',
249
- backgroundColor: 'black',
250
- },
251
- ...(trigger instanceof Promise ? trigger.ssrAttrs || {} : {}),
252
- }) as HTMLAttributes
253
- })
254
-
255
- const placeholderAttrs = computed(() => {
256
- return defu(props.placeholderAttrs, {
257
- src: placeholder.value,
258
- alt: '',
259
- loading: props.aboveTheFold ? 'eager' : 'lazy',
260
- // @ts-expect-error untyped
261
- fetchpriority: props.aboveTheFold ? 'high' : undefined,
262
- style: {
263
- cursor: 'pointer',
264
- width: '100%',
265
- objectFit: 'contain',
266
- height: '100%',
267
- },
268
- } satisfies ImgHTMLAttributes)
269
- })
270
-
271
- onBeforeUnmount(() => player?.unload())
272
- </script>
273
-
274
- <template>
275
- <div ref="rootEl" v-bind="rootAttrs">
276
- <div v-show="ready" ref="elVimeo" class="vimeo-player" />
277
- <slot v-if="!ready" v-bind="payload" :placeholder="placeholder" name="placeholder">
278
- <img v-if="placeholder" v-bind="placeholderAttrs">
279
- </slot>
280
- <slot v-if="status === 'loading'" name="loading">
281
- <ScriptAriaLoadingIndicator color="white" />
282
- </slot>
283
- <slot v-if="status === 'awaitingLoad'" name="awaitingLoad" />
284
- <slot v-else-if="status === 'error'" name="error" />
285
- <slot />
286
- </div>
287
- </template>
288
-
1
+ <script setup lang="ts">
2
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
+ // @ts-nocheck
4
+
5
+ /// <reference types="vimeo__player" />
6
+ import { computed, onBeforeUnmount, onMounted, ref, watch } from 'vue'
7
+ import type { HTMLAttributes, ImgHTMLAttributes } from 'vue'
8
+ import { defu } from 'defu'
9
+ import { useAsyncData, useHead } from 'nuxt/app'
10
+ import type { ElementScriptTrigger } from '../types'
11
+ import { useScriptTriggerElement } from '../composables/useScriptTriggerElement'
12
+ import { useScriptVimeoPlayer } from '../registry/vimeo-player'
13
+ import ScriptAriaLoadingIndicator from './ScriptAriaLoadingIndicator.vue'
14
+
15
+ interface VimeoOptions {
16
+ // copied from @types/vimeo__player
17
+ id?: number | undefined
18
+ url?: string | undefined
19
+ autopause?: boolean | undefined
20
+ autoplay?: boolean | undefined
21
+ background?: boolean | undefined
22
+ byline?: boolean | undefined
23
+ color?: string | undefined
24
+ controls?: boolean | undefined
25
+ dnt?: boolean | undefined
26
+ height?: number | undefined
27
+
28
+ interactive_params?: string | undefined
29
+ keyboard?: boolean | undefined
30
+ loop?: boolean | undefined
31
+ maxheight?: number | undefined
32
+ maxwidth?: number | undefined
33
+ muted?: boolean | undefined
34
+ pip?: boolean | undefined
35
+ playsinline?: boolean | undefined
36
+ portrait?: boolean | undefined
37
+ responsive?: boolean | undefined
38
+ speed?: boolean | undefined
39
+ quality?: Vimeo.VimeoVideoQuality | undefined
40
+ texttrack?: string | undefined
41
+ title?: boolean | undefined
42
+ transparent?: boolean | undefined
43
+ width?: number | undefined
44
+ }
45
+
46
+ const props = withDefaults(defineProps<{
47
+ // custom
48
+ trigger?: ElementScriptTrigger
49
+ placeholderAttrs?: ImgHTMLAttributes
50
+ rootAttrs?: HTMLAttributes
51
+ aboveTheFold?: boolean
52
+ vimeoOptions?: VimeoOptions
53
+ id?: number | undefined
54
+ url?: string | undefined
55
+ }>(), {
56
+ trigger: 'mousedown',
57
+ })
58
+
59
+ const emits = defineEmits<TEmits>()
60
+
61
+ type EventMap<E extends keyof Vimeo.EventMap> = [event: Vimeo.EventMap[E], player: Vimeo]
62
+
63
+ // eslint-disable-next-line @typescript-eslint/consistent-type-definitions
64
+ type TEmits = {
65
+ play: EventMap<'play'>
66
+ playing: EventMap<'playing'>
67
+ pause: EventMap<'pause'>
68
+ ended: EventMap<'ended'>
69
+ timeupdate: EventMap<'timeupdate'>
70
+ progress: EventMap<'progress'>
71
+ seeking: EventMap<'seeking'>
72
+ seeked: EventMap<'seeked'>
73
+ texttrackchange: EventMap<'texttrackchange'>
74
+ chapterchange: EventMap<'chapterchange'>
75
+ cuechange: EventMap<'cuechange'>
76
+ cuepoint: EventMap<'cuepoint'>
77
+ volumechange: EventMap<'volumechange'>
78
+ playbackratechange: EventMap<'playbackratechange'>
79
+ bufferstart: EventMap<'bufferstart'>
80
+ bufferend: EventMap<'bufferend'>
81
+ error: EventMap<'error'>
82
+ loaded: EventMap<'loaded'>
83
+ durationchange: EventMap<'durationchange'>
84
+ fullscreenchange: EventMap<'fullscreenchange'>
85
+ qualitychange: EventMap<'qualitychange'>
86
+ camerachange: EventMap<'camerachange'>
87
+ resize: EventMap<'resize'>
88
+ enterpictureinpicture: EventMap<'enterpictureinpicture'>
89
+ leavepictureinpicture: EventMap<'leavepictureinpicture'>
90
+ }
91
+
92
+ const events: (keyof TEmits)[] = [
93
+ 'play',
94
+ 'playing',
95
+ 'pause',
96
+ 'ended',
97
+ 'timeupdate',
98
+ 'progress',
99
+ 'seeking',
100
+ 'seeked',
101
+ 'texttrackchange',
102
+ 'chapterchange',
103
+ 'cuechange',
104
+ 'cuepoint',
105
+ 'volumechange',
106
+ 'playbackratechange',
107
+ 'bufferstart',
108
+ 'bufferend',
109
+ 'error',
110
+ 'loaded',
111
+ 'durationchange',
112
+ 'fullscreenchange',
113
+ 'qualitychange',
114
+ 'camerachange',
115
+ 'resize',
116
+ 'enterpictureinpicture',
117
+ 'leavepictureinpicture',
118
+ ]
119
+
120
+ const elVimeo = ref()
121
+ const rootEl = ref()
122
+
123
+ const trigger = useScriptTriggerElement({ trigger: props.trigger, el: rootEl })
124
+ let clickTriggered = false
125
+ if (props.trigger === 'mousedown' && trigger instanceof Promise) {
126
+ trigger.then((val) => {
127
+ if (val) {
128
+ clickTriggered = true
129
+ }
130
+ })
131
+ }
132
+ const ready = ref(false)
133
+ const { onLoaded, status } = useScriptVimeoPlayer({
134
+ scriptOptions: {
135
+ trigger,
136
+ },
137
+ })
138
+
139
+ if (import.meta.server) {
140
+ // dns-prefetch https://i.vimeocdn.com
141
+ useHead({
142
+ link: [
143
+ {
144
+ rel: props.aboveTheFold ? 'preconnect' : 'dns-prefetch',
145
+ href: 'https://i.vimeocdn.com',
146
+ },
147
+ ],
148
+ })
149
+ }
150
+
151
+ const id = computed(() => {
152
+ return props.vimeoOptions?.id || props.id
153
+ })
154
+
155
+ const { data: payload } = useAsyncData(
156
+ `vimeo-embed:${id.value}`,
157
+ // TODO ideally we cache this
158
+ () => $fetch(`https://vimeo.com/api/v2/video/${id.value}.json`).then(res => (res as any)[0]),
159
+ {
160
+ watch: [id],
161
+ },
162
+ )
163
+
164
+ const placeholder = computed(() => payload.value?.thumbnail_large)
165
+
166
+ let player: Vimeo | undefined
167
+ // we can't directly expose the player as vue will break the proxy
168
+ defineExpose({
169
+ play: () => player?.play(),
170
+ pause: () => player?.pause(),
171
+ getDuration: () => player?.getDuration(),
172
+ getCurrentTime: () => player?.getCurrentTime(),
173
+ setCurrentTime: (time: number) => player?.setCurrentTime(time),
174
+ getVolume: () => player?.getVolume(),
175
+ setVolume: (volume: number) => player?.setVolume(volume),
176
+ getPaused: () => player?.getPaused(),
177
+ getEnded: () => player?.getEnded(),
178
+ getLoop: () => player?.getLoop(),
179
+ setLoop: (loop: boolean) => player?.setLoop(loop),
180
+ getPlaybackRate: () => player?.getPlaybackRate(),
181
+ setPlaybackRate: (rate: number) => player?.setPlaybackRate(rate),
182
+ })
183
+
184
+ const width = computed(() => {
185
+ return props.vimeoOptions?.width || elVimeo.value?.parentNode?.offsetWidth || 640
186
+ })
187
+
188
+ const height = computed(() => {
189
+ return props.vimeoOptions?.height || elVimeo.value?.parentNode?.offsetHeight || 480
190
+ })
191
+
192
+ onMounted(() => {
193
+ // @ts-ignore failing for end users
194
+ onLoaded(async ({ Vimeo }) => {
195
+ const vimeoOptions = props.vimeoOptions || {}
196
+ if (!vimeoOptions.id && props.id) {
197
+ vimeoOptions.id = props.id
198
+ }
199
+ if (!vimeoOptions.url && props.url) {
200
+ vimeoOptions.url = props.url
201
+ }
202
+ vimeoOptions.width = width.value
203
+ vimeoOptions.height = height.value
204
+ player = new Vimeo.Player(elVimeo.value, vimeoOptions)
205
+ if (clickTriggered) {
206
+ player!.play()
207
+ clickTriggered = false
208
+ }
209
+ for (const event of events) {
210
+ player!.on(event, (e: EventMap<typeof event>) => {
211
+ // @ts-expect-error ts isn't able to infer the correct event type
212
+ emits(event, e, player)
213
+ if (event === 'loaded')
214
+ ready.value = true
215
+ })
216
+ }
217
+ })
218
+ })
219
+
220
+ watch(() => props.id, (v) => {
221
+ if (v) {
222
+ player?.loadVideo(Number(v))
223
+ }
224
+ })
225
+ watch(status, (status) => {
226
+ if (status === 'error') {
227
+ // @ts-expect-error untyped
228
+ emits('error')
229
+ }
230
+ })
231
+
232
+ const rootAttrs = computed(() => {
233
+ return defu(props.rootAttrs, {
234
+ 'aria-busy': status.value === 'loading',
235
+ 'aria-label': status.value === 'awaitingLoad'
236
+ ? 'Vimeo Player - Placeholder'
237
+ : status.value === 'loading'
238
+ ? 'Vimeo Player - Loading'
239
+ : 'Vimeo Player - Loaded',
240
+ 'aria-live': 'polite',
241
+ 'role': 'application',
242
+ 'style': {
243
+ maxWidth: '100%',
244
+ width: `auto`,
245
+ height: 'auto',
246
+ aspectRatio: `16/9`,
247
+ position: 'relative',
248
+ backgroundColor: 'black',
249
+ },
250
+ ...(trigger instanceof Promise ? trigger.ssrAttrs || {} : {}),
251
+ }) as HTMLAttributes
252
+ })
253
+
254
+ const placeholderAttrs = computed(() => {
255
+ return defu(props.placeholderAttrs, {
256
+ src: placeholder.value,
257
+ alt: '',
258
+ loading: props.aboveTheFold ? 'eager' : 'lazy',
259
+ // @ts-expect-error untyped
260
+ fetchpriority: props.aboveTheFold ? 'high' : undefined,
261
+ style: {
262
+ cursor: 'pointer',
263
+ width: '100%',
264
+ objectFit: 'contain',
265
+ height: '100%',
266
+ },
267
+ } satisfies ImgHTMLAttributes)
268
+ })
269
+
270
+ onBeforeUnmount(() => player?.unload())
271
+ </script>
272
+
273
+ <template>
274
+ <div ref="rootEl" v-bind="rootAttrs">
275
+ <div v-show="ready" ref="elVimeo" class="vimeo-player" />
276
+ <slot v-if="!ready" v-bind="payload" :placeholder="placeholder" name="placeholder">
277
+ <img v-if="placeholder" v-bind="placeholderAttrs">
278
+ </slot>
279
+ <slot v-if="status === 'loading'" name="loading">
280
+ <ScriptAriaLoadingIndicator color="white" />
281
+ </slot>
282
+ <slot v-if="status === 'awaitingLoad'" name="awaitingLoad" />
283
+ <slot v-else-if="status === 'error'" name="error" />
284
+ <slot />
285
+ </div>
286
+ </template>
287
+
289
288
  <style>
290
289
  .vimeo-player iframe{aspect-ratio:16/9;height:auto;max-width:100%!important;width:100%}
291
- </style>
290
+ </style>