@nuxt/scripts 1.0.0-beta.7 → 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.
Files changed (256) hide show
  1. package/dist/devtools-client/200.html +1 -0
  2. package/dist/devtools-client/404.html +1 -0
  3. package/dist/devtools-client/_fonts/4ppnHhMi-pBsWSPo7mY0avYxlDoAg1N3PTzCwXLZ5rA-d9oibkGnTd1JL3tc_xnaVgBLYmOB8kjrK2cvZaqwj9s.woff2 +0 -0
  4. package/dist/devtools-client/_fonts/4qBuU9MRVUlPZNPSF7Xom_sK8RBEnfYu-9VXFrdq8A8-8TDwLE1HAj1sQn7XxVWtM_7sIaPM-DTdO3Pf8U2DF1U.woff2 +0 -0
  5. package/dist/devtools-client/_fonts/6dYsbWUd_BpKJ7mdDihgOcya1gHXLpJBuMYXux3WMjE-q3fYNS8YbW5n7ZeXI2vSNgkRWW5VDPKAl51SNTjG2qk.woff2 +0 -0
  6. package/dist/devtools-client/_fonts/Lr-hqqZZsYmCt0ITUlr1CUrWim9fsKvoDFZliMxgNHY-iTa_Yt_PzhOY9TX7ZXdSlEPim6iRt92xhECwaxWxd5w.woff2 +0 -0
  7. package/dist/devtools-client/_fonts/OknHvWI6KtYn1JQBzX7eSpNDBQ8520F9TvSUJYkVf6A-xeZn9253svK_8Q2LD0XEruY_MnEsuCRO5LenPoggC0Y.woff2 +0 -0
  8. package/dist/devtools-client/_fonts/PV2hrQG6wq5BlIPDjdL1IcOflycaghyt5MHzlBqZtlo-lb_WexLz3VZqfTN0oi554iBH5tT2j2UFEV-XErCAS3E.woff2 +0 -0
  9. package/dist/devtools-client/_fonts/UA7OtwYHwGN_HjcVGTdmiQxUit7FlqkCwxVUWSeXVnQ-B4OXCFOL_tWrYODpQTc07aMaj0c2cewTOmBRWR9tD-A.woff2 +0 -0
  10. package/dist/devtools-client/_fonts/VE4cDVCv5MxbFM7ZLoLCGbIpNd71zhp7MDI9lmN5Y7I-xZyDYCUVrd6LV8eVGF3Um3UZjBFuUtDGtvdyTBBRYBo.woff2 +0 -0
  11. package/dist/devtools-client/_fonts/fVoGbnMbBFd5L9BBp9fUPavUSkZ_EmsQNSyadkT-108-U4T0khaeLQSIhtt9eVvaCEKJjtWJ4ioRJOf8hvqkWY0.woff2 +0 -0
  12. package/dist/devtools-client/_fonts/lQAxeCEs1R0Lw-H9XRU1RlOARQN8J6npRsPjyEDMe5s-_DUSLEkO3tKTuun_gSnDLoQPVEnpOnyqZMOw0ByZ6PA.woff2 +0 -0
  13. package/dist/devtools-client/_fonts/lntlqNHKLV2n82yTwMde70QqOjcfLE2XJ5oKZ3vRPWc-z6TxpIZQdWXztWLr9_OFWqt_WJJoeGtuK_-XQMZGQwE.woff2 +0 -0
  14. package/dist/devtools-client/_fonts/qxAYvKsXWeYv731eb-h5TRurcdIP_W44mpNdX-HABAk-zUDeMEFlNtNbrwvT9JxLEBg0TphGy70O6RfIoIX_ZwU.woff2 +0 -0
  15. package/dist/devtools-client/_nuxt/B3kN3DAy.js +1 -0
  16. package/dist/devtools-client/_nuxt/B8PEiB0p.js +1 -0
  17. package/dist/devtools-client/_nuxt/C8jhSQ8l.js +1 -0
  18. package/dist/devtools-client/_nuxt/CJD6wrkT.js +188 -0
  19. package/dist/devtools-client/_nuxt/CfOsp0mU.js +1 -0
  20. package/dist/devtools-client/_nuxt/DKL6PHO3.js +1 -0
  21. package/dist/devtools-client/_nuxt/ajngqPCs.js +1 -0
  22. package/dist/devtools-client/_nuxt/builds/latest.json +1 -0
  23. package/dist/devtools-client/_nuxt/builds/meta/b800a0be-5cab-4ea6-89e3-dd3a85690a73.json +1 -0
  24. package/dist/devtools-client/_nuxt/dlaR8P-P.js +1 -0
  25. package/dist/devtools-client/_nuxt/entry.BwpOBArY.css +1 -0
  26. package/dist/devtools-client/_nuxt/error-404.CvOVjXeC.css +1 -0
  27. package/dist/devtools-client/_nuxt/error-500.BIm53nmx.css +1 -0
  28. package/dist/devtools-client/_nuxt/first-party.C8Ha4JLM.css +1 -0
  29. package/dist/devtools-client/_nuxt/index.CA-OpSj0.css +1 -0
  30. package/dist/devtools-client/_nuxt/registry.B9lnjF_b.css +1 -0
  31. package/dist/devtools-client/_nuxt/wDzz0qaB.js +1 -0
  32. package/dist/devtools-client/docs/index.html +1 -0
  33. package/dist/devtools-client/first-party/index.html +1 -0
  34. package/dist/devtools-client/index.html +1 -0
  35. package/dist/devtools-client/registry/index.html +1 -0
  36. package/dist/module.d.mts +29 -84
  37. package/dist/module.d.ts +121 -0
  38. package/dist/module.json +1 -1
  39. package/dist/module.mjs +939 -755
  40. package/dist/registry.d.mts +91 -4
  41. package/dist/registry.d.ts +93 -0
  42. package/dist/registry.mjs +668 -326
  43. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.d.vue.ts +15 -79
  44. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue +78 -180
  45. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue.d.ts +15 -79
  46. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.d.vue.ts +6 -55
  47. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue +12 -83
  48. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue.d.ts +6 -55
  49. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.d.vue.ts +5 -1
  50. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue +24 -38
  51. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue.d.ts +5 -1
  52. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.d.vue.ts +43 -0
  53. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue +60 -0
  54. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue.d.ts +43 -0
  55. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.d.vue.ts +4 -0
  56. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue +22 -26
  57. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue.d.ts +4 -0
  58. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.d.vue.ts +9 -5
  59. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue +56 -57
  60. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue.d.ts +9 -5
  61. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.d.vue.ts +24 -41
  62. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue +69 -73
  63. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue.d.ts +24 -41
  64. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.d.vue.ts +36 -4
  65. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue +82 -37
  66. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue.d.ts +36 -4
  67. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.d.vue.ts +78 -0
  68. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue +222 -0
  69. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsOverlayView.vue.d.ts +78 -0
  70. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.d.vue.ts +10 -3
  71. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue +9 -41
  72. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue.d.ts +10 -3
  73. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.d.vue.ts +7 -3
  74. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue +23 -38
  75. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue.d.ts +7 -3
  76. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.d.vue.ts +7 -3
  77. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue +23 -38
  78. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue.d.ts +7 -3
  79. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.d.vue.ts +7 -3
  80. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue +24 -38
  81. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue.d.ts +7 -3
  82. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.d.vue.ts +200 -0
  83. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue +165 -0
  84. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue.d.ts +200 -0
  85. package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.d.ts +13 -0
  86. package/dist/runtime/components/GoogleMaps/bindGoogleMapsEvents.js +8 -0
  87. package/dist/runtime/components/GoogleMaps/injectionKeys.d.ts +10 -0
  88. package/dist/runtime/components/GoogleMaps/injectionKeys.js +2 -0
  89. package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.d.ts +48 -0
  90. package/dist/runtime/components/GoogleMaps/useGoogleMapsResource.js +51 -0
  91. package/dist/runtime/components/ScriptBlueskyEmbed.d.vue.ts +85 -0
  92. package/dist/runtime/components/ScriptBlueskyEmbed.vue +88 -0
  93. package/dist/runtime/components/ScriptBlueskyEmbed.vue.d.ts +85 -0
  94. package/dist/runtime/components/ScriptCrisp.vue +1 -1
  95. package/dist/runtime/components/ScriptGoogleAdsense.vue +1 -1
  96. package/dist/runtime/components/ScriptGravatar.d.vue.ts +22 -0
  97. package/dist/runtime/components/ScriptGravatar.vue +46 -0
  98. package/dist/runtime/components/ScriptGravatar.vue.d.ts +22 -0
  99. package/dist/runtime/components/ScriptInstagramEmbed.d.vue.ts +1 -2
  100. package/dist/runtime/components/ScriptInstagramEmbed.vue +8 -3
  101. package/dist/runtime/components/ScriptInstagramEmbed.vue.d.ts +1 -2
  102. package/dist/runtime/components/ScriptIntercom.vue +4 -3
  103. package/dist/runtime/components/ScriptPayPalButtons.d.vue.ts +43 -32
  104. package/dist/runtime/components/ScriptPayPalButtons.vue +48 -79
  105. package/dist/runtime/components/ScriptPayPalButtons.vue.d.ts +43 -32
  106. package/dist/runtime/components/ScriptPayPalMessages.d.vue.ts +37 -23
  107. package/dist/runtime/components/ScriptPayPalMessages.vue +46 -50
  108. package/dist/runtime/components/ScriptPayPalMessages.vue.d.ts +37 -23
  109. package/dist/runtime/components/ScriptStripePricingTable.vue +2 -2
  110. package/dist/runtime/components/ScriptVimeoPlayer.d.vue.ts +9 -0
  111. package/dist/runtime/components/ScriptVimeoPlayer.vue +13 -10
  112. package/dist/runtime/components/ScriptVimeoPlayer.vue.d.ts +9 -0
  113. package/dist/runtime/components/ScriptXEmbed.d.vue.ts +0 -2
  114. package/dist/runtime/components/ScriptXEmbed.vue +14 -8
  115. package/dist/runtime/components/ScriptXEmbed.vue.d.ts +0 -2
  116. package/dist/runtime/components/ScriptYouTubePlayer.d.vue.ts +2 -2
  117. package/dist/runtime/components/ScriptYouTubePlayer.vue +11 -5
  118. package/dist/runtime/components/ScriptYouTubePlayer.vue.d.ts +2 -2
  119. package/dist/runtime/composables/useScript.js +148 -8
  120. package/dist/runtime/composables/useScriptEventPage.js +2 -2
  121. package/dist/runtime/composables/useScriptTriggerConsent.d.ts +10 -0
  122. package/dist/runtime/composables/useScriptTriggerConsent.js +33 -20
  123. package/dist/runtime/composables/useScriptTriggerElement.js +1 -1
  124. package/dist/runtime/composables/useScriptTriggerIdleTimeout.js +1 -1
  125. package/dist/runtime/devtools-standalone-bridge.client.d.ts +8 -0
  126. package/dist/runtime/devtools-standalone-bridge.client.js +50 -0
  127. package/dist/runtime/registry/bing-uet.d.ts +20 -0
  128. package/dist/runtime/registry/bing-uet.js +29 -0
  129. package/dist/runtime/registry/bluesky-embed.d.ts +116 -0
  130. package/dist/runtime/registry/bluesky-embed.js +72 -0
  131. package/dist/runtime/registry/clarity.d.ts +10 -15
  132. package/dist/runtime/registry/clarity.js +22 -31
  133. package/dist/runtime/registry/cloudflare-web-analytics.d.ts +2 -13
  134. package/dist/runtime/registry/cloudflare-web-analytics.js +2 -14
  135. package/dist/runtime/registry/crisp.d.ts +10 -40
  136. package/dist/runtime/registry/crisp.js +2 -33
  137. package/dist/runtime/registry/databuddy-analytics.d.ts +2 -35
  138. package/dist/runtime/registry/databuddy-analytics.js +20 -45
  139. package/dist/runtime/registry/fathom-analytics.d.ts +7 -26
  140. package/dist/runtime/registry/fathom-analytics.js +3 -25
  141. package/dist/runtime/registry/google-adsense.d.ts +3 -11
  142. package/dist/runtime/registry/google-adsense.js +2 -11
  143. package/dist/runtime/registry/google-analytics.d.ts +3 -5
  144. package/dist/runtime/registry/google-analytics.js +3 -8
  145. package/dist/runtime/registry/google-maps.d.ts +3 -9
  146. package/dist/runtime/registry/google-maps.js +2 -8
  147. package/dist/runtime/registry/google-recaptcha.d.ts +2 -6
  148. package/dist/runtime/registry/google-recaptcha.js +4 -12
  149. package/dist/runtime/registry/google-sign-in.d.ts +2 -13
  150. package/dist/runtime/registry/google-sign-in.js +2 -22
  151. package/dist/runtime/registry/google-tag-manager.d.ts +3 -28
  152. package/dist/runtime/registry/google-tag-manager.js +4 -27
  153. package/dist/runtime/registry/gravatar.d.ts +26 -0
  154. package/dist/runtime/registry/gravatar.js +36 -0
  155. package/dist/runtime/registry/hotjar.d.ts +4 -6
  156. package/dist/runtime/registry/hotjar.js +2 -5
  157. package/dist/runtime/registry/instagram-embed.d.ts +3 -18
  158. package/dist/runtime/registry/instagram-embed.js +4 -19
  159. package/dist/runtime/registry/intercom.d.ts +5 -13
  160. package/dist/runtime/registry/intercom.js +2 -12
  161. package/dist/runtime/registry/matomo-analytics.d.ts +3 -12
  162. package/dist/runtime/registry/matomo-analytics.js +3 -12
  163. package/dist/runtime/registry/meta-pixel.d.ts +4 -6
  164. package/dist/runtime/registry/meta-pixel.js +2 -4
  165. package/dist/runtime/registry/mixpanel-analytics.d.ts +22 -0
  166. package/dist/runtime/registry/mixpanel-analytics.js +46 -0
  167. package/dist/runtime/registry/npm.d.ts +3 -7
  168. package/dist/runtime/registry/npm.js +2 -9
  169. package/dist/runtime/registry/paypal.d.ts +4 -25
  170. package/dist/runtime/registry/paypal.js +3 -66
  171. package/dist/runtime/registry/plausible-analytics.js +19 -14
  172. package/dist/runtime/registry/posthog.d.ts +10 -12
  173. package/dist/runtime/registry/posthog.js +3 -12
  174. package/dist/runtime/registry/reddit-pixel.d.ts +5 -6
  175. package/dist/runtime/registry/reddit-pixel.js +2 -4
  176. package/dist/runtime/registry/rybbit-analytics.d.ts +2 -14
  177. package/dist/runtime/registry/rybbit-analytics.js +10 -20
  178. package/dist/runtime/registry/schemas.d.ts +982 -0
  179. package/dist/runtime/registry/schemas.js +937 -0
  180. package/dist/runtime/registry/segment.d.ts +2 -5
  181. package/dist/runtime/registry/segment.js +2 -5
  182. package/dist/runtime/registry/snapchat-pixel.d.ts +5 -34
  183. package/dist/runtime/registry/snapchat-pixel.js +2 -20
  184. package/dist/runtime/registry/stripe.d.ts +3 -4
  185. package/dist/runtime/registry/stripe.js +2 -4
  186. package/dist/runtime/registry/tiktok-pixel.d.ts +4 -7
  187. package/dist/runtime/registry/tiktok-pixel.js +2 -6
  188. package/dist/runtime/registry/umami-analytics.d.ts +2 -31
  189. package/dist/runtime/registry/umami-analytics.js +2 -36
  190. package/dist/runtime/registry/vercel-analytics.d.ts +29 -0
  191. package/dist/runtime/registry/vercel-analytics.js +84 -0
  192. package/dist/runtime/registry/vimeo-player.d.ts +2 -2
  193. package/dist/runtime/registry/vimeo-player.js +1 -1
  194. package/dist/runtime/registry/x-embed.d.ts +3 -17
  195. package/dist/runtime/registry/x-embed.js +3 -18
  196. package/dist/runtime/registry/x-pixel.d.ts +4 -7
  197. package/dist/runtime/registry/x-pixel.js +2 -5
  198. package/dist/runtime/registry/youtube-player.d.ts +7 -7
  199. package/dist/runtime/registry/youtube-player.js +1 -1
  200. package/dist/runtime/server/bluesky-embed-image.d.ts +2 -0
  201. package/dist/runtime/server/bluesky-embed-image.js +7 -0
  202. package/dist/runtime/server/bluesky-embed.d.ts +16 -0
  203. package/dist/runtime/server/bluesky-embed.js +59 -0
  204. package/dist/runtime/server/google-maps-geocode-proxy.d.ts +2 -0
  205. package/dist/runtime/server/google-maps-geocode-proxy.js +34 -0
  206. package/dist/runtime/server/google-static-maps-proxy.js +2 -13
  207. package/dist/runtime/server/gravatar-proxy.d.ts +2 -0
  208. package/dist/runtime/server/gravatar-proxy.js +46 -0
  209. package/dist/runtime/server/instagram-embed-asset.js +8 -41
  210. package/dist/runtime/server/instagram-embed-image.js +6 -53
  211. package/dist/runtime/server/instagram-embed.d.ts +16 -0
  212. package/dist/runtime/server/instagram-embed.js +176 -35
  213. package/dist/runtime/server/proxy-handler.js +101 -83
  214. package/dist/runtime/server/utils/image-proxy.d.ts +12 -0
  215. package/dist/runtime/server/utils/image-proxy.js +70 -0
  216. package/dist/runtime/server/utils/privacy.d.ts +1 -10
  217. package/dist/runtime/server/utils/privacy.js +60 -40
  218. package/dist/runtime/server/x-embed-image.js +5 -49
  219. package/dist/runtime/server/x-embed.js +3 -2
  220. package/dist/runtime/types.d.ts +272 -51
  221. package/dist/runtime/types.js +0 -2
  222. package/dist/runtime/utils/pure.d.ts +1 -1
  223. package/dist/runtime/utils.d.ts +6 -4
  224. package/dist/runtime/utils.js +31 -14
  225. package/dist/stats.d.mts +202 -0
  226. package/dist/stats.d.ts +202 -0
  227. package/dist/stats.mjs +3875 -0
  228. package/dist/types-source.d.mts +17 -0
  229. package/dist/types-source.d.ts +17 -0
  230. package/dist/types-source.mjs +3414 -0
  231. package/dist/types.d.mts +4 -2
  232. package/package.json +35 -61
  233. package/README.md +0 -86
  234. package/dist/client/200.html +0 -1
  235. package/dist/client/404.html +0 -1
  236. package/dist/client/_nuxt/BJa0m50V.js +0 -1
  237. package/dist/client/_nuxt/BPQ3VLAy.js +0 -1
  238. package/dist/client/_nuxt/Ci5iXYuB.js +0 -1
  239. package/dist/client/_nuxt/DaI2y8Uz.js +0 -162
  240. package/dist/client/_nuxt/builds/latest.json +0 -1
  241. package/dist/client/_nuxt/builds/meta/9b4fb16a-3c62-48b0-8295-126cb077b5d3.json +0 -1
  242. package/dist/client/_nuxt/entry.D45OuV0w.css +0 -1
  243. package/dist/client/_nuxt/error-404.B57D-jUQ.css +0 -1
  244. package/dist/client/_nuxt/error-500.DTHUW7BI.css +0 -1
  245. package/dist/client/_nuxt/vPLZfVXe.js +0 -1
  246. package/dist/client/index.html +0 -1
  247. package/dist/runtime/components/ScriptPayPalMarks.d.vue.ts +0 -52
  248. package/dist/runtime/components/ScriptPayPalMarks.vue +0 -69
  249. package/dist/runtime/components/ScriptPayPalMarks.vue.d.ts +0 -52
  250. package/dist/runtime/validation/mock.d.ts +0 -42
  251. package/dist/runtime/validation/mock.js +0 -21
  252. package/dist/runtime/validation/valibot.d.ts +0 -1
  253. package/dist/runtime/validation/valibot.js +0 -1
  254. /package/dist/{client → devtools-client}/_nuxt/CVO1_9PV.js +0 -0
  255. /package/dist/{client → devtools-client}/_nuxt/Cp-IABpG.js +0 -0
  256. /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
