@nuxt/scripts 1.0.0-rc.8 → 1.0.0

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 (97) hide show
  1. package/dist/devtools-client/200.html +1 -1
  2. package/dist/devtools-client/404.html +1 -1
  3. package/dist/devtools-client/_nuxt/{BBS9G2Kb.js → Br5kvbNb.js} +1 -1
  4. package/dist/devtools-client/_nuxt/C25MBdR1.js +1 -0
  5. package/dist/devtools-client/_nuxt/{DCBsJT4N.js → Cg_OIb5q.js} +1 -1
  6. package/dist/devtools-client/_nuxt/{B4uHpJPz.js → D2o5loaz.js} +1 -1
  7. package/dist/devtools-client/_nuxt/De7Wf2b9.js +188 -0
  8. package/dist/devtools-client/_nuxt/{Cxq4HLPL.js → DnVCfhVR.js} +1 -1
  9. package/dist/devtools-client/_nuxt/builds/latest.json +1 -1
  10. package/dist/devtools-client/_nuxt/builds/meta/9d868e70-bc5a-425c-8c84-8defe5186920.json +1 -0
  11. package/dist/devtools-client/_nuxt/{entry.BwpOBArY.css → entry.BSxy0W1q.css} +1 -1
  12. package/dist/devtools-client/_nuxt/index.DZD1lwyI.css +1 -0
  13. package/dist/devtools-client/_nuxt/{DvZScWzI.js → pN4-T8ZD.js} +1 -1
  14. package/dist/devtools-client/docs/index.html +1 -1
  15. package/dist/devtools-client/first-party/index.html +1 -1
  16. package/dist/devtools-client/index.html +1 -1
  17. package/dist/devtools-client/registry/index.html +1 -1
  18. package/dist/module.d.mts +15 -0
  19. package/dist/module.d.ts +15 -0
  20. package/dist/module.json +1 -1
  21. package/dist/module.mjs +35 -8
  22. package/dist/registry.mjs +3 -3
  23. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue +6 -2
  24. package/dist/runtime/components/ScriptBlueskyEmbed.d.vue.ts +0 -1
  25. package/dist/runtime/components/ScriptBlueskyEmbed.vue +12 -10
  26. package/dist/runtime/components/ScriptBlueskyEmbed.vue.d.ts +0 -1
  27. package/dist/runtime/components/ScriptInstagramEmbed.vue +3 -1
  28. package/dist/runtime/components/ScriptXEmbed.d.vue.ts +0 -1
  29. package/dist/runtime/components/ScriptXEmbed.vue +11 -9
  30. package/dist/runtime/components/ScriptXEmbed.vue.d.ts +0 -1
  31. package/dist/runtime/composables/useScript.js +17 -6
  32. package/dist/runtime/composables/useScriptProxyToken.d.ts +12 -0
  33. package/dist/runtime/composables/useScriptProxyToken.js +4 -0
  34. package/dist/runtime/composables/useScriptProxyUrl.d.ts +12 -0
  35. package/dist/runtime/composables/useScriptProxyUrl.js +27 -0
  36. package/dist/runtime/plugins/proxy-token.server.d.ts +10 -0
  37. package/dist/runtime/plugins/proxy-token.server.js +17 -0
  38. package/dist/runtime/registry/bing-uet.d.ts +189 -11
  39. package/dist/runtime/registry/bing-uet.js +16 -2
  40. package/dist/runtime/registry/bluesky-embed.d.ts +0 -4
  41. package/dist/runtime/registry/bluesky-embed.js +0 -4
  42. package/dist/runtime/registry/clarity.d.ts +6 -2
  43. package/dist/runtime/registry/clarity.js +12 -1
  44. package/dist/runtime/registry/google-analytics.d.ts +6 -2
  45. package/dist/runtime/registry/google-analytics.js +12 -1
  46. package/dist/runtime/registry/google-tag-manager.d.ts +6 -2
  47. package/dist/runtime/registry/google-tag-manager.js +10 -1
  48. package/dist/runtime/registry/gravatar.js +10 -13
  49. package/dist/runtime/registry/matomo-analytics.d.ts +9 -3
  50. package/dist/runtime/registry/matomo-analytics.js +28 -1
  51. package/dist/runtime/registry/meta-pixel.d.ts +8 -2
  52. package/dist/runtime/registry/meta-pixel.js +10 -1
  53. package/dist/runtime/registry/mixpanel-analytics.d.ts +12 -2
  54. package/dist/runtime/registry/mixpanel-analytics.js +16 -4
  55. package/dist/runtime/registry/posthog.d.ts +8 -2
  56. package/dist/runtime/registry/posthog.js +15 -4
  57. package/dist/runtime/registry/schemas.d.ts +65 -0
  58. package/dist/runtime/registry/schemas.js +75 -8
  59. package/dist/runtime/registry/tiktok-pixel.d.ts +16 -2
  60. package/dist/runtime/registry/tiktok-pixel.js +22 -1
  61. package/dist/runtime/registry/x-embed.d.ts +0 -4
  62. package/dist/runtime/registry/x-embed.js +0 -4
  63. package/dist/runtime/server/bluesky-embed-image.d.ts +1 -1
  64. package/dist/runtime/server/bluesky-embed.d.ts +1 -15
  65. package/dist/runtime/server/bluesky-embed.js +22 -4
  66. package/dist/runtime/server/google-maps-geocode-proxy.js +8 -5
  67. package/dist/runtime/server/google-static-maps-proxy.d.ts +1 -1
  68. package/dist/runtime/server/google-static-maps-proxy.js +13 -8
  69. package/dist/runtime/server/gravatar-proxy.d.ts +1 -1
  70. package/dist/runtime/server/gravatar-proxy.js +6 -7
  71. package/dist/runtime/server/instagram-embed-asset.d.ts +1 -1
  72. package/dist/runtime/server/instagram-embed-image.d.ts +1 -1
  73. package/dist/runtime/server/instagram-embed.js +22 -10
  74. package/dist/runtime/server/utils/cached-upstream.d.ts +55 -0
  75. package/dist/runtime/server/utils/cached-upstream.js +65 -0
  76. package/dist/runtime/server/utils/embed-rewriters.d.ts +19 -0
  77. package/dist/runtime/server/utils/embed-rewriters.js +41 -0
  78. package/dist/runtime/server/utils/image-proxy.d.ts +3 -1
  79. package/dist/runtime/server/utils/image-proxy.js +8 -6
  80. package/dist/runtime/server/utils/instagram-embed.d.ts +4 -4
  81. package/dist/runtime/server/utils/instagram-embed.js +10 -9
  82. package/dist/runtime/server/utils/proxy-url.d.ts +9 -0
  83. package/dist/runtime/server/utils/proxy-url.js +21 -0
  84. package/dist/runtime/server/utils/sign-constants.d.ts +16 -0
  85. package/dist/runtime/server/utils/sign-constants.js +5 -0
  86. package/dist/runtime/server/utils/sign.d.ts +2 -10
  87. package/dist/runtime/server/utils/sign.js +8 -5
  88. package/dist/runtime/server/utils/withSigning.js +3 -2
  89. package/dist/runtime/server/x-embed-image.d.ts +1 -1
  90. package/dist/runtime/server/x-embed.js +20 -2
  91. package/dist/runtime/types.d.ts +24 -1
  92. package/dist/types-source.mjs +160 -12
  93. package/package.json +2 -2
  94. package/dist/devtools-client/_nuxt/CQR4zIAm.js +0 -1
  95. package/dist/devtools-client/_nuxt/DTxy5P8N.js +0 -188
  96. package/dist/devtools-client/_nuxt/builds/meta/484f72b9-a019-4127-8ab9-c10e92624094.json +0 -1
  97. package/dist/devtools-client/_nuxt/index.CA-OpSj0.css +0 -1
