@nuxt/scripts 1.0.0-beta.6 → 1.0.0-rc.1
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.
- package/dist/devtools-client/200.html +1 -0
- package/dist/devtools-client/404.html +1 -0
- package/dist/devtools-client/_fonts/4ppnHhMi-pBsWSPo7mY0avYxlDoAg1N3PTzCwXLZ5rA-d9oibkGnTd1JL3tc_xnaVgBLYmOB8kjrK2cvZaqwj9s.woff2 +0 -0
- package/dist/devtools-client/_fonts/4qBuU9MRVUlPZNPSF7Xom_sK8RBEnfYu-9VXFrdq8A8-8TDwLE1HAj1sQn7XxVWtM_7sIaPM-DTdO3Pf8U2DF1U.woff2 +0 -0
- package/dist/devtools-client/_fonts/6dYsbWUd_BpKJ7mdDihgOcya1gHXLpJBuMYXux3WMjE-q3fYNS8YbW5n7ZeXI2vSNgkRWW5VDPKAl51SNTjG2qk.woff2 +0 -0
- package/dist/devtools-client/_fonts/Lr-hqqZZsYmCt0ITUlr1CUrWim9fsKvoDFZliMxgNHY-iTa_Yt_PzhOY9TX7ZXdSlEPim6iRt92xhECwaxWxd5w.woff2 +0 -0
- package/dist/devtools-client/_fonts/OknHvWI6KtYn1JQBzX7eSpNDBQ8520F9TvSUJYkVf6A-xeZn9253svK_8Q2LD0XEruY_MnEsuCRO5LenPoggC0Y.woff2 +0 -0
- package/dist/devtools-client/_fonts/PV2hrQG6wq5BlIPDjdL1IcOflycaghyt5MHzlBqZtlo-lb_WexLz3VZqfTN0oi554iBH5tT2j2UFEV-XErCAS3E.woff2 +0 -0
- package/dist/devtools-client/_fonts/UA7OtwYHwGN_HjcVGTdmiQxUit7FlqkCwxVUWSeXVnQ-B4OXCFOL_tWrYODpQTc07aMaj0c2cewTOmBRWR9tD-A.woff2 +0 -0
- package/dist/devtools-client/_fonts/VE4cDVCv5MxbFM7ZLoLCGbIpNd71zhp7MDI9lmN5Y7I-xZyDYCUVrd6LV8eVGF3Um3UZjBFuUtDGtvdyTBBRYBo.woff2 +0 -0
- package/dist/devtools-client/_fonts/fVoGbnMbBFd5L9BBp9fUPavUSkZ_EmsQNSyadkT-108-U4T0khaeLQSIhtt9eVvaCEKJjtWJ4ioRJOf8hvqkWY0.woff2 +0 -0
- package/dist/devtools-client/_fonts/lQAxeCEs1R0Lw-H9XRU1RlOARQN8J6npRsPjyEDMe5s-_DUSLEkO3tKTuun_gSnDLoQPVEnpOnyqZMOw0ByZ6PA.woff2 +0 -0
- package/dist/devtools-client/_fonts/lntlqNHKLV2n82yTwMde70QqOjcfLE2XJ5oKZ3vRPWc-z6TxpIZQdWXztWLr9_OFWqt_WJJoeGtuK_-XQMZGQwE.woff2 +0 -0
- package/dist/devtools-client/_fonts/qxAYvKsXWeYv731eb-h5TRurcdIP_W44mpNdX-HABAk-zUDeMEFlNtNbrwvT9JxLEBg0TphGy70O6RfIoIX_ZwU.woff2 +0 -0
- package/dist/devtools-client/_nuxt/B3kN3DAy.js +1 -0
- package/dist/devtools-client/_nuxt/B8PEiB0p.js +1 -0
- package/dist/devtools-client/_nuxt/C8jhSQ8l.js +1 -0
- package/dist/devtools-client/_nuxt/CJD6wrkT.js +188 -0
- package/dist/devtools-client/_nuxt/CfOsp0mU.js +1 -0
- package/dist/devtools-client/_nuxt/DKL6PHO3.js +1 -0
- package/dist/devtools-client/_nuxt/ajngqPCs.js +1 -0
- package/dist/devtools-client/_nuxt/builds/latest.json +1 -0
- package/dist/devtools-client/_nuxt/builds/meta/b800a0be-5cab-4ea6-89e3-dd3a85690a73.json +1 -0
- package/dist/devtools-client/_nuxt/dlaR8P-P.js +1 -0
- package/dist/devtools-client/_nuxt/entry.BwpOBArY.css +1 -0
- package/dist/devtools-client/_nuxt/error-404.CvOVjXeC.css +1 -0
- package/dist/devtools-client/_nuxt/error-500.BIm53nmx.css +1 -0
- package/dist/devtools-client/_nuxt/first-party.C8Ha4JLM.css +1 -0
- package/dist/devtools-client/_nuxt/index.CA-OpSj0.css +1 -0
- package/dist/devtools-client/_nuxt/registry.B9lnjF_b.css +1 -0
- package/dist/devtools-client/_nuxt/wDzz0qaB.js +1 -0
- package/dist/devtools-client/docs/index.html +1 -0
- package/dist/devtools-client/first-party/index.html +1 -0
- package/dist/devtools-client/index.html +1 -0
- package/dist/devtools-client/registry/index.html +1 -0
- package/dist/module.d.mts +29 -84
- package/dist/module.d.ts +121 -0
- package/dist/module.json +1 -1
- package/dist/module.mjs +941 -757
- package/dist/registry.d.mts +91 -4
- package/dist/registry.d.ts +93 -0
- package/dist/registry.mjs +669 -324
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.d.vue.ts +15 -79
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue +78 -180
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue.d.ts +15 -79
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.d.vue.ts +6 -55
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue +12 -83
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue.d.ts +6 -55
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.d.vue.ts +5 -1
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue +24 -38
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue.d.ts +5 -1
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.d.vue.ts +43 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue +60 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue.d.ts +43 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.d.vue.ts +4 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue +22 -26
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue.d.ts +4 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.d.vue.ts +9 -5
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue +56 -57
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue.d.ts +9 -5
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.d.vue.ts +24 -41
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue +69 -73
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue.d.ts +24 -41
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.d.vue.ts +36 -4
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue +82 -37
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue.d.ts +36 -4
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.d.vue.ts +78 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue +222 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue.d.ts +78 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.d.vue.ts +10 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue +9 -41
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue.d.ts +10 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.d.vue.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue +23 -38
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue.d.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.d.vue.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue +23 -38
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue.d.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.d.vue.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue +24 -38
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue.d.ts +7 -3
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.d.vue.ts +200 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue +165 -0
- package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue.d.ts +200 -0
- package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.d.ts +13 -0
- package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.js +8 -0
- package/dist/runtime/components/GoogleMaps/injectionKeys.d.ts +10 -0
- package/dist/runtime/components/GoogleMaps/injectionKeys.js +2 -0
- package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.d.ts +48 -0
- package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.js +51 -0
- package/dist/runtime/components/ScriptBlueskyEmbed.d.vue.ts +85 -0
- package/dist/runtime/components/ScriptBlueskyEmbed.vue +88 -0
- package/dist/runtime/components/ScriptBlueskyEmbed.vue.d.ts +85 -0
- package/dist/runtime/components/ScriptCrisp.vue +1 -1
- package/dist/runtime/components/ScriptGoogleAdsense.vue +1 -1
- package/dist/runtime/components/ScriptGravatar.d.vue.ts +22 -0
- package/dist/runtime/components/ScriptGravatar.vue +46 -0
- package/dist/runtime/components/ScriptGravatar.vue.d.ts +22 -0
- package/dist/runtime/components/ScriptInstagramEmbed.d.vue.ts +1 -2
- package/dist/runtime/components/ScriptInstagramEmbed.vue +8 -3
- package/dist/runtime/components/ScriptInstagramEmbed.vue.d.ts +1 -2
- package/dist/runtime/components/ScriptIntercom.vue +4 -3
- package/dist/runtime/components/ScriptPayPalButtons.d.vue.ts +43 -32
- package/dist/runtime/components/ScriptPayPalButtons.vue +48 -79
- package/dist/runtime/components/ScriptPayPalButtons.vue.d.ts +43 -32
- package/dist/runtime/components/ScriptPayPalMessages.d.vue.ts +37 -23
- package/dist/runtime/components/ScriptPayPalMessages.vue +46 -50
- package/dist/runtime/components/ScriptPayPalMessages.vue.d.ts +37 -23
- package/dist/runtime/components/ScriptStripePricingTable.vue +2 -2
- package/dist/runtime/components/ScriptVimeoPlayer.d.vue.ts +9 -0
- package/dist/runtime/components/ScriptVimeoPlayer.vue +13 -10
- package/dist/runtime/components/ScriptVimeoPlayer.vue.d.ts +9 -0
- package/dist/runtime/components/ScriptXEmbed.d.vue.ts +0 -2
- package/dist/runtime/components/ScriptXEmbed.vue +14 -8
- package/dist/runtime/components/ScriptXEmbed.vue.d.ts +0 -2
- package/dist/runtime/components/ScriptYouTubePlayer.d.vue.ts +2 -2
- package/dist/runtime/components/ScriptYouTubePlayer.vue +11 -5
- package/dist/runtime/components/ScriptYouTubePlayer.vue.d.ts +2 -2
- package/dist/runtime/composables/useScript.js +148 -8
- package/dist/runtime/composables/useScriptEventPage.js +2 -2
- package/dist/runtime/composables/useScriptTriggerConsent.d.ts +10 -0
- package/dist/runtime/composables/useScriptTriggerConsent.js +33 -20
- package/dist/runtime/composables/useScriptTriggerElement.js +1 -1
- package/dist/runtime/composables/useScriptTriggerIdleTimeout.js +1 -1
- package/dist/runtime/devtools-standalone-bridge.client.d.ts +8 -0
- package/dist/runtime/devtools-standalone-bridge.client.js +50 -0
- package/dist/runtime/registry/bing-uet.d.ts +20 -0
- package/dist/runtime/registry/bing-uet.js +29 -0
- package/dist/runtime/registry/bluesky-embed.d.ts +116 -0
- package/dist/runtime/registry/bluesky-embed.js +72 -0
- package/dist/runtime/registry/clarity.d.ts +10 -15
- package/dist/runtime/registry/clarity.js +22 -31
- package/dist/runtime/registry/cloudflare-web-analytics.d.ts +2 -13
- package/dist/runtime/registry/cloudflare-web-analytics.js +2 -14
- package/dist/runtime/registry/crisp.d.ts +10 -40
- package/dist/runtime/registry/crisp.js +2 -33
- package/dist/runtime/registry/databuddy-analytics.d.ts +2 -35
- package/dist/runtime/registry/databuddy-analytics.js +20 -45
- package/dist/runtime/registry/fathom-analytics.d.ts +7 -26
- package/dist/runtime/registry/fathom-analytics.js +3 -25
- package/dist/runtime/registry/google-adsense.d.ts +3 -11
- package/dist/runtime/registry/google-adsense.js +2 -11
- package/dist/runtime/registry/google-analytics.d.ts +3 -5
- package/dist/runtime/registry/google-analytics.js +3 -8
- package/dist/runtime/registry/google-maps.d.ts +3 -9
- package/dist/runtime/registry/google-maps.js +2 -8
- package/dist/runtime/registry/google-recaptcha.d.ts +2 -6
- package/dist/runtime/registry/google-recaptcha.js +4 -12
- package/dist/runtime/registry/google-sign-in.d.ts +2 -13
- package/dist/runtime/registry/google-sign-in.js +2 -22
- package/dist/runtime/registry/google-tag-manager.d.ts +3 -28
- package/dist/runtime/registry/google-tag-manager.js +4 -27
- package/dist/runtime/registry/gravatar.d.ts +26 -0
- package/dist/runtime/registry/gravatar.js +36 -0
- package/dist/runtime/registry/hotjar.d.ts +4 -6
- package/dist/runtime/registry/hotjar.js +2 -5
- package/dist/runtime/registry/instagram-embed.d.ts +3 -18
- package/dist/runtime/registry/instagram-embed.js +4 -19
- package/dist/runtime/registry/intercom.d.ts +5 -13
- package/dist/runtime/registry/intercom.js +2 -12
- package/dist/runtime/registry/matomo-analytics.d.ts +3 -12
- package/dist/runtime/registry/matomo-analytics.js +3 -12
- package/dist/runtime/registry/meta-pixel.d.ts +4 -6
- package/dist/runtime/registry/meta-pixel.js +2 -4
- package/dist/runtime/registry/mixpanel-analytics.d.ts +22 -0
- package/dist/runtime/registry/mixpanel-analytics.js +46 -0
- package/dist/runtime/registry/npm.d.ts +3 -7
- package/dist/runtime/registry/npm.js +2 -9
- package/dist/runtime/registry/paypal.d.ts +4 -25
- package/dist/runtime/registry/paypal.js +3 -66
- package/dist/runtime/registry/plausible-analytics.js +19 -14
- package/dist/runtime/registry/posthog.d.ts +10 -12
- package/dist/runtime/registry/posthog.js +4 -13
- package/dist/runtime/registry/reddit-pixel.d.ts +5 -6
- package/dist/runtime/registry/reddit-pixel.js +2 -4
- package/dist/runtime/registry/rybbit-analytics.d.ts +2 -14
- package/dist/runtime/registry/rybbit-analytics.js +10 -20
- package/dist/runtime/registry/schemas.d.ts +982 -0
- package/dist/runtime/registry/schemas.js +937 -0
- package/dist/runtime/registry/segment.d.ts +2 -5
- package/dist/runtime/registry/segment.js +2 -5
- package/dist/runtime/registry/snapchat-pixel.d.ts +5 -34
- package/dist/runtime/registry/snapchat-pixel.js +2 -20
- package/dist/runtime/registry/stripe.d.ts +3 -4
- package/dist/runtime/registry/stripe.js +2 -4
- package/dist/runtime/registry/tiktok-pixel.d.ts +4 -7
- package/dist/runtime/registry/tiktok-pixel.js +2 -6
- package/dist/runtime/registry/umami-analytics.d.ts +2 -31
- package/dist/runtime/registry/umami-analytics.js +2 -36
- package/dist/runtime/registry/vercel-analytics.d.ts +29 -0
- package/dist/runtime/registry/vercel-analytics.js +84 -0
- package/dist/runtime/registry/vimeo-player.d.ts +2 -2
- package/dist/runtime/registry/vimeo-player.js +1 -1
- package/dist/runtime/registry/x-embed.d.ts +3 -17
- package/dist/runtime/registry/x-embed.js +3 -18
- package/dist/runtime/registry/x-pixel.d.ts +4 -7
- package/dist/runtime/registry/x-pixel.js +2 -5
- package/dist/runtime/registry/youtube-player.d.ts +7 -7
- package/dist/runtime/registry/youtube-player.js +1 -1
- package/dist/runtime/server/bluesky-embed-image.d.ts +2 -0
- package/dist/runtime/server/bluesky-embed-image.js +7 -0
- package/dist/runtime/server/bluesky-embed.d.ts +16 -0
- package/dist/runtime/server/bluesky-embed.js +59 -0
- package/dist/runtime/server/google-maps-geocode-proxy.d.ts +2 -0
- package/dist/runtime/server/google-maps-geocode-proxy.js +34 -0
- package/dist/runtime/server/google-static-maps-proxy.js +2 -13
- package/dist/runtime/server/gravatar-proxy.d.ts +2 -0
- package/dist/runtime/server/gravatar-proxy.js +46 -0
- package/dist/runtime/server/instagram-embed-asset.js +8 -41
- package/dist/runtime/server/instagram-embed-image.js +6 -53
- package/dist/runtime/server/instagram-embed.d.ts +16 -0
- package/dist/runtime/server/instagram-embed.js +176 -35
- package/dist/runtime/server/proxy-handler.js +142 -95
- package/dist/runtime/server/utils/image-proxy.d.ts +12 -0
- package/dist/runtime/server/utils/image-proxy.js +70 -0
- package/dist/runtime/server/utils/privacy.d.ts +1 -10
- package/dist/runtime/server/utils/privacy.js +60 -40
- package/dist/runtime/server/x-embed-image.js +5 -49
- package/dist/runtime/server/x-embed.js +3 -2
- package/dist/runtime/types.d.ts +272 -51
- package/dist/runtime/types.js +0 -2
- package/dist/runtime/utils/pure.d.ts +1 -1
- package/dist/runtime/utils.d.ts +6 -4
- package/dist/runtime/utils.js +31 -14
- package/dist/stats.d.mts +202 -0
- package/dist/stats.d.ts +202 -0
- package/dist/stats.mjs +3875 -0
- package/dist/types-source.d.mts +17 -0
- package/dist/types-source.d.ts +17 -0
- package/dist/types-source.mjs +3414 -0
- package/dist/types.d.mts +4 -2
- package/package.json +35 -61
- package/README.md +0 -86
- package/dist/client/200.html +0 -1
- package/dist/client/404.html +0 -1
- package/dist/client/_nuxt/BPQ3VLAy.js +0 -1
- package/dist/client/_nuxt/BpR-tlZc.js +0 -1
- package/dist/client/_nuxt/CBbMDhE2.js +0 -162
- package/dist/client/_nuxt/CEMAW3aB.js +0 -1
- package/dist/client/_nuxt/MWkREqzj.js +0 -1
- package/dist/client/_nuxt/builds/latest.json +0 -1
- package/dist/client/_nuxt/builds/meta/762d443a-0880-424f-bda8-2b32b39d43ec.json +0 -1
- package/dist/client/_nuxt/entry.D45OuV0w.css +0 -1
- package/dist/client/_nuxt/error-404.B57D-jUQ.css +0 -1
- package/dist/client/_nuxt/error-500.DTHUW7BI.css +0 -1
- package/dist/client/index.html +0 -1
- package/dist/runtime/components/ScriptPayPalMarks.d.vue.ts +0 -52
- package/dist/runtime/components/ScriptPayPalMarks.vue +0 -69
- package/dist/runtime/components/ScriptPayPalMarks.vue.d.ts +0 -52
- package/dist/runtime/validation/mock.d.ts +0 -42
- package/dist/runtime/validation/mock.js +0 -21
- package/dist/runtime/validation/valibot.d.ts +0 -1
- package/dist/runtime/validation/valibot.js +0 -1
- /package/dist/{client → devtools-client}/_nuxt/CVO1_9PV.js +0 -0
- /package/dist/{client → devtools-client}/_nuxt/Cp-IABpG.js +0 -0
- /package/dist/{client → devtools-client}/_nuxt/D0r3Knsf.js +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import { computed, onBeforeUnmount, onMounted, ref, watch } from "vue";
|
|
3
2
|
import { defu } from "defu";
|
|
4
3
|
import { useAsyncData, useHead } from "nuxt/app";
|
|
4
|
+
import { computed, onBeforeUnmount, onMounted, ref, watch } from "vue";
|
|
5
5
|
import { useScriptTriggerElement } from "../composables/useScriptTriggerElement";
|
|
6
6
|
import { useScriptVimeoPlayer } from "../registry/vimeo-player";
|
|
7
7
|
import ScriptAriaLoadingIndicator from "./ScriptAriaLoadingIndicator.vue";
|
|
@@ -12,7 +12,9 @@ const props = defineProps({
|
|
|
12
12
|
aboveTheFold: { type: Boolean, required: false },
|
|
13
13
|
vimeoOptions: { type: Object, required: false },
|
|
14
14
|
id: { type: null, required: false },
|
|
15
|
-
url: { type: null, required: false }
|
|
15
|
+
url: { type: null, required: false },
|
|
16
|
+
ratio: { type: String, required: false, default: "16/9" },
|
|
17
|
+
placeholderObjectFit: { type: String, required: false, default: "contain" }
|
|
16
18
|
});
|
|
17
19
|
const emits = defineEmits(["play", "playing", "pause", "ended", "timeupdate", "progress", "seeking", "seeked", "texttrackchange", "chapterchange", "cuechange", "cuepoint", "volumechange", "playbackratechange", "bufferstart", "bufferend", "error", "loaded", "durationchange", "fullscreenchange", "qualitychange", "camerachange", "resize", "enterpictureinpicture", "leavepictureinpicture"]);
|
|
18
20
|
const events = [
|
|
@@ -153,12 +155,13 @@ const rootAttrs = computed(() => {
|
|
|
153
155
|
"aria-live": "polite",
|
|
154
156
|
"role": "application",
|
|
155
157
|
"style": {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
158
|
+
"--vimeo-ratio": props.ratio,
|
|
159
|
+
"maxWidth": "100%",
|
|
160
|
+
"width": `auto`,
|
|
161
|
+
"height": "auto",
|
|
162
|
+
"aspectRatio": props.ratio,
|
|
163
|
+
"position": "relative",
|
|
164
|
+
"backgroundColor": "black"
|
|
162
165
|
},
|
|
163
166
|
...trigger instanceof Promise ? trigger.ssrAttrs || {} : {}
|
|
164
167
|
});
|
|
@@ -173,7 +176,7 @@ const placeholderAttrs = computed(() => {
|
|
|
173
176
|
style: {
|
|
174
177
|
cursor: "pointer",
|
|
175
178
|
width: "100%",
|
|
176
|
-
objectFit:
|
|
179
|
+
objectFit: props.placeholderObjectFit,
|
|
177
180
|
height: "100%"
|
|
178
181
|
}
|
|
179
182
|
});
|
|
@@ -197,5 +200,5 @@ onBeforeUnmount(() => player?.unload());
|
|
|
197
200
|
</template>
|
|
198
201
|
|
|
199
202
|
<style>
|
|
200
|
-
.vimeo-player iframe{aspect-ratio:16/9;height:auto;max-width:100%!important;width:100%}
|
|
203
|
+
.vimeo-player iframe{aspect-ratio:var(--vimeo-ratio,16/9);height:auto;max-width:100%!important;width:100%}
|
|
201
204
|
</style>
|
|
@@ -36,6 +36,13 @@ type __VLS_Props = {
|
|
|
36
36
|
vimeoOptions?: VimeoOptions;
|
|
37
37
|
id?: number | undefined;
|
|
38
38
|
url?: string | undefined;
|
|
39
|
+
ratio?: string;
|
|
40
|
+
/**
|
|
41
|
+
* Object-fit for the placeholder image.
|
|
42
|
+
*
|
|
43
|
+
* @default 'contain'
|
|
44
|
+
*/
|
|
45
|
+
placeholderObjectFit?: 'cover' | 'contain' | 'fill' | 'none' | 'scale-down';
|
|
39
46
|
};
|
|
40
47
|
declare var __VLS_1: any, __VLS_3: {}, __VLS_10: {}, __VLS_12: {}, __VLS_14: {};
|
|
41
48
|
type __VLS_Slots = {} & {
|
|
@@ -117,6 +124,8 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
|
117
124
|
onLeavepictureinpicture?: ((event: never, player: Vimeo.Player) => any) | undefined;
|
|
118
125
|
}>, {
|
|
119
126
|
trigger: ElementScriptTrigger;
|
|
127
|
+
ratio: string;
|
|
128
|
+
placeholderObjectFit: "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
120
129
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
121
130
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
122
131
|
declare const _default: typeof __VLS_export;
|
|
@@ -7,12 +7,10 @@ type __VLS_Props = {
|
|
|
7
7
|
tweetId: string;
|
|
8
8
|
/**
|
|
9
9
|
* Custom API endpoint for fetching tweet data
|
|
10
|
-
* @default '/_scripts/x-embed'
|
|
11
10
|
*/
|
|
12
11
|
apiEndpoint?: string;
|
|
13
12
|
/**
|
|
14
13
|
* Custom image proxy endpoint
|
|
15
|
-
* @default '/_scripts/x-embed-image'
|
|
16
14
|
*/
|
|
17
15
|
imageProxyEndpoint?: string;
|
|
18
16
|
/**
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import { computed } from "vue";
|
|
3
2
|
import { useAsyncData } from "nuxt/app";
|
|
3
|
+
import { computed } from "vue";
|
|
4
4
|
import { formatCount, formatTweetDate, proxyXImageUrl } from "../registry/x-embed";
|
|
5
|
+
import { requireRegistryEndpoint, scriptsPrefix } from "../utils";
|
|
5
6
|
const props = defineProps({
|
|
6
7
|
tweetId: { type: String, required: true },
|
|
7
|
-
apiEndpoint: { type: String, required: false, default:
|
|
8
|
-
imageProxyEndpoint: { type: String, required: false, default:
|
|
8
|
+
apiEndpoint: { type: String, required: false, default: void 0 },
|
|
9
|
+
imageProxyEndpoint: { type: String, required: false, default: void 0 },
|
|
9
10
|
rootAttrs: { type: Object, required: false }
|
|
10
11
|
});
|
|
12
|
+
const prefix = scriptsPrefix();
|
|
13
|
+
const apiEndpoint = computed(() => props.apiEndpoint || `${prefix}/embed/x`);
|
|
14
|
+
const resolvedImageProxyEndpoint = computed(() => props.imageProxyEndpoint || `${prefix}/embed/x-image`);
|
|
15
|
+
if (!props.apiEndpoint)
|
|
16
|
+
requireRegistryEndpoint("ScriptXEmbed", "xEmbed");
|
|
11
17
|
const cacheKey = computed(() => `x-embed-${props.tweetId}`);
|
|
12
18
|
const { data: tweet, status, error } = useAsyncData(
|
|
13
19
|
cacheKey,
|
|
14
|
-
() => $fetch(`${
|
|
20
|
+
() => $fetch(`${apiEndpoint.value}?id=${props.tweetId}`)
|
|
15
21
|
);
|
|
16
22
|
const slotProps = computed(() => {
|
|
17
23
|
if (!tweet.value)
|
|
@@ -23,7 +29,7 @@ const slotProps = computed(() => {
|
|
|
23
29
|
// User info
|
|
24
30
|
userName: t.user.name,
|
|
25
31
|
userHandle: t.user.screen_name,
|
|
26
|
-
userAvatar: proxyXImageUrl(t.user.profile_image_url_https,
|
|
32
|
+
userAvatar: proxyXImageUrl(t.user.profile_image_url_https, resolvedImageProxyEndpoint.value),
|
|
27
33
|
userAvatarOriginal: t.user.profile_image_url_https,
|
|
28
34
|
isVerified: t.user.verified || t.user.is_blue_verified,
|
|
29
35
|
// Tweet content
|
|
@@ -38,11 +44,11 @@ const slotProps = computed(() => {
|
|
|
38
44
|
// Media
|
|
39
45
|
photos: t.photos?.map((p) => ({
|
|
40
46
|
...p,
|
|
41
|
-
proxiedUrl: proxyXImageUrl(p.url,
|
|
47
|
+
proxiedUrl: proxyXImageUrl(p.url, resolvedImageProxyEndpoint.value)
|
|
42
48
|
})),
|
|
43
49
|
video: t.video ? {
|
|
44
50
|
...t.video,
|
|
45
|
-
posterProxied: proxyXImageUrl(t.video.poster,
|
|
51
|
+
posterProxied: proxyXImageUrl(t.video.poster, resolvedImageProxyEndpoint.value)
|
|
46
52
|
} : null,
|
|
47
53
|
// Links
|
|
48
54
|
tweetUrl: `https://x.com/${t.user.screen_name}/status/${t.id_str}`,
|
|
@@ -53,7 +59,7 @@ const slotProps = computed(() => {
|
|
|
53
59
|
isReply: !!t.parent,
|
|
54
60
|
replyToUser: t.parent?.user.screen_name,
|
|
55
61
|
// Helpers
|
|
56
|
-
proxyImage: (url) => proxyXImageUrl(url,
|
|
62
|
+
proxyImage: (url) => proxyXImageUrl(url, resolvedImageProxyEndpoint.value)
|
|
57
63
|
};
|
|
58
64
|
});
|
|
59
65
|
defineExpose({
|
|
@@ -7,12 +7,10 @@ type __VLS_Props = {
|
|
|
7
7
|
tweetId: string;
|
|
8
8
|
/**
|
|
9
9
|
* Custom API endpoint for fetching tweet data
|
|
10
|
-
* @default '/_scripts/x-embed'
|
|
11
10
|
*/
|
|
12
11
|
apiEndpoint?: string;
|
|
13
12
|
/**
|
|
14
13
|
* Custom image proxy endpoint
|
|
15
|
-
* @default '/_scripts/x-embed-image'
|
|
16
14
|
*/
|
|
17
15
|
imageProxyEndpoint?: string;
|
|
18
16
|
/**
|
|
@@ -61,12 +61,12 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
|
61
61
|
trigger: ElementScriptTrigger;
|
|
62
62
|
width: number;
|
|
63
63
|
height: number;
|
|
64
|
-
playerVars: YT.PlayerVars;
|
|
65
64
|
ratio: string;
|
|
65
|
+
placeholderObjectFit: "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
66
|
+
playerVars: YT.PlayerVars;
|
|
66
67
|
cookies: boolean;
|
|
67
68
|
thumbnailSize: YoutubeThumbnailSize;
|
|
68
69
|
webp: boolean;
|
|
69
|
-
placeholderObjectFit: "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
70
70
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
71
71
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
72
72
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script setup>
|
|
2
|
-
import { computed, onBeforeUnmount, onMounted, ref, watch } from "vue";
|
|
3
2
|
import { defu } from "defu";
|
|
4
3
|
import { useHead } from "nuxt/app";
|
|
4
|
+
import { computed, onBeforeUnmount, onMounted, ref, watch } from "vue";
|
|
5
5
|
import { useScriptTriggerElement } from "../composables/useScriptTriggerElement";
|
|
6
6
|
import { useScriptYouTubePlayer } from "../registry/youtube-player";
|
|
7
7
|
import ScriptAriaLoadingIndicator from "./ScriptAriaLoadingIndicator.vue";
|
|
@@ -30,6 +30,7 @@ const events = [
|
|
|
30
30
|
"onError",
|
|
31
31
|
"onApiChange"
|
|
32
32
|
];
|
|
33
|
+
const CAMEL_CASE_RE = /([A-Z])/g;
|
|
33
34
|
const rootEl = ref();
|
|
34
35
|
const youtubeEl = ref();
|
|
35
36
|
const ready = ref(false);
|
|
@@ -70,9 +71,11 @@ onMounted(() => {
|
|
|
70
71
|
onLoaded(async (instance) => {
|
|
71
72
|
if (!isTriggered.value && trigger instanceof Promise) {
|
|
72
73
|
const triggered = await trigger;
|
|
73
|
-
if (!triggered)
|
|
74
|
+
if (!triggered)
|
|
75
|
+
return;
|
|
74
76
|
}
|
|
75
|
-
if (!youtubeEl.value)
|
|
77
|
+
if (!youtubeEl.value)
|
|
78
|
+
return;
|
|
76
79
|
const YouTube = instance.YT instanceof Promise ? await instance.YT : instance.YT;
|
|
77
80
|
await new Promise((resolve) => {
|
|
78
81
|
if (typeof YT.Player === "undefined")
|
|
@@ -80,7 +83,8 @@ onMounted(() => {
|
|
|
80
83
|
else
|
|
81
84
|
resolve();
|
|
82
85
|
});
|
|
83
|
-
if (!youtubeEl.value)
|
|
86
|
+
if (!youtubeEl.value)
|
|
87
|
+
return;
|
|
84
88
|
player.value = new YT.Player(youtubeEl.value, {
|
|
85
89
|
host: !props.cookies ? "https://www.youtube-nocookie.com" : "https://www.youtube.com",
|
|
86
90
|
videoId: props.videoId,
|
|
@@ -89,7 +93,7 @@ onMounted(() => {
|
|
|
89
93
|
playerVars: props.playerVars,
|
|
90
94
|
...props.playerOptions,
|
|
91
95
|
events: Object.fromEntries(events.map((event) => [event, (e) => {
|
|
92
|
-
const emitEventName = event.replace(
|
|
96
|
+
const emitEventName = event.replace(CAMEL_CASE_RE, "-$1").replace("on-", "").toLowerCase();
|
|
93
97
|
emits(emitEventName, e);
|
|
94
98
|
if (event === "onReady") {
|
|
95
99
|
ready.value = true;
|
|
@@ -151,6 +155,8 @@ const placeholderAttrs = computed(() => {
|
|
|
151
155
|
src: isFallbackPlaceHolder.value ? fallbackPlaceHolder.value : placeholder.value,
|
|
152
156
|
alt: "",
|
|
153
157
|
loading: props.aboveTheFold ? "eager" : "lazy",
|
|
158
|
+
// @ts-expect-error untyped
|
|
159
|
+
fetchpriority: props.aboveTheFold ? "high" : void 0,
|
|
154
160
|
style: {
|
|
155
161
|
width: "100%",
|
|
156
162
|
objectFit: props.placeholderObjectFit,
|
|
@@ -61,12 +61,12 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {
|
|
|
61
61
|
trigger: ElementScriptTrigger;
|
|
62
62
|
width: number;
|
|
63
63
|
height: number;
|
|
64
|
-
playerVars: YT.PlayerVars;
|
|
65
64
|
ratio: string;
|
|
65
|
+
placeholderObjectFit: "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
66
|
+
playerVars: YT.PlayerVars;
|
|
66
67
|
cookies: boolean;
|
|
67
68
|
thumbnailSize: YoutubeThumbnailSize;
|
|
68
69
|
webp: boolean;
|
|
69
|
-
placeholderObjectFit: "cover" | "contain" | "fill" | "none" | "scale-down";
|
|
70
70
|
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
71
71
|
declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
|
|
72
72
|
declare const _default: typeof __VLS_export;
|
|
@@ -1,9 +1,100 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { resolveTrigger } from "#build/nuxt-scripts-trigger-resolver";
|
|
2
2
|
import { useScript as _useScript } from "@unhead/vue/scripts";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
3
|
+
import { defu } from "defu";
|
|
4
|
+
import { injectHead, onNuxtReady, useHead, useNuxtApp, useRuntimeConfig } from "nuxt/app";
|
|
5
|
+
import { markRaw, ref } from "vue";
|
|
5
6
|
import { logger } from "../logger.js";
|
|
6
|
-
|
|
7
|
+
function resolveProxyPrefix() {
|
|
8
|
+
const devtoolsConfig = useRuntimeConfig().public["nuxt-scripts-devtools"];
|
|
9
|
+
return devtoolsConfig?.proxyPrefix || "/_scripts/p";
|
|
10
|
+
}
|
|
11
|
+
function toNetworkRequest(entry, proxyPrefix) {
|
|
12
|
+
const isProxied = entry.name.includes(`${proxyPrefix}/`);
|
|
13
|
+
return {
|
|
14
|
+
url: entry.name,
|
|
15
|
+
startTime: entry.startTime,
|
|
16
|
+
duration: entry.duration,
|
|
17
|
+
transferSize: entry.transferSize,
|
|
18
|
+
encodedBodySize: entry.encodedBodySize,
|
|
19
|
+
decodedBodySize: entry.decodedBodySize,
|
|
20
|
+
initiatorType: entry.initiatorType,
|
|
21
|
+
dns: entry.domainLookupEnd - entry.domainLookupStart,
|
|
22
|
+
connect: entry.connectEnd - entry.connectStart,
|
|
23
|
+
ssl: entry.secureConnectionStart > 0 ? entry.connectEnd - entry.secureConnectionStart : 0,
|
|
24
|
+
ttfb: entry.responseStart - entry.requestStart,
|
|
25
|
+
download: entry.responseEnd - entry.responseStart,
|
|
26
|
+
isProxied
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function createDomainMatcher(domains, proxyPrefix) {
|
|
30
|
+
const localHostname = window.location.hostname;
|
|
31
|
+
return function matchesScript(entry) {
|
|
32
|
+
try {
|
|
33
|
+
const entryUrl = new URL(entry.name, window.location.origin);
|
|
34
|
+
if (entryUrl.hostname !== localHostname && domains.has(entryUrl.hostname))
|
|
35
|
+
return true;
|
|
36
|
+
const proxyPath = `${proxyPrefix}/`;
|
|
37
|
+
const proxyIdx = entryUrl.pathname.indexOf(proxyPath);
|
|
38
|
+
if (proxyIdx !== -1) {
|
|
39
|
+
const afterPrefix = entryUrl.pathname.slice(proxyIdx + proxyPath.length);
|
|
40
|
+
const proxyDomain = afterPrefix.split("/")[0];
|
|
41
|
+
if (proxyDomain && domains.has(proxyDomain))
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
} catch {
|
|
45
|
+
}
|
|
46
|
+
return false;
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function observeNetworkRequests(payload, domains, onUpdate) {
|
|
50
|
+
if (typeof PerformanceObserver === "undefined")
|
|
51
|
+
return () => {
|
|
52
|
+
};
|
|
53
|
+
const proxyPrefix = resolveProxyPrefix();
|
|
54
|
+
const matchesScript = createDomainMatcher(domains, proxyPrefix);
|
|
55
|
+
const seen = /* @__PURE__ */ new Set();
|
|
56
|
+
function entryKey(entry) {
|
|
57
|
+
return `${entry.name}@${entry.startTime}`;
|
|
58
|
+
}
|
|
59
|
+
function processEntry(entry) {
|
|
60
|
+
const key = entryKey(entry);
|
|
61
|
+
if (seen.has(key))
|
|
62
|
+
return false;
|
|
63
|
+
if (!matchesScript(entry))
|
|
64
|
+
return false;
|
|
65
|
+
seen.add(key);
|
|
66
|
+
payload.networkRequests.push(toNetworkRequest(entry, proxyPrefix));
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
for (const entry of performance.getEntriesByType("resource"))
|
|
70
|
+
processEntry(entry);
|
|
71
|
+
const observer = new PerformanceObserver((list) => {
|
|
72
|
+
let added = false;
|
|
73
|
+
for (const entry of list.getEntries()) {
|
|
74
|
+
if (processEntry(entry))
|
|
75
|
+
added = true;
|
|
76
|
+
}
|
|
77
|
+
if (added)
|
|
78
|
+
onUpdate();
|
|
79
|
+
});
|
|
80
|
+
observer.observe({ type: "resource", buffered: false });
|
|
81
|
+
return () => observer.disconnect();
|
|
82
|
+
}
|
|
83
|
+
function extractExternalHostname(src) {
|
|
84
|
+
if (!src)
|
|
85
|
+
return "";
|
|
86
|
+
try {
|
|
87
|
+
const hostname = new URL(src, window.location.origin).hostname;
|
|
88
|
+
return hostname === window.location.hostname ? "" : hostname;
|
|
89
|
+
} catch {
|
|
90
|
+
return "";
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function ensureScripts(nuxtApp) {
|
|
94
|
+
if (!nuxtApp.$scripts) {
|
|
95
|
+
nuxtApp.$scripts = {};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
7
98
|
function useNuxtScriptRuntimeConfig() {
|
|
8
99
|
return useRuntimeConfig().public["nuxt-scripts"];
|
|
9
100
|
}
|
|
@@ -22,16 +113,44 @@ export function useScript(input, options) {
|
|
|
22
113
|
script: [{ src, type: "text/partytown" }]
|
|
23
114
|
});
|
|
24
115
|
const nuxtApp2 = useNuxtApp();
|
|
25
|
-
nuxtApp2
|
|
116
|
+
ensureScripts(nuxtApp2);
|
|
26
117
|
const status = ref("loaded");
|
|
118
|
+
let disconnectObserver = () => {
|
|
119
|
+
};
|
|
27
120
|
const stub = {
|
|
28
121
|
id: src,
|
|
29
122
|
status,
|
|
30
123
|
load: () => Promise.resolve({}),
|
|
31
|
-
remove: () =>
|
|
124
|
+
remove: () => {
|
|
125
|
+
disconnectObserver();
|
|
126
|
+
return false;
|
|
127
|
+
},
|
|
32
128
|
entry: void 0
|
|
33
129
|
};
|
|
34
130
|
nuxtApp2.$scripts[src] = stub;
|
|
131
|
+
if (import.meta.dev && import.meta.client) {
|
|
132
|
+
let syncScripts = function() {
|
|
133
|
+
nuxtApp2._scripts[src] = payload;
|
|
134
|
+
nuxtApp2.hooks.callHook("scripts:updated", { scripts: nuxtApp2._scripts });
|
|
135
|
+
};
|
|
136
|
+
nuxtApp2._scripts = nuxtApp2._scripts || {};
|
|
137
|
+
const scriptHostname = extractExternalHostname(src);
|
|
138
|
+
const domains = /* @__PURE__ */ new Set([
|
|
139
|
+
...scriptHostname ? [scriptHostname] : [],
|
|
140
|
+
...options.devtools?.domains || []
|
|
141
|
+
]);
|
|
142
|
+
const payload = {
|
|
143
|
+
...options.devtools,
|
|
144
|
+
src,
|
|
145
|
+
$script: stub,
|
|
146
|
+
events: [
|
|
147
|
+
{ type: "status", status: "loaded", at: Date.now() }
|
|
148
|
+
],
|
|
149
|
+
networkRequests: []
|
|
150
|
+
};
|
|
151
|
+
disconnectObserver = observeNetworkRequests(payload, domains, syncScripts);
|
|
152
|
+
syncScripts();
|
|
153
|
+
}
|
|
35
154
|
return stub;
|
|
36
155
|
}
|
|
37
156
|
if (import.meta.dev && options.bundle === "unsupported") {
|
|
@@ -50,7 +169,7 @@ export function useScript(input, options) {
|
|
|
50
169
|
if (!options.head) {
|
|
51
170
|
throw new Error("useScript() has been called without Nuxt context.");
|
|
52
171
|
}
|
|
53
|
-
nuxtApp
|
|
172
|
+
ensureScripts(nuxtApp);
|
|
54
173
|
const exists = !!nuxtApp.$scripts?.[id];
|
|
55
174
|
const err = options._validate?.();
|
|
56
175
|
if (import.meta.dev && import.meta.client && err) {
|
|
@@ -109,7 +228,8 @@ export function useScript(input, options) {
|
|
|
109
228
|
...options.devtools,
|
|
110
229
|
src: input.src,
|
|
111
230
|
$script: null,
|
|
112
|
-
events: []
|
|
231
|
+
events: [],
|
|
232
|
+
networkRequests: []
|
|
113
233
|
};
|
|
114
234
|
nuxtApp._scripts = nuxtApp._scripts || {};
|
|
115
235
|
if (!nuxtApp._scripts[instance.id]) {
|
|
@@ -149,8 +269,28 @@ export function useScript(input, options) {
|
|
|
149
269
|
trigger: options?.trigger,
|
|
150
270
|
at: Date.now()
|
|
151
271
|
});
|
|
272
|
+
const scriptHostname = extractExternalHostname(input.src);
|
|
273
|
+
const domains = /* @__PURE__ */ new Set([
|
|
274
|
+
...scriptHostname ? [scriptHostname] : [],
|
|
275
|
+
...options.devtools?.domains || []
|
|
276
|
+
]);
|
|
277
|
+
let disconnectObserver = observeNetworkRequests(payload, domains, syncScripts);
|
|
278
|
+
const _origRemove = instance.remove;
|
|
279
|
+
const _origReload = instance.reload;
|
|
280
|
+
instance.remove = () => {
|
|
281
|
+
disconnectObserver();
|
|
282
|
+
return _origRemove();
|
|
283
|
+
};
|
|
284
|
+
instance.reload = async () => {
|
|
285
|
+
disconnectObserver();
|
|
286
|
+
const result = await _origReload();
|
|
287
|
+
disconnectObserver = observeNetworkRequests(payload, domains, syncScripts);
|
|
288
|
+
return result;
|
|
289
|
+
};
|
|
152
290
|
syncScripts();
|
|
153
291
|
}
|
|
154
292
|
}
|
|
293
|
+
markRaw(instance);
|
|
294
|
+
instance.toJSON = () => ({ id: instance.id, status: instance.status.value });
|
|
155
295
|
return instance;
|
|
156
296
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { useNuxtApp, useRoute
|
|
2
|
-
import {
|
|
1
|
+
import { injectHead, useNuxtApp, useRoute } from "nuxt/app";
|
|
2
|
+
import { onScopeDispose, ref } from "vue";
|
|
3
3
|
export function useScriptEventPage(onChange) {
|
|
4
4
|
const nuxt = useNuxtApp();
|
|
5
5
|
const route = useRoute();
|
|
@@ -1,12 +1,22 @@
|
|
|
1
|
+
import type { Ref } from 'vue';
|
|
1
2
|
import type { ConsentScriptTriggerOptions } from '../types.js';
|
|
2
3
|
interface UseConsentScriptTriggerApi extends Promise<void> {
|
|
3
4
|
/**
|
|
4
5
|
* A function that can be called to accept the consent and load the script.
|
|
5
6
|
*/
|
|
6
7
|
accept: () => void;
|
|
8
|
+
/**
|
|
9
|
+
* A function that can be called to revoke consent and signal the script should be unloaded.
|
|
10
|
+
*/
|
|
11
|
+
revoke: () => void;
|
|
12
|
+
/**
|
|
13
|
+
* Reactive reference to the consent state
|
|
14
|
+
*/
|
|
15
|
+
consented: Ref<boolean>;
|
|
7
16
|
}
|
|
8
17
|
/**
|
|
9
18
|
* Load a script once consent has been provided either through a resolvable `consent` or calling the `accept` method.
|
|
19
|
+
* Supports revoking consent via the reactive `consented` ref. Consumers should watch `consented` to react to revocation.
|
|
10
20
|
* @param options
|
|
11
21
|
*/
|
|
12
22
|
export declare function useScriptTriggerConsent(options?: ConsentScriptTriggerOptions): UseConsentScriptTriggerApi;
|
|
@@ -1,14 +1,37 @@
|
|
|
1
|
+
import { onNuxtReady, requestIdleCallback, tryUseNuxtApp } from "nuxt/app";
|
|
1
2
|
import { isRef, ref, toValue, watch } from "vue";
|
|
2
|
-
import { tryUseNuxtApp, onNuxtReady, requestIdleCallback } from "nuxt/app";
|
|
3
3
|
export function useScriptTriggerConsent(options) {
|
|
4
|
-
if (import.meta.server)
|
|
5
|
-
|
|
4
|
+
if (import.meta.server) {
|
|
5
|
+
const p = new Promise(() => {
|
|
6
6
|
});
|
|
7
|
+
p.accept = () => {
|
|
8
|
+
};
|
|
9
|
+
p.revoke = () => {
|
|
10
|
+
};
|
|
11
|
+
p.consented = ref(false);
|
|
12
|
+
return p;
|
|
13
|
+
}
|
|
7
14
|
const consented = ref(false);
|
|
8
15
|
const nuxtApp = tryUseNuxtApp();
|
|
16
|
+
if (options?.consent) {
|
|
17
|
+
if (isRef(options?.consent)) {
|
|
18
|
+
watch(options.consent, (_val) => {
|
|
19
|
+
const val = toValue(_val);
|
|
20
|
+
consented.value = Boolean(val);
|
|
21
|
+
}, { immediate: true });
|
|
22
|
+
} else if (typeof options?.consent === "boolean") {
|
|
23
|
+
consented.value = options?.consent;
|
|
24
|
+
} else if (options?.consent instanceof Promise) {
|
|
25
|
+
options.consent.then((res) => {
|
|
26
|
+
consented.value = typeof res === "boolean" ? res : true;
|
|
27
|
+
}).catch(() => {
|
|
28
|
+
consented.value = false;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
}
|
|
9
32
|
const promise = new Promise((resolve) => {
|
|
10
|
-
watch(consented, (
|
|
11
|
-
if (
|
|
33
|
+
watch(consented, (newValue, oldValue) => {
|
|
34
|
+
if (newValue && !oldValue) {
|
|
12
35
|
const runner = nuxtApp?.runWithContext || ((cb) => cb());
|
|
13
36
|
if (options?.postConsentTrigger instanceof Promise) {
|
|
14
37
|
options.postConsentTrigger.then(() => runner(resolve));
|
|
@@ -32,24 +55,14 @@ export function useScriptTriggerConsent(options) {
|
|
|
32
55
|
}
|
|
33
56
|
runner(resolve);
|
|
34
57
|
}
|
|
35
|
-
});
|
|
36
|
-
if (options?.consent) {
|
|
37
|
-
if (isRef(options?.consent)) {
|
|
38
|
-
watch(options.consent, (_val) => {
|
|
39
|
-
const val = toValue(_val);
|
|
40
|
-
consented.value = Boolean(val);
|
|
41
|
-
}, { immediate: true });
|
|
42
|
-
} else if (typeof options?.consent === "boolean") {
|
|
43
|
-
consented.value = options?.consent;
|
|
44
|
-
} else if (options?.consent instanceof Promise) {
|
|
45
|
-
options?.consent.then((res) => {
|
|
46
|
-
consented.value = typeof res === "boolean" ? res : true;
|
|
47
|
-
});
|
|
48
|
-
}
|
|
49
|
-
}
|
|
58
|
+
}, { immediate: true });
|
|
50
59
|
});
|
|
51
60
|
promise.accept = () => {
|
|
52
61
|
consented.value = true;
|
|
53
62
|
};
|
|
63
|
+
promise.revoke = () => {
|
|
64
|
+
consented.value = false;
|
|
65
|
+
};
|
|
66
|
+
promise.consented = consented;
|
|
54
67
|
return promise;
|
|
55
68
|
}
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
useEventListener,
|
|
3
3
|
useIntersectionObserver
|
|
4
4
|
} from "@vueuse/core";
|
|
5
|
-
import {
|
|
5
|
+
import { tryOnMounted, tryOnScopeDispose } from "@vueuse/shared";
|
|
6
6
|
import { watch } from "vue";
|
|
7
7
|
function useElementVisibilityPromise(element) {
|
|
8
8
|
let observer;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { tryOnScopeDispose } from "@vueuse/shared";
|
|
2
1
|
import { useTimeoutFn } from "@vueuse/core";
|
|
2
|
+
import { tryOnScopeDispose } from "@vueuse/shared";
|
|
3
3
|
import { onNuxtReady } from "nuxt/app";
|
|
4
4
|
export function useScriptTriggerIdleTimeout(options) {
|
|
5
5
|
if (import.meta.server) {
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dev-only client plugin that bridges script state to the standalone devtools API.
|
|
3
|
+
* When `_standaloneDevtools` is enabled, this plugin listens for `scripts:updated`
|
|
4
|
+
* and POSTs a serializable snapshot of script state to `/__nuxt-scripts-api/state`.
|
|
5
|
+
* Also syncs the current route path so standalone devtools can show which page the user is on.
|
|
6
|
+
*/
|
|
7
|
+
declare const _default: import("nuxt/app").Plugin<Record<string, unknown>> & import("nuxt/app").ObjectPlugin<Record<string, unknown>>;
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { defineNuxtPlugin, useNuxtApp, useRuntimeConfig } from "nuxt/app";
|
|
2
|
+
export default defineNuxtPlugin(() => {
|
|
3
|
+
const nuxtApp = useNuxtApp();
|
|
4
|
+
const config = useRuntimeConfig();
|
|
5
|
+
const version = config.public["nuxt-scripts"]?.version;
|
|
6
|
+
const firstPartyData = config.public["nuxt-scripts-devtools"] || null;
|
|
7
|
+
let lastScripts = {};
|
|
8
|
+
function pushState(scripts) {
|
|
9
|
+
if (scripts)
|
|
10
|
+
lastScripts = scripts;
|
|
11
|
+
const route = nuxtApp.$router?.currentRoute?.value;
|
|
12
|
+
if (route?.path?.startsWith("/__nuxt-scripts"))
|
|
13
|
+
return;
|
|
14
|
+
fetch("/__nuxt-scripts-api/state", {
|
|
15
|
+
method: "POST",
|
|
16
|
+
headers: { "Content-Type": "application/json" },
|
|
17
|
+
body: JSON.stringify({
|
|
18
|
+
scripts: serializeScripts(lastScripts),
|
|
19
|
+
version,
|
|
20
|
+
firstPartyData,
|
|
21
|
+
route: route ? { path: route.path, fullPath: route.fullPath, query: route.query } : null
|
|
22
|
+
})
|
|
23
|
+
}).catch(() => {
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
nuxtApp.hooks.hook("scripts:updated", (ctx) => {
|
|
27
|
+
pushState(ctx.scripts);
|
|
28
|
+
});
|
|
29
|
+
nuxtApp.$router?.afterEach(() => {
|
|
30
|
+
pushState();
|
|
31
|
+
});
|
|
32
|
+
pushState(nuxtApp._scripts || {});
|
|
33
|
+
});
|
|
34
|
+
function serializeScripts(scripts) {
|
|
35
|
+
const result = {};
|
|
36
|
+
for (const [key, script] of Object.entries(scripts)) {
|
|
37
|
+
result[key] = {
|
|
38
|
+
src: script.src,
|
|
39
|
+
key: script.key,
|
|
40
|
+
registryKey: script.registryKey,
|
|
41
|
+
registryMeta: script.registryMeta,
|
|
42
|
+
loadedFrom: script.loadedFrom && script.loadedFrom !== "unknown" ? script.loadedFrom : void 0,
|
|
43
|
+
events: script.events,
|
|
44
|
+
networkRequests: script.networkRequests,
|
|
45
|
+
// Serialize $script status as a plain string (methods won't transfer)
|
|
46
|
+
$script: script.$script ? { status: typeof script.$script.status === "object" ? script.$script.status.value : script.$script.status } : { status: "unknown" }
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return result;
|
|
50
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { RegistryScriptInput } from '#nuxt-scripts/types';
|
|
2
|
+
import { BingUetOptions } from './schemas.js';
|
|
3
|
+
export { BingUetOptions };
|
|
4
|
+
export type BingUetInput = RegistryScriptInput<typeof BingUetOptions, true, false>;
|
|
5
|
+
export interface BingUetApi {
|
|
6
|
+
uetq: {
|
|
7
|
+
push: (event: string | Record<string, any>) => void;
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
declare global {
|
|
11
|
+
interface Window {
|
|
12
|
+
UET: new (options: {
|
|
13
|
+
ti: string;
|
|
14
|
+
enableAutoSpaTracking?: boolean;
|
|
15
|
+
q?: any[];
|
|
16
|
+
}) => BingUetApi['uetq'];
|
|
17
|
+
uetq: any[] | BingUetApi['uetq'];
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export declare function useScriptBingUet<T extends BingUetApi>(_options?: BingUetInput): import("#nuxt-scripts/types").UseScriptContext<T>;
|