@nuxt/scripts 1.0.5 → 1.1.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 (73) 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/{xOsbuyp3.js → 1wb58MKb.js} +1 -1
  4. package/dist/devtools-client/_nuxt/{CApasjik.js → BbLmrp_o.js} +1 -1
  5. package/dist/devtools-client/_nuxt/{zmRZ2I-R.js → Cx46cS8a.js} +1 -1
  6. package/dist/devtools-client/_nuxt/{CTPc9yIZ.js → D-M51CV3.js} +1 -1
  7. package/dist/devtools-client/_nuxt/D4HTNcLU.js +188 -0
  8. package/dist/devtools-client/_nuxt/{Dj5q49Yv.js → DU3BlAm5.js} +1 -1
  9. package/dist/devtools-client/_nuxt/{CbCcQNvm.js → DiaY4J4_.js} +1 -1
  10. package/dist/devtools-client/_nuxt/builds/latest.json +1 -1
  11. package/dist/devtools-client/_nuxt/builds/meta/0b4ab733-07a6-40b2-b25e-aca95fa55188.json +1 -0
  12. package/dist/devtools-client/_nuxt/error-404.D2T48gBS.css +1 -0
  13. package/dist/devtools-client/_nuxt/error-500.sMTZJbsP.css +1 -0
  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 +7 -1
  19. package/dist/module.d.ts +7 -1
  20. package/dist/module.json +1 -1
  21. package/dist/module.mjs +266 -34
  22. package/dist/registry.mjs +76 -5
  23. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue +50 -7
  24. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.d.vue.ts +2 -2
  25. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsGeoJson.vue.d.ts +2 -2
  26. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.d.vue.ts +2 -2
  27. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue.d.ts +2 -2
  28. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.d.vue.ts +2 -2
  29. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue.d.ts +2 -2
  30. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.d.vue.ts +2 -2
  31. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue.d.ts +2 -2
  32. package/dist/runtime/components/ScriptCalendlyInlineWidget.d.vue.ts +59 -0
  33. package/dist/runtime/components/ScriptCalendlyInlineWidget.vue +79 -0
  34. package/dist/runtime/components/ScriptCalendlyInlineWidget.vue.d.ts +59 -0
  35. package/dist/runtime/components/ScriptPayPalButtons.d.vue.ts +1 -1
  36. package/dist/runtime/components/ScriptPayPalButtons.vue.d.ts +1 -1
  37. package/dist/runtime/components/ScriptPayPalMessages.d.vue.ts +1 -1
  38. package/dist/runtime/components/ScriptPayPalMessages.vue.d.ts +1 -1
  39. package/dist/runtime/composables/useScript.js +48 -0
  40. package/dist/runtime/debug.d.ts +1 -0
  41. package/dist/runtime/debug.js +1 -0
  42. package/dist/runtime/devtools-standalone-bridge.client.js +3 -1
  43. package/dist/runtime/logger.js +4 -0
  44. package/dist/runtime/registry/_gcm-consent.d.ts +14 -0
  45. package/dist/runtime/registry/_gcm-consent.js +24 -0
  46. package/dist/runtime/registry/ahrefs-analytics.d.ts +39 -0
  47. package/dist/runtime/registry/ahrefs-analytics.js +18 -0
  48. package/dist/runtime/registry/calendly.d.ts +76 -0
  49. package/dist/runtime/registry/calendly.js +63 -0
  50. package/dist/runtime/registry/google-analytics.d.ts +5 -6
  51. package/dist/runtime/registry/google-analytics.js +9 -12
  52. package/dist/runtime/registry/google-tag-manager.d.ts +5 -6
  53. package/dist/runtime/registry/google-tag-manager.js +18 -20
  54. package/dist/runtime/registry/linkedin-insight.d.ts +35 -0
  55. package/dist/runtime/registry/linkedin-insight.js +49 -0
  56. package/dist/runtime/registry/schemas.d.ts +165 -6
  57. package/dist/runtime/registry/schemas.js +125 -7
  58. package/dist/runtime/registry/tiktok-pixel.d.ts +28 -2
  59. package/dist/runtime/registry/tiktok-pixel.js +18 -1
  60. package/dist/runtime/registry/usercentrics.d.ts +85 -0
  61. package/dist/runtime/registry/usercentrics.js +54 -0
  62. package/dist/runtime/server/proxy-handler.js +13 -4
  63. package/dist/runtime/types.d.ts +40 -1
  64. package/dist/runtime/utils.d.ts +8 -2
  65. package/dist/runtime/utils.js +5 -1
  66. package/dist/stats.mjs +19 -0
  67. package/dist/types-source.mjs +280 -15
  68. package/dist/types.d.mts +1 -1
  69. package/package.json +11 -8
  70. package/dist/devtools-client/_nuxt/BNvWpYaC.js +0 -188
  71. package/dist/devtools-client/_nuxt/builds/meta/caa75c14-abb0-4d9e-8f1a-440e91f4b1eb.json +0 -1
  72. package/dist/devtools-client/_nuxt/error-404.upckUYZO.css +0 -1
  73. package/dist/devtools-client/_nuxt/error-500.DS4SeCFl.css +0 -1
package/dist/registry.mjs CHANGED
@@ -1,7 +1,8 @@
1
1
  import { joinURL, withQuery, withBase } from 'ufo';
2
- import { CloudflareWebAnalyticsOptions, VercelAnalyticsOptions, PostHogOptions, FathomAnalyticsOptions, MatomoAnalyticsOptions, RybbitAnalyticsOptions, DatabuddyAnalyticsOptions, SegmentOptions, MixpanelAnalyticsOptions, BingUetOptions, MetaPixelOptions, XPixelOptions, TikTokPixelOptions, SnapTrPixelOptions, RedditPixelOptions, GoogleAdsenseOptions, IntercomOptions, HotjarOptions, ClarityOptions, StripeOptions, GoogleMapsOptions, BlueskyEmbedOptions, InstagramEmbedOptions, XEmbedOptions, CrispOptions, NpmOptions, GoogleRecaptchaOptions, GoogleSignInOptions, GoogleTagManagerOptions, GoogleAnalyticsOptions, UmamiAnalyticsOptions, GravatarOptions } from '../dist/runtime/registry/schemas.js';
2
+ import { AhrefsAnalyticsOptions, CloudflareWebAnalyticsOptions, VercelAnalyticsOptions, PostHogOptions, FathomAnalyticsOptions, MatomoAnalyticsOptions, RybbitAnalyticsOptions, DatabuddyAnalyticsOptions, SegmentOptions, MixpanelAnalyticsOptions, BingUetOptions, MetaPixelOptions, XPixelOptions, TikTokPixelOptions, SnapTrPixelOptions, RedditPixelOptions, LinkedInInsightOptions, GoogleAdsenseOptions, IntercomOptions, HotjarOptions, ClarityOptions, StripeOptions, GoogleMapsOptions, BlueskyEmbedOptions, InstagramEmbedOptions, XEmbedOptions, CrispOptions, NpmOptions, CalendlyOptions, GoogleRecaptchaOptions, GoogleSignInOptions, GoogleTagManagerOptions, GoogleAnalyticsOptions, UmamiAnalyticsOptions, UsercentricsOptions, GravatarOptions } from '../dist/runtime/registry/schemas.js';
3
3
 
