@nuxt/scripts 0.11.5 → 0.11.6

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 (50) hide show
  1. package/dist/client/200.html +9 -9
  2. package/dist/client/404.html +9 -9
  3. package/dist/client/_nuxt/{Bo1SWr6k.js → C347yIJI.js} +1 -1
  4. package/dist/client/_nuxt/DhL_UpCd.js +1 -0
  5. package/dist/client/_nuxt/Di440A2l.js +1 -0
  6. package/dist/client/_nuxt/V79VpDdr.js +21 -0
  7. package/dist/client/_nuxt/builds/latest.json +1 -1
  8. package/dist/client/_nuxt/builds/meta/3e09fd1b-e587-4ed5-a851-8fd373eda48a.json +1 -0
  9. package/dist/client/_nuxt/{entry.CJckMUzn.css → entry.B4DN0kwM.css} +1 -1
  10. package/dist/client/_nuxt/error-404.BtCtaqmq.css +1 -0
  11. package/dist/client/_nuxt/error-500.D9fi60uT.css +1 -0
  12. package/dist/client/index.html +9 -9
  13. package/dist/module.json +3 -3
  14. package/dist/registry.mjs +18 -0
  15. package/dist/runtime/components/ScriptAriaLoadingIndicator.vue.d.ts +2 -0
  16. package/dist/runtime/components/ScriptCarbonAds.vue +41 -57
  17. package/dist/runtime/components/ScriptCarbonAds.vue.d.ts +49 -0
  18. package/dist/runtime/components/ScriptCrisp.vue +43 -63
  19. package/dist/runtime/components/ScriptCrisp.vue.d.ts +65 -0
  20. package/dist/runtime/components/ScriptGoogleAdsense.vue +37 -60
  21. package/dist/runtime/components/ScriptGoogleAdsense.vue.d.ts +59 -0
  22. package/dist/runtime/components/ScriptGoogleMaps.vue +220 -366
  23. package/dist/runtime/components/ScriptGoogleMaps.vue.d.ts +215 -0
  24. package/dist/runtime/components/ScriptIntercom.vue +48 -67
  25. package/dist/runtime/components/ScriptIntercom.vue.d.ts +70 -0
  26. package/dist/runtime/components/ScriptLemonSqueezy.vue +26 -37
  27. package/dist/runtime/components/ScriptLemonSqueezy.vue.d.ts +41 -0
  28. package/dist/runtime/components/ScriptLoadingIndicator.vue +8 -13
  29. package/dist/runtime/components/ScriptLoadingIndicator.vue.d.ts +9 -0
  30. package/dist/runtime/components/ScriptStripePricingTable.vue +41 -53
  31. package/dist/runtime/components/ScriptStripePricingTable.vue.d.ts +56 -0
  32. package/dist/runtime/components/ScriptVimeoPlayer.vue +121 -218
  33. package/dist/runtime/components/ScriptVimeoPlayer.vue.d.ts +233 -0
  34. package/dist/runtime/components/ScriptYouTubePlayer.vue +105 -163
  35. package/dist/runtime/components/ScriptYouTubePlayer.vue.d.ts +133 -0
  36. package/dist/runtime/registry/clarity.d.ts +1 -1
  37. package/dist/runtime/registry/clarity.js +7 -1
  38. package/dist/runtime/registry/snapchat-pixel.js +1 -1
  39. package/dist/types.d.mts +2 -2
  40. package/package.json +39 -34
  41. package/dist/client/_nuxt/BojlM8av.js +0 -21
  42. package/dist/client/_nuxt/BwFnCI0m.js +0 -1
  43. package/dist/client/_nuxt/builds/meta/0bd5f801-ad22-4b04-821c-25f180195d78.json +0 -1
  44. package/dist/client/_nuxt/error-404.BiTeRF3j.css +0 -1
  45. package/dist/client/_nuxt/error-500.Be1AE5oK.css +0 -1
  46. package/dist/client/_nuxt/yRslIvSb.js +0 -1
  47. package/dist/module.cjs +0 -5
  48. package/dist/module.d.ts +0 -60
  49. package/dist/registry.d.ts +0 -6
  50. package/dist/types.d.ts +0 -7
