@nuxt/scripts 0.11.13 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (109) hide show
  1. package/dist/client/200.html +1 -1
  2. package/dist/client/404.html +1 -1
  3. package/dist/client/_nuxt/B1l158TM.js +179 -0
  4. package/dist/client/_nuxt/CEpyMuZa.js +1 -0
  5. package/dist/client/_nuxt/CVO1_9PV.js +1 -0
  6. package/dist/client/_nuxt/Cp-IABpG.js +1 -0
  7. package/dist/client/_nuxt/D0r3Knsf.js +1 -0
  8. package/dist/client/_nuxt/DlfHMoPT.js +1 -0
  9. package/dist/client/_nuxt/DyLGGY9L.js +1 -0
  10. package/dist/client/_nuxt/builds/latest.json +1 -1
  11. package/dist/client/_nuxt/builds/meta/ab2a05b7-9c93-484e-ae04-bd1f39e5f3c1.json +1 -0
  12. package/dist/client/_nuxt/entry.Bb8Z00UZ.css +1 -0
  13. package/dist/client/_nuxt/error-404.pWWosX5v.css +1 -0
  14. package/dist/client/_nuxt/error-500.DHpVpAn4.css +1 -0
  15. package/dist/client/_nuxt/n57rOy2v.js +1 -0
  16. package/dist/client/index.html +1 -1
  17. package/dist/module.d.mts +6 -0
  18. package/dist/module.json +1 -1
  19. package/dist/module.mjs +167 -42
  20. package/dist/registry.mjs +30 -0
  21. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.d.vue.ts +0 -0
  22. package/dist/runtime/components/{ScriptGoogleMaps.vue → GoogleMaps/ScriptGoogleMaps.vue} +17 -13
  23. package/dist/runtime/components/GoogleMaps/ScriptGoogleMaps.vue.d.ts +0 -0
  24. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.d.vue.ts +61 -0
  25. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue +86 -0
  26. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue.d.ts +61 -0
  27. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.d.vue.ts +33 -0
  28. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue +62 -0
  29. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue.d.ts +33 -0
  30. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.d.vue.ts +5 -0
  31. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue +32 -0
  32. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue.d.ts +5 -0
  33. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.d.vue.ts +35 -0
  34. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue +88 -0
  35. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue.d.ts +35 -0
  36. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.d.vue.ts +61 -0
  37. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue +85 -0
  38. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue.d.ts +61 -0
  39. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.d.vue.ts +27 -0
  40. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue +62 -0
  41. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue.d.ts +27 -0
  42. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.d.vue.ts +5 -0
  43. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue +37 -0
  44. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue.d.ts +5 -0
  45. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.d.vue.ts +29 -0
  46. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue +60 -0
  47. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue.d.ts +29 -0
  48. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.d.vue.ts +29 -0
  49. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue +60 -0
  50. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue.d.ts +29 -0
  51. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.d.vue.ts +31 -0
  52. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue +61 -0
  53. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue.d.ts +31 -0
  54. package/dist/runtime/components/ScriptAriaLoadingIndicator.d.vue.ts +2 -0
  55. package/dist/runtime/components/ScriptCarbonAds.d.vue.ts +32 -0
  56. package/dist/runtime/components/ScriptCrisp.d.vue.ts +44 -0
  57. package/dist/runtime/components/ScriptGoogleAdsense.d.vue.ts +37 -0
  58. package/dist/runtime/components/ScriptIntercom.d.vue.ts +45 -0
  59. package/dist/runtime/components/ScriptLemonSqueezy.d.vue.ts +24 -0
  60. package/dist/runtime/components/ScriptLoadingIndicator.d.vue.ts +9 -0
  61. package/dist/runtime/components/ScriptLoadingIndicator.vue.d.ts +1 -1
  62. package/dist/runtime/components/ScriptPayPalButtons.d.vue.ts +72 -0
  63. package/dist/runtime/components/ScriptPayPalButtons.vue +116 -0
  64. package/dist/runtime/components/ScriptPayPalButtons.vue.d.ts +72 -0
  65. package/dist/runtime/components/ScriptPayPalMarks.d.vue.ts +51 -0
  66. package/dist/runtime/components/ScriptPayPalMarks.vue +69 -0
  67. package/dist/runtime/components/ScriptPayPalMarks.vue.d.ts +51 -0
  68. package/dist/runtime/components/ScriptPayPalMessages.d.vue.ts +67 -0
  69. package/dist/runtime/components/ScriptPayPalMessages.vue +90 -0
  70. package/dist/runtime/components/ScriptPayPalMessages.vue.d.ts +67 -0
  71. package/dist/runtime/components/ScriptStripePricingTable.d.vue.ts +35 -0
  72. package/dist/runtime/components/ScriptStripePricingTable.vue +1 -1
  73. package/dist/runtime/components/ScriptVimeoPlayer.d.vue.ts +127 -0
  74. package/dist/runtime/components/ScriptVimeoPlayer.vue.d.ts +2 -2
  75. package/dist/runtime/components/ScriptYouTubePlayer.d.vue.ts +66 -0
  76. package/dist/runtime/composables/useScript.js +35 -2
  77. package/dist/runtime/composables/useScriptEventPage.js +6 -2
  78. package/dist/runtime/composables/useScriptTriggerIdleTimeout.d.ts +10 -0
  79. package/dist/runtime/composables/useScriptTriggerIdleTimeout.js +22 -0
  80. package/dist/runtime/composables/useScriptTriggerInteraction.d.ts +15 -0
  81. package/dist/runtime/composables/useScriptTriggerInteraction.js +35 -0
  82. package/dist/runtime/logger.d.ts +1 -0
  83. package/dist/runtime/logger.js +6 -0
  84. package/dist/runtime/registry/databuddy-analytics.d.ts +77 -0
  85. package/dist/runtime/registry/databuddy-analytics.js +103 -0
  86. package/dist/runtime/registry/google-analytics.d.ts +1 -1
  87. package/dist/runtime/registry/google-analytics.js +5 -5
  88. package/dist/runtime/registry/google-tag-manager.js +3 -5
  89. package/dist/runtime/registry/matomo-analytics.d.ts +1 -0
  90. package/dist/runtime/registry/matomo-analytics.js +27 -4
  91. package/dist/runtime/registry/paypal.d.ts +34 -0
  92. package/dist/runtime/registry/paypal.js +86 -0
  93. package/dist/runtime/registry/reddit-pixel.d.ts +18 -0
  94. package/dist/runtime/registry/reddit-pixel.js +36 -0
  95. package/dist/runtime/registry/stripe.d.ts +2 -2
  96. package/dist/runtime/registry/stripe.js +1 -1
  97. package/dist/runtime/types.d.ts +18 -7
  98. package/dist/runtime/utils.d.ts +5 -2
  99. package/dist/runtime/utils.js +49 -19
  100. package/package.json +26 -19
  101. package/dist/client/_nuxt/1mHV-1pA.js +0 -1
  102. package/dist/client/_nuxt/7VVldQq3.js +0 -1
  103. package/dist/client/_nuxt/CQGAJOTU.js +0 -21
  104. package/dist/client/_nuxt/CYHtqd0e.js +0 -1
  105. package/dist/client/_nuxt/builds/meta/8ed6dba0-c6c1-426f-804b-f7cbe9d62b69.json +0 -1
  106. package/dist/client/_nuxt/entry.tbizjOMR.css +0 -1
  107. package/dist/client/_nuxt/error-404.CDmSTChJ.css +0 -1
  108. package/dist/client/_nuxt/error-500.DpcyFY5F.css +0 -1
  109. package/dist/runtime/components/ScriptGoogleMaps.vue.d.ts +0 -145