4
4
  const LOGOS = {
5
+ ahrefsAnalytics: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><path fill="#FF6A00" d="M9.6 4h4.8a4.8 4.8 0 0 1 4.8 4.8v4.8H9.6A4.8 4.8 0 0 1 4.8 8.8 4.8 4.8 0 0 1 9.6 4Zm14.4 24h-4.8a4.8 4.8 0 0 1-4.8-4.8v-9.6h4.8A4.8 4.8 0 0 1 24 18.4Z"/></svg>`,
5
6
  plausibleAnalytics: `<svg height="32" id="Layer_2" viewBox="0 0 46 60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="New_Gradient_Swatch_1" x1="14.841" y1="22.544" x2="27.473" y2="44.649" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#909cf7"/><stop offset="1" stop-color="#4b38d8"/></linearGradient><linearGradient id="New_Gradient_Swatch_1-2" x1="7.984" y1="-1.358" x2="21.001" y2="21.422" xlink:href="#New_Gradient_Swatch_1"/><style>.cls-3{stroke-width:0;fill:#1f2961}</style></defs><g id="Plausible_-_Branding"><g id="Gradient_Logo_-_Purple_Gradient_on_White"><g id="Symbol_-_Purple_Gradient"><path d="M45.246 22.603C44.155 33.059 35.013 40.83 24.5 40.83h-4.047v9.57a9.6 9.6 0 0 1-9.6 9.6H3.36A3.36 3.36 0 0 1 0 56.64V36.938l5.038-7.07a3.362 3.362 0 0 1 4.037-1.149l2.866 1.2a3.353 3.353 0 0 0 4.025-1.145l6.717-9.417a3.34 3.34 0 0 1 4.014-1.14l5.52 2.32a3.347 3.347 0 0 0 4.022-1.142l6.46-9.063c2.025 3.56 3.014 7.789 2.547 12.27Z" style="stroke-width:0;fill:url(#New_Gradient_Swatch_1)"/><path d="M3.292 28.873c.823-1.155 2.021-2.044 3.414-2.312a5.41 5.41 0 0 1 3.147.316l2.865 1.2a1.357 1.357 0 0 0 1.62-.464l6.594-9.245c.823-1.154 2.02-2.041 3.412-2.309a5.368 5.368 0 0 1 3.128.314l5.52 2.32a1.35 1.35 0 0 0 1.619-.46l6.919-9.707C37.827 3.364 31.78 0 24.945 0H3.36A3.36 3.36 0 0 0 0 3.36v30.132l3.292-4.62Z" style="fill:url(#New_Gradient_Swatch_1-2);stroke-width:0"/></g></g></g></svg>`,
6
7
  cloudflareWebAnalytics: `<svg xmlns="http://www.w3.org/2000/svg" width="70.02" height="32" viewBox="0 0 256 117"><path fill="#FBAD41" d="M205.52 50.813c-.858 0-1.705.03-2.551.058c-.137.007-.272.04-.398.094a1.424 1.424 0 0 0-.92.994l-3.628 12.672c-1.565 5.449-.983 10.48 1.646 14.174c2.41 3.416 6.42 5.421 11.289 5.655l19.679 1.194c.585.03 1.092.312 1.4.776a1.92 1.92 0 0 1 .2 1.692a2.496 2.496 0 0 1-2.134 1.662l-20.448 1.193c-11.11.515-23.062 9.58-27.255 20.633l-1.474 3.9a1.092 1.092 0 0 0 .967 1.49h70.425a1.872 1.872 0 0 0 1.81-1.365A51.172 51.172 0 0 0 256 101.828c0-28.16-22.582-50.984-50.449-50.984"/><path fill="#F6821F" d="m174.782 115.362l1.303-4.583c1.568-5.449.987-10.48-1.639-14.173c-2.418-3.417-6.424-5.422-11.296-5.656l-92.312-1.193a1.822 1.822 0 0 1-1.459-.776a1.919 1.919 0 0 1-.203-1.693a2.496 2.496 0 0 1 2.154-1.662l93.173-1.193c11.063-.511 23.015-9.58 27.208-20.633l5.313-14.04c.214-.596.27-1.238.156-1.86C191.126 20.51 166.91 0 137.96 0C111.269 0 88.626 17.403 80.5 41.596a26.996 26.996 0 0 0-19.156-5.359C48.549 37.524 38.25 47.946 36.979 60.88a27.905 27.905 0 0 0 .702 9.642C16.773 71.145 0 88.454 0 109.726c0 1.923.137 3.818.413 5.667c.115.897.879 1.57 1.783 1.568h170.48a2.223 2.223 0 0 0 2.106-1.63"/></svg>`,
7
8
  vercelAnalytics: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 512 512"><path d="M256 48L496 464H16z" fill="currentColor"/></svg>`,
@@ -22,6 +23,10 @@ const LOGOS = {
22
23
  },
23
24
  tiktokPixel: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256"><path d="M224 72a52.059 52.059 0 0 1-52-52a4 4 0 0 0-4-4h-40a4 4 0 0 0-4 4v132a28 28 0 1 1-40.567-25.019a4 4 0 0 0 2.567-3.734V80a4 4 0 0 0-4.652-3.949A84.032 84.032 0 1 0 156 152v-43.047a99.432 99.432 0 0 0 52 14.586a4 4 0 0 0 4-4V76a4 4 0 0 0-4-4z" fill="currentColor"/></svg>`,
24
25
  redditPixel: `<svg viewBox="0 0 800 800" xmlns="http://www.w3.org/2000/svg" width="32" height="32"> <circle cx="400" cy="400" fill="#ff4500" r="400"/> <path d="M666.8 400c.08 5.48-.6 10.95-2.04 16.24s-3.62 10.36-6.48 15.04c-2.85 4.68-6.35 8.94-10.39 12.65s-8.58 6.83-13.49 9.27c.11 1.46.2 2.93.25 4.4a107.268 107.268 0 0 1 0 8.8c-.05 1.47-.14 2.94-.25 4.4 0 89.6-104.4 162.4-233.2 162.4S168 560.4 168 470.8c-.11-1.46-.2-2.93-.25-4.4a107.268 107.268 0 0 1 0-8.8c.05-1.47.14-2.94.25-4.4a58.438 58.438 0 0 1-31.85-37.28 58.41 58.41 0 0 1 7.8-48.42 58.354 58.354 0 0 1 41.93-25.4 58.4 58.4 0 0 1 46.52 15.5 286.795 286.795 0 0 1 35.89-20.71c12.45-6.02 25.32-11.14 38.51-15.3s26.67-7.35 40.32-9.56 27.45-3.42 41.28-3.63L418 169.6c.33-1.61.98-3.13 1.91-4.49.92-1.35 2.11-2.51 3.48-3.4 1.38-.89 2.92-1.5 4.54-1.8 1.61-.29 3.27-.26 4.87.09l98 19.6c9.89-16.99 30.65-24.27 48.98-17.19s28.81 26.43 24.71 45.65c-4.09 19.22-21.55 32.62-41.17 31.61-19.63-1.01-35.62-16.13-37.72-35.67L440 186l-26 124.8c13.66.29 27.29 1.57 40.77 3.82a284.358 284.358 0 0 1 77.8 24.86A284.412 284.412 0 0 1 568 360a58.345 58.345 0 0 1 29.4-15.21 58.361 58.361 0 0 1 32.95 3.21 58.384 58.384 0 0 1 25.91 20.61A58.384 58.384 0 0 1 666.8 400zm-396.96 55.31c2.02 4.85 4.96 9.26 8.68 12.97 3.71 3.72 8.12 6.66 12.97 8.68A40.049 40.049 0 0 0 306.8 480c16.18 0 30.76-9.75 36.96-24.69 6.19-14.95 2.76-32.15-8.68-43.59s-28.64-14.87-43.59-8.68c-14.94 6.2-24.69 20.78-24.69 36.96 0 5.25 1.03 10.45 3.04 15.31zm229.1 96.02c2.05-2 3.22-4.73 3.26-7.59.04-2.87-1.07-5.63-3.07-7.68s-4.73-3.22-7.59-3.26c-2.87-.04-5.63 1.07-7.94 2.8a131.06 131.06 0 0 1-19.04 11.35 131.53 131.53 0 0 1-20.68 7.99c-7.1 2.07-14.37 3.54-21.72 4.39-7.36.85-14.77 1.07-22.16.67-7.38.33-14.78.03-22.11-.89a129.01 129.01 0 0 1-21.64-4.6c-7.08-2.14-13.95-4.88-20.56-8.18s-12.93-7.16-18.89-11.53c-2.07-1.7-4.7-2.57-7.38-2.44s-5.21 1.26-7.11 3.15c-1.89 1.9-3.02 4.43-3.15 7.11s.74 5.31 2.44 7.38c7.03 5.3 14.5 9.98 22.33 14s16 7.35 24.4 9.97 17.01 4.51 25.74 5.66c8.73 1.14 17.54 1.53 26.33 1.17 8.79.36 17.6-.03 26.33-1.17A153.961 153.961 0 0 0 476.87 564c7.83-4.02 15.3-8.7 22.33-14zm-7.34-68.13c5.42.06 10.8-.99 15.81-3.07 5.01-2.09 9.54-5.17 13.32-9.06s6.72-8.51 8.66-13.58A39.882 39.882 0 0 0 532 441.6c0-16.18-9.75-30.76-24.69-36.96-14.95-6.19-32.15-2.76-43.59 8.68s-14.87 28.64-8.68 43.59c6.2 14.94 20.78 24.69 36.96 24.69z" fill="#fff"/> </svg>`,
26
+ linkedinInsight: {
27
+ light: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 34 34"><path fill="#0a66c2" d="M34 2.5v29a2.5 2.5 0 0 1-2.5 2.5h-29A2.5 2.5 0 0 1 0 31.5v-29A2.5 2.5 0 0 1 2.5 0h29A2.5 2.5 0 0 1 34 2.5M10 13H5v16h5zm.45-5.5a2.88 2.88 0 0 0-2.86-2.9H7.5a2.9 2.9 0 0 0 0 5.8 2.88 2.88 0 0 0 2.95-2.81zM29 19.28c0-4.81-3.06-6.68-6.1-6.68a5.7 5.7 0 0 0-5.06 2.58h-.14V13H13v16h5v-8.51a3.32 3.32 0 0 1 3-3.58h.19c1.59 0 2.77 1 2.77 3.52V29h5z"/></svg>`,
28
+ dark: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 34 34"><g transform="scale(.7083)" fill="none" fill-rule="evenodd"><rect fill="#fff" x="1" y="1" width="46" height="46" rx="4"/><path fill="#0077b5" d="M0 4.01A4.01 4.01 0 014.01 0h39.98A4.01 4.01 0 0148 4.01v39.98A4.01 4.01 0 0143.99 48H4.01A4.01 4.01 0 010 43.99V4.01zM19 18.3h6.5v3.266C26.437 19.688 28.838 18 32.445 18 39.359 18 41 21.738 41 28.597V41.3h-7V30.159c0-3.906-.937-6.109-3.32-6.109-3.305 0-4.68 2.375-4.68 6.109V41.3h-7v-23zM7 41h7V18H7v23zm8-30.5a4.5 4.5 0 11-9 0 4.5 4.5 0 019 0z"/></g></svg>`
29
+ },
25
30
  googleAdsense: `<svg xmlns="http://www.w3.org/2000/svg" width="36.09" height="32" viewBox="0 0 256 227"><path fill="#FBBC04" d="M161.8 62.158c11.581-19.822 4.705-45.154-15.355-56.603C126.376-5.878 100.723.899 89.142 20.72c-.51.888-.99 1.794-1.44 2.715L48.553 90.41a49.41 49.41 0 0 0-2.401 4.112L5.495 164.681l72.65 40.721l40.45-69.566a40.013 40.013 0 0 0 2.402-4.112l39.15-66.983a45.769 45.769 0 0 0 1.654-2.583"/><path fill="#34A853" d="M78.483 205.189c-11.515 20.142-37.49 27.553-57.434 15.931c-19.954-11.63-27.036-36.847-15.513-56.982c11.523-20.134 37.267-27.578 57.22-15.956c19.954 11.63 27.241 36.872 15.727 56.998"/><path fill="#4285F4" d="M235.257 75.417c-19.83-11.429-45.17-4.661-56.661 15.134l-41.478 71.67c-11.428 19.755-4.678 45.033 15.076 56.46l.107.062c19.835 11.433 45.18 4.66 56.67-15.142l41.469-71.663c11.426-19.76 4.67-45.042-15.09-56.468z"/></svg>`,
26
31
  carbonAds: {
27
32
  light: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><rect width="32" height="32" rx="6" fill="#1E1E1E"/><path transform="translate(9.25,3.5)" d="M2.927 17.98c0 3.248 1.225 4.295 4.933 4.295 1.362 0 3.573-.174 5.31-.488l.305 2.584c-1.633.385-4.015.629-5.717.629C2.212 25 0 22.555 0 18.155V7.887c0-4.401 2.212-6.845 7.759-6.845 1.701 0 4.083.244 5.717.628l-.306 2.585c-1.736-.315-3.948-.49-5.309-.49-3.709 0-4.934 1.049-4.934 4.296v9.92Z" fill="#fff"/></svg>`,
@@ -47,12 +52,14 @@ const LOGOS = {
47
52
  dark: `<svg height="30" width="35" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><filter id="a" height="138.7%" width="131.4%" x="-15.7%" y="-15.1%"><feMorphology in="SourceAlpha" operator="dilate" radius="1" result="shadowSpreadOuter1"/><feOffset dy="1" in="shadowSpreadOuter1" result="shadowOffsetOuter1"/><feGaussianBlur in="shadowOffsetOuter1" result="shadowBlurOuter1" stdDeviation="1"/><feComposite in="shadowBlurOuter1" in2="SourceAlpha" operator="out" result="shadowBlurOuter1"/><feColorMatrix in="shadowBlurOuter1" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.07 0"/></filter><path id="b" d="M14.23 20.46l-9.65 1.1L3 5.12 30.07 2l1.58 16.46-9.37 1.07-3.5 5.72-4.55-4.8z"/></defs><g fill="none" fill-rule="evenodd"><use fill="#000" filter="url(#a)" xlink:href="#b"/><use fill="#fff" stroke="#fff" stroke-width="2" xlink:href="#b"/></g></svg>`
48
53
  },
49
54
  npm: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256"><path fill="#C12127" d="M0 256V0h256v256z"/><path fill="#FFF" d="M48 48h160v160h-32V80h-48v128H48z"/></svg>`,
55
+ calendly: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256"><path fill="#006BFF" d="M128 0C57.308 0 0 57.308 0 128s57.308 128 128 128s128-57.308 128-128S198.692 0 128 0m65.832 165.957l-15.226 13.157c-13.768 11.892-31.358 18.435-49.55 18.435h-2.36c-26.36 0-50.51-14.518-62.99-37.85l-7.392-13.823a71.32 71.32 0 0 1 0-67.752l7.391-13.822c12.48-23.333 36.63-37.851 62.99-37.851h2.361c18.193 0 35.782 6.543 49.55 18.435l15.226 13.157a8.93 8.93 0 0 1 .904 12.598a8.93 8.93 0 0 1-12.598.904l-15.225-13.157c-10.527-9.094-23.97-14.094-37.857-14.094h-2.361c-19.823 0-37.985 10.918-47.367 28.466l-7.39 13.822a53.49 53.49 0 0 0 0 50.83l7.39 13.822c9.382 17.548 27.544 28.466 47.367 28.466h2.361c13.886 0 27.33-5 37.857-14.094l15.225-13.157a8.93 8.93 0 0 1 12.598.904a8.93 8.93 0 0 1-.904 12.598"/></svg>`,
50
56
  googleRecaptcha: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 262"><path fill="#4285F4" d="M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027"/><path fill="#34A853" d="M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1"/><path fill="#FBBC05" d="M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z"/><path fill="#EB4335" d="M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251"/></svg>`,
51
57
  googleSignIn: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 262"><path fill="#4285F4" d="M255.878 133.451c0-10.734-.871-18.567-2.756-26.69H130.55v48.448h71.947c-1.45 12.04-9.283 30.172-26.69 42.356l-.244 1.622l38.755 30.023l2.685.268c24.659-22.774 38.875-56.282 38.875-96.027"/><path fill="#34A853" d="M130.55 261.1c35.248 0 64.839-11.605 86.453-31.622l-41.196-31.913c-11.024 7.688-25.82 13.055-45.257 13.055c-34.523 0-63.824-22.773-74.269-54.25l-1.531.13l-40.298 31.187l-.527 1.465C35.393 231.798 79.49 261.1 130.55 261.1"/><path fill="#FBBC05" d="M56.281 156.37c-2.756-8.123-4.351-16.827-4.351-25.82c0-8.994 1.595-17.697 4.206-25.82l-.073-1.73L15.26 71.312l-1.335.635C5.077 89.644 0 109.517 0 130.55s5.077 40.905 13.925 58.602z"/><path fill="#EB4335" d="M130.55 50.479c24.514 0 41.05 10.589 50.479 19.438l36.844-35.974C195.245 12.91 165.798 0 130.55 0C79.49 0 35.393 29.301 13.925 71.947l42.211 32.783c10.59-31.477 39.891-54.251 74.414-54.251"/></svg>`,
52
58
  googleTagManager: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256"><path fill="#8AB4F8" d="m150.262 245.516l-44.437-43.331l95.433-97.454l46.007 45.091z"/><path fill="#4285F4" d="M150.45 53.938L106.176 8.731L9.36 104.629c-12.48 12.48-12.48 32.713 0 45.207l95.36 95.986l45.09-42.182l-72.654-76.407z"/><path fill="#8AB4F8" d="m246.625 105.37l-96-96c-12.494-12.494-32.756-12.494-45.25 0c-12.495 12.495-12.495 32.757 0 45.252l96 96c12.494 12.494 32.756 12.494 45.25 0c12.495-12.495 12.495-32.757 0-45.251"/><circle cx="127.265" cy="224.731" r="31.273" fill="#246FDB"/></svg>`,
53
59
  googleAnalytics: `<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" x="0px" y="0px" width="192px" height="192px" viewBox="0 0 192 192" enable-background="new 0 0 192 192" xml:space="preserve"><rect x="0" y="0" fill="none" width="192" height="192"/><g><g><path fill="#F9AB00" d="M130,29v132c0,14.77,10.19,23,21,23c10,0,21-7,21-23V30c0-13.54-10-22-21-22S130,17.33,130,29z"/></g><g><path fill="#E37400" d="M75,96v65c0,14.77,10.19,23,21,23c10,0,21-7,21-23V97c0-13.54-10-22-21-22S75,84.33,75,96z"/></g><g><circle fill="#E37400" cx="41" cy="163" r="21"/></g></g></svg>`,
54
60
  umamiAnalytics: `<svg xmlns="http://www.w3.org/2000/svg" width="96" height="96" viewBox="0 0 24 24"><path fill="currentColor" d="M2.203 8.611H.857a.845.845 0 0 0-.841.841v.858a13 13 0 0 0-.016.6c0 6.627 5.373 12 12 12c6.527 0 11.837-5.212 11.996-11.701c0-.025.004-.05.004-.075V9.452a.845.845 0 0 0-.841-.841h-1.346c-1.159-4.329-5.112-7.521-9.805-7.521S3.363 4.282 2.203 8.611m18.444 0H3.37c1.127-3.702 4.57-6.399 8.638-6.399c4.069 0 7.512 2.697 8.639 6.399"/></svg>`,
55
61
  gravatar: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 27 27"><path fill="#1d4fc4" d="M10.8 2.699v9.45a2.699 2.699 0 005.398 0V5.862a8.101 8.101 0 11-8.423 1.913 2.702 2.702 0 00-3.821-3.821A13.5 13.5 0 1013.499 0 2.699 2.699 0 0010.8 2.699z"/></svg>`,
62
+ usercentrics: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><circle cx="16" cy="16" r="16" fill="#1976d2"/><path fill="#fff" d="M16 7.5a4.25 4.25 0 1 0 0 8.5a4.25 4.25 0 0 0 0-8.5m-7 17a7 7 0 0 1 14 0v.5H9z"/></svg>`,
56
63
  bingUet: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256"><path fill="#F25022" d="M0 0h121.5v121.5H0z"/><path fill="#7FBA00" d="M134.5 0H256v121.5H134.5z"/><path fill="#00A4EF" d="M0 134.5h121.5V256H0z"/><path fill="#FFB900" d="M134.5 134.5H256V256H134.5z"/></svg>`,
57
64
  snapchatPixel: `<svg width="50" height="50" viewBox="147.353 39.286 514.631 514.631" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"><path style="fill:#FFFC00;" d="M147.553,423.021v0.023c0.308,11.424,0.403,22.914,2.33,34.268 c2.042,12.012,4.961,23.725,10.53,34.627c7.529,14.756,17.869,27.217,30.921,37.396c9.371,7.309,19.608,13.111,30.94,16.771 c16.524,5.33,33.571,7.373,50.867,7.473c10.791,0.068,21.575,0.338,32.37,0.293c78.395-0.33,156.792,0.566,235.189-0.484 c10.403-0.141,20.636-1.41,30.846-3.277c19.569-3.582,36.864-11.932,51.661-25.133c17.245-15.381,28.88-34.205,34.132-56.924 c3.437-14.85,4.297-29.916,4.444-45.035v-3.016c0-1.17-0.445-256.892-0.486-260.272c-0.115-9.285-0.799-18.5-2.54-27.636 c-2.117-11.133-5.108-21.981-10.439-32.053c-5.629-10.641-12.68-20.209-21.401-28.57c-13.359-12.81-28.775-21.869-46.722-26.661 c-16.21-4.327-32.747-5.285-49.405-5.27c-0.027-0.004-0.09-0.173-0.094-0.255H278.56c-0.005,0.086-0.008,0.172-0.014,0.255 c-9.454,0.173-18.922,0.102-28.328,1.268c-10.304,1.281-20.509,3.21-30.262,6.812c-15.362,5.682-28.709,14.532-40.11,26.347 c-12.917,13.386-22.022,28.867-26.853,46.894c-4.31,16.084-5.248,32.488-5.271,49.008"/><path style="fill:#FFFFFF;" d="M407.001,473.488c-1.068,0-2.087-0.039-2.862-0.076c-0.615,0.053-1.25,0.076-1.886,0.076 c-22.437,0-37.439-10.607-50.678-19.973c-9.489-6.703-18.438-13.031-28.922-14.775c-5.149-0.854-10.271-1.287-15.22-1.287 c-8.917,0-15.964,1.383-21.109,2.389c-3.166,0.617-5.896,1.148-8.006,1.148c-2.21,0-4.895-0.49-6.014-4.311 c-0.887-3.014-1.523-5.934-2.137-8.746c-1.536-7.027-2.65-11.316-5.281-11.723c-28.141-4.342-44.768-10.738-48.08-18.484 c-0.347-0.814-0.541-1.633-0.584-2.443c-0.129-2.309,1.501-4.334,3.777-4.711c22.348-3.68,42.219-15.492,59.064-35.119 c13.049-15.195,19.457-29.713,20.145-31.316c0.03-0.072,0.065-0.148,0.101-0.217c3.247-6.588,3.893-12.281,1.926-16.916 c-3.626-8.551-15.635-12.361-23.58-14.882c-1.976-0.625-3.845-1.217-5.334-1.808c-7.043-2.782-18.626-8.66-17.083-16.773 c1.124-5.916,8.949-10.036,15.273-10.036c1.756,0,3.312,0.308,4.622,0.923c7.146,3.348,13.575,5.045,19.104,5.045 c6.876,0,10.197-2.618,11-3.362c-0.198-3.668-0.44-7.546-0.674-11.214c0-0.004-0.005-0.048-0.005-0.048 c-1.614-25.675-3.627-57.627,4.546-75.95c24.462-54.847,76.339-59.112,91.651-59.112c0.408,0,6.674-0.062,6.674-0.062 c0.283-0.005,0.59-0.009,0.908-0.009c15.354,0,67.339,4.27,91.816,59.15c8.173,18.335,6.158,50.314,4.539,76.016l-0.076,1.23 c-0.222,3.49-0.427,6.793-0.6,9.995c0.756,0.696,3.795,3.096,9.978,3.339c5.271-0.202,11.328-1.891,17.998-5.014 c2.062-0.968,4.345-1.169,5.895-1.169c2.343,0,4.727,0.456,6.714,1.285l0.106,0.041c5.66,2.009,9.367,6.024,9.447,10.242 c0.071,3.932-2.851,9.809-17.223,15.485c-1.472,0.583-3.35,1.179-5.334,1.808c-7.952,2.524-19.951,6.332-23.577,14.878 c-1.97,4.635-1.322,10.326,1.926,16.912c0.036,0.072,0.067,0.145,0.102,0.221c1,2.344,25.205,57.535,79.209,66.432 c2.275,0.379,3.908,2.406,3.778,4.711c-0.048,0.828-0.248,1.656-0.598,2.465c-3.289,7.703-19.915,14.09-48.064,18.438 c-2.642,0.408-3.755,4.678-5.277,11.668c-0.63,2.887-1.271,5.717-2.146,8.691c-0.819,2.797-2.641,4.164-5.567,4.164h-0.441 c-1.905,0-4.604-0.346-8.008-1.012c-5.95-1.158-12.623-2.236-21.109-2.236c-4.948,0-10.069,0.434-15.224,1.287 c-10.473,1.744-19.421,8.062-28.893,14.758C444.443,462.88,429.436,473.488,407.001,473.488"/><path style="fill:#020202;" d="M408.336,124.235c14.455,0,64.231,3.883,87.688,56.472c7.724,17.317,5.744,48.686,4.156,73.885 c-0.248,3.999-0.494,7.875-0.694,11.576l-0.084,1.591l1.062,1.185c0.429,0.476,4.444,4.672,13.374,5.017l0.144,0.008l0.15-0.003 c5.904-0.225,12.554-2.059,19.776-5.442c1.064-0.498,2.48-0.741,3.978-0.741c1.707,0,3.521,0.321,5.017,0.951l0.226,0.09 c3.787,1.327,6.464,3.829,6.505,6.093c0.022,1.28-0.935,5.891-14.359,11.194c-1.312,0.518-3.039,1.069-5.041,1.7 c-8.736,2.774-21.934,6.96-26.376,17.427c-2.501,5.896-1.816,12.854,2.034,20.678c1.584,3.697,26.52,59.865,82.631,69.111 c-0.011,0.266-0.079,0.557-0.229,0.9c-0.951,2.24-6.996,9.979-44.612,15.783c-5.886,0.902-7.328,7.5-9,15.17 c-0.604,2.746-1.218,5.518-2.062,8.381c-0.258,0.865-0.306,0.914-1.233,0.914c-0.128,0-0.278,0-0.442,0 c-1.668,0-4.2-0.346-7.135-0.922c-5.345-1.041-12.647-2.318-21.982-2.318c-5.21,0-10.577,0.453-15.962,1.352 c-11.511,1.914-20.872,8.535-30.786,15.543c-13.314,9.408-27.075,19.143-48.071,19.143c-0.917,0-1.812-0.031-2.709-0.076 l-0.236-0.01l-0.237,0.018c-0.515,0.045-1.034,0.068-1.564,0.068c-20.993,0-34.76-9.732-48.068-19.143 c-9.916-7.008-19.282-13.629-30.791-15.543c-5.38-0.896-10.752-1.352-15.959-1.352c-9.333,0-16.644,1.428-21.978,2.471 c-2.935,0.574-5.476,1.066-7.139,1.066c-1.362,0-1.388-0.08-1.676-1.064c-0.844-2.865-1.461-5.703-2.062-8.445 c-1.676-7.678-3.119-14.312-9.002-15.215c-37.613-5.809-43.659-13.561-44.613-15.795c-0.149-0.352-0.216-0.652-0.231-0.918 c56.11-9.238,81.041-65.408,82.63-69.119c3.857-7.818,4.541-14.775,2.032-20.678c-4.442-10.461-17.638-14.653-26.368-17.422 c-2.007-0.635-3.735-1.187-5.048-1.705c-11.336-4.479-14.823-8.991-14.305-11.725c0.601-3.153,6.067-6.359,10.837-6.359 c1.072,0,2.012,0.173,2.707,0.498c7.747,3.631,14.819,5.472,21.022,5.472c9.751,0,14.091-4.537,14.557-5.055l1.057-1.182 l-0.085-1.583c-0.197-3.699-0.44-7.574-0.696-11.565c-1.583-25.205-3.563-56.553,4.158-73.871 c23.37-52.396,72.903-56.435,87.525-56.435c0.36,0,6.717-0.065,6.717-0.065C407.744,124.239,408.033,124.235,408.336,124.235 M408.336,115.197h-0.017c-0.333,0-0.646,0-0.944,0.004c-2.376,0.024-6.282,0.062-6.633,0.066c-8.566,0-25.705,1.21-44.115,9.336 c-10.526,4.643-19.994,10.921-28.14,18.66c-9.712,9.221-17.624,20.59-23.512,33.796c-8.623,19.336-6.576,51.905-4.932,78.078 l0.006,0.041c0.176,2.803,0.361,5.73,0.53,8.582c-1.265,0.581-3.316,1.194-6.339,1.194c-4.864,0-10.648-1.555-17.187-4.619 c-1.924-0.896-4.12-1.349-6.543-1.349c-3.893,0-7.997,1.146-11.557,3.239c-4.479,2.63-7.373,6.347-8.159,10.468 c-0.518,2.726-0.493,8.114,5.492,13.578c3.292,3.008,8.128,5.782,14.37,8.249c1.638,0.645,3.582,1.261,5.641,1.914 c7.145,2.271,17.959,5.702,20.779,12.339c1.429,3.365,0.814,7.793-1.823,13.145c-0.069,0.146-0.138,0.289-0.201,0.439 c-0.659,1.539-6.807,15.465-19.418,30.152c-7.166,8.352-15.059,15.332-23.447,20.752c-10.238,6.617-21.316,10.943-32.923,12.855 c-4.558,0.748-7.813,4.809-7.559,9.424c0.078,1.33,0.39,2.656,0.931,3.939c0.004,0.008,0.009,0.016,0.013,0.023 c1.843,4.311,6.116,7.973,13.063,11.203c8.489,3.943,21.185,7.26,37.732,9.855c0.836,1.59,1.704,5.586,2.305,8.322 c0.629,2.908,1.285,5.898,2.22,9.074c1.009,3.441,3.626,7.553,10.349,7.553c2.548,0,5.478-0.574,8.871-1.232 c4.969-0.975,11.764-2.305,20.245-2.305c4.702,0,9.575,0.414,14.48,1.229c9.455,1.574,17.606,7.332,27.037,14 c13.804,9.758,29.429,20.803,53.302,20.803c0.651,0,1.304-0.021,1.949-0.066c0.789,0.037,1.767,0.066,2.799,0.066 c23.88,0,39.501-11.049,53.29-20.799l0.022-0.02c9.433-6.66,17.575-12.41,27.027-13.984c4.903-0.814,9.775-1.229,14.479-1.229 c8.102,0,14.517,1.033,20.245,2.15c3.738,0.736,6.643,1.09,8.872,1.09l0.218,0.004h0.226c4.917,0,8.53-2.699,9.909-7.422 c0.916-3.109,1.57-6.029,2.215-8.986c0.562-2.564,1.46-6.674,2.296-8.281c16.558-2.6,29.249-5.91,37.739-9.852 c6.931-3.215,11.199-6.873,13.053-11.166c0.556-1.287,0.881-2.621,0.954-3.979c0.261-4.607-2.999-8.676-7.56-9.424 c-51.585-8.502-74.824-61.506-75.785-63.758c-0.062-0.148-0.132-0.295-0.205-0.438c-2.637-5.354-3.246-9.777-1.816-13.148 c2.814-6.631,13.621-10.062,20.771-12.332c2.07-0.652,4.021-1.272,5.646-1.914c7.039-2.78,12.07-5.796,15.389-9.221 c3.964-4.083,4.736-7.995,4.688-10.555c-0.121-6.194-4.856-11.698-12.388-14.393c-2.544-1.052-5.445-1.607-8.399-1.607 c-2.011,0-4.989,0.276-7.808,1.592c-6.035,2.824-11.441,4.368-16.082,4.588c-2.468-0.125-4.199-0.66-5.32-1.171 c0.141-2.416,0.297-4.898,0.458-7.486l0.067-1.108c1.653-26.19,3.707-58.784-4.92-78.134c-5.913-13.253-13.853-24.651-23.604-33.892 c-8.178-7.744-17.678-14.021-28.242-18.661C434.052,116.402,416.914,115.197,408.336,115.197"/><rect x="147.553" y="39.443" style="fill:none;" width="514.231" height="514.23"/></svg>`
58
65
  };
@@ -104,6 +111,7 @@ const registryMeta = [
104
111
  m("clarity", "Clarity", "analytics", "useScriptClarity", { bundle: true, proxy: true, partytown: true }, PRIVACY_HEATMAP),
105
112
  m("vercelAnalytics", "Vercel Analytics", "analytics", "useScriptVercelAnalytics", { bundle: true, proxy: true }, PRIVACY_IP_ONLY),
106
113
  m("mixpanelAnalytics", "Mixpanel", "analytics", "useScriptMixpanelAnalytics", { bundle: true, partytown: true }, null),
114
+ m("ahrefsAnalytics", "Ahrefs Web Analytics", "analytics", "useScriptAhrefsAnalytics", { bundle: true, proxy: true }, PRIVACY_IP_ONLY),
107
115
  // ad
108
116
  m("bingUet", "Bing UET", "ad", "useScriptBingUet", { bundle: true, partytown: true }, null),
109
117
  m("metaPixel", "Meta Pixel", "ad", "useScriptMetaPixel", { bundle: true, proxy: true, partytown: true }, PRIVACY_FULL),
@@ -111,6 +119,7 @@ const registryMeta = [
111
119
  m("tiktokPixel", "TikTok Pixel", "ad", "useScriptTikTokPixel", { bundle: true, proxy: true, partytown: true }, PRIVACY_FULL),
112
120
  m("snapchatPixel", "Snapchat Pixel", "ad", "useScriptSnapchatPixel", { bundle: true, proxy: true, partytown: true }, PRIVACY_FULL),
113
121
  m("redditPixel", "Reddit Pixel", "ad", "useScriptRedditPixel", { bundle: true, proxy: true, partytown: true }, PRIVACY_FULL),
122
+ m("linkedinInsight", "LinkedIn Insight Tag", "ad", "useScriptLinkedInInsight", { bundle: true, proxy: true, partytown: true }, PRIVACY_FULL),
114
123
  m("googleAdsense", "Google Adsense", "ad", "useScriptGoogleAdsense", { bundle: true, proxy: true }, PRIVACY_HEATMAP),
115
124
  m("carbonAds", "Carbon Ads", "ad", false, { proxy: true }, PRIVACY_IP_ONLY),
116
125
  // tag-manager
@@ -133,9 +142,13 @@ const registryMeta = [
133
142
  // cdn
134
143
  m("npm", "NPM", "cdn", "useScriptNpm", { bundle: true }, null),
135
144
  // utility
145
+ m("calendly", "Calendly", "utility", "useScriptCalendly", { bundle: true, proxy: true, partytown: true }, PRIVACY_IP_ONLY),
136
146
  m("googleRecaptcha", "Google reCAPTCHA", "utility", "useScriptGoogleRecaptcha", {}, null),
137
147
  m("googleSignIn", "Google Sign-In", "utility", "useScriptGoogleSignIn", {}, null),
138
- m("gravatar", "Gravatar", "utility", "useScriptGravatar", { bundle: true, proxy: true }, PRIVACY_IP_ONLY)
148
+ m("gravatar", "Gravatar", "utility", "useScriptGravatar", { bundle: true, proxy: true }, PRIVACY_IP_ONLY),
149
+ // Usercentrics is the consent layer itself: must hit the vendor origin so
150
+ // signature/policy lookups succeed. Bundle/proxy are intentionally absent.
151
+ m("usercentrics", "Usercentrics", "utility", "useScriptUsercentrics", {}, null)
139
152
  ];
140
153
  const REGISTRY_CATEGORIES = [
141
154
  { key: "analytics", label: "Analytics" },
@@ -205,12 +218,28 @@ async function registry(resolve) {
205
218
  const def = (key, script) => defineScript(resolve, key, script);
206
219
  return Promise.all([
207
220
  // analytics
221
+ def("ahrefsAnalytics", {
222
+ schema: AhrefsAnalyticsOptions,
223
+ label: "Ahrefs Web Analytics",
224
+ src: "https://analytics.ahrefs.com/analytics.js",
225
+ category: "analytics",
226
+ envDefaults: { key: "" },
227
+ bundle: true,
228
+ proxy: {
229
+ domains: ["analytics.ahrefs.com"],
230
+ privacy: PRIVACY_IP_ONLY,
231
+ sdkPatches: [{ type: "replace-new-url-origin", fromDomain: "analytics.ahrefs.com" }]
232
+ }
233
+ }),
208
234
  def("plausibleAnalytics", {
209
235
  label: "Plausible Analytics",
210
236
  category: "analytics",
211
237
  envDefaults: { domain: "" },
212
238
  bundle: {
213
239
  resolve: (options) => {
240
+ const userSrc = options?.scriptInput?.src;
241
+ if (typeof userSrc === "string" && userSrc.trim().length > 0)
242
+ return userSrc.trim();
214
243
  if (options?.scriptId)
215
244
  return `https://plausible.io/js/pa-${options.scriptId}.js`;
216
245
  const extensions = Array.isArray(options?.extension) ? options.extension.join(".") : [options?.extension];
@@ -406,11 +435,12 @@ async function registry(resolve) {
406
435
  resolve(options) {
407
436
  if (!options?.id)
408
437
  return false;
409
- return withQuery("https://analytics.tiktok.com/i18n/pixel/events.js", { sdkid: options.id, lib: "ttq" });
438
+ const host = options.region === "us" ? "analytics.us.tiktok.com" : "analytics.tiktok.com";
439
+ return withQuery(`https://${host}/i18n/pixel/events.js`, { sdkid: options.id, lib: "ttq" });
410
440
  }
411
441
  },
412
442
  proxy: {
413
- domains: ["analytics.tiktok.com", "mon.tiktok.com", "mcs.tiktok.com"],
443
+ domains: ["analytics.tiktok.com", "analytics.us.tiktok.com", "mon.tiktok.com", "mcs.tiktok.com"],
414
444
  privacy: PRIVACY_FULL
415
445
  },
416
446
  partytown: { forwards: ["ttq.track", "ttq.page", "ttq.identify", "ttq.grantConsent", "ttq.revokeConsent", "ttq.holdConsent"] }
@@ -441,6 +471,21 @@ async function registry(resolve) {
441
471
  },
442
472
  partytown: { forwards: ["rdt"] }
443
473
  }),
474
+ def("linkedinInsight", {
475
+ // explicit override: auto-derived would be `useScriptLinkedinInsight` (lowercase i)
476
+ composableName: "useScriptLinkedInInsight",
477
+ schema: LinkedInInsightOptions,
478
+ label: "LinkedIn Insight Tag",
479
+ src: "https://snap.licdn.com/li.lms-analytics/insight.min.js",
480
+ category: "ad",
481
+ envDefaults: { id: "" },
482
+ bundle: true,
483
+ proxy: {
484
+ domains: ["snap.licdn.com", "px.ads.linkedin.com"],
485
+ privacy: PRIVACY_FULL
486
+ },
487
+ partytown: { forwards: ["lintrk"] }
488
+ }),
444
489
  def("googleAdsense", {
445
490
  schema: GoogleAdsenseOptions,
446
491
  label: "Google Adsense",
@@ -627,6 +672,20 @@ async function registry(resolve) {
627
672
  }
628
673
  }),
629
674
  // utility
675
+ def("calendly", {
676
+ schema: CalendlyOptions,
677
+ label: "Calendly",
678
+ src: "https://assets.calendly.com/assets/external/widget.js",
679
+ category: "utility",
680
+ bundle: true,
681
+ proxy: {
682
+ // Booking iframes load from calendly.com directly (vendor-hosted) and
683
+ // are intentionally not proxied. Only the widget script + assets are.
684
+ domains: ["assets.calendly.com"],
685
+ privacy: PRIVACY_IP_ONLY
686
+ },
687
+ partytown: { forwards: ["Calendly.initInlineWidget", "Calendly.initPopupWidget", "Calendly.initBadgeWidget"] }
688
+ }),
630
689
  def("googleRecaptcha", {
631
690
  schema: GoogleRecaptchaOptions,
632
691
  label: "Google reCAPTCHA",
@@ -680,7 +739,7 @@ async function registry(resolve) {
680
739
  // `www.google.com` covers static URLs (www.google.com/g/collect) rewritten at build time;
681
740
  // `www.google.*` covers the geo-localized ga-audiences beacon, which gtag.js dynamically
682
741
  // fires to the visitor's local Google cctld (www.google.com.tw, www.google.co.jp, ...).
683
- domains: ["www.google-analytics.com", "analytics.google.com", "stats.g.doubleclick.net", "pagead2.googlesyndication.com", "www.googleadservices.com", "googleads.g.doubleclick.net", "www.google.com", "www.google.*", "www.googletagmanager.com"],
742
+ domains: ["www.google-analytics.com", "region1.google-analytics.com", "analytics.google.com", "stats.g.doubleclick.net", "pagead2.googlesyndication.com", "www.googleadservices.com", "googleads.g.doubleclick.net", "www.google.com", "www.google.*", "www.googletagmanager.com"],
684
743
  privacy: PRIVACY_HEATMAP
685
744
  },
686
745
  partytown: { forwards: ["dataLayer.push", "gtag"] }
@@ -700,6 +759,18 @@ async function registry(resolve) {
700
759
  },
701
760
  partytown: { forwards: ["umami", "umami.track"] }
702
761
  }),
762
+ def("usercentrics", {
763
+ composableName: "useScriptUsercentrics",
764
+ schema: UsercentricsOptions,
765
+ label: "Usercentrics",
766
+ // The runtime composable builds the actual script tag so it can include
767
+ // the required `data-ruleset-id` attribute. No bundle/proxy: the CMP
768
+ // must hit the vendor origin (it IS the consent surface, and is exempt
769
+ // from consent gating) so policies/signatures resolve correctly.
770
+ src: "https://web.cmp.usercentrics.eu/ui/loader.js",
771
+ category: "utility",
772
+ envDefaults: { rulesetId: "" }
773
+ }),
703
774
  def("gravatar", {
704
775
  schema: GravatarOptions,
705
776
  label: "Gravatar",
@@ -93,6 +93,47 @@ const map = shallowRef();
93
93
  function isLocationQuery(s) {
94
94
  return typeof s === "string" && (s.split(",").length > 2 || s.includes("+"));
95
95
  }
96
+ function getCenterWatchKey(center) {
97
+ const raw = toRaw(center);
98
+ if (!raw)
99
+ return void 0;
100
+ if (typeof raw === "string")
101
+ return `query:${raw}`;
102
+ const lat = typeof raw.lat === "function" ? raw.lat() : raw.lat;
103
+ const lng = typeof raw.lng === "function" ? raw.lng() : raw.lng;
104
+ if (lat != null && lng != null)
105
+ return `latlng:${lat},${lng}`;
106
+ return void 0;
107
+ }
108
+ const controlledCenterKey = computed(() => {
109
+ return getCenterWatchKey(centerOverride.value) || getCenterWatchKey(props.mapOptions?.center) || getCenterWatchKey(props.center);
110
+ });
111
+ function getReactiveMapOptions(options2) {
112
+ const { center: _, zoom: __, mapId: ___, colorScheme: ____, ...rest } = options2;
113
+ return rest;
114
+ }
115
+ function isPlainObject(value) {
116
+ if (!value || typeof value !== "object")
117
+ return false;
118
+ const proto = Object.getPrototypeOf(value);
119
+ return proto === Object.prototype || proto === null;
120
+ }
121
+ function isSameOptionValue(a, b) {
122
+ if (Object.is(a, b))
123
+ return true;
124
+ if (Array.isArray(a) && Array.isArray(b)) {
125
+ return a.length === b.length && a.every((value, index) => isSameOptionValue(value, b[index]));
126
+ }
127
+ if (isPlainObject(a) && isPlainObject(b)) {
128
+ const aKeys = Object.keys(a);
129
+ const bKeys = Object.keys(b);
130
+ return aKeys.length === bKeys.length && aKeys.every((key) => Object.hasOwn(b, key) && isSameOptionValue(a[key], b[key]));
131
+ }
132
+ return false;
133
+ }
134
+ function isSameMapOptions(a, b) {
135
+ return isSameOptionValue(toRaw(a), toRaw(b));
136
+ }
96
137
  const queryToLatLngCache = /* @__PURE__ */ new Map();
97
138
  async function resolveQueryToLatLng(query) {
98
139
  if (query && typeof query === "object")
@@ -194,11 +235,12 @@ onMounted(() => {
194
235
  emits("error");
195
236
  }
196
237
  });
197
- watch(options, () => {
238
+ watch(() => getReactiveMapOptions(options.value), (nextOptions, previousOptions) => {
198
239
  if (!map.value)
199
240
  return;
200
- const { center: _, zoom: __, mapId: ___, colorScheme: ____, ...rest } = options.value;
201
- map.value.setOptions(rest);
241
+ if (isSameMapOptions(nextOptions, previousOptions))
242
+ return;
243
+ map.value.setOptions(nextOptions);
202
244
  });
203
245
  watch([currentMapId, currentColorScheme], async ([newMapId, newScheme], [oldMapId, oldScheme]) => {
204
246
  if (!map.value || !mapsApi.value || !mapEl.value)
@@ -227,17 +269,18 @@ onMounted(() => {
227
269
  emits("ready", exposed);
228
270
  });
229
271
  watch(() => options.value.zoom, (zoom) => {
230
- if (map.value && zoom != null)
272
+ if (map.value && zoom != null) {
231
273
  map.value.setZoom(zoom);
274
+ }
232
275
  });
233
- watch([() => props.center, () => props.mapOptions?.center], () => {
276
+ watch([() => getCenterWatchKey(props.center), () => getCenterWatchKey(props.mapOptions?.center)], () => {
234
277
  centerOverride.value = void 0;
235
278
  });
236
- watch([() => options.value.center, isMapReady, map], async (next) => {
279
+ watch([controlledCenterKey, isMapReady, map], async () => {
237
280
  if (!map.value) {
238
281
  return;
239
282
  }
240
- let center = toRaw(next[0]);
283
+ let center = toRaw(options.value.center);
241
284
  if (center) {
242
285
  if (isLocationQuery(center) && isMapReady.value) {
243
286
  center = await resolveQueryToLatLng(center);
@@ -11,8 +11,8 @@ type __VLS_Props = {
11
11
  style?: google.maps.Data.StylingFunction | google.maps.Data.StyleOptions;
12
12
  };
13
13
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
- contextmenu: (payload: google.maps.Data.MouseEvent) => any;
15
14
  click: (payload: google.maps.Data.MouseEvent) => any;
15
+ contextmenu: (payload: google.maps.Data.MouseEvent) => any;
16
16
  dblclick: (payload: google.maps.Data.MouseEvent) => any;
17
17
  mousedown: (payload: google.maps.Data.MouseEvent) => any;
18
18
  mousemove: (payload: google.maps.Data.MouseEvent) => any;
@@ -25,8 +25,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
25
25
  setproperty: (payload: google.maps.Data.SetPropertyEvent) => any;
26
26
  removeproperty: (payload: google.maps.Data.RemovePropertyEvent) => any;
27
27
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
28
- onContextmenu?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
29
28
  onClick?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
29
+ onContextmenu?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
30
30
  onDblclick?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
31
31
  onMousedown?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
32
32
  onMousemove?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
@@ -11,8 +11,8 @@ type __VLS_Props = {
11
11
  style?: google.maps.Data.StylingFunction | google.maps.Data.StyleOptions;
12
12
  };
13
13
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
14
- contextmenu: (payload: google.maps.Data.MouseEvent) => any;
15
14
  click: (payload: google.maps.Data.MouseEvent) => any;
15
+ contextmenu: (payload: google.maps.Data.MouseEvent) => any;
16
16
  dblclick: (payload: google.maps.Data.MouseEvent) => any;
17
17
  mousedown: (payload: google.maps.Data.MouseEvent) => any;
18
18
  mousemove: (payload: google.maps.Data.MouseEvent) => any;
@@ -25,8 +25,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
25
25
  setproperty: (payload: google.maps.Data.SetPropertyEvent) => any;
26
26
  removeproperty: (payload: google.maps.Data.RemovePropertyEvent) => any;
27
27
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
28
- onContextmenu?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
29
28
  onClick?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
29
+ onContextmenu?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
30
30
  onDblclick?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
31
31
  onMousedown?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
32
32
  onMousemove?: ((payload: google.maps.Data.MouseEvent) => any) | undefined;
@@ -6,8 +6,8 @@ type __VLS_Props = {
6
6
  options?: Omit<google.maps.PolygonOptions, 'map'>;
7
7
  };
8
8
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
- contextmenu: (payload: google.maps.PolyMouseEvent) => any;
10
9
  click: (payload: google.maps.PolyMouseEvent) => any;
10
+ contextmenu: (payload: google.maps.PolyMouseEvent) => any;
11
11
  dblclick: (payload: google.maps.PolyMouseEvent) => any;
12
12
  drag: (payload: google.maps.MapMouseEvent) => any;
13
13
  dragend: (payload: google.maps.MapMouseEvent) => any;
@@ -18,8 +18,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
18
18
  mouseover: (payload: google.maps.PolyMouseEvent) => any;
19
19
  mouseup: (payload: google.maps.PolyMouseEvent) => any;
20
20
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
21
- onContextmenu?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
22
21
  onClick?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
22
+ onContextmenu?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
23
23
  onDblclick?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
24
24
  onDrag?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
25
25
  onDragend?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
@@ -6,8 +6,8 @@ type __VLS_Props = {
6
6
  options?: Omit<google.maps.PolygonOptions, 'map'>;
7
7
  };
8
8
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
- contextmenu: (payload: google.maps.PolyMouseEvent) => any;
10
9
  click: (payload: google.maps.PolyMouseEvent) => any;
10
+ contextmenu: (payload: google.maps.PolyMouseEvent) => any;
11
11
  dblclick: (payload: google.maps.PolyMouseEvent) => any;
12
12
  drag: (payload: google.maps.MapMouseEvent) => any;
13
13
  dragend: (payload: google.maps.MapMouseEvent) => any;
@@ -18,8 +18,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
18
18
  mouseover: (payload: google.maps.PolyMouseEvent) => any;
19
19
  mouseup: (payload: google.maps.PolyMouseEvent) => any;
20
20
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
21
- onContextmenu?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
22
21
  onClick?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
22
+ onContextmenu?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
23
23
  onDblclick?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
24
24
  onDrag?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
25
25
  onDragend?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
@@ -6,8 +6,8 @@ type __VLS_Props = {
6
6
  options?: Omit<google.maps.PolylineOptions, 'map'>;
7
7
  };
8
8
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
- contextmenu: (payload: google.maps.PolyMouseEvent) => any;
10
9
  click: (payload: google.maps.PolyMouseEvent) => any;
10
+ contextmenu: (payload: google.maps.PolyMouseEvent) => any;
11
11
  dblclick: (payload: google.maps.PolyMouseEvent) => any;
12
12
  drag: (payload: google.maps.MapMouseEvent) => any;
13
13
  dragend: (payload: google.maps.MapMouseEvent) => any;
@@ -18,8 +18,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
18
18
  mouseover: (payload: google.maps.PolyMouseEvent) => any;
19
19
  mouseup: (payload: google.maps.PolyMouseEvent) => any;
20
20
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
21
- onContextmenu?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
22
21
  onClick?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
22
+ onContextmenu?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
23
23
  onDblclick?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
24
24
  onDrag?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
25
25
  onDragend?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
@@ -6,8 +6,8 @@ type __VLS_Props = {
6
6
  options?: Omit<google.maps.PolylineOptions, 'map'>;
7
7
  };
8
8
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
- contextmenu: (payload: google.maps.PolyMouseEvent) => any;
10
9
  click: (payload: google.maps.PolyMouseEvent) => any;
10
+ contextmenu: (payload: google.maps.PolyMouseEvent) => any;
11
11
  dblclick: (payload: google.maps.PolyMouseEvent) => any;
12
12
  drag: (payload: google.maps.MapMouseEvent) => any;
13
13
  dragend: (payload: google.maps.MapMouseEvent) => any;
@@ -18,8 +18,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
18
18
  mouseover: (payload: google.maps.PolyMouseEvent) => any;
19
19
  mouseup: (payload: google.maps.PolyMouseEvent) => any;
20
20
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
21
- onContextmenu?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
22
21
  onClick?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
22
+ onContextmenu?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
23
23
  onDblclick?: ((payload: google.maps.PolyMouseEvent) => any) | undefined;
24
24
  onDrag?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
25
25
  onDragend?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
@@ -6,8 +6,8 @@ type __VLS_Props = {
6
6
  options?: Omit<google.maps.RectangleOptions, 'map'>;
7
7
  };
8
8
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
- contextmenu: (payload: google.maps.MapMouseEvent) => any;
10
9
  click: (payload: google.maps.MapMouseEvent) => any;
10
+ contextmenu: (payload: google.maps.MapMouseEvent) => any;
11
11
  dblclick: (payload: google.maps.MapMouseEvent) => any;
12
12
  drag: (payload: google.maps.MapMouseEvent) => any;
13
13
  dragend: (payload: google.maps.MapMouseEvent) => any;
@@ -19,8 +19,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
19
19
  mouseup: (payload: google.maps.MapMouseEvent) => any;
20
20
  bounds_changed: () => any;
21
21
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
22
- onContextmenu?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
23
22
  onClick?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
23
+ onContextmenu?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
24
24
  onDblclick?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
25
25
  onDrag?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
26
26
  onDragend?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
@@ -6,8 +6,8 @@ type __VLS_Props = {
6
6
  options?: Omit<google.maps.RectangleOptions, 'map'>;
7
7
  };
8
8
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
9
- contextmenu: (payload: google.maps.MapMouseEvent) => any;
10
9
  click: (payload: google.maps.MapMouseEvent) => any;
10
+ contextmenu: (payload: google.maps.MapMouseEvent) => any;
11
11
  dblclick: (payload: google.maps.MapMouseEvent) => any;
12
12
  drag: (payload: google.maps.MapMouseEvent) => any;
13
13
  dragend: (payload: google.maps.MapMouseEvent) => any;
@@ -19,8 +19,8 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {
19
19
  mouseup: (payload: google.maps.MapMouseEvent) => any;
20
20
  bounds_changed: () => any;
21
21
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
22
- onContextmenu?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
23
22
  onClick?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
23
+ onContextmenu?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
24
24
  onDblclick?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
25
25
  onDrag?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
26
26
  onDragend?: ((payload: google.maps.MapMouseEvent) => any) | undefined;
@@ -0,0 +1,59 @@
1
+ import type { HTMLAttributes } from 'vue';
2
+ import type { ElementScriptTrigger } from '../types.js';
3
+ interface CalendlyPrefill {
4
+ name?: string;
5
+ email?: string;
6
+ firstName?: string;
7
+ lastName?: string;
8
+ customAnswers?: Record<string, string>;
9
+ }
10
+ interface CalendlyUtm {
11
+ utmCampaign?: string;
12
+ utmSource?: string;
13
+ utmMedium?: string;
14
+ utmContent?: string;
15
+ utmTerm?: string;
16
+ }
17
+ interface CalendlyPageSettings {
18
+ backgroundColor?: string;
19
+ hideEventTypeDetails?: boolean;
20
+ hideLandingPageDetails?: boolean;
21
+ hideGdprBanner?: boolean;
22
+ primaryColor?: string;
23
+ textColor?: string;
24
+ }
25
+ type __VLS_Props = {
26
+ url: string;
27
+ trigger?: ElementScriptTrigger;
28
+ prefill?: CalendlyPrefill;
29
+ utm?: CalendlyUtm;
30
+ pageSettings?: CalendlyPageSettings;
31
+ rootAttrs?: HTMLAttributes;
32
+ aboveTheFold?: boolean;
33
+ minHeight?: string;
34
+ };
35
+ type __VLS_Slots = {
36
+ default?: () => any;
37
+ loading?: () => any;
38
+ awaitingLoad?: () => any;
39
+ error?: () => any;
40
+ };
41
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
42
+ error: () => any;
43
+ ready: (api: {
44
+ Calendly: typeof window.Calendly;
45
+ }) => any;
46
+ }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
47
+ onError?: (() => any) | undefined;
48
+ onReady?: ((api: {
49
+ Calendly: typeof window.Calendly;
50
+ }) => any) | undefined;
51
+ }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
52
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
53
+ declare const _default: typeof __VLS_export;
54
+ export default _default;
55
+ type __VLS_WithSlots<T, S> = T & {
56
+ new (): {
57
+ $slots: S;
58
+ };
59
+ };
@@ -0,0 +1,79 @@
1
+ <script setup>
2
+ import { useHead } from "@unhead/vue";
3
+ import { computed, onMounted, ref, watch } from "vue";
4
+ import { useScriptTriggerElement } from "../composables/useScriptTriggerElement";
5
+ import { useScriptCalendly } from "../registry/calendly";
6
+ import ScriptAriaLoadingIndicator from "./ScriptAriaLoadingIndicator.vue";
7
+ const {
8
+ url,
9
+ trigger = "visible",
10
+ prefill,
11
+ utm,
12
+ pageSettings,
13
+ rootAttrs,
14
+ aboveTheFold = false,
15
+ minHeight = "700px"
16
+ } = defineProps({
17
+ url: { type: String, required: true },
18
+ trigger: { type: [String, Array, Boolean], required: false },
19
+ prefill: { type: Object, required: false },
20
+ utm: { type: Object, required: false },
21
+ pageSettings: { type: Object, required: false },
22
+ rootAttrs: { type: Object, required: false },
23
+ aboveTheFold: { type: Boolean, required: false },
24
+ minHeight: { type: String, required: false }
25
+ });
26
+ const emit = defineEmits(["ready", "error"]);
27
+ defineSlots();
28
+ const rootEl = ref();
29
+ const containerEl = ref();
30
+ const triggerSignal = useScriptTriggerElement({ trigger, el: rootEl });
31
+ const instance = useScriptCalendly({ scriptOptions: { trigger: triggerSignal } });
32
+ const { onLoaded, status } = instance;
33
+ if (import.meta.server && aboveTheFold) {
34
+ useHead({
35
+ link: [
36
+ { key: "nuxt-script-calendly-preconnect", rel: "preconnect", href: "https://calendly.com" }
37
+ ]
38
+ });
39
+ }
40
+ onMounted(() => {
41
+ onLoaded((api) => {
42
+ if (!containerEl.value)
43
+ return;
44
+ api.Calendly.initInlineWidget({
45
+ url,
46
+ parentElement: containerEl.value,
47
+ prefill,
48
+ utm,
49
+ pageSettings
50
+ });
51
+ emit("ready", api);
52
+ });
53
+ watch(status, (s) => {
54
+ if (s === "error")
55
+ emit("error");
56
+ }, { immediate: true });
57
+ });
58
+ const computedRootAttrs = computed(() => ({
59
+ "aria-busy": status.value === "loading",
60
+ "aria-label": status.value === "awaitingLoad" ? "Calendly Inline Widget - Awaiting Load" : status.value === "loading" ? "Calendly Inline Widget - Loading" : "Calendly Inline Widget",
61
+ "aria-live": "polite",
62
+ "role": "application",
63
+ "style": { position: "relative", minHeight, width: "100%" },
64
+ ...rootAttrs,
65
+ ...triggerSignal instanceof Promise ? triggerSignal.ssrAttrs || {} : {}
66
+ }));
67
+ </script>
68
+
69
+ <template>
70
+ <div ref="rootEl" v-bind="computedRootAttrs">
71
+ <div ref="containerEl" :style="{ minWidth: '320px', minHeight, height: '100%', width: '100%' }" />
72
+ <slot v-if="status === 'loading'" name="loading">
73
+ <ScriptAriaLoadingIndicator />
74
+ </slot>
75
+ <slot v-if="status === 'awaitingLoad'" name="awaitingLoad" />
76
+ <slot v-else-if="status === 'error'" name="error" />
77
+ <slot />
78
+ </div>
79
+ </template>