@@ -0,0 +1,233 @@
1
+ import type { HTMLAttributes, ImgHTMLAttributes } from 'vue';
2
+ import type { ElementScriptTrigger } from '../types.js';
3
+ import ScriptAriaLoadingIndicator from './ScriptAriaLoadingIndicator.vue.js';
4
+ interface VimeoOptions {
5
+ id?: number | undefined;
6
+ url?: string | undefined;
7
+ autopause?: boolean | undefined;
8
+ autoplay?: boolean | undefined;
9
+ background?: boolean | undefined;
10
+ byline?: boolean | undefined;
11
+ color?: string | undefined;
12
+ controls?: boolean | undefined;
13
+ dnt?: boolean | undefined;
14
+ height?: number | undefined;
15
+ interactive_params?: string | undefined;
16
+ keyboard?: boolean | undefined;
17
+ loop?: boolean | undefined;
18
+ maxheight?: number | undefined;
19
+ maxwidth?: number | undefined;
20
+ muted?: boolean | undefined;
21
+ pip?: boolean | undefined;
22
+ playsinline?: boolean | undefined;
23
+ portrait?: boolean | undefined;
24
+ responsive?: boolean | undefined;
25
+ speed?: boolean | undefined;
26
+ quality?: Vimeo.VimeoVideoQuality | undefined;
27
+ texttrack?: string | undefined;
28
+ title?: boolean | undefined;
29
+ transparent?: boolean | undefined;
30
+ width?: number | undefined;
31
+ }
32
+ type __VLS_Props = {
33
+ trigger?: ElementScriptTrigger;
34
+ placeholderAttrs?: ImgHTMLAttributes;
35
+ rootAttrs?: HTMLAttributes;
36
+ aboveTheFold?: boolean;
37
+ vimeoOptions?: VimeoOptions;
38
+ id?: number | undefined;
39
+ url?: string | undefined;
40
+ };
41
+ declare const elVimeo: import("vue").Ref<any, any>;
42
+ declare const rootEl: import("vue").Ref<any, any>;
43
+ declare const ready: import("vue").Ref<boolean, boolean>;
44
+ declare const status: import("vue").Ref<import("@unhead/vue").UseScriptStatus, import("@unhead/vue").UseScriptStatus>;
45
+ declare const payload: import("vue").Ref<any, any>;
46
+ declare const placeholder: import("vue").ComputedRef<any>;
47
+ declare const rootAttrs: import("vue").ComputedRef<HTMLAttributes>;
48
+ declare const placeholderAttrs: import("vue").ComputedRef<Omit<ImgHTMLAttributes, "style" | "src" | "loading" | "alt"> & Omit<{
49
+ src: any;
50
+ alt: string;
51
+ loading: "eager" | "lazy";
52
+ fetchpriority: string | undefined;
53
+ style: {
54
+ cursor: "pointer";
55
+ width: string;
56
+ objectFit: "contain";
57
+ height: string;
58
+ };
59
+ }, "style" | "src" | "loading" | "alt"> & {
60
+ style: string | false | import("vue").StyleValue[] | {
61
+ cursor: "pointer";
62
+ width: string;
63
+ objectFit: "contain";
64
+ height: string;
65
+ } | (Omit<import("vue").CSSProperties, "width" | "height" | "cursor" | "objectFit"> & Omit<{
66
+ cursor: "pointer";
67
+ width: string;
68
+ objectFit: "contain";
69
+ height: string;
70
+ }, "width" | "height" | "cursor" | "objectFit"> & {
71
+ width: string | number | (string & {});
72
+ height: string | number | (string & {});
73
+ cursor: "alias" | "default" | "auto" | "help" | "copy" | "progress" | "none" | "text" | (string & {}) | "-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "-moz-grab" | "-webkit-grab" | "all-scroll" | "cell" | "col-resize" | "context-menu" | "crosshair" | "e-resize" | "ew-resize" | "grab" | "grabbing" | "move" | "n-resize" | "ne-resize" | "nesw-resize" | "no-drop" | "not-allowed" | "ns-resize" | "nw-resize" | "nwse-resize" | "pointer" | "row-resize" | "s-resize" | "se-resize" | "sw-resize" | "vertical-text" | "w-resize" | "wait" | "zoom-in" | "zoom-out";
74
+ objectFit: "fill" | "none" | "-moz-initial" | "inherit" | "initial" | "revert" | "revert-layer" | "unset" | "contain" | "cover" | "scale-down";
75
+ });
76
+ src: any;
77
+ loading: "eager" | "lazy";
78
+ alt: string;
79
+ }>;
80
+ declare const __VLS_ctx: InstanceType<__VLS_PickNotAny<typeof __VLS_self, new () => {}>>;
81
+ declare var __VLS_1: any, __VLS_3: {}, __VLS_8: {}, __VLS_10: {}, __VLS_12: {};
82
+ type __VLS_Slots = __VLS_PrettifyGlobal<__VLS_OmitStringIndex<typeof __VLS_ctx.$slots> & {
83
+ placeholder?: (props: typeof __VLS_1) => any;
84
+ } & {
85
+ loading?: (props: typeof __VLS_3) => any;
86
+ } & {
87
+ awaitingLoad?: (props: typeof __VLS_8) => any;
88
+ } & {
89
+ error?: (props: typeof __VLS_10) => any;
90
+ } & {
91
+ default?: (props: typeof __VLS_12) => any;
92
+ }>;
93
+ declare const __VLS_self: import("vue").DefineComponent<__VLS_Props, {
94
+ ScriptAriaLoadingIndicator: typeof ScriptAriaLoadingIndicator;
95
+ elVimeo: typeof elVimeo;
96
+ rootEl: typeof rootEl;
97
+ ready: typeof ready;
98
+ status: typeof status;
99
+ payload: typeof payload;
100
+ placeholder: typeof placeholder;
101
+ rootAttrs: typeof rootAttrs;
102
+ placeholderAttrs: typeof placeholderAttrs;
103
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
104
+ loaded: (event: import("@vimeo/player").LoadedEvent, player: Vimeo.Player) => any;
105
+ error: (event: import("@vimeo/player").Error, player: Vimeo.Player) => any;
106
+ cuechange: (event: import("@vimeo/player").CueChangeEvent, player: Vimeo.Player) => any;
107
+ durationchange: (event: import("@vimeo/player").DurationChangeEvent, player: Vimeo.Player) => any;
108
+ ended: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
109
+ pause: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
110
+ play: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
111
+ playing: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
112
+ progress: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
113
+ resize: (event: import("@vimeo/player").ResizeEvent, player: Vimeo.Player) => any;
114
+ seeked: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
115
+ seeking: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
116
+ timeupdate: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
117
+ volumechange: (event: import("@vimeo/player").VolumeChangeEvent, player: Vimeo.Player) => any;
118
+ fullscreenchange: (event: import("@vimeo/player").FullScreenChangeEvent, player: Vimeo.Player) => any;
119
+ texttrackchange: (event: import("@vimeo/player").TextTrackChangeEvent, player: Vimeo.Player) => any;
120
+ chapterchange: (event: import("@vimeo/player").VimeoChapter, player: Vimeo.Player) => any;
121
+ cuepoint: (event: import("@vimeo/player").CuePointEvent, player: Vimeo.Player) => any;
122
+ playbackratechange: (event: import("@vimeo/player").PlaybackRateEvent, player: Vimeo.Player) => any;
123
+ bufferstart: (event: never, player: Vimeo.Player) => any;
124
+ bufferend: (event: never, player: Vimeo.Player) => any;
125
+ qualitychange: (event: import("@vimeo/player").QualityChangeEvent, player: Vimeo.Player) => any;
126
+ camerachange: (event: import("@vimeo/player").VimeoCameraProps, player: Vimeo.Player) => any;
127
+ enterpictureinpicture: (event: never, player: Vimeo.Player) => any;
128
+ leavepictureinpicture: (event: never, player: Vimeo.Player) => any;
129
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
130
+ onLoaded?: ((event: import("@vimeo/player").LoadedEvent, player: Vimeo.Player) => any) | undefined;
131
+ onError?: ((event: import("@vimeo/player").Error, player: Vimeo.Player) => any) | undefined;
132
+ onCuechange?: ((event: import("@vimeo/player").CueChangeEvent, player: Vimeo.Player) => any) | undefined;
133
+ onDurationchange?: ((event: import("@vimeo/player").DurationChangeEvent, player: Vimeo.Player) => any) | undefined;
134
+ onEnded?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
135
+ onPause?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
136
+ onPlay?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
137
+ onPlaying?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
138
+ onProgress?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
139
+ onResize?: ((event: import("@vimeo/player").ResizeEvent, player: Vimeo.Player) => any) | undefined;
140
+ onSeeked?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
141
+ onSeeking?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
142
+ onTimeupdate?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
143
+ onVolumechange?: ((event: import("@vimeo/player").VolumeChangeEvent, player: Vimeo.Player) => any) | undefined;
144
+ onFullscreenchange?: ((event: import("@vimeo/player").FullScreenChangeEvent, player: Vimeo.Player) => any) | undefined;
145
+ onTexttrackchange?: ((event: import("@vimeo/player").TextTrackChangeEvent, player: Vimeo.Player) => any) | undefined;
146
+ onChapterchange?: ((event: import("@vimeo/player").VimeoChapter, player: Vimeo.Player) => any) | undefined;
147
+ onCuepoint?: ((event: import("@vimeo/player").CuePointEvent, player: Vimeo.Player) => any) | undefined;
148
+ onPlaybackratechange?: ((event: import("@vimeo/player").PlaybackRateEvent, player: Vimeo.Player) => any) | undefined;
149
+ onBufferstart?: ((event: never, player: Vimeo.Player) => any) | undefined;
150
+ onBufferend?: ((event: never, player: Vimeo.Player) => any) | undefined;
151
+ onQualitychange?: ((event: import("@vimeo/player").QualityChangeEvent, player: Vimeo.Player) => any) | undefined;
152
+ onCamerachange?: ((event: import("@vimeo/player").VimeoCameraProps, player: Vimeo.Player) => any) | undefined;
153
+ onEnterpictureinpicture?: ((event: never, player: Vimeo.Player) => any) | undefined;
154
+ onLeavepictureinpicture?: ((event: never, player: Vimeo.Player) => any) | undefined;
155
+ }>, {
156
+ trigger: ElementScriptTrigger;
157
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
158
+ declare const __VLS_component: import("vue").DefineComponent<__VLS_Props, {
159
+ play: () => Promise<void> | undefined;
160
+ pause: () => Promise<void> | undefined;
161
+ getDuration: () => Promise<number> | undefined;
162
+ getCurrentTime: () => Promise<number> | undefined;
163
+ setCurrentTime: (time: number) => Promise<number> | undefined;
164
+ getVolume: () => Promise<number> | undefined;
165
+ setVolume: (volume: number) => Promise<number> | undefined;
166
+ getPaused: () => Promise<boolean> | undefined;
167
+ getEnded: () => Promise<boolean> | undefined;
168
+ getLoop: () => Promise<boolean> | undefined;
169
+ setLoop: (loop: boolean) => Promise<boolean> | undefined;
170
+ getPlaybackRate: () => Promise<number> | undefined;
171
+ setPlaybackRate: (rate: number) => Promise<number> | undefined;
172
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
173
+ loaded: (event: import("@vimeo/player").LoadedEvent, player: Vimeo.Player) => any;
174
+ error: (event: import("@vimeo/player").Error, player: Vimeo.Player) => any;
175
+ cuechange: (event: import("@vimeo/player").CueChangeEvent, player: Vimeo.Player) => any;
176
+ durationchange: (event: import("@vimeo/player").DurationChangeEvent, player: Vimeo.Player) => any;
177
+ ended: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
178
+ pause: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
179
+ play: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
180
+ playing: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
181
+ progress: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
182
+ resize: (event: import("@vimeo/player").ResizeEvent, player: Vimeo.Player) => any;
183
+ seeked: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
184
+ seeking: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
185
+ timeupdate: (event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any;
186
+ volumechange: (event: import("@vimeo/player").VolumeChangeEvent, player: Vimeo.Player) => any;
187
+ fullscreenchange: (event: import("@vimeo/player").FullScreenChangeEvent, player: Vimeo.Player) => any;
188
+ texttrackchange: (event: import("@vimeo/player").TextTrackChangeEvent, player: Vimeo.Player) => any;
189
+ chapterchange: (event: import("@vimeo/player").VimeoChapter, player: Vimeo.Player) => any;
190
+ cuepoint: (event: import("@vimeo/player").CuePointEvent, player: Vimeo.Player) => any;
191
+ playbackratechange: (event: import("@vimeo/player").PlaybackRateEvent, player: Vimeo.Player) => any;
192
+ bufferstart: (event: never, player: Vimeo.Player) => any;
193
+ bufferend: (event: never, player: Vimeo.Player) => any;
194
+ qualitychange: (event: import("@vimeo/player").QualityChangeEvent, player: Vimeo.Player) => any;
195
+ camerachange: (event: import("@vimeo/player").VimeoCameraProps, player: Vimeo.Player) => any;
196
+ enterpictureinpicture: (event: never, player: Vimeo.Player) => any;
197
+ leavepictureinpicture: (event: never, player: Vimeo.Player) => any;
198
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
199
+ onLoaded?: ((event: import("@vimeo/player").LoadedEvent, player: Vimeo.Player) => any) | undefined;
200
+ onError?: ((event: import("@vimeo/player").Error, player: Vimeo.Player) => any) | undefined;
201
+ onCuechange?: ((event: import("@vimeo/player").CueChangeEvent, player: Vimeo.Player) => any) | undefined;
202
+ onDurationchange?: ((event: import("@vimeo/player").DurationChangeEvent, player: Vimeo.Player) => any) | undefined;
203
+ onEnded?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
204
+ onPause?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
205
+ onPlay?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
206
+ onPlaying?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
207
+ onProgress?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
208
+ onResize?: ((event: import("@vimeo/player").ResizeEvent, player: Vimeo.Player) => any) | undefined;
209
+ onSeeked?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
210
+ onSeeking?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
211
+ onTimeupdate?: ((event: import("@vimeo/player").TimeEvent, player: Vimeo.Player) => any) | undefined;
212
+ onVolumechange?: ((event: import("@vimeo/player").VolumeChangeEvent, player: Vimeo.Player) => any) | undefined;
213
+ onFullscreenchange?: ((event: import("@vimeo/player").FullScreenChangeEvent, player: Vimeo.Player) => any) | undefined;
214
+ onTexttrackchange?: ((event: import("@vimeo/player").TextTrackChangeEvent, player: Vimeo.Player) => any) | undefined;
215
+ onChapterchange?: ((event: import("@vimeo/player").VimeoChapter, player: Vimeo.Player) => any) | undefined;
216
+ onCuepoint?: ((event: import("@vimeo/player").CuePointEvent, player: Vimeo.Player) => any) | undefined;
217
+ onPlaybackratechange?: ((event: import("@vimeo/player").PlaybackRateEvent, player: Vimeo.Player) => any) | undefined;
218
+ onBufferstart?: ((event: never, player: Vimeo.Player) => any) | undefined;
219
+ onBufferend?: ((event: never, player: Vimeo.Player) => any) | undefined;
220
+ onQualitychange?: ((event: import("@vimeo/player").QualityChangeEvent, player: Vimeo.Player) => any) | undefined;
221
+ onCamerachange?: ((event: import("@vimeo/player").VimeoCameraProps, player: Vimeo.Player) => any) | undefined;
222
+ onEnterpictureinpicture?: ((event: never, player: Vimeo.Player) => any) | undefined;
223
+ onLeavepictureinpicture?: ((event: never, player: Vimeo.Player) => any) | undefined;
224
+ }>, {
225
+ trigger: ElementScriptTrigger;
226
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
227
+ declare const _default: __VLS_WithSlots<typeof __VLS_component, __VLS_Slots>;
228
+ export default _default;
229
+ type __VLS_WithSlots<T, S> = T & {
230
+ new (): {
231
+ $slots: S;
232
+ };
233
+ };
@@ -1,202 +1,144 @@
1
- <script setup lang="ts">
2
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
3
- // @ts-nocheck
4
-
5
- /// <reference types="youtube" />
6
- import { computed, onMounted, ref, watch } from 'vue'
7
- import type { HTMLAttributes, ImgHTMLAttributes, Ref } from 'vue'
8
- import { defu } from 'defu'
9
- import { useHead } from 'nuxt/app'
10
- import type { ElementScriptTrigger } from '../types'
11
- import { useScriptTriggerElement } from '../composables/useScriptTriggerElement'
12
- import { useScriptYouTubePlayer } from '../registry/youtube-player'
13
- import ScriptAriaLoadingIndicator from './ScriptAriaLoadingIndicator.vue'
14
-
15
- export type YoutubeThumbnailSize =
16
- // 120x90
17
- '1' | '2' | '3' | 'default' |
18
- // 320x180
19
- 'mq1' | 'mq2' | 'mq3' | 'mqdefault' |
20
- // 480x360
21
- '0' | 'hq1' | 'hq2' | 'hq3' | 'hqdefault' |
22
- // 640x480
23
- 'sd1' | 'sd2' | 'sd3' | 'sddefault' |
24
- // 1280x720
25
- 'hq720' |
26
- // 1920x1080
27
- 'maxresdefault'
28
-
29
- const props = withDefaults(defineProps<{
30
- placeholderAttrs?: ImgHTMLAttributes
31
- rootAttrs?: HTMLAttributes
32
- aboveTheFold?: boolean
33
- trigger?: ElementScriptTrigger
34
- videoId: string
35
- playerVars?: YT.PlayerVars
36
- width?: number
37
- height?: number
38
- /**
39
- * Whether to use youtube-nocookie.com for embedding.
40
- *
41
- * @default false
42
- */
43
- cookies?: boolean
44
- playerOptions?: YT.PlayerOptions
45
- thumbnailSize?: YoutubeThumbnailSize
46
- webp?: boolean
47
- }>(), {
48
- cookies: false,
49
- trigger: 'mousedown',
50
- thumbnailSize: 'hq720',
51
- webp: true,
52
- // @ts-expect-error untyped
53
- playerVars: { autoplay: 0, playsinline: 1 },
54
- width: 640,
55
- height: 360,
56
- })
57
-
58
- const emits = defineEmits<{
59
- 'ready': [e: YT.PlayerEvent]
60
- 'state-change': [e: YT.OnStateChangeEvent, target: YT.Player]
61
- 'playback-quality-change': [e: YT.OnPlaybackQualityChangeEvent, target: YT.Player]
62
- 'playback-rate-change': [e: YT.OnPlaybackRateChangeEvent, target: YT.Player]
63
- 'error': [e: YT.OnErrorEvent, target: YT.Player]
64
- }>()
65
- const events: (keyof YT.Events)[] = [
66
- 'onReady',
67
- 'onStateChange',
68
- 'onPlaybackQualityChange',
69
- 'onPlaybackRateChange',
70
- 'onError',
71
- 'onApiChange',
72
- ]
73
- const rootEl = ref()
74
- const youtubeEl = ref()
75
- const ready = ref(false)
76
- const trigger = useScriptTriggerElement({ trigger: props.trigger, el: rootEl })
1
+ <script setup>
2
+ import { computed, onMounted, ref, watch } from "vue";
3
+ import { defu } from "defu";
4
+ import { useHead } from "nuxt/app";
5
+ import { useScriptTriggerElement } from "../composables/useScriptTriggerElement";
6
+ import { useScriptYouTubePlayer } from "../registry/youtube-player";
7
+ import ScriptAriaLoadingIndicator from "./ScriptAriaLoadingIndicator.vue";
8
+ const props = defineProps({
9
+ placeholderAttrs: { type: Object, required: false },
10
+ rootAttrs: { type: Object, required: false },
11
+ aboveTheFold: { type: Boolean, required: false },
12
+ trigger: { type: [String, Array, Boolean], required: false, default: "mousedown" },
13
+ videoId: { type: String, required: true },
14
+ playerVars: { type: null, required: false, default: { autoplay: 0, playsinline: 1 } },
15
+ width: { type: Number, required: false, default: 640 },
16
+ height: { type: Number, required: false, default: 360 },
17
+ cookies: { type: Boolean, required: false, default: false },
18
+ playerOptions: { type: null, required: false },
19
+ thumbnailSize: { type: String, required: false, default: "hq720" },
20
+ webp: { type: Boolean, required: false, default: true }
21
+ });
22
+ const emits = defineEmits(["ready", "state-change", "playback-quality-change", "playback-rate-change", "error"]);
23
+ const events = [
24
+ "onReady",
25
+ "onStateChange",
26
+ "onPlaybackQualityChange",
27
+ "onPlaybackRateChange",
28
+ "onError",
29
+ "onApiChange"
30
+ ];
31
+ const rootEl = ref();
32
+ const youtubeEl = ref();
33
+ const ready = ref(false);
34
+ const trigger = useScriptTriggerElement({ trigger: props.trigger, el: rootEl });
77
35
  const script = useScriptYouTubePlayer({
78
36
  scriptOptions: {
79
- trigger,
80
- },
81
- })
82
- const { onLoaded, status } = script
83
-
84
- const player: Ref<YT.Player | undefined> = ref()
85
- let clickTriggered = false
86
- if (props.trigger === 'mousedown' && trigger instanceof Promise) {
37
+ trigger
38
+ }
39
+ });
40
+ const { onLoaded, status } = script;
41
+ const player = ref();
42
+ let clickTriggered = false;
43
+ if (props.trigger === "mousedown" && trigger instanceof Promise) {
87
44
  trigger.then((triggered) => {
88
45
  if (triggered) {
89
- clickTriggered = true
46
+ clickTriggered = true;
90
47
  }
91
- })
48
+ });
92
49
  }