- maxWidth: "100%",
157
- width: `auto`,
158
- height: "auto",
159
- aspectRatio: `16/9`,
160
- position: "relative",
161
- backgroundColor: "black"
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: "contain",
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: "/api/_scripts/x-embed" },
8
- imageProxyEndpoint: { type: String, required: false, default: "/api/_scripts/x-embed-image" },
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(`${props.apiEndpoint}?id=${props.tweetId}`)
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, props.imageProxyEndpoint),
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, props.imageProxyEndpoint)
47
+ proxiedUrl: proxyXImageUrl(p.url, resolvedImageProxyEndpoint.value)
42
48
  })),
43
49
  video: t.video ? {
44
50
  ...t.video,
45
- posterProxied: proxyXImageUrl(t.video.poster, props.imageProxyEndpoint)
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, props.imageProxyEndpoint)
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) return;
74
+ if (!triggered)
75
+ return;
74
76
  }
75
- if (!youtubeEl.value) return;
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) return;
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(/([A-Z])/g, "-$1").replace("on-", "").toLowerCase();
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 { defu } from "defu";
1
+ import { resolveTrigger } from "#build/nuxt-scripts-trigger-resolver";
2
2
  import { useScript as _useScript } from "@unhead/vue/scripts";
3
- import { reactive, ref } from "vue";
4
- import { onNuxtReady, useNuxtApp, useRuntimeConfig, injectHead, useHead } from "nuxt/app";
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
- import { resolveTrigger } from "#build/nuxt-scripts-trigger-resolver";
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.$scripts = nuxtApp2.$scripts || reactive({});
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: () => false,
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.$scripts = nuxtApp.$scripts || reactive({});
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, injectHead } from "nuxt/app";
2
- import { ref, onScopeDispose } from "vue";
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
- return new Promise(() => {
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, (ready) => {
11
- if (ready) {
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 { tryOnScopeDispose, tryOnMounted } from "@vueuse/shared";
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>;