@nuxt/scripts 0.11.10 → 0.12.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 (115) hide show
  1. package/dist/client/200.html +1 -1
  2. package/dist/client/404.html +1 -1
  3. package/dist/client/_nuxt/C0XnD8hU.js +179 -0
  4. package/dist/client/_nuxt/CVO1_9PV.js +1 -0
  5. package/dist/client/_nuxt/Cp-IABpG.js +1 -0
  6. package/dist/client/_nuxt/D0r3Knsf.js +1 -0
  7. package/dist/client/_nuxt/DDcnVyjk.js +1 -0
  8. package/dist/client/_nuxt/DlfHMoPT.js +1 -0
  9. package/dist/client/_nuxt/DnkQskw_.js +1 -0
  10. package/dist/client/_nuxt/builds/latest.json +1 -1
  11. package/dist/client/_nuxt/builds/meta/639547f1-5b38-4078-9f06-0e97166e98d5.json +1 -0
  12. package/dist/client/_nuxt/entry.Bb8Z00UZ.css +1 -0
  13. package/dist/client/_nuxt/error-404.CImBk2QF.css +1 -0
  14. package/dist/client/_nuxt/error-500.BDZhF_NY.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 +8 -2
  18. package/dist/module.json +3 -3
  19. package/dist/module.mjs +169 -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 +84 -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 +56 -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/ScriptCrisp.vue.d.ts +3 -1
  58. package/dist/runtime/components/ScriptGoogleAdsense.d.vue.ts +37 -0
  59. package/dist/runtime/components/ScriptGoogleAdsense.vue.d.ts +4 -1
  60. package/dist/runtime/components/ScriptIntercom.d.vue.ts +45 -0
  61. package/dist/runtime/components/ScriptIntercom.vue.d.ts +3 -1
  62. package/dist/runtime/components/ScriptLemonSqueezy.d.vue.ts +24 -0
  63. package/dist/runtime/components/ScriptLemonSqueezy.vue.d.ts +3 -1
  64. package/dist/runtime/components/ScriptLoadingIndicator.d.vue.ts +9 -0
  65. package/dist/runtime/components/ScriptLoadingIndicator.vue.d.ts +4 -1
  66. package/dist/runtime/components/ScriptPayPalButtons.d.vue.ts +72 -0
  67. package/dist/runtime/components/ScriptPayPalButtons.vue +116 -0
  68. package/dist/runtime/components/ScriptPayPalButtons.vue.d.ts +72 -0
  69. package/dist/runtime/components/ScriptPayPalMarks.d.vue.ts +51 -0
  70. package/dist/runtime/components/ScriptPayPalMarks.vue +69 -0
  71. package/dist/runtime/components/ScriptPayPalMarks.vue.d.ts +51 -0
  72. package/dist/runtime/components/ScriptPayPalMessages.d.vue.ts +67 -0
  73. package/dist/runtime/components/ScriptPayPalMessages.vue +90 -0
  74. package/dist/runtime/components/ScriptPayPalMessages.vue.d.ts +67 -0
  75. package/dist/runtime/components/ScriptStripePricingTable.d.vue.ts +35 -0
  76. package/dist/runtime/components/ScriptStripePricingTable.vue +1 -1
  77. package/dist/runtime/components/ScriptStripePricingTable.vue.d.ts +3 -1
  78. package/dist/runtime/components/ScriptVimeoPlayer.d.vue.ts +127 -0
  79. package/dist/runtime/components/ScriptVimeoPlayer.vue.d.ts +5 -3
  80. package/dist/runtime/components/ScriptYouTubePlayer.d.vue.ts +66 -0
  81. package/dist/runtime/components/ScriptYouTubePlayer.vue.d.ts +9 -1
  82. package/dist/runtime/composables/useScript.js +35 -2
  83. package/dist/runtime/composables/useScriptEventPage.js +6 -2
  84. package/dist/runtime/composables/useScriptTriggerIdleTimeout.d.ts +10 -0
  85. package/dist/runtime/composables/useScriptTriggerIdleTimeout.js +22 -0
  86. package/dist/runtime/composables/useScriptTriggerInteraction.d.ts +15 -0
  87. package/dist/runtime/composables/useScriptTriggerInteraction.js +35 -0
  88. package/dist/runtime/logger.d.ts +1 -0
  89. package/dist/runtime/logger.js +6 -0
  90. package/dist/runtime/registry/databuddy-analytics.d.ts +77 -0
  91. package/dist/runtime/registry/databuddy-analytics.js +103 -0
  92. package/dist/runtime/registry/google-analytics.d.ts +1 -1
  93. package/dist/runtime/registry/google-analytics.js +5 -5
  94. package/dist/runtime/registry/google-tag-manager.js +3 -5
  95. package/dist/runtime/registry/matomo-analytics.d.ts +1 -0
  96. package/dist/runtime/registry/matomo-analytics.js +27 -4
  97. package/dist/runtime/registry/paypal.d.ts +34 -0
  98. package/dist/runtime/registry/paypal.js +86 -0
  99. package/dist/runtime/registry/reddit-pixel.d.ts +18 -0
  100. package/dist/runtime/registry/reddit-pixel.js +36 -0
  101. package/dist/runtime/registry/stripe.d.ts +2 -2
  102. package/dist/runtime/registry/stripe.js +1 -1
  103. package/dist/runtime/types.d.ts +18 -7
  104. package/dist/runtime/utils.d.ts +5 -2
  105. package/dist/runtime/utils.js +49 -19
  106. package/package.json +33 -26
  107. package/dist/client/_nuxt/C0osJU87.js +0 -1
  108. package/dist/client/_nuxt/DvGN_dxb.js +0 -1
  109. package/dist/client/_nuxt/DzYp5PzF.js +0 -21
  110. package/dist/client/_nuxt/builds/meta/55b6d2d9-3309-4bdb-b3a7-e1a28ac5a730.json +0 -1
  111. package/dist/client/_nuxt/entry.bAQEPFjX.css +0 -1
  112. package/dist/client/_nuxt/error-404.eZgLTnTW.css +0 -1
  113. package/dist/client/_nuxt/error-500.B1rSPQ5Q.css +0 -1
  114. package/dist/client/_nuxt/o0sZgK8d.js +0 -1
  115. package/dist/runtime/components/ScriptGoogleMaps.vue.d.ts +0 -140