@@ -0,0 +1 @@
1
+ :root{--nui-c-context:125,125,125}html{background-color:#fff}html.dark{background-color:#151515;color:#fff;color-scheme:dark}::-moz-selection{background:#8884}::selection{background:#8884}.shiki .line{display:inline-block;position:relative;width:100%}.shiki.diff .line>span{filter:saturate(.75);opacity:.75}.shiki.diff .line-added,.shiki.diff .line-removed{scroll-margin:5em}.shiki.diff .line-added>span,.shiki.diff .line-removed>span{opacity:1!important;position:inherit;scroll-margin:20px;z-index:100}.shiki.diff .line-added>span{color:#218c3b!important}.shiki.diff .line-removed>span{color:#d15547!important}.shiki .line-added:after{background-color:#43885420}.shiki .line-added:after,.shiki .line-removed:after{content:"";display:block;inset:0;position:absolute}.shiki .line-removed:after{background-color:#8f4c3926}::view-transition-new(root),::view-transition-old(root){animation:none;mix-blend-mode:normal}::view-transition-old(root){z-index:1}::view-transition-new(root){z-index:2147483646}.dark::view-transition-old(root){z-index:2147483646}.dark::view-transition-new(root){z-index:1}*,:after,:before{border-color:var(--un-default-border-color,#e5e7eb);border-style:solid;border-width:0;box-sizing:border-box}:after,:before{--un-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}@font-face{font-display:swap;font-family:DM Mono;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmmono/v16/aFTU7PB1QTsUX8KYthSQBK6PYK3EXw.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:DM Mono;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmmono/v16/aFTU7PB1QTsUX8KYthqQBK6PYK0.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-display:swap;font-family:DM Sans;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRR232RmYJp8I5zzw.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c0,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-display:swap;font-family:DM Sans;font-style:normal;font-weight:400;src:url(https://fonts.gstatic.com/s/dmsans/v17/rP2tp2ywxg089UriI5-g4vlH9VoD8CmcqZG40F9JadbnoEwAopxRSW32RmYJp8I5.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}*,:after,:before{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }::backdrop{--un-rotate:0;--un-rotate-x:0;--un-rotate-y:0;--un-rotate-z:0;--un-scale-x:1;--un-scale-y:1;--un-scale-z:1;--un-skew-x:0;--un-skew-y:0;--un-translate-x:0;--un-translate-y:0;--un-translate-z:0;--un-pan-x: ;--un-pan-y: ;--un-pinch-zoom: ;--un-scroll-snap-strictness:proximity;--un-ordinal: ;--un-slashed-zero: ;--un-numeric-figure: ;--un-numeric-spacing: ;--un-numeric-fraction: ;--un-border-spacing-x:0;--un-border-spacing-y:0;--un-ring-offset-shadow:0 0 transparent;--un-ring-shadow:0 0 transparent;--un-shadow-inset: ;--un-shadow:0 0 transparent;--un-ring-inset: ;--un-ring-offset-width:0px;--un-ring-offset-color:#fff;--un-ring-width:0px;--un-ring-color:rgba(147,197,253,.5);--un-blur: ;--un-brightness: ;--un-contrast: ;--un-drop-shadow: ;--un-grayscale: ;--un-hue-rotate: ;--un-invert: ;--un-saturate: ;--un-sepia: ;--un-backdrop-blur: ;--un-backdrop-brightness: ;--un-backdrop-contrast: ;--un-backdrop-grayscale: ;--un-backdrop-hue-rotate: ;--un-backdrop-invert: ;--un-backdrop-opacity: ;--un-backdrop-saturate: ;--un-backdrop-sepia: }.carbon\:book{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 32 32' display='inline-block' vertical-align='middle' width='1.2em' height='1.2em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M19 10h7v2h-7zm0 5h7v2h-7zm0 5h7v2h-7zM6 10h7v2H6zm0 5h7v2H6zm0 5h7v2H6z'/%3E%3Cpath fill='currentColor' d='M28 5H4a2 2 0 0 0-2 2v18a2 2 0 0 0 2 2h24a2 2 0 0 0 2-2V7a2 2 0 0 0-2-2M4 7h11v18H4Zm13 18V7h11v18Z'/%3E%3C/svg%3E")}.carbon\:book,.carbon\:catalog{background-color:currentColor;color:inherit;display:inline-block;height:1.2em;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;vertical-align:middle;width:1.2em}.carbon\:catalog{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 32 32' display='inline-block' vertical-align='middle' width='1.2em' height='1.2em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M26 2H8a2 2 0 0 0-2 2v4H4v2h2v5H4v2h2v5H4v2h2v4a2 2 0 0 0 2 2h18a2 2 0 0 0 2-2V4a2 2 0 0 0-2-2m0 26H8v-4h2v-2H8v-5h2v-2H8v-5h2V8H8V4h18Z'/%3E%3Cpath fill='currentColor' d='M14 8h8v2h-8zm0 7h8v2h-8zm0 7h8v2h-8z'/%3E%3C/svg%3E")}.carbon\:script{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 32 32' display='inline-block' vertical-align='middle' width='1.2em' height='1.2em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='m18.83 26l2.58-2.58L20 22l-4 4l4 4l1.42-1.41zm8.34 0l-2.58 2.58L26 30l4-4l-4-4l-1.42 1.41z'/%3E%3Cpath fill='currentColor' d='M14 28H8V4h8v6a2.006 2.006 0 0 0 2 2h6v6h2v-8a.91.91 0 0 0-.3-.7l-7-7A.9.9 0 0 0 18 2H8a2.006 2.006 0 0 0-2 2v24a2.006 2.006 0 0 0 2 2h6Zm4-23.6l5.6 5.6H18Z'/%3E%3C/svg%3E")}.carbon\:script,.i-carbon\:arrow-up-right,[i-carbon\:arrow-up-right=""]{background-color:currentColor;color:inherit;display:inline-block;height:1.2em;-webkit-mask:var(--un-icon) no-repeat;mask:var(--un-icon) no-repeat;-webkit-mask-size:100% 100%;mask-size:100% 100%;vertical-align:middle;width:1.2em}.i-carbon\:arrow-up-right,[i-carbon\:arrow-up-right=""]{--un-icon:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 32 32' display='inline-block' vertical-align='middle' width='1.2em' height='1.2em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='currentColor' d='M10 6v2h12.59L6 24.59L7.41 26L24 9.41V22h2V6z'/%3E%3C/svg%3E")}.logos\:github-icon{background:url("data:image/svg+xml;utf8,%3Csvg viewBox='0 0 256 250' display='inline-block' vertical-align='middle' width='1.24em' height='1.2em' xmlns='http://www.w3.org/2000/svg' %3E%3Cpath fill='%23161614' d='M128.001 0C57.317 0 0 57.307 0 128.001c0 56.554 36.676 104.535 87.535 121.46c6.397 1.185 8.746-2.777 8.746-6.158c0-3.052-.12-13.135-.174-23.83c-35.61 7.742-43.124-15.103-43.124-15.103c-5.823-14.795-14.213-18.73-14.213-18.73c-11.613-7.944.876-7.78.876-7.78c12.853.902 19.621 13.19 19.621 13.19c11.417 19.568 29.945 13.911 37.249 10.64c1.149-8.272 4.466-13.92 8.127-17.116c-28.431-3.236-58.318-14.212-58.318-63.258c0-13.975 5-25.394 13.188-34.358c-1.329-3.224-5.71-16.242 1.24-33.874c0 0 10.749-3.44 35.21 13.121c10.21-2.836 21.16-4.258 32.038-4.307c10.878.049 21.837 1.47 32.066 4.307c24.431-16.56 35.165-13.12 35.165-13.12c6.967 17.63 2.584 30.65 1.255 33.873c8.207 8.964 13.173 20.383 13.173 34.358c0 49.163-29.944 59.988-58.447 63.157c4.591 3.972 8.682 11.762 8.682 23.704c0 17.126-.148 30.91-.148 35.126c0 3.407 2.304 7.398 8.792 6.14C219.37 232.5 256 184.537 256 128.002C256 57.307 198.691 0 128.001 0m-80.06 182.34c-.282.636-1.283.827-2.194.39c-.929-.417-1.45-1.284-1.15-1.922c.276-.655 1.279-.838 2.205-.399c.93.418 1.46 1.293 1.139 1.931m6.296 5.618c-.61.566-1.804.303-2.614-.591c-.837-.892-.994-2.086-.375-2.66c.63-.566 1.787-.301 2.626.591c.838.903 1 2.088.363 2.66m4.32 7.188c-.785.545-2.067.034-2.86-1.104c-.784-1.138-.784-2.503.017-3.05c.795-.547 2.058-.055 2.861 1.075c.782 1.157.782 2.522-.019 3.08m7.304 8.325c-.701.774-2.196.566-3.29-.49c-1.119-1.032-1.43-2.496-.726-3.27c.71-.776 2.213-.558 3.315.49c1.11 1.03 1.45 2.505.701 3.27m9.442 2.81c-.31 1.003-1.75 1.459-3.199 1.033c-1.448-.439-2.395-1.613-2.103-2.626c.301-1.01 1.747-1.484 3.207-1.028c1.446.436 2.396 1.602 2.095 2.622m10.744 1.193c.036 1.055-1.193 1.93-2.715 1.95c-1.53.034-2.769-.82-2.786-1.86c0-1.065 1.202-1.932 2.733-1.958c1.522-.03 2.768.818 2.768 1.868m10.555-.405c.182 1.03-.875 2.088-2.387 2.37c-1.485.271-2.861-.365-3.05-1.386c-.184-1.056.893-2.114 2.376-2.387c1.514-.263 2.868.356 3.061 1.403'/%3E%3C/svg%3E") no-repeat;background-color:transparent;background-size:100% 100%;display:inline-block;height:1.2em;vertical-align:middle;width:1.24em}.n-badge{background-color:rgba(var(--nui-c-context),.1);border-radius:.25rem;font-size:.75rem;line-height:1rem;margin-left:.125rem;margin-right:.125rem;padding:.125rem .375rem;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap;--un-text-opacity:1;color:rgba(var(--nui-c-context),var(--un-text-opacity))}.n-button-icon{font-size:1.1em;margin-left:-.2em;margin-right:.2em}.n-icon-button{align-items:center;aspect-ratio:1/1;border-radius:.25rem;display:flex;height:1.6em;justify-content:center;opacity:.5;width:1.6em}.n-button-base{align-items:center;border-color:#9ca3af33;border-radius:.25rem;border-width:1px;display:inline-flex;gap:.25rem;opacity:.8;padding:.25em 1em;touch-action:manipulation;--un-shadow:var(--un-shadow-inset) 0 1px 2px 0 var(--un-shadow-color,rgba(0,0,0,.05));box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow);outline:2px solid transparent!important;outline-offset:2px!important}.n-icon{flex:none}.n-border-base{border-color:#9ca3af33}.hover\:n-button-hover:hover{--un-border-opacity:1!important;border-color:rgba(var(--nui-c-context),var(--un-border-opacity))!important;--un-text-opacity:1;color:rgba(var(--nui-c-context),var(--un-text-opacity));opacity:1}.n-bg-active{background-color:#9ca3af0d}.dark .n-bg-base{--un-bg-opacity:1;background-color:rgb(21 21 21/var(--un-bg-opacity))}.n-bg-base,.n-code-block{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.dark .n-code-block{--un-bg-opacity:1;background-color:rgb(18 18 18/var(--un-bg-opacity))}.hover\:n-bg-active:hover,.n-icon-button:hover{background-color:#9ca3af0d}.n-icon-button:hover{opacity:1}.active\:n-button-active:active{background-color:rgba(var(--nui-c-context),.05);--un-ring-width:3px;--un-ring-offset-shadow:var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);--un-ring-shadow:var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color);box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow);--un-ring-color:rgba(var(--nui-c-context),.1)}.hover\:n-link-hover:hover{--un-text-opacity:1;color:rgba(var(--nui-c-context),var(--un-text-opacity));-webkit-text-decoration-color:rgba(var(--nui-c-context),var(--un-line-opacity))!important;--un-line-opacity:1!important;opacity:1!important;text-decoration-color:rgba(var(--nui-c-context),var(--un-line-opacity))!important;text-decoration-style:dotted}.n-link-base{text-decoration-color:#0003;text-decoration-line:underline;text-underline-offset:2px}.dark .n-link-base{text-decoration-color:#fff6}.focus-visible\:n-focus-base:focus-visible{--un-ring-width:2px;--un-ring-offset-shadow:var(--un-ring-inset) 0 0 0 var(--un-ring-offset-width) var(--un-ring-offset-color);--un-ring-shadow:var(--un-ring-inset) 0 0 0 calc(var(--un-ring-width) + var(--un-ring-offset-width)) var(--un-ring-color);box-shadow:var(--un-ring-offset-shadow),var(--un-ring-shadow),var(--un-shadow);--un-ring-color:rgba(var(--nui-c-context),.5)}.n-transition{transition-duration:.15s;transition-duration:.2s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.sr-only{height:1px;margin:-1px;overflow:hidden;padding:0;width:1px;clip:rect(0,0,0,0);border-width:0;white-space:nowrap}.absolute,.sr-only{position:absolute}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:0}.top-0{top:0}.top-6{top:1.5rem}.z-10{z-index:10}.z-2{z-index:2}.grid{display:grid}.m0{margin:0}.mx-auto{margin-left:auto;margin-right:auto}.mb-2,.mb2,[mb2=""]{margin-bottom:.5rem}.mb-4{margin-bottom:1rem}.mb-8{margin-bottom:2rem}.ml--1px{margin-left:-1px}.ml-2{margin-left:.5rem}.mr-\[2px\]{margin-right:2px}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.inline-block{display:inline-block}.hidden{display:none}.h-2,.h2{height:.5rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-auto{height:auto}.h-full{height:100%}.h1{height:.25rem}.h3{height:.75rem}.max-h-full{max-height:100%}.max-w-520px{max-width:520px}.max-w-6{max-width:1.5rem}.max-w-8{max-width:2rem}.min-h-screen{min-height:100vh}.w-2{width:.5rem}.w-4{width:1rem}.w-full{width:100%}.flex,[flex=""]{display:flex}.flex-inline,.inline-flex{display:inline-flex}.flex-1{flex:1 1 0%}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.translate-y--1,[translate-y--1=""]{--un-translate-y:-.25rem;transform:translate(var(--un-translate-x)) translateY(var(--un-translate-y)) translateZ(var(--un-translate-z)) rotate(var(--un-rotate)) rotateX(var(--un-rotate-x)) rotateY(var(--un-rotate-y)) rotate(var(--un-rotate-z)) skew(var(--un-skew-x)) skewY(var(--un-skew-y)) scaleX(var(--un-scale-x)) scaleY(var(--un-scale-y)) scaleZ(var(--un-scale-z))}.cursor-pointer{cursor:pointer}.place-content-center{place-content:center}.items-start{align-items:flex-start}.items-end,[items-end=""]{align-items:flex-end}.items-center,[items-center=""]{align-items:center}.justify-start{justify-content:flex-start}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-1{gap:.25rem}.gap-1\.5,[gap-1\.5=""]{gap:.375rem}.gap-2,[gap-2=""]{gap:.5rem}.gap-3{gap:.75rem}.gap-7{gap:1.75rem}.space-x-3>:not([hidden])~:not([hidden]){--un-space-x-reverse:0;margin-left:calc(.75rem*(1 - var(--un-space-x-reverse)));margin-right:calc(.75rem*var(--un-space-x-reverse))}.space-x-5>:not([hidden])~:not([hidden]){--un-space-x-reverse:0;margin-left:calc(1.25rem*(1 - var(--un-space-x-reverse)));margin-right:calc(1.25rem*var(--un-space-x-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--un-space-y-reverse:0;margin-bottom:calc(.5rem*var(--un-space-y-reverse));margin-top:calc(.5rem*(1 - var(--un-space-y-reverse)))}.space-y-3>:not([hidden])~:not([hidden]){--un-space-y-reverse:0;margin-bottom:calc(.75rem*var(--un-space-y-reverse));margin-top:calc(.75rem*(1 - var(--un-space-y-reverse)))}.space-y-4>:not([hidden])~:not([hidden]){--un-space-y-reverse:0;margin-bottom:calc(1rem*var(--un-space-y-reverse));margin-top:calc(1rem*(1 - var(--un-space-y-reverse)))}.overflow-hidden{overflow:hidden}.overflow-y-auto{overflow-y:auto}.border{border-width:1px}.border-b-0{border-bottom-width:0}.border-l{border-left-width:1px}.border-black\/5{border-color:#0000000d}.dark .dark\:border-white\/10{border-color:#ffffff1a}.rounded{border-radius:.25rem}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:.5rem}.rounded-xl{border-radius:.75rem}.rounded-t-md{border-top-left-radius:.375rem;border-top-right-radius:.375rem}.border-none{border-style:none}.bg-blue-100{--un-bg-opacity:1;background-color:rgb(219 234 254/var(--un-bg-opacity))}.bg-blue-500{--un-bg-opacity:1;background-color:rgb(59 130 246/var(--un-bg-opacity))}.bg-gray-100{--un-bg-opacity:1;background-color:rgb(243 244 246/var(--un-bg-opacity))}.bg-gray-400{--un-bg-opacity:1;background-color:rgb(156 163 175/var(--un-bg-opacity))}.bg-gray-50\/50{background-color:#f9fafb80}.bg-green-50{--un-bg-opacity:1;background-color:rgb(240 253 244/var(--un-bg-opacity))}.bg-green-500{--un-bg-opacity:1;background-color:rgb(34 197 94/var(--un-bg-opacity))}.bg-light-200{--un-bg-opacity:1;background-color:rgb(250 250 250/var(--un-bg-opacity))}.bg-neutral-700{--un-bg-opacity:1;background-color:rgb(64 64 64/var(--un-bg-opacity))}.bg-purple-100{--un-bg-opacity:1;background-color:rgb(243 232 255/var(--un-bg-opacity))}.bg-red-100{--un-bg-opacity:1;background-color:rgb(254 226 226/var(--un-bg-opacity))}.bg-red-500{--un-bg-opacity:1;background-color:rgb(239 68 68/var(--un-bg-opacity))}.bg-white{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.bg-yellow-100{--un-bg-opacity:1;background-color:rgb(254 249 195/var(--un-bg-opacity))}.bg-yellow-500{--un-bg-opacity:1;background-color:rgb(234 179 8/var(--un-bg-opacity))}.dark .dark\:bg-\[\#020420\]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark .dark\:bg-black{--un-bg-opacity:1;background-color:rgb(0 0 0/var(--un-bg-opacity))}.dark .dark\:bg-blue-900{--un-bg-opacity:1;background-color:rgb(30 58 138/var(--un-bg-opacity))}.dark .dark\:bg-dark-700{--un-bg-opacity:1;background-color:rgb(27 27 27/var(--un-bg-opacity))}.dark .dark\:bg-white\/5{background-color:#ffffff0d}.dark .dark\:hover\:bg-gray-800:hover{--un-bg-opacity:1;background-color:rgb(31 41 55/var(--un-bg-opacity))}.hover\:bg-gray-50:hover{--un-bg-opacity:1;background-color:rgb(249 250 251/var(--un-bg-opacity))}.hover\:bg-gray-800\/50:hover{background-color:#1f293780}.p-3{padding:.75rem}.p-4{padding:1rem}.p-8{padding:2rem}.px-10{padding-left:2.5rem;padding-right:2.5rem}.px-2{padding-left:.5rem;padding-right:.5rem}.px-4{padding-left:1rem;padding-right:1rem}.px-5{padding-left:1.25rem;padding-right:1.25rem}.py-\[2px\]{padding-bottom:2px;padding-top:2px}.py-0\.5{padding-bottom:.125rem;padding-top:.125rem}.py-1{padding-bottom:.25rem;padding-top:.25rem}.py-2{padding-bottom:.5rem;padding-top:.5rem}.pt-12{padding-top:3rem}.pt-4{padding-top:1rem}.text-center{text-align:center}.text-\[80px\]{font-size:80px}.text-2xl{font-size:1.5rem;line-height:2rem}.text-6xl{font-size:3.75rem;line-height:1}.text-base{font-size:1rem;line-height:1.5rem}.text-lg,[text-lg=""]{font-size:1.125rem;line-height:1.75rem}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl,[text-xl=""]{font-size:1.25rem;line-height:1.75rem}.text-xs,[text-xs=""]{font-size:.75rem;line-height:1rem}.dark .dark\:text-blue-300,.text-blue-300{--un-text-opacity:1;color:rgb(147 197 253/var(--un-text-opacity))}.dark .dark\:text-blue-400{--un-text-opacity:1;color:rgb(96 165 250/var(--un-text-opacity))}.dark .dark\:text-gray-400{--un-text-opacity:1;color:rgb(156 163 175/var(--un-text-opacity))}.dark .dark\:text-white,.dark [dark\:text-white=""]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}.text-\[\#020420\]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.text-black,[text-black=""]{--un-text-opacity:1;color:rgb(0 0 0/var(--un-text-opacity))}.text-blue-600{--un-text-opacity:1;color:rgb(37 99 235/var(--un-text-opacity))}.text-blue-700{--un-text-opacity:1;color:rgb(29 78 216/var(--un-text-opacity))}.text-gray-500{--un-text-opacity:1;color:rgb(107 114 128/var(--un-text-opacity))}.text-gray-600{--un-text-opacity:1;color:rgb(75 85 99/var(--un-text-opacity))}.text-gray-700{--un-text-opacity:1;color:rgb(55 65 81/var(--un-text-opacity))}.text-green-300{--un-text-opacity:1;color:rgb(134 239 172/var(--un-text-opacity))}.text-green-700{--un-text-opacity:1;color:rgb(21 128 61/var(--un-text-opacity))}.text-neutral-300{--un-text-opacity:1;color:rgb(212 212 212/var(--un-text-opacity))}.text-purple-700{--un-text-opacity:1;color:rgb(126 34 206/var(--un-text-opacity))}.text-red-700{--un-text-opacity:1;color:rgb(185 28 28/var(--un-text-opacity))}.text-yellow-700{--un-text-opacity:1;color:rgb(161 98 7/var(--un-text-opacity))}.dark .dark\:hover\:text-blue-300:hover{--un-text-opacity:1;color:rgb(147 197 253/var(--un-text-opacity))}.hover\:text-\[\#00DC82\]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.hover\:text-blue-800:hover{--un-text-opacity:1;color:rgb(30 64 175/var(--un-text-opacity))}.font-bold{font-weight:700}.font-light{font-weight:300}.font-medium{font-weight:500}.font-semibold,[font-semibold=""]{font-weight:600}.leading-none{line-height:1}.leading-tight{line-height:1.25}.tracking-wide{letter-spacing:.025em}.font-mono{font-family:DM Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.font-sans{font-family:DM Sans,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.uppercase{text-transform:uppercase}.capitalize{text-transform:capitalize}.tabular-nums{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.hover\:underline:hover,.underline{text-decoration-line:underline}.underline-offset-3{text-underline-offset:3px}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.tab{-moz-tab-size:4;-o-tab-size:4;tab-size:4}.op-0\.1{opacity:.001}.op35{opacity:.35}.op50,.opacity-50,[op50=""]{opacity:.5}.opacity-40{opacity:.4}.opacity-80{opacity:.8}.hover\:opacity-70:hover{opacity:.7}.backdrop-blur-lg{--un-backdrop-blur:blur(16px);-webkit-backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia);backdrop-filter:var(--un-backdrop-blur) var(--un-backdrop-brightness) var(--un-backdrop-contrast) var(--un-backdrop-grayscale) var(--un-backdrop-hue-rotate) var(--un-backdrop-invert) var(--un-backdrop-opacity) var(--un-backdrop-saturate) var(--un-backdrop-sepia)}.transition{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-all{transition-duration:.15s;transition-property:all;transition-timing-function:cubic-bezier(.4,0,.2,1)}.transition-colors{transition-duration:.15s;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1)}.n-disabled\:n-disabled[disabled],[disabled] .n-disabled\:n-disabled{filter:saturate(0);opacity:.6;pointer-events:none}@media (min-width:640px){.sm\:right-6{right:1.5rem}.sm\:text-\[110px\]{font-size:110px}.sm\:text-2xl{font-size:1.5rem;line-height:2rem}.sm\:text-3xl{font-size:1.875rem;line-height:2.25rem}.sm\:text-8xl{font-size:6rem;line-height:1}}@media (min-width:1024px){.lg\:flex{display:flex}}.n-code-block-lines .shiki code .line:before{display:none}
@@ -0,0 +1 @@
1
+ .grid[data-v-f5e4c931]{display:grid}.mb-2[data-v-f5e4c931]{margin-bottom:.5rem}.mb-4[data-v-f5e4c931]{margin-bottom:1rem}.max-w-520px[data-v-f5e4c931]{max-width:520px}.min-h-screen[data-v-f5e4c931]{min-height:100vh}.w-full[data-v-f5e4c931]{width:100%}.flex[data-v-f5e4c931]{display:flex}.place-content-center[data-v-f5e4c931]{place-content:center}.items-center[data-v-f5e4c931]{align-items:center}.justify-center[data-v-f5e4c931]{justify-content:center}.overflow-hidden[data-v-f5e4c931]{overflow:hidden}.bg-white[data-v-f5e4c931]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-f5e4c931]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-f5e4c931]{text-align:center}.text-\[80px\][data-v-f5e4c931]{font-size:80px}.text-2xl[data-v-f5e4c931]{font-size:1.5rem;line-height:2rem}.text-sm[data-v-f5e4c931]{font-size:.875rem;line-height:1.25rem}.text-\[\#020420\][data-v-f5e4c931]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-f5e4c931]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.hover\:text-\[\#00DC82\][data-v-f5e4c931]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.font-medium[data-v-f5e4c931]{font-weight:500}.font-semibold[data-v-f5e4c931]{font-weight:600}.leading-none[data-v-f5e4c931]{line-height:1}.tracking-wide[data-v-f5e4c931]{letter-spacing:.025em}.font-sans[data-v-f5e4c931]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-f5e4c931]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.underline[data-v-f5e4c931]{text-decoration-line:underline}.underline-offset-3[data-v-f5e4c931]{text-underline-offset:3px}.antialiased[data-v-f5e4c931]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-f5e4c931]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-f5e4c931]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:text-\[110px\][data-v-f5e4c931]{font-size:110px}.sm\:text-3xl[data-v-f5e4c931]{font-size:1.875rem;line-height:2.25rem}}
@@ -0,0 +1 @@
1
+ .grid[data-v-8f129e28]{display:grid}.mb-2[data-v-8f129e28]{margin-bottom:.5rem}.mb-4[data-v-8f129e28]{margin-bottom:1rem}.max-w-520px[data-v-8f129e28]{max-width:520px}.min-h-screen[data-v-8f129e28]{min-height:100vh}.place-content-center[data-v-8f129e28]{place-content:center}.overflow-hidden[data-v-8f129e28]{overflow:hidden}.bg-white[data-v-8f129e28]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-8f129e28]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-8f129e28]{text-align:center}.text-\[80px\][data-v-8f129e28]{font-size:80px}.text-2xl[data-v-8f129e28]{font-size:1.5rem;line-height:2rem}.text-\[\#020420\][data-v-8f129e28]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-8f129e28]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.font-semibold[data-v-8f129e28]{font-weight:600}.leading-none[data-v-8f129e28]{line-height:1}.tracking-wide[data-v-8f129e28]{letter-spacing:.025em}.font-sans[data-v-8f129e28]{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji}.tabular-nums[data-v-8f129e28]{--un-numeric-spacing:tabular-nums;font-variant-numeric:var(--un-ordinal) var(--un-slashed-zero) var(--un-numeric-figure) var(--un-numeric-spacing) var(--un-numeric-fraction)}.antialiased[data-v-8f129e28]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-8f129e28]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-8f129e28]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:text-\[110px\][data-v-8f129e28]{font-size:110px}.sm\:text-3xl[data-v-8f129e28]{font-size:1.875rem;line-height:2.25rem}}
@@ -0,0 +1 @@
1
+ import{u as a,f as s,h as u,i as r,g as o}from"#entry";function i(e){const n=e||s();return n.ssrContext?.head||n.runWithContext(()=>{if(u()){const t=r(o);if(!t)throw new Error("[nuxt] [unhead] Missing Unhead instance.");return t}})}function c(e,n={}){const t=i(n.nuxt);return a(e,{head:t,...n})}export{c as u};
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.tbizjOMR.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CQGAJOTU.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.CDmSTChJ.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/1mHV-1pA.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/7VVldQq3.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.DpcyFY5F.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CYHtqd0e.js"><script type="module" src="/__nuxt-scripts/_nuxt/CQGAJOTU.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1755852640106,false]</script><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"}}},app:{baseURL:"/__nuxt-scripts",buildId:"8ed6dba0-c6c1-426f-804b-f7cbe9d62b69",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><script type="importmap">{"imports":{"#entry":"/__nuxt-scripts/_nuxt/B1l158TM.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.Bb8Z00UZ.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/B1l158TM.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CVO1_9PV.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/D0r3Knsf.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/Cp-IABpG.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DlfHMoPT.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.pWWosX5v.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/CEpyMuZa.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/n57rOy2v.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.DHpVpAn4.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DyLGGY9L.js"><script type="module" src="/__nuxt-scripts/_nuxt/B1l158TM.js" crossorigin></script></head><body><div id="__nuxt"></div><div id="teleports"></div><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1758773952673,false]</script><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"}}},app:{baseURL:"/__nuxt-scripts",buildId:"ab2a05b7-9c93-484e-ae04-bd1f39e5f3c1",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>
package/dist/module.d.mts CHANGED
@@ -38,6 +38,12 @@ interface ModuleOptions {
38
38
  * Configure the fetch options used for downloading scripts.
39
39
  */
40
40
  fetchOptions?: FetchOptions;
41
+ /**
42
+ * Cache duration for bundled scripts in milliseconds.
43
+ * Scripts older than this will be re-downloaded during builds.
44
+ * @default 604800000 (7 days)
45
+ */
46
+ cacheMaxAge?: number;
41
47
  };