93
50
  onMounted(() => {
94
51
  onLoaded(async (instance) => {
95
- const YouTube = instance.YT instanceof Promise ? await instance.YT : instance.YT
96
- await new Promise<void>((resolve) => {
97
- if (typeof YT.Player === 'undefined')
98
- YouTube.ready(resolve)
52
+ const YouTube = instance.YT instanceof Promise ? await instance.YT : instance.YT;
53
+ await new Promise((resolve) => {
54
+ if (typeof YT.Player === "undefined")
55
+ YouTube.ready(resolve);
99
56
  else
100
- resolve()
101
- })
57
+ resolve();
58
+ });
102
59
  player.value = new YT.Player(youtubeEl.value, {
103
- host: !props.cookies ? 'https://www.youtube-nocookie.com' : 'https://www.youtube.com',
60
+ host: !props.cookies ? "https://www.youtube-nocookie.com" : "https://www.youtube.com",
104
61
  ...props,
105
62
  ...props.playerOptions,
106
- events: Object.fromEntries(events.map(event => [event, (e: any) => {
107
- const emitEventName = event.replace(/([A-Z])/g, '-$1').replace('on-', '').toLowerCase()
108
- // @ts-expect-error untyped
109
- emits(emitEventName, e)
110
- if (event === 'onReady') {
111
- ready.value = true
63
+ events: Object.fromEntries(events.map((event) => [event, (e) => {
64
+ const emitEventName = event.replace(/([A-Z])/g, "-$1").replace("on-", "").toLowerCase();
65
+ emits(emitEventName, e);
66
+ if (event === "onReady") {
67
+ ready.value = true;
112
68
  if (clickTriggered) {
113
- player.value?.playVideo()
114
- clickTriggered = false
69
+ player.value?.playVideo();
70
+ clickTriggered = false;
115
71
  }
116
72
  watch(() => props.videoId, () => {
117
- player.value?.loadVideoById(props.videoId)
118
- })
73
+ player.value?.loadVideoById(props.videoId);
74
+ });
119
75
  }
120
- }])),
121
- })
122
- })
123
- watch(status, (status) => {
124
- if (status === 'error') {
125
- // @ts-expect-error untyped
126
- emits('error')
76
+ }]))
77
+ });
78
+ });
79
+ watch(status, (status2) => {
80
+ if (status2 === "error") {
81
+ emits("error");
127
82
  }
128
- })
129
- })
130
-
83
+ });
84
+ });
131
85
  defineExpose({
132
- player,
133
- })
134
-
86
+ player
87
+ });
135
88
  const rootAttrs = computed(() => {
136
89
  return defu(props.rootAttrs, {
137
- 'aria-busy': status.value === 'loading',
138
- 'aria-label': status.value === 'awaitingLoad'
139
- ? 'YouTube Player - Placeholder'
140
- : status.value === 'loading'
141
- ? 'YouTube Player - Loading'
142
- : 'YouTube Player - Loaded',
143
- 'aria-live': 'polite',
144
- 'role': 'application',
145
- 'style': {
146
- cursor: 'pointer',
147
- position: 'relative',
148
- backgroundColor: 'black',
149
- width: '100%',
150
- aspectRatio: `${props.width}/${props.height}`,
90
+ "aria-busy": status.value === "loading",
91
+ "aria-label": status.value === "awaitingLoad" ? "YouTube Player - Placeholder" : status.value === "loading" ? "YouTube Player - Loading" : "YouTube Player - Loaded",
92
+ "aria-live": "polite",
93
+ "role": "application",
94
+ "style": {
95
+ cursor: "pointer",
96
+ position: "relative",
97
+ backgroundColor: "black",
98
+ width: "100%",
99
+ aspectRatio: `${props.width}/${props.height}`
151
100
  },
152
- ...(trigger instanceof Promise ? trigger.ssrAttrs || {} : {}),
153
- }) as HTMLAttributes
154
- })
155
-
156
- const fallbackPlaceHolder = computed(() => `https://i.ytimg.com/vi/${props.videoId}/hqdefault.jpg`)
157
- const placeholder = computed(() => `https://i.ytimg.com/${props.webp ? 'vi_webp' : 'vi'}/${props.videoId}/${props.thumbnailSize}.${props.webp ? 'webp' : 'jpg'}`)
158
- const isFallbackPlaceHolder = ref(false)
159
-
101
+ ...trigger instanceof Promise ? trigger.ssrAttrs || {} : {}
102
+ });
103
+ });
104
+ const fallbackPlaceHolder = computed(() => `https://i.ytimg.com/vi/${props.videoId}/hqdefault.jpg`);
105
+ const placeholder = computed(() => `https://i.ytimg.com/${props.webp ? "vi_webp" : "vi"}/${props.videoId}/${props.thumbnailSize}.${props.webp ? "webp" : "jpg"}`);
106
+ const isFallbackPlaceHolder = ref(false);
160
107
  if (import.meta.server) {
161
- // dns-prefetch https://i.vimeocdn.com
162
108
  useHead({
163
109
  link: [
164
110
  {
165
111
  key: `nuxt-script-youtube-img`,
166
- rel: props.aboveTheFold ? 'preconnect' : 'dns-prefetch',
167
- href: 'https://i.ytimg.com',
112
+ rel: props.aboveTheFold ? "preconnect" : "dns-prefetch",
113
+ href: "https://i.ytimg.com"
168
114
  },
169
- props.aboveTheFold
170
- // we can preload the placeholder image
171
- ? {
172
- key: `nuxt-script-youtube-img`,
173
- rel: 'preload',
174
- as: 'image',
175
- href: placeholder.value,
176
- }
177
- : {},
178
- ],
179
- })
115
+ props.aboveTheFold ? {
116
+ key: `nuxt-script-youtube-img`,
117
+ rel: "preload",
118
+ as: "image",
119
+ href: placeholder.value
120
+ } : {}
121
+ ]
122
+ });
180
123
  }
181
-
182
124
  const placeholderAttrs = computed(() => {
183
125
  return defu(props.placeholderAttrs, {
184
126
  src: isFallbackPlaceHolder.value ? fallbackPlaceHolder.value : placeholder.value,
185
- alt: '',
186
- loading: props.aboveTheFold ? 'eager' : 'lazy',
127
+ alt: "",
128
+ loading: props.aboveTheFold ? "eager" : "lazy",
187
129
  style: {
188
- width: '100%',
189
- objectFit: 'contain',
190
- height: '100%',
130
+ width: "100%",
131
+ objectFit: "contain",
132
+ height: "100%"
191
133
  },
192
134
  onLoad(payload) {
193
- const img = payload.target as HTMLImageElement
135
+ const img = payload.target;
194
136
  if (img.naturalWidth === 120 && img.naturalHeight === 90) {
195
- isFallbackPlaceHolder.value = true
137
+ isFallbackPlaceHolder.value = true;
196
138
  }
197
- },
198
- } satisfies ImgHTMLAttributes)
199
- })
139
+ }
140
+ });
141
+ });
200
142
  </script>
201
143
 
202
144
  <template>