@@ -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-08d54398]{display:grid}.mb-2[data-v-08d54398]{margin-bottom:.5rem}.mb-4[data-v-08d54398]{margin-bottom:1rem}.max-w-520px[data-v-08d54398]{max-width:520px}.min-h-screen[data-v-08d54398]{min-height:100vh}.w-full[data-v-08d54398]{width:100%}.flex[data-v-08d54398]{display:flex}.place-content-center[data-v-08d54398]{place-content:center}.items-center[data-v-08d54398]{align-items:center}.justify-center[data-v-08d54398]{justify-content:center}.overflow-hidden[data-v-08d54398]{overflow:hidden}.bg-white[data-v-08d54398]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-08d54398]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-08d54398]{text-align:center}.text-\[80px\][data-v-08d54398]{font-size:80px}.text-2xl[data-v-08d54398]{font-size:1.5rem;line-height:2rem}.text-sm[data-v-08d54398]{font-size:.875rem;line-height:1.25rem}.text-\[\#020420\][data-v-08d54398]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-08d54398]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.hover\:text-\[\#00DC82\][data-v-08d54398]:hover{--un-text-opacity:1;color:rgb(0 220 130/var(--un-text-opacity))}.font-medium[data-v-08d54398]{font-weight:500}.font-semibold[data-v-08d54398]{font-weight:600}.leading-none[data-v-08d54398]{line-height:1}.tracking-wide[data-v-08d54398]{letter-spacing:.025em}.font-sans[data-v-08d54398]{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-08d54398]{--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-08d54398]{text-decoration-line:underline}.underline-offset-3[data-v-08d54398]{text-underline-offset:3px}.antialiased[data-v-08d54398]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-08d54398]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-08d54398]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:text-\[110px\][data-v-08d54398]{font-size:110px}.sm\:text-3xl[data-v-08d54398]{font-size:1.875rem;line-height:2.25rem}}
@@ -0,0 +1 @@
1
+ .grid[data-v-be14525b]{display:grid}.mb-2[data-v-be14525b]{margin-bottom:.5rem}.mb-4[data-v-be14525b]{margin-bottom:1rem}.max-w-520px[data-v-be14525b]{max-width:520px}.min-h-screen[data-v-be14525b]{min-height:100vh}.place-content-center[data-v-be14525b]{place-content:center}.overflow-hidden[data-v-be14525b]{overflow:hidden}.bg-white[data-v-be14525b]{--un-bg-opacity:1;background-color:rgb(255 255 255/var(--un-bg-opacity))}.px-2[data-v-be14525b]{padding-left:.5rem;padding-right:.5rem}.text-center[data-v-be14525b]{text-align:center}.text-\[80px\][data-v-be14525b]{font-size:80px}.text-2xl[data-v-be14525b]{font-size:1.5rem;line-height:2rem}.text-\[\#020420\][data-v-be14525b]{--un-text-opacity:1;color:rgb(2 4 32/var(--un-text-opacity))}.text-\[\#64748B\][data-v-be14525b]{--un-text-opacity:1;color:rgb(100 116 139/var(--un-text-opacity))}.font-semibold[data-v-be14525b]{font-weight:600}.leading-none[data-v-be14525b]{line-height:1}.tracking-wide[data-v-be14525b]{letter-spacing:.025em}.font-sans[data-v-be14525b]{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-be14525b]{--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-be14525b]{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (prefers-color-scheme:dark){.dark\:bg-\[\#020420\][data-v-be14525b]{--un-bg-opacity:1;background-color:rgb(2 4 32/var(--un-bg-opacity))}.dark\:text-white[data-v-be14525b]{--un-text-opacity:1;color:rgb(255 255 255/var(--un-text-opacity))}}@media (min-width:640px){.sm\:text-\[110px\][data-v-be14525b]{font-size:110px}.sm\:text-3xl[data-v-be14525b]{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.bAQEPFjX.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DzYp5PzF.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-404.eZgLTnTW.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C0osJU87.js"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/o0sZgK8d.js"><link rel="prefetch" as="style" crossorigin href="/__nuxt-scripts/_nuxt/error-500.B1rSPQ5Q.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DvGN_dxb.js"><script type="module" src="/__nuxt-scripts/_nuxt/DzYp5PzF.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},1752738485628,false]</script><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"}}},app:{baseURL:"/__nuxt-scripts",buildId:"55b6d2d9-3309-4bdb-b3a7-e1a28ac5a730",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/C0XnD8hU.js"}}</script><link rel="stylesheet" href="/__nuxt-scripts/_nuxt/entry.Bb8Z00UZ.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/C0XnD8hU.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.CImBk2QF.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DnkQskw_.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.BDZhF_NY.css"><link rel="prefetch" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DDcnVyjk.js"><script type="module" src="/__nuxt-scripts/_nuxt/C0XnD8hU.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},1758712318551,false]</script><script>window.__NUXT__={};window.__NUXT__.config={public:{"nuxt-scripts":{version:"",defaultScriptOptions:{trigger:"onNuxtReady"}}},app:{baseURL:"/__nuxt-scripts",buildId:"639547f1-5b38-4078-9f06-0e97166e98d5",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script></body></html>
package/dist/module.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import * as _nuxt_schema from '@nuxt/schema';
1
+ import * as nuxt_schema from 'nuxt/schema';
2
2
  import { FetchOptions } from 'ofetch';
3
3
  import { NuxtConfigScriptRegistry, NuxtUseScriptOptionsSerializable, NuxtUseScriptInput, RegistryScripts } from '../dist/runtime/types.js';
4
4
 
@@ -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.
@@ -55,7 +61,7 @@ interface ModuleOptions {
55
61
  interface ModuleHooks {
56
62
  'scripts:registry': (registry: RegistryScripts) => void | Promise<void>;
57
63
  }
58
- declare const _default: _nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
64
+ declare const _default: nuxt_schema.NuxtModule<ModuleOptions, ModuleOptions, false>;
59
65
 
60
66
  export { _default as default };
61
67
  export type { ModuleHooks, ModuleOptions };
package/dist/module.json CHANGED
@@ -4,9 +4,9 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=3.16"
6
6
  },
7
- "version": "0.11.10",
7
+ "version": "0.12.0",
8
8
  "builder": {
9
- "@nuxt/module-builder": "1.0.1",
10
- "unbuild": "3.5.0"
9
+ "@nuxt/module-builder": "1.0.2",
10
+ "unbuild": "3.6.1"
11
11
  }
12
12
  }
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,91 @@ 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 nuxt = tryUseNuxt() || { options: { buildDir: import.meta.dirname } };
555
+ const buildDir = nuxt.options.buildDir;
556
+ const imports = [];
481
557
  const inits = [];
558
+ let needsIdleTimeoutImport = false;
559
+ let needsInteractionImport = false;
482
560
  for (const [k, c] of Object.entries(config.registry || {})) {
483
561
  const importDefinition = registry.find((i) => i.import.name === `useScript${k.substring(0, 1).toUpperCase() + k.substring(1)}`);
484
562
  if (importDefinition) {
485
- imports.unshift(importDefinition.import.name);
563
+ imports.unshift(`import { ${importDefinition.import.name} } from '${relative(buildDir, importDefinition.import.from)}'`);
486
564
  const args = (typeof c !== "object" ? {} : c) || {};
487
- if (c === "mock")
565
+ if (c === "mock") {
488
566
  args.scriptOptions = { trigger: "manual", skipValidation: true };
489
- inits.push(`const ${k} = ${importDefinition.import.name}(${JSON.stringify(args)})`);
567
+ } else if (Array.isArray(c) && c.length === 2 && c[1]?.trigger) {
568
+ const triggerResolved = resolveTriggerForTemplate(c[1].trigger);
569
+ if (triggerResolved) {
570
+ args.scriptOptions = { ...c[1] };
571
+ if (args.scriptOptions) {
572
+ args.scriptOptions.trigger = `__TRIGGER_${triggerResolved}__`;
573
+ }
574
+ if (triggerResolved.includes("useScriptTriggerIdleTimeout")) needsIdleTimeoutImport = true;
575
+ if (triggerResolved.includes("useScriptTriggerInteraction")) needsInteractionImport = true;
576
+ }
577
+ }
578
+ inits.push(`const ${k} = ${importDefinition.import.name}(${JSON.stringify(args).replace(/"__TRIGGER_(.*?)__"/g, "$1")})`);
490
579
  }
491
580
  }
492
581
  for (const [k, c] of Object.entries(config.globals || {})) {
493
582
  if (typeof c === "string") {
494
583
  inits.push(`const ${k} = useScript(${JSON.stringify({ src: c, key: k })}, { use: () => ({ ${k}: window.${k} }) })`);
495
584
  } 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} }) })`);
585
+ const options = c[1];
586
+ const triggerResolved = resolveTriggerForTemplate(options?.trigger);
587
+ if (triggerResolved) {
588
+ if (triggerResolved.includes("useScriptTriggerIdleTimeout")) needsIdleTimeoutImport = true;
589
+ if (triggerResolved.includes("useScriptTriggerInteraction")) needsInteractionImport = true;
590
+ const resolvedOptions = { ...options, trigger: `__TRIGGER_${triggerResolved}__` };
591
+ 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} }) })`);
592
+ } else {
593
+ 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} }) })`);
594
+ }
595
+ } else if (typeof c === "object" && c !== null) {
596
+ const triggerResolved = resolveTriggerForTemplate(c.trigger);
597
+ if (triggerResolved) {
598
+ if (triggerResolved.includes("useScriptTriggerIdleTimeout")) needsIdleTimeoutImport = true;
599
+ if (triggerResolved.includes("useScriptTriggerInteraction")) needsInteractionImport = true;
600
+ const resolvedOptions = { ...c, trigger: `__TRIGGER_${triggerResolved}__` };
601
+ inits.push(`const ${k} = useScript(${JSON.stringify({ key: k, ...resolvedOptions }).replace(/"__TRIGGER_(.*?)__"/g, "$1")}, { use: () => ({ ${k}: window.${k} }) })`);
602
+ } else {
603
+ inits.push(`const ${k} = useScript(${JSON.stringify({ key: k, ...c })}, { use: () => ({ ${k}: window.${k} }) })`);
604
+ }
499
605
  }
500
606
  }
607
+ const triggerImports = [];
608
+ if (needsIdleTimeoutImport) {
609
+ triggerImports.push(`import { useScriptTriggerIdleTimeout } from '#nuxt-scripts/composables/useScriptTriggerIdleTimeout'`);
610
+ }
611
+ if (needsInteractionImport) {
612
+ triggerImports.push(`import { useScriptTriggerInteraction } from '#nuxt-scripts/composables/useScriptTriggerInteraction'`);
613
+ }
501
614
  return [
502
- `import { ${imports.join(", ")} } from '#imports'`,
615
+ `import { useScript } from '#nuxt-scripts/composables/useScript'`,
616
+ `import { defineNuxtPlugin } from 'nuxt/app'`,
617
+ ...triggerImports,
618
+ ...imports,
503
619
  "",
504
620
  `export default defineNuxtPlugin({`,
505
621
  ` name: "scripts:init",`,
@@ -560,6 +676,13 @@ const module = defineNuxtModule({
560
676
  version: nuxt.options.dev ? version : void 0,
561
677
  defaultScriptOptions: config.defaultScriptOptions
562
678
  };
679
+ if (config.registry) {
680
+ nuxt.options.runtimeConfig.public = nuxt.options.runtimeConfig.public || {};
681
+ nuxt.options.runtimeConfig.public.scripts = defu(
682
+ nuxt.options.runtimeConfig.public.scripts || {},
683
+ config.registry
684
+ );
685
+ }
563
686
  const composables = [
564
687
  "useScript",
565
688
  "useScriptEventPage",
@@ -575,7 +698,8 @@ const module = defineNuxtModule({
575
698
  });
576
699
  }
577
700
  addComponentsDir({
578
- path: await resolvePath("./runtime/components")
701
+ path: await resolvePath("./runtime/components"),
702
+ pathPrefix: false
579
703
  });
580
704
  const scripts = await registry(resolvePath);
581
705
  for (const script of scripts) {
@@ -627,7 +751,8 @@ ${newScripts.map((i) => {
627
751
  export {}`;
628
752
  }
629
753
  }, {
630
- nuxt: true
754
+ nuxt: true,
755
+ node: true
631
756
  });
632
757
  if (Object.keys(config.globals || {}).length || Object.keys(config.registry || {}).length) {
633
758
  addPluginTemplate({
@@ -644,6 +769,7 @@ export {}`;
644
769
  });
645
770
  addBuildPlugin(NuxtScriptBundleTransformer({
646
771
  scripts: registryScriptsWithImport,
772
+ registryConfig: nuxt.options.runtimeConfig.public.scripts,
647
773
  defaultBundle: config.defaultScriptOptions?.bundle,
648
774
  moduleDetected(module) {
649
775
  if (nuxt.options.dev && module !== "@nuxt/scripts" && !moduleInstallPromises.has(module) && !hasNuxtModule(module))
@@ -652,6 +778,7 @@ export {}`;
652
778
  assetsBaseURL: config.assets?.prefix,
653
779
  fallbackOnSrcOnBundleFail: config.assets?.fallbackOnSrcOnBundleFail,
654
780
  fetchOptions: config.assets?.fetchOptions,
781
+ cacheMaxAge: config.assets?.cacheMaxAge,
655
782
  renderedScript
656
783
  }));
657
784
  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",