@@ -3,12 +3,72 @@ const types = {
3
3
  {
4
4
  name: "BingUetOptions",
5
5
  kind: "const",
6
- code: "export const BingUetOptions = object({\n /**\n * Your Bing UET tag ID.\n * @see https://help.ads.microsoft.com/#apex/ads/en/56682/2-500\n */\n id: string(),\n /**\n * Enable automatic SPA page tracking.\n * @default true\n */\n enableAutoSpaTracking: optional(boolean()),\n})"
6
+ code: "export const BingUetOptions = object({\n /**\n * Your Bing UET tag ID.\n * @see https://help.ads.microsoft.com/#apex/ads/en/56682/2-500\n */\n id: string(),\n /**\n * Enable automatic SPA page tracking.\n * @default true\n */\n enableAutoSpaTracking: optional(boolean()),\n /**\n * Default consent state fired as `uetq.push('consent', 'default', ...)` before UET init.\n * @see https://help.ads.microsoft.com/#apex/ads/en/60119/1-500\n */\n defaultConsent: optional(object({\n ad_storage: optional(consentCategoryValue),\n })),\n})"
7
+ },
8
+ {
9
+ name: "BingUetConsentStatus",
10
+ kind: "type",
11
+ code: "export type BingUetConsentStatus = 'granted' | 'denied'"
12
+ },
13
+ {
14
+ name: "BingUetConsentOptions",
15
+ kind: "interface",
16
+ code: "export interface BingUetConsentOptions {\n /**\n * Controls storage of advertising identifiers. Currently the only field UET honors.\n */\n ad_storage?: BingUetConsentStatus\n}"
17
+ },
18
+ {
19
+ name: "BingUetEventName",
20
+ kind: "type",
21
+ code: "export type BingUetEventName\n = | 'page_view'\n | 'screen_view'\n | 'login'\n | 'sign_up'\n | 'subscribe'\n | 'start_trial'\n | 'lead'\n | 'generate_lead'\n | 'submit_lead_form'\n | 'contact'\n | 'search'\n | 'view_search_results'\n | 'select_content'\n | 'share'\n | 'exception'\n | 'find_location'\n | 'book_appointment'\n | 'get_route'\n | 'view_item'\n | 'view_item_list'\n | 'view_promotion'\n | 'add_to_cart'\n | 'remove_from_cart'\n | 'add_to_wishlist'\n | 'add_payment_info'\n | 'begin_checkout'\n | 'checkout_progress'\n | 'set_checkout_option'\n | 'purchase'\n | 'refund'\n | (string & {})"
22
+ },
23
+ {
24
+ name: "BingUetItem",
25
+ kind: "interface",
26
+ code: "export interface BingUetItem {\n id?: string\n name?: string\n brand?: string\n category?: string\n variant?: string\n price?: number\n quantity?: number\n list_name?: string\n list_position?: number\n creative_name?: string\n creative_slot?: string\n location_id?: string\n [key: string]: any\n}"
27
+ },
28
+ {
29
+ name: "BingUetPromotion",
30
+ kind: "interface",
31
+ code: "export interface BingUetPromotion {\n id?: string\n name?: string\n creative_name?: string\n creative_slot?: string\n [key: string]: any\n}"
32
+ },
33
+ {
34
+ name: "BingUetEventParams",
35
+ kind: "interface",
36
+ code: "export interface BingUetEventParams {\n /** Event category (beacon shortcut). */\n ec?: string\n /** Event action (beacon shortcut). */\n ea?: string\n /** Event label (beacon shortcut). */\n el?: string\n /** Event value, numeric (beacon shortcut). */\n ev?: number\n /** Goal category / goal completion. */\n gc?: string\n /** Goal value. */\n gv?: number\n /** Long-form alias for `ec`. */\n event_category?: string\n /** Long-form alias for `ea`. */\n event_action?: string\n /** Long-form alias for `el`. */\n event_label?: string\n /** Long-form alias for `ev`. */\n event_value?: number\n /** Unique event identifier (dedup). */\n event_id?: string\n /** Variable revenue amount. */\n revenue_value?: number\n /** ISO 4217 currency code (e.g. \"USD\"). */\n currency?: string\n /** Unique order/transaction ID (dedup). */\n transaction_id?: string\n /** Ecommerce items. */\n items?: BingUetItem[]\n /** Promotions associated with the event. */\n promotions?: BingUetPromotion[]\n /** Sign-up/login method (e.g. \"Google\"). */\n method?: string\n coupon?: string\n tax?: number\n shipping?: number\n affiliation?: string\n /** Search query. */\n search_term?: string\n content_type?: string\n content_id?: string\n checkout_step?: number\n checkout_option?: string\n description?: string\n name?: string\n screen_name?: string\n /** Whether an exception is fatal. */\n fatal?: boolean\n /** Flags a new customer conversion. */\n new_customer?: boolean | number\n /** Retail vertical: product ID. */\n ecomm_prodid?: string | string[]\n /** Retail vertical: page type. */\n ecomm_pagetype?: 'home' | 'searchresults' | 'category' | 'product' | 'cart' | 'purchase' | 'other' | (string & {})\n ecomm_totalvalue?: number\n ecomm_category?: string | string[]\n ecomm_query?: string\n /** Override page path. */\n page_path?: string\n /** Override page title. */\n page_title?: string\n /** Override full page URL. */\n page_location?: string\n [key: string]: any\n}"
37
+ },
38
+ {
39
+ name: "BingUetEnhancedConversionsPid",
40
+ kind: "interface",
41
+ code: "export interface BingUetEnhancedConversionsPid {\n /** SHA-256 hashed email (lowercase, trimmed). Alias: `email`. */\n em?: string\n /** SHA-256 hashed phone (E.164 digits only). Alias: `phone_number`. */\n ph?: string\n /** Long-form alias for `em`. */\n email?: string\n /** Long-form alias for `ph`. */\n phone_number?: string\n [key: string]: any\n}"
42
+ },
43
+ {
44
+ name: "BingUetSetParams",
45
+ kind: "interface",
46
+ code: "export interface BingUetSetParams {\n /** Partner identifiers for enhanced conversions. */\n pid?: BingUetEnhancedConversionsPid\n page_path?: string\n page_title?: string\n page_location?: string\n [key: string]: any\n}"
47
+ },
48
+ {
49
+ name: "BingUetTcfConfig",
50
+ kind: "interface",
51
+ code: "export interface BingUetTcfConfig {\n /** Enable TCF v2.0 auto-consent handling (Microsoft vendorId 1126). */\n enabled?: boolean\n [key: string]: any\n}"
52
+ },
53
+ {
54
+ name: "BingUetConstructorOptions",
55
+ kind: "interface",
56
+ code: "export interface BingUetConstructorOptions {\n /** UET tag ID. */\n ti: string\n /** Alternate tag ID field (same effect as `ti`). */\n tagId?: string\n /** Auto-fire pageLoad on SPA route changes. */\n enableAutoSpaTracking?: boolean\n /** Enable TCF v2.0 auto-consent handling. */\n enableAutoConsent?: boolean\n /** Suppress automatic page_view on load. */\n disableAutoPageView?: boolean\n /** Disable the UET container entirely. */\n disableContainer?: boolean\n /** Disable writing the UET visitor ID cookie. */\n disableUetVid?: boolean\n /** Disable visibility (tab focus/blur) events. */\n disableVisibilityEvents?: boolean\n /** Defer loading the beacon. */\n deferLoad?: boolean\n /** Strip query strings from reported URLs. */\n removeQueryFromUrls?: boolean\n /** Store conversion tracking cookies. */\n storeConvTrackCookies?: boolean\n /** Cookie domain. */\n cookieDomain?: string\n /** Cookie flags (e.g. \"SameSite=None; Secure\"). */\n cookieFlags?: string\n /** Enable MS DNS cookie. */\n msDnsCookie?: boolean\n /** UID cookie name. */\n uidCookie?: string\n /** Error beacon verbosity level. */\n errorBeaconLevel?: number\n /** Microsoft Clarity project ID for integration. */\n clarityProjectId?: string\n /** When true, reads `window.enhanced_conversion_data` for gtag-style enhanced conversions. */\n gtagPid?: boolean\n /** Beacon protocol version. */\n Ver?: 1 | 2\n /** Associated advertiser ID. */\n advertiserId?: string\n /** Source tag for GTM integration. */\n gtmTagSource?: string\n /** Queue reference, typically `window.uetq`. */\n q?: any[]\n [key: string]: any\n}"
57
+ },
58
+ {
59
+ name: "BingUetQueue",
60
+ kind: "interface",
61
+ code: "export interface BingUetQueue {\n push: {\n // Legacy custom event object form (beacon shortcuts).\n (event: BingUetEventParams): void\n // Manual page load (maps internally to `page_view`).\n (command: 'pageLoad'): void\n // Standard and custom events.\n (command: 'event', eventName: BingUetEventName, eventParams?: BingUetEventParams): void\n // Consent mode (default on init, update after user interaction).\n (command: 'consent', action: 'default' | 'update', consentParams: BingUetConsentOptions): void\n // Enhanced conversions / sticky page overrides.\n (command: 'set', params: BingUetSetParams): void\n // TCF v2.0 auto-consent configuration.\n (command: 'config', target: 'tcf', params: BingUetTcfConfig): void\n }\n}"
7
62
  },
8
63
  {
9
64
  name: "BingUetApi",
10
65
  kind: "interface",
11
- code: "export interface BingUetApi {\n uetq: {\n push: (event: string | Record<string, any>) => void\n }\n}"
66
+ code: "export interface BingUetApi {\n uetq: BingUetQueue\n}"
67
+ },
68
+ {
69
+ name: "BingUetConsent",
70
+ kind: "interface",
71
+ code: "export interface BingUetConsent {\n /** Push `['consent','update', state]` with the `ad_storage` signal. */\n update: (state: BingUetConsentOptions) => void\n}"
12
72
  }
13
73
  ],