42
48
  /**
43
49
  * Whether the module is enabled.
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=3.16"
6
6
  },
7
- "version": "0.11.13",
7
+ "version": "0.12.1",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "1.0.2",
10
10
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -1,4 +1,5 @@
1
1
  import { useNuxt, useLogger, addDevServerHandler, tryUseNuxt, logger as logger$1, defineNuxtModule, createResolver, addImports, addComponentsDir, addTypeTemplate, addPluginTemplate, addBuildPlugin, hasNuxtModule } from '@nuxt/kit';
2
+ import { defu } from 'defu';
2
3
  import { resolvePackageJSON, readPackageJSON } from 'pkg-types';
3
4
  import { existsSync } from 'node:fs';
4
5
  import fsp from 'node:fs/promises';
@@ -11,7 +12,6 @@ import { join, resolve, relative } from 'pathe';
11
12
  import { colors } from 'consola/utils';
12
13
  import { fetch, $fetch } from 'ofetch';
13
14
  import { lazyEventHandler, eventHandler, createError } from 'h3';
14
- import { defu } from 'defu';
15
15
  import { createStorage } from 'unstorage';
16
16
  import fsDriver from 'unstorage/drivers/fs-lite';
17
17
  import { pathToFileURL } from 'node:url';
@@ -148,6 +148,15 @@ function isJS(id) {
148
148
  return JS_RE.test(pathname);
149
149
  }
150
150
 
151
+ const SEVEN_DAYS_IN_MS = 7 * 24 * 60 * 60 * 1e3;
152
+ async function isCacheExpired(storage, filename, cacheMaxAge = SEVEN_DAYS_IN_MS) {
153
+ const metaKey = `bundle-meta:${filename}`;
154
+ const meta = await storage.getItem(metaKey);
155
+ if (!meta || !meta.timestamp) {
156
+ return true;
157
+ }
158
+ return Date.now() - meta.timestamp > cacheMaxAge;
159
+ }
151
160
  function normalizeScriptData(src, assetsBaseURL = "/_scripts") {
152
161
  if (hasProtocol(src, { acceptRelative: true })) {
153
162
  src = src.replace(/^\/\//, "https://");
@@ -163,8 +172,8 @@ function normalizeScriptData(src, assetsBaseURL = "/_scripts") {
163
172
  }
164
173
  return { url: src };
165
174
  }
166
- async function downloadScript(opts, renderedScript, fetchOptions) {
167
- const { src, url, filename } = opts;
175
+ async function downloadScript(opts, renderedScript, fetchOptions, cacheMaxAge) {
176
+ const { src, url, filename, forceDownload } = opts;
168
177
  if (src === url || !filename) {
169
178
  return;
170
179
  }
@@ -172,8 +181,10 @@ async function downloadScript(opts, renderedScript, fetchOptions) {
172
181
  const scriptContent = renderedScript.get(src);
173
182
  let res = scriptContent instanceof Error ? void 0 : scriptContent?.content;
174
183
  if (!res) {
175
- if (await storage.hasItem(`bundle:${filename}`)) {
176
- const res2 = await storage.getItemRaw(`bundle:${filename}`);
184
+ const cacheKey = `bundle:${filename}`;
185
+ const shouldUseCache = !forceDownload && await storage.hasItem(cacheKey) && !await isCacheExpired(storage, filename, cacheMaxAge);
186
+ if (shouldUseCache) {
187
+ const res2 = await storage.getItemRaw(cacheKey);
177
188
  renderedScript.set(url, {
178
189
  content: res2,
179
190
  size: res2.length / 1024,
@@ -187,7 +198,7 @@ async function downloadScript(opts, renderedScript, fetchOptions) {
187
198
  let size = 0;
188
199
  res = await $fetch.raw(src, { ...fetchOptions, responseType: "arrayBuffer" }).then(async (r) => {
189
200
  if (!r.ok) {
190
- throw new Error(`Failed to fetch ${src}`);
201
+ throw new Error(`Failed to fetch ${src} (HTTP ${r.status})`);
191
202
  }
192
203
  encoding = r.headers.get("content-encoding");
193
204
  const contentLength = r.headers.get("content-length");
@@ -195,6 +206,11 @@ async function downloadScript(opts, renderedScript, fetchOptions) {
195
206
  return Buffer.from(r._data || await r.arrayBuffer());
196
207
  });
197
208
  await storage.setItemRaw(`bundle:${filename}`, res);
209
+ await storage.setItem(`bundle-meta:${filename}`, {
210
+ timestamp: Date.now(),
211
+ src,
212
+ filename
213
+ });
198
214
  size = size || res.length / 1024;
199
215
  logger.info(`Downloading script ${colors.gray(`${src} \u2192 ${filename} (${size.toFixed(2)} kB ${encoding})`)}`);
200
216
  renderedScript.set(url, {
@@ -213,6 +229,9 @@ function NuxtScriptBundleTransformer(options = {
213
229
  const { renderedScript = /* @__PURE__ */ new Map() } = options;
214
230
  const cacheDir = join(nuxt.options.buildDir, "cache", "scripts");
215
231
  nuxt.hooks.hook("build:done", async () => {
232
+ if (nuxt.options._prepare) {
233
+ return;
234
+ }
216
235
  const scripts = [...renderedScript];
217
236
  if (!scripts.length) {
218
237
  logger.debug("[bundle-script-transformer] No scripts to bundle...");
@@ -268,11 +287,14 @@ function NuxtScriptBundleTransformer(options = {
268
287
  }
269
288
  if (!registryNode.scriptBundling && !registryNode.src)
270
289
  return;
290
+ const baseName = fnName.replace(/^useScript/, "");
291
+ const registryKey = baseName.length > 0 ? baseName.charAt(0).toLowerCase() + baseName.slice(1) : "";
292
+ const registryConfig = options.registryConfig?.[registryKey] || {};
293
+ const fnArg0 = {};
271
294
  if (node.arguments[0]?.type === "ObjectExpression") {
272
295
  const optionsNode = node.arguments[0];
273
- const fnArg0 = {};
274
296
  for (const prop of optionsNode.properties) {
275
- if (prop.type === "Property" && prop.value.type === "Literal")
297
+ if (prop.type === "Property" && prop.value.type === "Literal" && prop.key && "name" in prop.key)
276
298
  fnArg0[prop.key.name] = prop.value.value;
277
299
  }
278
300
  const srcProperty = node.arguments[0].properties.find(
@@ -280,17 +302,39 @@ function NuxtScriptBundleTransformer(options = {
280
302
  );
281
303
  if (srcProperty?.value?.value) {
282
304
  scriptSrcNode = srcProperty?.value;
283
- } else {
284
- src = registryNode.scriptBundling && registryNode.scriptBundling(fnArg0);
285
- if (src === false)
286
- return;
287
305
  }
288
306
  }
307
+ if (!scriptSrcNode) {
308
+ const mergedOptions = { ...registryConfig, ...fnArg0 };
309
+ src = registryNode.scriptBundling && registryNode.scriptBundling(mergedOptions);
310
+ if (src === false)
311
+ return;
312
+ }
313
+ }
314
+ if (!scriptSrcNode && !src) {
315
+ const hasBundleOption = node.arguments[1]?.type === "ObjectExpression" && node.arguments[1].properties.some(
316
+ (p) => (p.key?.name === "bundle" || p.key?.value === "bundle") && p.type === "Property"
317
+ );
318
+ if (hasBundleOption) {
319
+ const scriptOptionsArg = node.arguments[1];
320
+ const bundleProperty = scriptOptionsArg.properties.find(
321
+ (p) => (p.key?.name === "bundle" || p.key?.value === "bundle") && p.type === "Property"
322
+ );
323
+ if (bundleProperty && bundleProperty.value.type === "Literal") {
324
+ const bundleValue = bundleProperty.value.value;
325
+ if (bundleValue === true || bundleValue === "force" || String(bundleValue) === "true") {
326
+ const valueNode = bundleProperty.value;
327
+ s.overwrite(valueNode.start, valueNode.end, `'unsupported'`);
328
+ }
329
+ }
330
+ }
331
+ return;
289
332
  }
290
333
  if (scriptSrcNode || src) {
291
334
  src = src || (typeof scriptSrcNode?.value === "string" ? scriptSrcNode?.value : false);
292
335
  if (src) {
293
- let canBundle = !!options.defaultBundle;
336
+ let canBundle = options.defaultBundle === true || options.defaultBundle === "force";
337
+ let forceDownload = options.defaultBundle === "force";
294
338
  if (node.arguments[1]?.type === "ObjectExpression") {
295
339
  const scriptOptionsArg = node.arguments[1];
296
340
  const bundleProperty = scriptOptionsArg.properties.find(
@@ -298,7 +342,8 @@ function NuxtScriptBundleTransformer(options = {
298
342
  );
299
343
  if (bundleProperty && bundleProperty.value.type === "Literal") {
300
344
  const value = bundleProperty.value;
301
- if (String(value.value) !== "true") {
345
+ const bundleValue = value.value;
346
+ if (bundleValue !== true && bundleValue !== "force" && String(bundleValue) !== "true") {
302
347
  canBundle = false;
303
348
  return;
304
349
  }
@@ -311,25 +356,35 @@ function NuxtScriptBundleTransformer(options = {
311
356
  s.remove(bundleProperty.start, nextProperty ? nextProperty.start : bundleProperty.end);
312
357
  }
313
358
  canBundle = true;
359
+ forceDownload = bundleValue === "force";
314
360
  }
315
361
  }
316
- const scriptOptions = node.arguments[0].properties?.find(
362
+ const scriptOptions = node.arguments[0]?.properties?.find(
317
363
  (p) => p.key?.name === "scriptOptions"
318
364
  );
319
365
  const bundleOption = scriptOptions?.value.properties?.find((prop) => {
320
366
  return prop.type === "Property" && prop.key?.name === "bundle" && prop.value.type === "Literal";
321
367
  });
322
- canBundle = bundleOption ? bundleOption.value.value : canBundle;
368
+ if (bundleOption) {
369
+ const bundleValue = bundleOption.value.value;
370
+ canBundle = bundleValue === true || bundleValue === "force" || String(bundleValue) === "true";
371
+ forceDownload = bundleValue === "force";
372
+ }
323
373
  if (canBundle) {
324
374
  const { url: _url, filename } = normalizeScriptData(src, options.assetsBaseURL);
325
375
  let url = _url;
326
376
  try {
327
- await downloadScript({ src, url, filename }, renderedScript, options.fetchOptions);
377
+ await downloadScript({ src, url, filename, forceDownload }, renderedScript, options.fetchOptions, options.cacheMaxAge);
328
378
  } catch (e) {
329
379
  if (options.fallbackOnSrcOnBundleFail) {
330
380
  logger.warn(`[Nuxt Scripts: Bundle Transformer] Failed to bundle ${src}. Fallback to remote loading.`);
331
381
  url = src;
332
382
  } else {
383
+ const errorMessage = e?.message || "Unknown error";
384
+ if (errorMessage.includes("timeout") || errorMessage.includes("network") || errorMessage.includes("ENOTFOUND")) {
385
+ logger.error(`[Nuxt Scripts: Bundle Transformer] Network issue while bundling ${src}: ${errorMessage}`);
386
+ logger.error(`[Nuxt Scripts: Bundle Transformer] Tip: Set 'fallbackOnSrcOnBundleFail: true' in module options or disable bundling in Docker environments`);
387
+ }
333
388
  throw e;
334
389
  }
335
390
  }
@@ -342,23 +397,27 @@ function NuxtScriptBundleTransformer(options = {
342
397
  if (scriptSrcNode) {
343
398
  s.overwrite(scriptSrcNode.start, scriptSrcNode.end, `'${url}'`);
344
399
  } else {
345
- const optionsNode = node.arguments[0];
346
- const scriptInputProperty = optionsNode.properties.find(
347
- (p) => p.key?.name === "scriptInput" || p.key?.value === "scriptInput"
348
- );
349
- if (scriptInputProperty) {
350
- const scriptInput = scriptInputProperty.value;
351
- if (scriptInput.type === "ObjectExpression") {
352
- const srcProperty = scriptInput.properties.find(
353
- (p) => p.key?.name === "src" || p.key?.value === "src"
354
- );
355
- if (srcProperty)
356
- s.overwrite(srcProperty.value.start, srcProperty.value.end, `'${url}'`);
357
- else
358
- s.appendRight(scriptInput.end, `, src: '${url}'`);
400
+ if (node.arguments[0]) {
401
+ const optionsNode = node.arguments[0];
402
+ const scriptInputProperty = optionsNode.properties.find(
403
+ (p) => p.key?.name === "scriptInput" || p.key?.value === "scriptInput"
404
+ );
405
+ if (scriptInputProperty) {
406
+ const scriptInput = scriptInputProperty.value;
407
+ if (scriptInput.type === "ObjectExpression") {
408
+ const srcProperty = scriptInput.properties.find(
409
+ (p) => p.key?.name === "src" || p.key?.value === "src"
410
+ );
411
+ if (srcProperty)
412
+ s.overwrite(srcProperty.value.start, srcProperty.value.end, `'${url}'`);
413
+ else
414
+ s.appendRight(scriptInput.end, `, src: '${url}'`);
415
+ }
416
+ } else {
417
+ s.appendRight(node.arguments[0].start + 1, ` scriptInput: { src: '${url}' }, `);
359
418
  }
360
419
  } else {
361
- s.appendRight(node.arguments[0].start + 1, ` scriptInput: { src: '${url}' }, `);
420
+ s.appendRight(node.callee.end, `({ scriptInput: { src: '${url}' } })`);
362
421
  }
363
422
  }
364
423
  }
@@ -472,34 +531,89 @@ function NuxtScriptsCheckScripts() {
472
531
  });
473
532
  }
474
533
 
534
+ function resolveTriggerForTemplate(trigger) {
535
+ if (trigger && typeof trigger === "object") {
536
+ const keys = Object.keys(trigger);
537
+ if (keys.length > 1) {
538
+ throw new Error(`Trigger object must have exactly one property, received: ${keys.join(", ")}`);
539
+ }
540
+ if ("idleTimeout" in trigger) {
541
+ return `useScriptTriggerIdleTimeout({ timeout: ${trigger.idleTimeout} })`;
542
+ }
543
+ if ("interaction" in trigger) {
544
+ return `useScriptTriggerInteraction({ events: ${JSON.stringify(trigger.interaction)} })`;
545
+ }
546
+ }
547
+ return null;
548
+ }
475
549
  function templatePlugin(config, registry) {
476
550
  if (Array.isArray(config.globals)) {
477
551
  config.globals = Object.fromEntries(config.globals.map((i) => [hash(i), i]));
478
552
  logger.warn("The `globals` array option is deprecated, please convert to an object.");
479
553
  }
480
- const imports = ["useScript", "defineNuxtPlugin"];
554
+ const imports = [];
481
555
  const inits = [];
556
+ let needsIdleTimeoutImport = false;
557
+ let needsInteractionImport = false;
482
558
  for (const [k, c] of Object.entries(config.registry || {})) {
483
559
  const importDefinition = registry.find((i) => i.import.name === `useScript${k.substring(0, 1).toUpperCase() + k.substring(1)}`);
484
560
  if (importDefinition) {
485
- imports.unshift(importDefinition.import.name);
561
+ imports.unshift(`import { ${importDefinition.import.name} } from '${importDefinition.import.from}'`);
486
562
  const args = (typeof c !== "object" ? {} : c) || {};
487
- if (c === "mock")
563
+ if (c === "mock") {
488
564
  args.scriptOptions = { trigger: "manual", skipValidation: true };
489
- inits.push(`const ${k} = ${importDefinition.import.name}(${JSON.stringify(args)})`);
565
+ } else if (Array.isArray(c) && c.length === 2 && c[1]?.trigger) {
566
+ const triggerResolved = resolveTriggerForTemplate(c[1].trigger);
567
+ if (triggerResolved) {
568
+ args.scriptOptions = { ...c[1] };
569
+ if (args.scriptOptions) {
570
+ args.scriptOptions.trigger = `__TRIGGER_${triggerResolved}__`;
571
+ }
572
+ if (triggerResolved.includes("useScriptTriggerIdleTimeout")) needsIdleTimeoutImport = true;
573
+ if (triggerResolved.includes("useScriptTriggerInteraction")) needsInteractionImport = true;
574
+ }
575
+ }
576
+ inits.push(`const ${k} = ${importDefinition.import.name}(${JSON.stringify(args).replace(/"__TRIGGER_(.*?)__"/g, "$1")})`);
490
577
  }
491
578
  }
492
579
  for (const [k, c] of Object.entries(config.globals || {})) {
493
580
  if (typeof c === "string") {
494
581
  inits.push(`const ${k} = useScript(${JSON.stringify({ src: c, key: k })}, { use: () => ({ ${k}: window.${k} }) })`);
495
582
  } else if (Array.isArray(c) && c.length === 2) {
496
- inits.push(`const ${k} = useScript(${JSON.stringify({ key: k, ...typeof c[0] === "string" ? { src: c[0] } : c[0] })}, { ...${JSON.stringify(c[1])}, use: () => ({ ${k}: window.${k} }) })`);
497
- } else {
498
- inits.push(`const ${k} = useScript(${JSON.stringify({ key: k, ...c })}, { use: () => ({ ${k}: window.${k} }) })`);
583
+ const options = c[1];
584
+ const triggerResolved = resolveTriggerForTemplate(options?.trigger);
585
+ if (triggerResolved) {
586
+ if (triggerResolved.includes("useScriptTriggerIdleTimeout")) needsIdleTimeoutImport = true;
587
+ if (triggerResolved.includes("useScriptTriggerInteraction")) needsInteractionImport = true;
588
+ const resolvedOptions = { ...options, trigger: `__TRIGGER_${triggerResolved}__` };
589
+ inits.push(`const ${k} = useScript(${JSON.stringify({ key: k, ...typeof c[0] === "string" ? { src: c[0] } : c[0] })}, { ...${JSON.stringify(resolvedOptions).replace(/"__TRIGGER_(.*?)__"/g, "$1")}, use: () => ({ ${k}: window.${k} }) })`);
590
+ } else {
591
+ inits.push(`const ${k} = useScript(${JSON.stringify({ key: k, ...typeof c[0] === "string" ? { src: c[0] } : c[0] })}, { ...${JSON.stringify(c[1])}, use: () => ({ ${k}: window.${k} }) })`);
592
+ }
593
+ } else if (typeof c === "object" && c !== null) {
594
+ const triggerResolved = resolveTriggerForTemplate(c.trigger);
595
+ if (triggerResolved) {
596
+ if (triggerResolved.includes("useScriptTriggerIdleTimeout")) needsIdleTimeoutImport = true;
597
+ if (triggerResolved.includes("useScriptTriggerInteraction")) needsInteractionImport = true;
598
+ const resolvedOptions = { ...c, trigger: `__TRIGGER_${triggerResolved}__` };
599
+ inits.push(`const ${k} = useScript(${JSON.stringify({ key: k, ...resolvedOptions }).replace(/"__TRIGGER_(.*?)__"/g, "$1")}, { use: () => ({ ${k}: window.${k} }) })`);
600
+ } else {
601
+ inits.push(`const ${k} = useScript(${JSON.stringify({ key: k, ...c })}, { use: () => ({ ${k}: window.${k} }) })`);
602
+ }
499
603
  }
500
604
  }
605
+ const triggerImports = [];
606
+ if (needsIdleTimeoutImport) {
607
+ triggerImports.push(`import { useScriptTriggerIdleTimeout } from '#nuxt-scripts/composables/useScriptTriggerIdleTimeout'`);
608
+ }
609
+ if (needsInteractionImport) {
610
+ triggerImports.push(`import { useScriptTriggerInteraction } from '#nuxt-scripts/composables/useScriptTriggerInteraction'`);
611
+ }
501
612
  return [
502
- `import { ${imports.join(", ")} } from '#imports'`,
613
+ `import { useScript } from '#nuxt-scripts/composables/useScript'`,
614
+ `import { defineNuxtPlugin } from 'nuxt/app'`,
615
+ ...triggerImports,
616
+ ...imports,
503
617
  "",
504
618
  `export default defineNuxtPlugin({`,
505
619
  ` name: "scripts:init",`,
@@ -560,6 +674,13 @@ const module = defineNuxtModule({
560
674
  version: nuxt.options.dev ? version : void 0,
561
675
  defaultScriptOptions: config.defaultScriptOptions
562
676
  };
677
+ if (config.registry) {
678
+ nuxt.options.runtimeConfig.public = nuxt.options.runtimeConfig.public || {};
679
+ nuxt.options.runtimeConfig.public.scripts = defu(
680
+ nuxt.options.runtimeConfig.public.scripts || {},
681
+ config.registry
682
+ );
683
+ }
563
684
  const composables = [
564
685
  "useScript",
565
686
  "useScriptEventPage",
@@ -575,7 +696,8 @@ const module = defineNuxtModule({
575
696
  });
576
697
  }
577
698
  addComponentsDir({
578
- path: await resolvePath("./runtime/components")
699
+ path: await resolvePath("./runtime/components"),
700
+ pathPrefix: false
579
701
  });
580
702
  const scripts = await registry(resolvePath);
581
703
  for (const script of scripts) {
@@ -627,7 +749,8 @@ ${newScripts.map((i) => {
627
749
  export {}`;
628
750
  }
629
751
  }, {
630
- nuxt: true
752
+ nuxt: true,
753
+ node: true
631
754
  });
632
755
  if (Object.keys(config.globals || {}).length || Object.keys(config.registry || {}).length) {
633
756
  addPluginTemplate({
@@ -644,6 +767,7 @@ export {}`;
644
767
  });
645
768
  addBuildPlugin(NuxtScriptBundleTransformer({
646
769
  scripts: registryScriptsWithImport,
770
+ registryConfig: nuxt.options.runtimeConfig.public.scripts,
647
771
  defaultBundle: config.defaultScriptOptions?.bundle,
648
772
  moduleDetected(module) {
649
773
  if (nuxt.options.dev && module !== "@nuxt/scripts" && !moduleInstallPromises.has(module) && !hasNuxtModule(module))
@@ -652,6 +776,7 @@ export {}`;
652
776
  assetsBaseURL: config.assets?.prefix,
653
777
  fallbackOnSrcOnBundleFail: config.assets?.fallbackOnSrcOnBundleFail,
654
778
  fetchOptions: config.assets?.fetchOptions,
779
+ cacheMaxAge: config.assets?.cacheMaxAge,
655
780
  renderedScript
656
781
  }));
657
782
  nuxt.hooks.hook("build:done", async () => {
package/dist/registry.mjs CHANGED
@@ -57,6 +57,15 @@ async function registry(resolve) {
57
57
  from: await resolve("./runtime/registry/rybbit-analytics")
58
58
  }
59
59
  },
60
+ {
61
+ label: "Databuddy Analytics",
62
+ category: "analytics",
63
+ logo: `<svg xmlns="http://www.w3.org/2000/svg" width="56.5" height="32" viewBox="0 0 8 8" shape-rendering="crispEdges"><path d="M0 0h8v8H0z"/><path fill="#fff" d="M1 1h1v6H1zm1 0h4v1H2zm4 1h1v1H6zm0 1h1v1H6zm0 1h1v1H6zm0 1h1v1H6zM2 6h4v1H2zm1-3h1v1H3zm1 1h1v1H4z"/></svg>`,
64
+ import: {
65
+ name: "useScriptDatabuddyAnalytics",
66
+ from: await resolve("./runtime/registry/databuddy-analytics")
67
+ }
68
+ },
60
69
  {
61
70
  label: "Segment",
62
71
  scriptBundling: (options) => {
@@ -102,6 +111,16 @@ async function registry(resolve) {
102
111
  from: await resolve("./runtime/registry/snapchat-pixel")
103
112
  }
104
113
  },
114
+ {
115
+ label: "Reddit Pixel",
116
+ src: "https://www.redditstatic.com/ads/pixel.js",
117
+ category: "tracking",
118
+ logo: `<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>`,
119
+ import: {
120
+ name: "useScriptRedditPixel",
121
+ from: await resolve("./runtime/registry/reddit-pixel")
122
+ }
123
+ },
105
124
  // ads
106
125
  {
107
126
  label: "Google Adsense",
@@ -196,6 +215,17 @@ async function registry(resolve) {
196
215
  from: await resolve("./runtime/registry/lemon-squeezy")
197
216
  }
198
217
  },
218
+ {
219
+ label: "PayPal",
220
+ src: false,
221
+ // should not be bundled
222
+ category: "payments",
223
+ logo: `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 154.728 190.5" xmlns:v="https://vecta.io/nano"><g transform="translate(898.192 276.071)"><path clip-path="none" d="M-837.663-237.968a5.49 5.49 0 0 0-5.423 4.633l-9.013 57.15-8.281 52.514-.005.044.01-.044 8.281-52.514c.421-2.669 2.719-4.633 5.42-4.633h26.404c26.573 0 49.127-19.387 53.246-45.658.314-1.996.482-3.973.52-5.924v-.003h-.003c-6.753-3.543-14.683-5.565-23.372-5.565z" fill="#001c64"/><path clip-path="none" d="M-766.506-232.402c-.037 1.951-.207 3.93-.52 5.926-4.119 26.271-26.673 45.658-53.246 45.658h-26.404c-2.701 0-4.999 1.964-5.42 4.633l-8.281 52.514-5.197 32.947a4.46 4.46 0 0 0 4.405 5.153h28.66a5.49 5.49 0 0 0 5.423-4.633l7.55-47.881c.423-2.669 2.722-4.636 5.423-4.636h16.876c26.573 0 49.124-19.386 53.243-45.655 2.924-18.649-6.46-35.614-22.511-44.026z" fill="#0070e0"/><path clip-path="none" d="M-870.225-276.071a5.49 5.49 0 0 0-5.423 4.636l-22.489 142.608a4.46 4.46 0 0 0 4.405 5.156h33.351l8.281-52.514 9.013-57.15a5.49 5.49 0 0 1 5.423-4.633h47.782c8.691 0 16.621 2.025 23.375 5.563.46-23.917-19.275-43.666-46.412-43.666z" fill="#003087"/></g></svg>`,
224
+ import: {
225
+ name: "useScriptPayPal",
226
+ from: await resolve("./runtime/registry/paypal")
227
+ }
228
+ },
199
229
  // content
200
230
  {
201
231
  label: "Vimeo Player",
@@ -1,13 +1,17 @@
1
- <script setup>
2
- import { computed, onBeforeUnmount, onMounted, ref, watch, toRaw } from "vue";
1
+ <script>
2
+ import { computed, onBeforeUnmount, onMounted, ref, watch, toRaw, provide, shallowRef } from "vue";
3
3
  import { withQuery } from "ufo";
4
4
  import { defu } from "defu";
5
5
  import { hash } from "ohash";
6
6
  import { useHead } from "nuxt/app";
7
- import { scriptRuntimeConfig } from "../utils";
8
- import { useScriptTriggerElement } from "../composables/useScriptTriggerElement";
9
- import { useScriptGoogleMaps } from "../registry/google-maps";
10
- import ScriptAriaLoadingIndicator from "./ScriptAriaLoadingIndicator.vue";
7
+ import { scriptRuntimeConfig } from "#nuxt-scripts/utils";
8
+ import { useScriptTriggerElement } from "#nuxt-scripts/composables/useScriptTriggerElement";
9
+ import { useScriptGoogleMaps } from "#nuxt-scripts/registry/google-maps";
10
+ import ScriptAriaLoadingIndicator from "../ScriptAriaLoadingIndicator.vue";
11
+ export const MAP_INJECTION_KEY = Symbol("map");
12
+ </script>
13
+
14
+ <script setup>
11
15
  const props = defineProps({
12
16
  trigger: { type: [String, Array, Boolean], required: false, default: ["mouseenter", "mouseover", "mousedown"] },
13
17
  aboveTheFold: { type: Boolean, required: false },
@@ -51,7 +55,7 @@ const options = computed(() => {
51
55
  });
52
56
  });
53
57
  const ready = ref(false);
54
- const map = ref();
58
+ const map = shallowRef();
55
59
  const mapMarkers = ref(/* @__PURE__ */ new Map());
56
60
  function isLocationQuery(s) {
57
61
  return typeof s === "string" && (s.split(",").length > 2 || s.includes("+"));
@@ -71,7 +75,7 @@ function normalizeAdvancedMapMarkerOptions(_options) {
71
75
  lat: Number.parseFloat(_options.split(",")[0] || "0"),
72
76
  lng: Number.parseFloat(_options.split(",")[1] || "0")
73
77
  }
74
- } : _options;
78
+ } : _options || {};
75
79
  if (!opts.position) {
76
80
  opts.position = {
77
81
  lat: 0,
@@ -89,11 +93,10 @@ async function createAdvancedMapMarker(_options) {
89
93
  return mapMarkers.value.get(key);
90
94
  const p = new Promise(async (resolve) => {
91
95
  const lib = await importLibrary("marker");
92
- const mapMarkerOptions = defu(toRaw(normalizedOptions), {
93
- map: toRaw(map.value),
94
- // @ts-expect-error unified API for maps and markers
95
- position: normalizedOptions.location
96
- });
96
+ const mapMarkerOptions = {
97
+ ...toRaw(normalizedOptions),
98
+ map: toRaw(map.value)
99
+ };
97
100
  resolve(new lib.AdvancedMarkerElement(mapMarkerOptions));
98
101
  });
99
102
  mapMarkers.value.set(key, p);
@@ -154,6 +157,7 @@ const googleMaps = {
154
157
  importLibrary
155
158
  };
156
159
  defineExpose(googleMaps);
160
+ provide(MAP_INJECTION_KEY, { map, mapsApi });
157
161
  onMounted(() => {
158
162
  watch(ready, (v) => {
159
163
  if (v) {