14
74
  "bluesky-embed": [
@@ -37,7 +97,7 @@ const types = {
37
97
  {
38
98
  name: "ClarityOptions",
39
99
  kind: "const",
40
- code: "export const ClarityOptions = object({\n /**\n * The Clarity token.\n * @see https://learn.microsoft.com/en-us/clarity/setup-clarity\n */\n id: pipe(string(), minLength(10)),\n})"
100
+ code: "export const ClarityOptions = object({\n /**\n * The Clarity token.\n * @see https://learn.microsoft.com/en-us/clarity/setup-clarity\n */\n id: pipe(string(), minLength(10)),\n /**\n * Default consent state applied before Clarity starts.\n * - `boolean` - enable / disable cookies.\n * - `Record<string, string>` - advanced consent vector (see Clarity docs).\n * @see https://learn.microsoft.com/en-us/clarity/setup-and-installation/cookie-consent\n */\n defaultConsent: optional(union([boolean(), record(string(), string())])),\n})"
41
101
  },
42
102
  {
43
103
  name: "ClarityFunctions",
@@ -48,6 +108,11 @@ const types = {
48
108
  name: "ClarityApi",
49
109
  kind: "interface",
50
110
  code: "export interface ClarityApi {\n clarity: ClarityFunctions & {\n q: any[]\n v: string\n }\n}"
111
+ },
112
+ {
113
+ name: "ClarityConsent",
114
+ kind: "interface",
115
+ code: "export interface ClarityConsent {\n /** Call `clarity('consent', value)` with either a boolean (default) or Clarity's advanced vector. */\n set: (value: boolean | Record<string, string>) => void\n}"
51
116
  }
52
117
  ],
53
118
  "cloudflare-web-analytics": [
@@ -194,7 +259,12 @@ const types = {
194
259
  {
195
260
  name: "GoogleAnalyticsOptions",
196
261
  kind: "const",
197
- code: "export const GoogleAnalyticsOptions = object({\n /**\n * The GA4 measurement ID.\n * @example 'G-XXXXXXXX'\n * @see https://developers.google.com/analytics/devguides/collection/gtagjs\n */\n id: optional(string()),\n /**\n * Global name for the dataLayer variable.\n * @default 'dataLayer'\n * @see https://developers.google.com/analytics/devguides/collection/gtagjs/setting-up-gtag#rename_the_data_layer\n */\n l: optional(string()),\n})"
262
+ code: "export const GoogleAnalyticsOptions = object({\n /**\n * The GA4 measurement ID.\n * @example 'G-XXXXXXXX'\n * @see https://developers.google.com/analytics/devguides/collection/gtagjs\n */\n id: optional(string()),\n /**\n * Global name for the dataLayer variable.\n * @default 'dataLayer'\n * @see https://developers.google.com/analytics/devguides/collection/gtagjs/setting-up-gtag#rename_the_data_layer\n */\n l: optional(string()),\n /**\n * Default GCMv2 consent state fired as `gtag('consent', 'default', ...)` before `gtag('js', ...)`.\n * @see https://developers.google.com/tag-platform/security/guides/consent\n */\n defaultConsent: optional(gcmConsentState),\n})"
263
+ },
264
+ {
265
+ name: "GoogleAnalyticsConsent",
266
+ kind: "interface",
267
+ code: "export interface GoogleAnalyticsConsent {\n /** Send `gtag('consent','update', state)` with GCMv2 partial state. */\n update: (state: ConsentState) => void\n}"
198
268
  }
199
269
  ],
200
270
  "google-maps": [
@@ -428,6 +498,11 @@ const types = {
428
498
  name: "GoogleTagManagerOptions",
429
499
  kind: "const",
430
500
  code: "export const GoogleTagManagerOptions = object({\n /**\n * GTM container ID (format: GTM-XXXXXX)\n * @see https://developers.google.com/tag-platform/tag-manager/web#install-the-container\n */\n id: string(),\n\n /**\n * Optional dataLayer variable name\n * @default 'dataLayer'\n * @see https://developers.google.com/tag-platform/tag-manager/web/datalayer#rename_the_data_layer\n */\n l: optional(string()),\n\n /**\n * Authentication token for environment-specific container versions\n * @see https://support.google.com/tagmanager/answer/6328337\n */\n auth: optional(string()),\n\n /**\n * Preview environment name\n * @see https://support.google.com/tagmanager/answer/6328337\n */\n preview: optional(string()),\n\n /** Forces GTM cookies to take precedence when true */\n cookiesWin: optional(union([boolean(), literal('x')])),\n\n /**\n * Enables debug mode when true\n * @see https://support.google.com/tagmanager/answer/6107056\n */\n debug: optional(union([boolean(), literal('x')])),\n\n /**\n * No Personal Advertising - disables advertising features when true\n * @see https://developers.google.com/tag-platform/tag-manager/templates/consent-apis\n */\n npa: optional(union([boolean(), literal('1')])),\n\n /** Custom dataLayer name (alternative to \"l\" property) */\n dataLayer: optional(string()),\n\n /**\n * Environment name for environment-specific container\n * @see https://support.google.com/tagmanager/answer/6328337\n */\n envName: optional(string()),\n\n /** Referrer policy for analytics requests */\n authReferrerPolicy: optional(string()),\n\n /**\n * Default consent settings for GTM\n * @see https://developers.google.com/tag-platform/tag-manager/templates/consent-apis\n */\n defaultConsent: optional(record(string(), union([string(), number()]))),\n})"
501
+ },
502
+ {
503
+ name: "GoogleTagManagerConsent",
504
+ kind: "interface",
505
+ code: "export interface GoogleTagManagerConsent {\n /** Push `['consent','update', state]` onto dataLayer with GCMv2 partial state. */\n update: (state: ConsentState) => void\n}"
431
506
  }
432
507
  ],
433
508
  gravatar: [
@@ -529,12 +604,17 @@ const types = {
529
604
  {
530
605
  name: "MatomoAnalyticsOptions",
531
606
  kind: "const",
532
- code: "export const MatomoAnalyticsOptions = object({\n /**\n * The URL of your self-hosted Matomo instance.\n * Either `matomoUrl` or `cloudId` is required.\n * @example 'https://matomo.example.com'\n * @see https://developer.matomo.org/guides/tracking-javascript-guide\n */\n matomoUrl: optional(string()),\n /**\n * Your Matomo site ID.\n * @default '1'\n */\n siteId: optional(union([string(), number()])),\n /**\n * Your Matomo Cloud ID (the subdomain portion of your `*.matomo.cloud` URL).\n * Either `matomoUrl` or `cloudId` is required.\n * @example 'mysite.matomo.cloud'\n */\n cloudId: optional(string()),\n /**\n * A custom tracker URL. Overrides the default tracker endpoint derived from `matomoUrl` or `cloudId`.\n */\n trackerUrl: optional(string()),\n /**\n * Whether to track the initial page view on load.\n * @deprecated Use `watch: true` (default) for automatic page view tracking.\n */\n trackPageView: optional(boolean()),\n /**\n * Enable download and outlink tracking.\n */\n enableLinkTracking: optional(boolean()),\n /**\n * Disable all tracking cookies for cookieless analytics.\n */\n disableCookies: optional(boolean()),\n /**\n * Automatically track page views on route change.\n * @default true\n */\n watch: optional(boolean()),\n})"
607
+ code: "export const MatomoAnalyticsOptions = object({\n /**\n * The URL of your self-hosted Matomo instance.\n * Either `matomoUrl` or `cloudId` is required.\n * @example 'https://matomo.example.com'\n * @see https://developer.matomo.org/guides/tracking-javascript-guide\n */\n matomoUrl: optional(string()),\n /**\n * Your Matomo site ID.\n * @default '1'\n */\n siteId: optional(union([string(), number()])),\n /**\n * Your Matomo Cloud ID (the subdomain portion of your `*.matomo.cloud` URL).\n * Either `matomoUrl` or `cloudId` is required.\n * @example 'mysite.matomo.cloud'\n */\n cloudId: optional(string()),\n /**\n * A custom tracker URL. Overrides the default tracker endpoint derived from `matomoUrl` or `cloudId`.\n */\n trackerUrl: optional(string()),\n /**\n * Whether to track the initial page view on load.\n * @deprecated Use `watch: true` (default) for automatic page view tracking.\n */\n trackPageView: optional(boolean()),\n /**\n * Enable download and outlink tracking.\n */\n enableLinkTracking: optional(boolean()),\n /**\n * Disable all tracking cookies for cookieless analytics.\n */\n disableCookies: optional(boolean()),\n /**\n * Automatically track page views on route change.\n * @default true\n */\n watch: optional(boolean()),\n /**\n * Default tracking-consent state applied BEFORE the tracker is initialised.\n * - `'required'` — call `requireConsent` without granting (user must opt in later).\n * - `'given'` — call `requireConsent` then `setConsentGiven`.\n * - `'not-required'` — no consent gating (default Matomo behaviour).\n * @see https://developer.matomo.org/guides/tracking-consent\n */\n defaultConsent: optional(union([literal('required'), literal('given'), literal('not-required')])),\n})"
533
608
  },
534
609
  {
535
610
  name: "MatomoAnalyticsApi",
536
611
  kind: "interface",
537
- code: "interface MatomoAnalyticsApi {\n _paq: unknown[]\n}"
612
+ code: "export interface MatomoAnalyticsApi {\n _paq: unknown[]\n}"
613
+ },
614
+ {
615
+ name: "MatomoConsent",
616
+ kind: "interface",
617
+ code: "export interface MatomoConsent {\n /** Push `setConsentGiven`. Requires `defaultConsent: 'required' | 'given'` at registration to have an effect. */\n give: () => void\n /** Push `forgetConsentGiven`. Requires `defaultConsent: 'required' | 'given'` at registration to have an effect. */\n forget: () => void\n}"
538
618
  }
539
619
  ],
540
620
  "meta-pixel": [
@@ -571,19 +651,29 @@ const types = {
571
651
  {
572
652
  name: "MetaPixelOptions",
573
653
  kind: "const",
574
- code: "export const MetaPixelOptions = object({\n /**\n * Your Meta (Facebook) Pixel ID.\n * @see https://developers.facebook.com/docs/meta-pixel/get-started\n */\n id: union([string(), number()]),\n})"
654
+ code: "export const MetaPixelOptions = object({\n /**\n * Your Meta (Facebook) Pixel ID.\n * @see https://developers.facebook.com/docs/meta-pixel/get-started\n */\n id: union([string(), number()]),\n /**\n * Default consent state. `'granted'` fires `fbq('consent', 'grant')`,\n * `'denied'` fires `fbq('consent', 'revoke')`, both called before `fbq('init', id)`.\n * @see https://www.facebook.com/business/help/1151321516677370\n */\n defaultConsent: optional(union([literal('granted'), literal('denied')])),\n})"
655
+ },
656
+ {
657
+ name: "MetaPixelConsent",
658
+ kind: "interface",
659
+ code: "export interface MetaPixelConsent {\n /** Call `fbq('consent','grant')`. */\n grant: () => void\n /** Call `fbq('consent','revoke')`. */\n revoke: () => void\n}"
575
660
  }
576
661
  ],
577
662
  "mixpanel-analytics": [
578
663
  {
579
664
  name: "MixpanelAnalyticsOptions",
580
665
  kind: "const",
581
- code: "export const MixpanelAnalyticsOptions = object({\n /**\n * Your Mixpanel project token.\n * @see https://docs.mixpanel.com/docs/tracking-methods/sdks/javascript#1-initialize-the-library\n */\n token: string(),\n})"
666
+ code: "export const MixpanelAnalyticsOptions = object({\n /**\n * Your Mixpanel project token.\n * @see https://docs.mixpanel.com/docs/tracking-methods/sdks/javascript#1-initialize-the-library\n */\n token: string(),\n /**\n * Default tracking-consent state for Mixpanel.\n * - `'opt-out'`: passed as `opt_out_tracking_by_default: true` to `mixpanel.init`, so tracking is suppressed from the first call.\n * - `'opt-in'`: queued via `mixpanel.push(['opt_in_tracking'])` so the real SDK runs it immediately after load.\n * @see https://docs.mixpanel.com/docs/privacy/opt-out-of-tracking\n */\n defaultConsent: optional(union([literal('opt-in'), literal('opt-out')])),\n})"
582
667
  },
583
668
  {
584
669
  name: "MixpanelAnalyticsApi",
585
670
  kind: "interface",
586
- code: "export interface MixpanelAnalyticsApi {\n mixpanel: {\n track: (event: string, properties?: Record<string, any>) => void\n identify: (distinctId: string) => void\n reset: () => void\n people: {\n set: (properties: Record<string, any>) => void\n }\n register: (properties: Record<string, any>) => void\n init: (token: string, config?: Record<string, any>) => void\n }\n}"
671
+ code: "export interface MixpanelAnalyticsApi {\n mixpanel: {\n track: (event: string, properties?: Record<string, any>) => void\n identify: (distinctId: string) => void\n reset: () => void\n people: {\n set: (properties: Record<string, any>) => void\n }\n register: (properties: Record<string, any>) => void\n init: (token: string, config?: Record<string, any>) => void\n /** Opt the user in to tracking. Available after the real SDK loads. */\n opt_in_tracking?: () => void\n /** Opt the user out of tracking. Available after the real SDK loads. */\n opt_out_tracking?: () => void\n }\n}"
672
+ },
673
+ {
674
+ name: "MixpanelConsent",
675
+ kind: "interface",
676
+ code: "export interface MixpanelConsent {\n /** Call `mixpanel.opt_in_tracking()`. */\n optIn: () => void\n /** Call `mixpanel.opt_out_tracking()`. For boot-time opt-out, use `defaultConsent: 'opt-out'` instead. */\n optOut: () => void\n}"
587
677
  }
588
678
  ],
589
679
  npm: [
@@ -666,12 +756,17 @@ const types = {
666
756
  {
667
757
  name: "PostHogOptions",
668
758
  kind: "const",
669
- code: "export const PostHogOptions = object({\n /**\n * Your PostHog project API key.\n * @see https://posthog.com/docs/libraries/js#usage\n */\n apiKey: string(),\n /**\n * Your PostHog data region.\n * @default 'us'\n * @see https://posthog.com/docs/libraries/js#config\n */\n region: optional(union([literal('us'), literal('eu')])),\n /**\n * Custom API host URL. Overrides the default derived from `region`.\n * Useful for self-hosted instances or reverse proxies.\n */\n apiHost: optional(string()),\n /**\n * Enable autocapture of clicks, form submissions, and page views.\n * @default true\n */\n autocapture: optional(boolean()),\n /**\n * Capture page views automatically. Set to `'history_change'` to only capture on history changes.\n * @default true\n */\n capturePageview: optional(union([boolean(), literal('history_change')])),\n /**\n * Capture page leave events automatically.\n * @default true\n */\n capturePageleave: optional(boolean()),\n /**\n * Disable session recording.\n */\n disableSessionRecording: optional(boolean()),\n /**\n * Additional PostHog configuration options passed directly to `posthog.init()`.\n * @see https://posthog.com/docs/libraries/js#config\n */\n config: optional(record(string(), any())),\n})"
759
+ code: "export const PostHogOptions = object({\n /**\n * Your PostHog project API key.\n * @see https://posthog.com/docs/libraries/js#usage\n */\n apiKey: string(),\n /**\n * Your PostHog data region.\n * @default 'us'\n * @see https://posthog.com/docs/libraries/js#config\n */\n region: optional(union([literal('us'), literal('eu')])),\n /**\n * Custom API host URL. Overrides the default derived from `region`.\n * Useful for self-hosted instances or reverse proxies.\n */\n apiHost: optional(string()),\n /**\n * Enable autocapture of clicks, form submissions, and page views.\n * @default true\n */\n autocapture: optional(boolean()),\n /**\n * Capture page views automatically. Set to `'history_change'` to only capture on history changes.\n * @default true\n */\n capturePageview: optional(union([boolean(), literal('history_change')])),\n /**\n * Capture page leave events automatically.\n * @default true\n */\n capturePageleave: optional(boolean()),\n /**\n * Disable session recording.\n */\n disableSessionRecording: optional(boolean()),\n /**\n * Additional PostHog configuration options passed directly to `posthog.init()`.\n * @see https://posthog.com/docs/libraries/js#config\n */\n config: optional(record(string(), any())),\n /**\n * Default capture-consent state for PostHog.\n * - `'opt-out'`: passed as `opt_out_capturing_by_default: true` to `posthog.init`, so capturing is suppressed from the first event.\n * - `'opt-in'`: applied after `posthog.init` via `posthog.opt_in_capturing()` on the returned instance.\n * @see https://posthog.com/docs/privacy/opting-out\n */\n defaultConsent: optional(union([literal('opt-in'), literal('opt-out')])),\n})"
670
760
  },
671
761
  {
672
762
  name: "PostHogApi",
673
763
  kind: "interface",
674
764
  code: "export interface PostHogApi {\n posthog: PostHog\n}"
765
+ },
766
+ {
767
+ name: "PostHogConsent",
768
+ kind: "interface",
769
+ code: "export interface PostHogConsent {\n /** Call `posthog.opt_in_capturing()`. */\n optIn: () => void\n /** Call `posthog.opt_out_capturing()`. For boot-time opt-out, use `defaultConsent: 'opt-out'` instead. */\n optOut: () => void\n}"
675
770
  }
676
771
  ],
677
772
  "reddit-pixel": [
@@ -818,12 +913,17 @@ const types = {
818
913
  {
819
914
  name: "TikTokPixelApi",
820
915
  kind: "interface",
821
- code: "export interface TikTokPixelApi {\n ttq: TtqFns & {\n push: TtqFns\n loaded: boolean\n queue: any[]\n }\n}"
916
+ code: "export interface TikTokPixelApi {\n ttq: TtqFns & {\n push: TtqFns\n loaded: boolean\n queue: any[]\n /** Opt user in to tracking. Queued before the script loads; live once `events.js` binds. */\n grantConsent: () => void\n /** Opt user out of tracking. Queued before the script loads; live once `events.js` binds. */\n revokeConsent: () => void\n /** Defer consent until an explicit grant/revoke. Queued before the script loads; live once `events.js` binds. */\n holdConsent: () => void\n }\n}"
822
917
  },
823
918
  {
824
919
  name: "TikTokPixelOptions",
825
920
  kind: "const",
826
- code: "export const TikTokPixelOptions = object({\n /**\n * Your TikTok Pixel ID.\n * @see https://ads.tiktok.com/help/article/get-started-pixel\n */\n id: string(),\n /**\n * Whether to automatically track a page view on initialization.\n * @default true\n */\n trackPageView: optional(boolean()),\n})"
921
+ code: "export const TikTokPixelOptions = object({\n /**\n * Your TikTok Pixel ID.\n * @see https://ads.tiktok.com/help/article/get-started-pixel\n */\n id: string(),\n /**\n * Whether to automatically track a page view on initialization.\n * @default true\n */\n trackPageView: optional(boolean()),\n /**\n * Default consent state, applied before `ttq('init', id)`.\n * - `'granted'` fires `ttq.grantConsent()`\n * - `'denied'` fires `ttq.revokeConsent()`\n * - `'hold'` fires `ttq.holdConsent()` to defer until an explicit update\n * @see https://business-api.tiktok.com/portal/docs?id=1739585600931842\n */\n defaultConsent: optional(union([literal('granted'), literal('denied'), literal('hold')])),\n})"
922
+ },
923
+ {
924
+ name: "TikTokPixelConsent",
925
+ kind: "interface",
926
+ code: "export interface TikTokPixelConsent {\n /** Call `ttq.grantConsent()`. */\n grant: () => void\n /** Call `ttq.revokeConsent()`. */\n revoke: () => void\n /** Call `ttq.holdConsent()` to defer the decision. */\n hold: () => void\n}"
827
927
  }
828
928
  ],
829
929
  "umami-analytics": [
@@ -1010,6 +1110,12 @@ const schemaFields = {
1010
1110
  type: "string",
1011
1111
  required: true,
1012
1112
  description: "The Clarity token."
1113
+ },
1114
+ {
1115
+ name: "defaultConsent",
1116
+ type: "boolean | Record<string, string>",
1117
+ required: false,
1118
+ description: "Default consent state applied before Clarity starts. - `boolean` - enable / disable cookies. - `Record<string, string>` - advanced consent vector (see Clarity docs)."
1013
1119
  }
1014
1120
  ],
1015
1121
  CloudflareWebAnalyticsOptions: [
@@ -1328,6 +1434,12 @@ const schemaFields = {
1328
1434
  required: false,
1329
1435
  description: "Global name for the dataLayer variable.",
1330
1436
  defaultValue: "'dataLayer'"
1437
+ },
1438
+ {
1439
+ name: "defaultConsent",
1440
+ type: "unknown",
1441
+ required: false,
1442
+ description: "Default GCMv2 consent state fired as `gtag('consent', 'default', ...)` before `gtag('js', ...)`."
1331
1443
  }
1332
1444
  ],
1333
1445
  GoogleMapsOptions: [
@@ -1659,6 +1771,12 @@ const schemaFields = {
1659
1771
  required: false,
1660
1772
  description: "Automatically track page views on route change.",
1661
1773
  defaultValue: "true"
1774
+ },
1775
+ {
1776
+ name: "defaultConsent",
1777
+ type: "'required' | 'given' | 'not-required'",
1778
+ required: false,
1779
+ description: "Default tracking-consent state applied BEFORE the tracker is initialised. - `'required'` — call `requireConsent` without granting (user must opt in later). - `'given'` — call `requireConsent` then `setConsentGiven`. - `'not-required'` — no consent gating (default Matomo behaviour)."
1662
1780
  }
1663
1781
  ],
1664
1782
  MetaPixelOptions: [
@@ -1667,6 +1785,12 @@ const schemaFields = {
1667
1785
  type: "string | number",
1668
1786
  required: true,
1669
1787
  description: "Your Meta (Facebook) Pixel ID."
1788
+ },
1789
+ {
1790
+ name: "defaultConsent",
1791
+ type: "'granted' | 'denied'",
1792
+ required: false,
1793
+ description: "Default consent state. `'granted'` fires `fbq('consent', 'grant')`, `'denied'` fires `fbq('consent', 'revoke')`, both called before `fbq('init', id)`."
1670
1794
  }
1671
1795
  ],
1672
1796
  NpmOptions: [
@@ -1749,6 +1873,12 @@ const schemaFields = {
1749
1873
  type: "Record<string, any>",
1750
1874
  required: false,
1751
1875
  description: "Additional PostHog configuration options passed directly to `posthog.init()`."
1876
+ },
1877
+ {
1878
+ name: "defaultConsent",
1879
+ type: "'opt-in' | 'opt-out'",
1880
+ required: false,
1881
+ description: "Default capture-consent state for PostHog. - `'opt-out'`: passed as `opt_out_capturing_by_default: true` to `posthog.init`, so capturing is suppressed from the first event. - `'opt-in'`: applied after `posthog.init` via `posthog.opt_in_capturing()` on the returned instance."
1752
1882
  }
1753
1883
  ],
1754
1884
  RedditPixelOptions: [
@@ -1847,6 +1977,12 @@ const schemaFields = {
1847
1977
  type: "string",
1848
1978
  required: true,
1849
1979
  description: "Your Mixpanel project token."
1980
+ },
1981
+ {
1982
+ name: "defaultConsent",
1983
+ type: "'opt-in' | 'opt-out'",
1984
+ required: false,
1985
+ description: "Default tracking-consent state for Mixpanel. - `'opt-out'`: passed as `opt_out_tracking_by_default: true` to `mixpanel.init`, so tracking is suppressed from the first call. - `'opt-in'`: queued via `mixpanel.push(['opt_in_tracking'])` so the real SDK runs it immediately after load."
1850
1986
  }
1851
1987
  ],
1852
1988
  BingUetOptions: [
@@ -1862,6 +1998,12 @@ const schemaFields = {
1862
1998
  required: false,
1863
1999
  description: "Enable automatic SPA page tracking.",
1864
2000
  defaultValue: "true"
2001
+ },
2002
+ {
2003
+ name: "defaultConsent",
2004
+ type: "object",
2005
+ required: false,
2006
+ description: "Default consent state fired as `uetq.push('consent', 'default', ...)` before UET init."
1865
2007
  }
1866
2008
  ],
1867
2009
  SegmentOptions: [
@@ -1989,6 +2131,12 @@ const schemaFields = {
1989
2131
  required: false,
1990
2132
  description: "Whether to automatically track a page view on initialization.",
1991
2133
  defaultValue: "true"
2134
+ },
2135
+ {
2136
+ name: "defaultConsent",
2137
+ type: "'granted' | 'denied' | 'hold'",
2138
+ required: false,
2139
+ description: "Default consent state, applied before `ttq('init', id)`. - `'granted'` fires `ttq.grantConsent()` - `'denied'` fires `ttq.revokeConsent()` - `'hold'` fires `ttq.holdConsent()` to defer until an explicit update"
1992
2140
  }
1993
2141
  ],
1994
2142
  UmamiAnalyticsOptions: [
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nuxt/scripts",
3
3
  "type": "module",
4
- "version": "1.0.0-rc.8",
4
+ "version": "1.0.0",
5
5
  "description": "Load third-party scripts with better performance, privacy and DX in Nuxt Apps.",
6
6
  "author": {
7
7
  "name": "Harlan Wilton",
@@ -117,7 +117,7 @@
117
117
  "pathe": "^2.0.3",
118
118
  "pkg-types": "^2.3.0",
119
119
  "sirv": "^3.0.2",
120
- "std-env": "^4.0.0",
120
+ "std-env": "^4.1.0",
121
121
  "ufo": "^1.6.3",
122
122
  "ultrahtml": "^1.6.0",
123
123
  "unplugin": "^3.0.0",
@@ -1 +0,0 @@
1
- import{f as j,o as s,c as n,n as k,h as o,a as e,t as r,x as $,_ as F,b as y,j as D,d as v,m as x,y as A,z as K,F as _,l as G,w as C,r as S,g as z,A as M,B as Z,C as X,D as q,E as tt,G as W,H as P,I as et,J,K as R,L as st,M as Q,N as at,O as ot,P as I,Q as nt,i as lt,R as V,S as rt,T as it}from"./DTxy5P8N.js";const ct={class:"capitalize"},dt=j({__name:"ScriptStatus",props:{status:{},error:{}},setup(l){const p=$(()=>l.error?l.error==="TypeError: Failed to fetch"?"CORS Error":l.error:l.status||"unknown"),u=$(()=>{if(l.error||l.status==="error")return"status-error";switch(l.status){case"loaded":return"status-loaded";case"loading":return"status-loading";case"awaitingLoad":return"status-awaiting";case"validation-failed":return"status-validation";default:return"status-unknown"}});return(g,h)=>(s(),n("div",{class:k(["script-status",o(u)])},[h[0]||(h[0]=e("span",{class:"script-status-dot"},null,-1)),e("span",ct,r(o(p)),1)],2))}}),ut=Object.assign(F(dt,[["__scopeId","data-v-5cf865ba"]]),{__name:"ScriptStatus"}),mt={key:0,class:"script-metric"},pt=j({__name:"ScriptSize",props:{size:{}},setup(l){return(p,u)=>{const g=D;return l.size?(s(),n("span",mt,[y(g,{name:"i-carbon-meter",class:"text-[10px] opacity-50"}),v(" "+r(l.size),1)])):x("",!0)}}}),_t=Object.assign(F(pt,[["__scopeId","data-v-b147450b"]]),{__name:"ScriptSize"}),xt={key:0,class:"script-metric"},ft=j({__name:"ScriptLoadTime",props:{loadTime:{}},setup(l){return(p,u)=>{const g=D;return l.loadTime?(s(),n("span",xt,[y(g,{name:"i-carbon-timer",class:"text-[10px] opacity-50"}),v(" "+r(l.loadTime),1)])):x("",!0)}}}),yt=Object.assign(F(ft,[["__scopeId","data-v-c6837c50"]]),{__name:"ScriptLoadTime"}),vt={key:0,class:"panel-grids flex flex-col items-center justify-center py-8 gap-1.5 rounded-b-xl"},gt={key:1,class:"waterfall-container"},bt={class:"waterfall-stats"},ht={class:"waterfall-stat"},kt={class:"waterfall-stat-value"},wt={class:"waterfall-stat"},$t={class:"waterfall-stat-value"},St={class:"waterfall-stat"},Lt={class:"waterfall-stat-value"},Ct={class:"waterfall-proxied-badge"},Tt={class:"waterfall-stat-value"},jt={class:"text-xs space-y-1 max-w-60"},zt={class:"opacity-70"},Bt={class:"px-1 py-px rounded bg-white/10 text-[10px]"},Pt={key:0,class:"opacity-70"},Rt={class:"flex items-center gap-1"},Ft={class:"text-xs space-y-0.5"},Mt={class:"font-mono font-semibold"},It={class:"opacity-70"},Dt={key:0,class:"opacity-60"},Ot={key:1,class:"text-emerald-400"},Nt={class:"waterfall-table"},Ut={class:"waterfall-legend"},Ht={class:"waterfall-rows"},Et={class:"waterfall-url"},At={class:"waterfall-bar-track"},Kt={class:"waterfall-duration"},Wt={class:"text-xs space-y-1.5 max-w-80"},Vt={class:"font-mono text-[11px] break-all opacity-90"},Jt={class:"flex items-center gap-2 opacity-70"},Qt={class:"grid grid-cols-[auto_1fr] gap-x-3 gap-y-0.5"},Gt={class:"flex items-center gap-1 opacity-60"},Xt={class:"tabular-nums text-right"},Yt={key:0,class:"flex items-center gap-1 text-emerald-400"},Zt=j({__name:"NetworkWaterfall",props:{requests:{},domains:{default:()=>[]},proxyRoutes:{default:()=>[]},privacyLevel:{},proxyPrefix:{},isFirstParty:{type:Boolean,default:!1}},setup(l){const p=[{key:"dns",label:"DNS",color:"oklch(70% 0.15 165)"},{key:"connect",label:"Connect",color:"oklch(72% 0.14 75)"},{key:"ssl",label:"SSL",color:"oklch(65% 0.15 300)"},{key:"ttfb",label:"TTFB",color:"oklch(65% 0.13 250)"},{key:"download",label:"Download",color:"oklch(72% 0.12 200)"}],u=$(()=>[...l.requests].sort((i,t)=>i.startTime-t.startTime)),g=$(()=>{if(!u.value.length)return{min:0,max:1};const i=u.value[0].startTime,t=Math.max(...u.value.map(d=>d.startTime+d.duration));return{min:i,max:t||i+1}}),h=$(()=>l.requests.reduce((i,t)=>i+t.transferSize,0)),B=$(()=>g.value.max-g.value.min),b=$(()=>l.requests.filter(i=>i.isProxied).length),m=$(()=>{const i=new Map;for(const t of l.requests){const d=T(t.url),f=i.get(d)||{count:0,transfer:0,proxied:!1};f.count++,f.transfer+=t.transferSize,t.isProxied&&(f.proxied=!0),i.set(d,f)}return[...i.entries()].sort((t,d)=>d[1].transfer-t[1].transfer).map(([t,d])=>({domain:t,...d,isKnown:l.domains.includes(t),proxyRoute:l.proxyRoutes.find(f=>f.target.includes(t))}))}),w=/\/_scripts\/p\/([^/]+)/;function T(i){try{return new URL(i).hostname}catch{return i.match(w)?.[1]||"localhost"}}function O(i){const{min:t,max:d}=g.value,f=d-t;return{left:`${(i.startTime-t)/f*100}%`,width:`${Math.max(i.duration/f*100,.5)}%`}}function N(i,t){if(i.duration===0)return"0%";const d=i[t.key];return`${Math.max(d/i.duration*100,d>0?2:0)}%`}function U(i){try{const t=new URL(i),d=t.pathname+t.search;return d.length>50?`${d.slice(0,47)}...`:d}catch{return i.length>50?`${i.slice(0,47)}...`:i}}function H(i){return{script:"Script",xmlhttprequest:"XHR",fetch:"Fetch",img:"Image",css:"Stylesheet",beacon:"Beacon"}[i]||i}function E(i){return{script:"i-carbon-code",xmlhttprequest:"i-carbon-send-alt",fetch:"i-carbon-send-alt",img:"i-carbon-image",css:"i-carbon-paint-brush",beacon:"i-carbon-satellite-radar"}[i]||"i-carbon-document"}function a(i){return i.transferSize===0&&i.decodedBodySize>0?304:200}return(i,t)=>{const d=D,f=G;return l.requests.length?(s(),n("div",gt,[e("div",bt,[e("span",ht,[e("span",kt,r(l.requests.length),1),t[1]||(t[1]=e("span",{class:"waterfall-stat-label"},"req",-1))]),t[7]||(t[7]=e("span",{class:"waterfall-sep"},null,-1)),e("span",wt,[e("span",$t,r(o(A)(o(h))),1)]),t[8]||(t[8]=e("span",{class:"waterfall-sep"},null,-1)),e("span",St,[e("span",Lt,r(o(K)(Math.round(o(B)))),1)]),l.isFirstParty&&o(b)>0?(s(),n(_,{key:0},[t[5]||(t[5]=e("span",{class:"waterfall-sep"},null,-1)),y(f,null,{content:C(()=>[e("div",jt,[t[4]||(t[4]=e("div",{class:"font-semibold"}," First-Party Proxy ",-1)),e("div",zt,[v(r(o(b))+" request"+r(o(b)!==1?"s":"")+" routed through ",1),e("code",Bt,r(l.proxyPrefix||"/_scripts/p"),1)]),l.privacyLevel?(s(),n("div",Pt,[t[3]||(t[3]=v(" Privacy: ",-1)),e("span",{class:k(l.privacyLevel==="full"?"text-emerald-400":l.privacyLevel==="partial"?"text-amber-400":"")},r(l.privacyLevel),3)])):x("",!0)])]),default:C(()=>[e("span",Ct,[y(d,{name:"i-carbon-security",class:"text-[10px]"}),e("span",Tt,r(o(b))+"/"+r(l.requests.length),1),t[2]||(t[2]=v(" proxied ",-1))])]),_:1})],64)):x("",!0),o(m).length>1?(s(),n(_,{key:1},[t[6]||(t[6]=e("span",{class:"waterfall-sep"},null,-1)),e("div",Rt,[(s(!0),n(_,null,S(o(m),c=>(s(),z(f,{key:c.domain},{content:C(()=>[e("div",Ft,[e("div",Mt,r(c.domain),1),e("div",It,r(c.count)+" req · "+r(o(A)(c.transfer)),1),c.proxyRoute?(s(),n("div",Dt,r(c.proxyRoute.target)+" → "+r(c.proxyRoute.local),1)):x("",!0),c.proxied?(s(),n("div",Ot," Proxied through first-party ")):x("",!0)])]),default:C(()=>[e("span",{class:k(["domain-pill",c.proxied?"domain-pill-proxied":""])},[c.proxied?(s(),z(d,{key:0,name:"i-carbon-security",class:"text-[8px]"})):x("",!0),v(" "+r(c.domain),1)],2)]),_:2},1024))),128))])],64)):x("",!0)]),e("div",Nt,[e("div",Ut,[(s(),n(_,null,S(p,c=>e("div",{key:c.key,class:"waterfall-legend-item"},[e("span",{class:"waterfall-legend-dot",style:M({background:c.color})},null,4),v(" "+r(c.label),1)])),64))]),e("div",Ht,[(s(!0),n(_,null,S(o(u),(c,Y)=>(s(),z(f,{key:Y},{content:C(()=>[e("div",Wt,[e("div",Vt,r(c.url),1),e("div",Jt,[e("span",null,r(H(c.initiatorType)),1),t[10]||(t[10]=e("span",{class:"opacity-30"},"·",-1)),e("span",null,r(o(K)(Math.round(c.duration))),1),c.transferSize>0?(s(),n(_,{key:0},[t[9]||(t[9]=e("span",{class:"opacity-30"},"·",-1)),e("span",null,r(o(A)(c.transferSize)),1)],64)):x("",!0)]),e("div",Qt,[(s(),n(_,null,S(p,L=>(s(),n(_,{key:L.key},[c[L.key]>.1?(s(),n(_,{key:0},[e("div",Gt,[e("span",{class:"w-1.5 h-1.5 rounded-sm inline-block",style:M({background:L.color})},null,4),v(" "+r(L.label),1)]),e("div",Xt,r(c[L.key].toFixed(1))+"ms ",1)],64)):x("",!0)],64))),64))]),c.isProxied?(s(),n("div",Yt,[y(d,{name:"i-carbon-security",class:"text-[10px]"}),t[11]||(t[11]=v(" Proxied through first-party ",-1))])):x("",!0)])]),default:C(()=>[e("div",{class:k(["waterfall-row",c.isProxied?"waterfall-row-proxied":""])},[e("div",{class:k(["waterfall-status",a(c)===304?"waterfall-status-304":"waterfall-status-200"])},r(a(c)),3),y(d,{name:c.isProxied?"i-carbon-security":E(c.initiatorType),class:k(["waterfall-row-icon",c.isProxied?"waterfall-row-icon-proxied":""])},null,8,["name","class"]),e("div",Et,r(U(c.url)),1),e("div",At,[e("div",{class:"waterfall-bar",style:M(O(c))},[(s(),n(_,null,S(p,L=>e("div",{key:L.key,style:M({width:N(c,L),background:L.color}),class:"h-full"},null,4)),64))],4)]),e("div",Kt,r(o(K)(Math.round(c.duration))),1)],2)]),_:2},1024))),128))])])])):(s(),n("div",vt,[y(d,{name:"i-carbon-network-4",class:"text-xl text-(--color-text-subtle)"}),t[0]||(t[0]=e("p",{class:"text-xs text-(--color-text-subtle)"}," Requests appear as the script loads ",-1))]))}}}),qt=Object.assign(F(Zt,[["__scopeId","data-v-a64c8d9a"]]),{__name:"NetworkWaterfall"});function te(l=2e3){const{copy:p,copied:u}=Z({legacy:!0,copiedDuring:l});return{copy:p,copied:u}}const ee=j({__name:"DevtoolsCopyButton",props:{text:{}},setup(l){const{copy:p,copied:u}=te();return(g,h)=>{const B=X,b=G;return s(),z(b,{text:o(u)?"Copied!":"Copy"},{default:C(()=>[y(B,{icon:o(u)?"carbon:checkmark":"carbon:copy","aria-label":o(u)?"Copied":"Copy to clipboard",class:k(o(u)?"text-[var(--seo-green)]":""),onClick:h[0]||(h[0]=m=>o(p)(l.text))},null,8,["icon","aria-label","class"])]),_:1},8,["text"])}}}),se=Object.assign(ee,{__name:"DevtoolsCopyButton"}),ae=["innerHTML"],oe=j({__name:"OCodeBlock",props:{code:{},lang:{},lines:{type:Boolean,default:!1},transformRendered:{type:Function}},setup(l){const p=q(()=>l.code,l.lang),u=$(()=>l.transformRendered?l.transformRendered(p.value||""):p.value);return(g,h)=>(s(),n("pre",{class:k(["code-block p-5",l.lines?"code-block-lines":""]),innerHTML:o(u)},null,10,ae))}}),ne=Object.assign(oe,{__name:"OCodeBlock"}),le={class:"devtools-snippet"},re={key:0,class:"devtools-snippet-header"},ie={class:"devtools-snippet-label"},ce=j({__name:"DevtoolsSnippet",props:{label:{},code:{},lang:{default:"js"}},setup(l){return(p,u)=>{const g=se,h=ne;return s(),n("div",le,[l.label||p.$slots.header?(s(),n("div",re,[tt(p.$slots,"header",{},()=>[e("code",ie,r(l.label),1)],!0),y(g,{text:l.code},null,8,["text"])])):x("",!0),y(h,{code:l.code,lang:l.lang,class:"devtools-snippet-block"},null,8,["code","lang"])])}}}),de=Object.assign(F(ce,[["__scopeId","data-v-265ccc31"]]),{__name:"DevtoolsSnippet"}),ue={class:"py-1"},me={key:0,class:"panel-grids rounded-xl flex flex-col items-center justify-center py-16 gap-3"},pe={class:"w-12 h-12 rounded-xl bg-(--color-surface-elevated) border border-(--color-border) flex items-center justify-center"},_e={class:"filter-bar"},xe=["onClick"],fe={class:"filter-chip-count"},ye={class:"stagger-children space-y-3"},ve={class:"px-4 py-3 flex items-center justify-between gap-3"},ge={class:"flex items-center gap-2.5 min-w-0"},be={class:"w-7 h-7 rounded-lg bg-(--color-surface-sunken) border border-(--color-border-subtle) flex items-center justify-center flex-shrink-0 overflow-hidden"},he=["src"],ke=["innerHTML"],we=["src"],$e={class:"min-w-0"},Se={class:"flex items-center gap-2"},Le=["href","title"],Ce=["href"],Te={class:"px-4 pb-3 flex items-center gap-2 flex-wrap"},je={key:0,class:"status-enabled"},ze={key:1,class:"inline-flex items-center gap-1 text-[11px] text-(--color-text-subtle) font-mono"},Be={class:"border-t border-(--color-border-subtle)"},Pe={class:"flex items-center border-b border-(--color-border-subtle)"},Re=["onClick"],Fe={key:0,class:"text-[9px] px-1 py-px rounded-full bg-(--color-surface-sunken) tabular-nums font-mono"},Me={key:0,class:"p-3"},Ie={key:0,class:"text-xs text-(--color-text-subtle) py-2 text-center"},De={key:1,class:"event-timeline"},Oe={class:"event-time"},Ne={key:0,class:"flex items-center gap-2 min-w-0"},Ue={class:"text-[11px] text-(--color-text-subtle) truncate"},He={key:1,class:"event-fn"},Ee={key:1},Ae={key:2,class:"p-3"},Ke=j({__name:"index",setup(l){const p=[{label:"Events",value:"events",icon:"i-carbon-list"},{label:"Network",value:"network",icon:"i-carbon-network-4"},{label:"API",value:"api",icon:"i-carbon-code"}],u=it("all"),g=$(()=>{const b=Object.values(W.value||{}),m=b.filter(T=>R(T)!=="awaitingLoad").length,w=b.filter(T=>R(T)==="awaitingLoad").length;return{total:b.length,active:m,awaiting:w}}),h=$(()=>{const b=W.value||{};return u.value==="all"?b:Object.fromEntries(Object.entries(b).filter(([,m])=>{const w=R(m);return u.value==="active"?w!=="awaitingLoad":w==="awaitingLoad"}))});function B(b){switch(b){case"loaded":return"status-badge-loaded";case"loading":return"status-badge-loading";case"awaitingLoad":return"status-badge-awaiting";case"removed":case"error":return"status-badge-error";case"validation-failed":return"status-badge-validation";default:return"status-badge-default"}}return(b,m)=>{const w=D,T=X,O=ut,N=_t,U=yt,H=qt,E=de;return s(),n("div",ue,[Object.keys(o(W)||{}).length?(s(),n(_,{key:1},[e("div",_e,[(s(!0),n(_,null,S([{key:"all",label:"All",count:o(g).total},{key:"active",label:"Active",count:o(g).active},{key:"awaiting",label:"Awaiting",count:o(g).awaiting}],a=>(s(),n("button",{key:a.key,class:k(["filter-chip",o(u)===a.key?"filter-chip-active":""]),onClick:i=>u.value=a.key},[v(r(a.label)+" ",1),e("span",fe,r(a.count),1)],10,xe))),128))]),e("div",ye,[(s(!0),n(_,null,S(o(h),(a,i)=>(s(),n("div",{key:i,class:"card overflow-hidden"},[e("div",ve,[e("div",ge,[e("div",be,[o(P)(a)&&typeof o(P)(a)=="string"&&o(P)(a).startsWith("http")?(s(),n("img",{key:0,class:"w-5 h-5 object-contain",src:o(P)(a),alt:""},null,8,he)):o(P)(a)?(s(),n("div",{key:1,class:"w-5 h-5 flex items-center [&>svg]:max-w-5 [&>svg]:max-h-5",innerHTML:o(P)(a)},null,8,ke)):a.src&&!a.src.startsWith("/")?(s(),n("img",{key:2,src:`https://www.google.com/s2/favicons?domain=${o(et)(a.src)}`,class:"w-4 h-4 rounded-sm",alt:""},null,8,we)):(s(),z(w,{key:3,name:"i-carbon-script",class:"text-sm text-(--color-text-subtle)"}))]),e("div",$e,[e("div",Se,[e("a",{href:a.src,target:"_blank",class:"text-sm font-semibold tracking-tight truncate link-external",title:a.src},r(a.registry?.label||a.key||a.src),9,Le),a.docs?(s(),n("a",{key:0,href:a.docs,target:"_blank",class:"text-[10px] font-medium text-(--color-text-subtle) hover:text-(--color-text-muted) transition-colors"}," docs ",8,Ce)):x("",!0)])])]),o(J)(a)&&o(R)(a)==="awaitingLoad"?(s(),z(T,{key:0,size:"xs",color:"primary",variant:"soft",icon:"i-carbon-play-filled-alt",onClick:t=>a.$script.load()},{default:C(()=>[...m[2]||(m[2]=[v(" Load ",-1)])]),_:1},8,["onClick"])):o(J)(a)&&o(R)(a)==="loaded"?(s(),z(T,{key:1,size:"xs",color:"neutral",variant:"ghost",icon:"i-carbon-close",onClick:t=>a.$script.remove()},{default:C(()=>[...m[3]||(m[3]=[v(" Remove ",-1)])]),_:1},8,["onClick"])):x("",!0)]),e("div",Te,[y(O,{status:o(R)(a),error:o(st)[a.src]},null,8,["status","error"]),o(Q)(a.registryKey)?(s(),n("span",je,[y(w,{name:"i-carbon-security",class:"text-xs"}),m[4]||(m[4]=v(" First-Party ",-1))])):x("",!0),y(N,{size:o(at)[a.src]},null,8,["size"]),y(U,{"load-time":a.loadTime},null,8,["load-time"]),a.loadedFrom&&a.loadedFrom!=="unknown"?(s(),n("span",ze,[m[5]||(m[5]=e("svg",{xmlns:"http://www.w3.org/2000/svg",height:"10",viewBox:"0 0 256 221",class:"opacity-60"},[e("path",{fill:"#41B883",d:"M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0z"}),e("path",{fill:"#41B883",d:"m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0z"}),e("path",{fill:"#35495E",d:"M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0z"})],-1)),v(" "+r(a.loadedFrom),1)])):x("",!0),(s(!0),n(_,null,S(Object.keys(a.registryMeta||{}),t=>(s(),n("span",{key:t,class:"text-[11px] text-(--color-text-subtle) font-mono"},r(t)+": "+r(a.registryMeta[t]),1))),128))]),e("div",Be,[e("div",Pe,[(s(),n(_,null,S(p,t=>e("button",{key:t.value,class:k(["sub-tab",o(I)(a.src)===t.value?"sub-tab-active":""]),onClick:d=>o(ot)(a.src,t.value)},[y(w,{name:t.icon,class:"text-xs"},null,8,["name"]),v(" "+r(t.label)+" ",1),t.value==="network"&&a.networkRequests?.length?(s(),n("span",Fe,r(a.networkRequests.length),1)):x("",!0)],10,Re)),64))]),o(I)(a.src)==="events"?(s(),n("div",Me,[a.events?.length?(s(),n("div",De,[(s(!0),n(_,null,S(a.events,(t,d)=>(s(),n("div",{key:d,class:"event-row"},[e("div",Oe,r(o(nt)(t.at)),1),t.type==="status"?(s(),n(_,{key:0},[t.status==="validation-failed"?(s(),n("div",Ne,[e("span",{class:k(["event-badge",B(t.status)])},r(t.status),3),e("span",Ue,r(t.args.issues.map(f=>`${f.path?.map(c=>c.key).join(".")}: ${f.message}`).join(", ")),1)])):(s(),n("span",{key:1,class:k(["event-badge",B(t.status)])},r(t.status),3))],64)):t.type==="fn-call"?(s(),n("span",He,[t.args?(s(),n(_,{key:0},[v(r(`${t.fn}(${t.args?.map(f=>JSON.stringify(f,null,2)).join(", ")||""})`),1)],64)):(s(),n(_,{key:1},[m[6]||(m[6]=e("span",{class:"opacity-40"},"QUEUED",-1)),v(" "+r(t.fn),1)],64))])):x("",!0)]))),128))])):(s(),n("div",Ie," No events recorded "))])):o(I)(a.src)==="network"?(s(),n("div",Ee,[y(H,{requests:a.networkRequests||[],domains:o(V)(a.registryKey)?.domains,"proxy-routes":o(V)(a.registryKey)?.routes,"privacy-level":o(V)(a.registryKey)?.privacyLevel,"proxy-prefix":o(lt)?.proxyPrefix,"is-first-party":o(Q)(a.registryKey)},null,8,["requests","domains","proxy-routes","privacy-level","proxy-prefix","is-first-party"])])):o(I)(a.src)==="api"?(s(),n("div",Ae,[y(E,{code:o(rt)(a.$script?.instance),lang:"js"},null,8,["code"])])):x("",!0)])]))),128))])],64)):(s(),n("div",me,[e("div",pe,[y(w,{name:"i-carbon-script",class:"text-2xl text-(--color-text-subtle)"})]),m[0]||(m[0]=e("p",{class:"text-sm font-medium text-(--color-text-muted)"}," No scripts loaded ",-1)),m[1]||(m[1]=e("p",{class:"text-xs text-(--color-text-subtle)"}," Scripts will appear here as they are registered ",-1))]))])}}}),Ve=F(Ke,[["__scopeId","data-v-1d33b8c9"]]);export{Ve as default};