@nuxt/scripts 1.1.0 → 1.2.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 (69) hide show
  1. package/dist/devtools-client/200.html +1 -1
  2. package/dist/devtools-client/404.html +1 -1
  3. package/dist/devtools-client/_nuxt/BTXw0v4h.js +1 -0
  4. package/dist/devtools-client/_nuxt/Bf6N2ObH.js +1 -0
  5. package/dist/devtools-client/_nuxt/C5Bq9Qgz.js +1 -0
  6. package/dist/devtools-client/_nuxt/CSw0kWhI.js +1 -0
  7. package/dist/devtools-client/_nuxt/DWvCkA0U.js +195 -0
  8. package/dist/devtools-client/_nuxt/TPgAGQc8.js +1 -0
  9. package/dist/devtools-client/_nuxt/builds/latest.json +1 -1
  10. package/dist/devtools-client/_nuxt/builds/meta/df290ad6-a770-4973-bb7f-110a630b368c.json +1 -0
  11. package/dist/devtools-client/_nuxt/dvDf1_6X.js +1 -0
  12. package/dist/devtools-client/_nuxt/entry.VwiedW44.css +1 -0
  13. package/dist/devtools-client/_nuxt/error-404.DBJH6QEN.css +1 -0
  14. package/dist/devtools-client/_nuxt/error-500.BIIPjeaA.css +1 -0
  15. package/dist/devtools-client/_nuxt/{first-party.C8Ha4JLM.css → first-party.D_SBdnka.css} +1 -1
  16. package/dist/devtools-client/_nuxt/index.DIj4bh55.css +1 -0
  17. package/dist/devtools-client/_nuxt/{registry.B9lnjF_b.css → registry.CDbTq1x3.css} +1 -1
  18. package/dist/devtools-client/docs/index.html +1 -1
  19. package/dist/devtools-client/first-party/index.html +1 -1
  20. package/dist/devtools-client/index.html +1 -1
  21. package/dist/devtools-client/registry/index.html +1 -1
  22. package/dist/module.d.mts +5 -1
  23. package/dist/module.d.ts +5 -1
  24. package/dist/module.json +1 -1
  25. package/dist/module.mjs +35 -4
  26. package/dist/registry.mjs +16 -3
  27. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.d.vue.ts +18 -1
  28. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue +7 -1
  29. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue.d.ts +18 -1
  30. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.d.vue.ts +9 -0
  31. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue +6 -5
  32. package/dist/runtime/components/GoogleMaps/ScriptGoogleMapsStaticMap.vue.d.ts +9 -0
  33. package/dist/runtime/components/ScriptGravatar.vue +2 -0
  34. package/dist/runtime/components/ScriptLoadingIndicator.vue +1 -1
  35. package/dist/runtime/components/ScriptVimeoPlayer.vue +27 -4
  36. package/dist/runtime/components/ScriptYouTubePlayer.vue +25 -4
  37. package/dist/runtime/composables/useScript.js +4 -3
  38. package/dist/runtime/registry/schemas.d.ts +76 -0
  39. package/dist/runtime/registry/schemas.js +82 -2
  40. package/dist/runtime/registry/speedcurve.d.ts +21 -0
  41. package/dist/runtime/registry/speedcurve.js +93 -0
  42. package/dist/runtime/registry/stripe.js +1 -1
  43. package/dist/runtime/registry/tiktok-pixel.d.ts +52 -13
  44. package/dist/runtime/registry/tiktok-pixel.js +46 -29
  45. package/dist/runtime/server/instagram-embed.js +37 -10
  46. package/dist/runtime/server/proxy-handler.d.ts +1 -0
  47. package/dist/runtime/server/proxy-handler.js +16 -0
  48. package/dist/runtime/server/utils/instagram-embed.d.ts +1 -0
  49. package/dist/runtime/server/utils/instagram-embed.js +5 -0
  50. package/dist/runtime/types.d.ts +3 -1
  51. package/dist/runtime/utils/after-next-paint.d.ts +1 -0
  52. package/dist/runtime/utils/after-next-paint.js +3 -0
  53. package/dist/stats.d.mts +1 -1
  54. package/dist/stats.d.ts +1 -1
  55. package/dist/stats.mjs +5 -0
  56. package/dist/types-source.mjs +127 -6
  57. package/package.json +12 -7
  58. package/dist/devtools-client/_nuxt/1wb58MKb.js +0 -1
  59. package/dist/devtools-client/_nuxt/BbLmrp_o.js +0 -1
  60. package/dist/devtools-client/_nuxt/Cx46cS8a.js +0 -1
  61. package/dist/devtools-client/_nuxt/D-M51CV3.js +0 -1
  62. package/dist/devtools-client/_nuxt/D4HTNcLU.js +0 -188
  63. package/dist/devtools-client/_nuxt/DU3BlAm5.js +0 -1
  64. package/dist/devtools-client/_nuxt/DiaY4J4_.js +0 -1
  65. package/dist/devtools-client/_nuxt/builds/meta/0b4ab733-07a6-40b2-b25e-aca95fa55188.json +0 -1
  66. package/dist/devtools-client/_nuxt/entry.XOvcedFq.css +0 -1
  67. package/dist/devtools-client/_nuxt/error-404.D2T48gBS.css +0 -1
  68. package/dist/devtools-client/_nuxt/error-500.sMTZJbsP.css +0 -1
  69. package/dist/devtools-client/_nuxt/index.DZD1lwyI.css +0 -1
@@ -1 +1 @@
1
- .stat-card[data-v-97e4a274]{background:var(--color-surface-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);flex:1;min-width:5.5rem;padding:.625rem .875rem;transition:border-color .2s}.stat-card[data-v-97e4a274]:hover{border-color:var(--color-neutral-300)}.dark .stat-card[data-v-97e4a274]:hover{border-color:var(--color-neutral-700)}.stat-label[data-v-97e4a274]{color:var(--color-text-subtle);font-size:.625rem;font-weight:600;letter-spacing:.05em;margin-bottom:.125rem;text-transform:uppercase}.stat-value[data-v-97e4a274]{color:var(--color-text);font-size:1.125rem;font-variant-numeric:tabular-nums;font-weight:700;letter-spacing:-.02em}.stat-dot[data-v-97e4a274]{border-radius:50%;height:7px;width:7px}.stat-dot-active[data-v-97e4a274]{animation:pulse-dot-97e4a274 2s ease-in-out infinite;background:#11ad32;box-shadow:0 0 8px #11ad3280}@keyframes pulse-dot-97e4a274{0%,to{opacity:1}50%{opacity:.4}}.privacy-flag[data-v-97e4a274]{align-items:center;border-radius:var(--radius-sm);display:flex;height:1.625rem;justify-content:center;transition:all .15s;width:1.625rem}.privacy-flag-on[data-v-97e4a274]{background:#6bc6701f;color:#107823}.dark .privacy-flag-on[data-v-97e4a274]{background:#10782326;color:#75d079}.privacy-flag-off[data-v-97e4a274]{background:var(--color-surface-sunken);color:var(--color-text-subtle);opacity:.5}.fp-badge[data-v-97e4a274]{align-items:center;border:1px solid transparent;border-radius:9999px;display:inline-flex;font-size:.625rem;font-weight:600;gap:.25rem;letter-spacing:.01em;padding:.0625rem .4375rem;white-space:nowrap}.privacy-full[data-v-97e4a274]{background:#6bc6701a;border-color:#4aa65126;color:#006818;color:oklch(45% .15 145)}.dark .privacy-full[data-v-97e4a274]{background:#1078231f;border-color:#3e834333;color:#85cc87}.privacy-partial[data-v-97e4a274]{background:#e0b7711a;border-color:#bf975226;color:#825b00;color:oklch(50% .12 80)}.dark .privacy-partial[data-v-97e4a274]{background:#67522d1f;border-color:#846e4926;color:#cfa761}.privacy-none[data-v-97e4a274]{background:#ce706914;border-color:#bd615b1f;color:#9c433f}.dark .privacy-none[data-v-97e4a274]{background:#843c381f;border-color:#8b504c26;color:#dc8c85}.mechanism-bundle[data-v-97e4a274]{background:#a890d414;border-color:#8972b31f;color:#694b96}.dark .mechanism-bundle[data-v-97e4a274]{background:#4e3d6c1f;border-color:#6a588a26;color:#b7a0e4}.mechanism-config[data-v-97e4a274]{background:#71bad114;border-color:#529bb11f;color:#006880;color:oklch(48% .1 220)}.dark .mechanism-config[data-v-97e4a274]{background:#1a4f5e1f;border-color:#386b7b26;color:#71bad1}.fp-badge-info[data-v-97e4a274]{background:#7cb3eb14;border-color:#5e93ca1f;color:#1a609e}.dark .fp-badge-info[data-v-97e4a274]{background:#224a711f;color:#7cb3eb}.fp-badge-warn[data-v-97e4a274]{background:#eeae7b1a;border-color:#cc8f5c1f;color:#925000;color:oklch(50% .12 60)}.dark .fp-badge-warn[data-v-97e4a274]{background:#6e4d321f;color:#dd9f6b}.fp-badge-muted[data-v-97e4a274]{background:var(--color-surface-sunken);border-color:var(--color-border-subtle);color:var(--color-text-subtle)}.matrix-dot-on[data-v-97e4a274]{background:#11ad32;box-shadow:0 0 4px #11ad3266}.matrix-dot-off[data-v-97e4a274]{background:var(--color-neutral-300)}.dark .matrix-dot-off[data-v-97e4a274]{background:var(--color-neutral-700)}
1
+ .stat-card[data-v-97e4a274]{flex:1;min-width:5.5rem;padding:.625rem .875rem;border-radius:var(--radius-md);background:var(--color-surface-elevated);border:1px solid var(--color-border);transition:border-color .2s}.stat-card[data-v-97e4a274]:hover{border-color:var(--color-neutral-300)}.dark .stat-card[data-v-97e4a274]:hover{border-color:var(--color-neutral-700)}.stat-label[data-v-97e4a274]{font-size:.625rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--color-text-subtle);margin-bottom:.125rem}.stat-value[data-v-97e4a274]{font-size:1.125rem;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--color-text)}.stat-dot[data-v-97e4a274]{width:7px;height:7px;border-radius:50%}.stat-dot-active[data-v-97e4a274]{background:#11ad32;box-shadow:0 0 8px #11ad3280;animation:pulse-dot-97e4a274 2s ease-in-out infinite}@keyframes pulse-dot-97e4a274{0%,to{opacity:1}50%{opacity:.4}}.privacy-flag[data-v-97e4a274]{width:1.625rem;height:1.625rem;border-radius:var(--radius-sm);display:flex;align-items:center;justify-content:center;transition:all .15s}.privacy-flag-on[data-v-97e4a274]{background:#6bc6701f;color:#107823}.dark .privacy-flag-on[data-v-97e4a274]{background:#10782326;color:#75d079}.privacy-flag-off[data-v-97e4a274]{background:var(--color-surface-sunken);color:var(--color-text-subtle);opacity:.5}.fp-badge[data-v-97e4a274]{display:inline-flex;align-items:center;gap:.25rem;padding:.0625rem .4375rem;font-size:.625rem;font-weight:600;letter-spacing:.01em;border-radius:9999px;border:1px solid transparent;white-space:nowrap}.privacy-full[data-v-97e4a274]{background:#6bc6701a;border-color:#4aa65126;color:#006818;color:oklch(45% .15 145)}.dark .privacy-full[data-v-97e4a274]{background:#1078231f;border-color:#3e834333;color:#85cc87}.privacy-partial[data-v-97e4a274]{background:#e0b7711a;border-color:#bf975226;color:#825b00;color:oklch(50% .12 80)}.dark .privacy-partial[data-v-97e4a274]{background:#67522d1f;border-color:#846e4926;color:#cfa761}.privacy-none[data-v-97e4a274]{background:#ce706914;border-color:#bd615b1f;color:#9c433f}.dark .privacy-none[data-v-97e4a274]{background:#843c381f;border-color:#8b504c26;color:#dc8c85}.mechanism-bundle[data-v-97e4a274]{background:#a890d414;border-color:#8972b31f;color:#694b96}.dark .mechanism-bundle[data-v-97e4a274]{background:#4e3d6c1f;border-color:#6a588a26;color:#b7a0e4}.mechanism-config[data-v-97e4a274]{background:#71bad114;border-color:#529bb11f;color:#006880;color:oklch(48% .1 220)}.dark .mechanism-config[data-v-97e4a274]{background:#1a4f5e1f;border-color:#386b7b26;color:#71bad1}.fp-badge-info[data-v-97e4a274]{background:#7cb3eb14;border-color:#5e93ca1f;color:#1a609e}.dark .fp-badge-info[data-v-97e4a274]{background:#224a711f;color:#7cb3eb}.fp-badge-warn[data-v-97e4a274]{background:#eeae7b1a;border-color:#cc8f5c1f;color:#925000;color:oklch(50% .12 60)}.dark .fp-badge-warn[data-v-97e4a274]{background:#6e4d321f;color:#dd9f6b}.fp-badge-muted[data-v-97e4a274]{background:var(--color-surface-sunken);border-color:var(--color-border-subtle);color:var(--color-text-subtle)}.matrix-dot-on[data-v-97e4a274]{background:#11ad32;box-shadow:0 0 4px #11ad3266}.matrix-dot-off[data-v-97e4a274]{background:var(--color-neutral-300)}.dark .matrix-dot-off[data-v-97e4a274]{background:var(--color-neutral-700)}
@@ -0,0 +1 @@
1
+ .script-status[data-v-5cf865ba]{display:inline-flex;align-items:center;gap:.375rem;padding:.125rem .5rem;font-size:.6875rem;font-weight:600;letter-spacing:.01em;border-radius:9999px;line-height:1.4}.script-status-dot[data-v-5cf865ba]{width:6px;height:6px;border-radius:50%;flex-shrink:0}.status-loaded[data-v-5cf865ba]{background:#6bc6701f;color:#006818;color:oklch(45% .15 145)}.status-loaded .script-status-dot[data-v-5cf865ba]{background:#11ad32;box-shadow:0 0 6px #11ad3280}.dark .status-loaded[data-v-5cf865ba]{background:#10782326;color:#75d079}.status-loading[data-v-5cf865ba]{background:#70b3f71a;color:#0065b0;color:oklch(50% .15 250)}.status-loading .script-status-dot[data-v-5cf865ba]{background:#0083e0;background:oklch(60% .18 250);animation:pulse-dot-5cf865ba 1.5s ease-in-out infinite}.dark .status-loading[data-v-5cf865ba]{background:#23588a26;color:#70b3f7}.status-awaiting[data-v-5cf865ba]{background:#d9b9821a;color:#946900;color:oklch(55% .12 80)}.status-awaiting .script-status-dot[data-v-5cf865ba]{background:#cd9200;background:oklch(70% .15 80)}.dark .status-awaiting[data-v-5cf865ba]{background:#67522d26;color:#cfa761}.status-error[data-v-5cf865ba]{background:#ce70691a;color:#a83634}.status-error .script-status-dot[data-v-5cf865ba]{background:#de3b3d}.dark .status-error[data-v-5cf865ba]{background:#843c3826;color:#e6857e}.status-validation[data-v-5cf865ba]{background:#a890d41a;color:#6e519d}.status-validation .script-status-dot[data-v-5cf865ba]{background:#8f68cb}.dark .status-validation[data-v-5cf865ba]{background:#4e3d6c26;color:#b7a0e4}.status-unknown[data-v-5cf865ba]{background:var(--color-surface-sunken);color:var(--color-text-muted)}.status-unknown .script-status-dot[data-v-5cf865ba]{background:var(--color-neutral-400)}@keyframes pulse-dot-5cf865ba{0%,to{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(.85)}}.script-metric[data-v-b147450b]{display:inline-flex;align-items:center;gap:.25rem;padding:.125rem .5rem;font-size:.6875rem;font-weight:500;font-family:var(--font-mono);letter-spacing:-.01em;border-radius:9999px;background:var(--color-surface-sunken);color:var(--color-text-muted);border:1px solid var(--color-border-subtle)}.script-metric[data-v-c6837c50]{display:inline-flex;align-items:center;gap:.25rem;padding:.125rem .5rem;font-size:.6875rem;font-weight:500;font-family:var(--font-mono);letter-spacing:-.01em;border-radius:9999px;background:#6bc67014;color:#2f7434;border:1px solid oklch(65% .15 145/.12)}.dark .script-metric[data-v-c6837c50]{background:#2c63301f;color:#85cc87;border-color:#49814c26}.ui-tooltip-panel[data-v-16948115]{padding:.5rem .75rem;font-size:.75rem;font-weight:400;white-space:normal;line-height:1.4;border-radius:var(--radius-md);background:var(--color-surface-elevated);color:var(--color-text);border:1px solid var(--color-border);pointer-events:none;box-shadow:0 4px 12px #0000001a}.dark .ui-tooltip-panel[data-v-16948115]{box-shadow:0 4px 12px #0000004d}.waterfall-container[data-v-d16c88db]{padding:.75rem;display:flex;flex-direction:column;gap:.5rem}.waterfall-stats[data-v-d16c88db]{display:flex;align-items:center;gap:.5rem;font-size:.6875rem}.waterfall-stat[data-v-d16c88db]{display:inline-flex;align-items:baseline;gap:.25rem;font-variant-numeric:tabular-nums}.waterfall-stat-value[data-v-d16c88db]{font-weight:700;color:var(--color-text)}.waterfall-stat-label[data-v-d16c88db]{color:var(--color-text-subtle)}.waterfall-sep[data-v-d16c88db]{width:3px;height:3px;border-radius:50%;background:var(--color-text-subtle);opacity:.3}.waterfall-proxied-badge[data-v-d16c88db]{display:inline-flex;align-items:center;gap:.25rem;color:#107823}.dark .waterfall-proxied-badge[data-v-d16c88db]{color:#85cc87}.domain-pill[data-v-d16c88db]{display:inline-flex;align-items:center;gap:.125rem;font-family:var(--font-mono);font-size:.625rem;padding:.0625rem .375rem;border-radius:9999px;background:var(--color-surface-sunken);color:var(--color-text-subtle);border:1px solid var(--color-border-subtle)}.domain-pill-proxied[data-v-d16c88db]{background:#6bc67014;border-color:#4aa6511f;color:#2f7434}.dark .domain-pill-proxied[data-v-d16c88db]{background:#2f74341a;color:#8fc990}.waterfall-table[data-v-d16c88db]{border-radius:var(--radius-md);border:1px solid var(--color-border-subtle);overflow:hidden;background:var(--color-surface-elevated)}.waterfall-legend[data-v-d16c88db]{display:flex;align-items:center;gap:.75rem;padding:.25rem .5rem;border-bottom:1px solid var(--color-border-subtle);background:var(--color-surface-sunken)}.waterfall-legend-item[data-v-d16c88db]{display:flex;align-items:center;gap:.25rem;font-size:.5625rem;font-weight:600;text-transform:uppercase;letter-spacing:.04em;color:var(--color-text-subtle)}.waterfall-legend-dot[data-v-d16c88db]{width:5px;height:5px;border-radius:2px}.waterfall-row[data-v-d16c88db]{display:flex;align-items:center;gap:.375rem;padding:.1875rem .5rem;font-size:.6875rem;transition:background .1s;cursor:default}.waterfall-row[data-v-d16c88db]:hover{background:var(--color-surface-sunken)}.waterfall-row-proxied[data-v-d16c88db]{background:#6bc67008}.waterfall-row-proxied[data-v-d16c88db]:hover{background:#6bc6700f}.waterfall-status[data-v-d16c88db]{flex-shrink:0;width:1.5rem;text-align:center;font-size:.625rem;font-family:var(--font-mono);font-weight:600;line-height:1;padding:.125rem 0;border-radius:3px}.waterfall-status-200[data-v-d16c88db]{color:#107823;background:#6bc6701a}.dark .waterfall-status-200[data-v-d16c88db]{color:#85cc87;background:#2f74341f}.waterfall-status-304[data-v-d16c88db]{color:#946900;color:oklch(55% .12 80);background:#d9b9821a}.dark .waterfall-status-304[data-v-d16c88db]{color:#cfa761;background:#75603b1f}.waterfall-row-icon[data-v-d16c88db]{flex-shrink:0;font-size:.625rem;color:var(--color-text-subtle);opacity:.4}.waterfall-row-icon-proxied[data-v-d16c88db]{color:#278733;opacity:1}.dark .waterfall-row-icon-proxied[data-v-d16c88db]{color:#85cc87}.waterfall-url[data-v-d16c88db]{flex-shrink:0;width:15rem;font-family:var(--font-mono);font-size:.625rem;color:var(--color-text-muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.waterfall-bar-track[data-v-d16c88db]{flex:1;height:.875rem;position:relative;background:var(--color-surface-sunken);border-radius:3px;overflow:hidden}.waterfall-bar[data-v-d16c88db]{position:absolute;height:100%;display:flex;border-radius:3px;overflow:hidden}.waterfall-duration[data-v-d16c88db]{flex-shrink:0;width:2.5rem;text-align:right;font-family:var(--font-mono);font-size:.625rem;font-variant-numeric:tabular-nums;color:var(--color-text-subtle)}.devtools-snippet[data-v-265ccc31]{margin:.5rem .75rem}.devtools-snippet-header[data-v-265ccc31]{display:flex;align-items:center;justify-content:space-between;margin-bottom:.375rem}.devtools-snippet-label[data-v-265ccc31]{font-family:var(--font-mono);font-size:.6875rem;font-weight:500;color:var(--color-text-muted);letter-spacing:-.01em}.devtools-snippet-block[data-v-265ccc31]{border-radius:var(--radius-sm);font-size:.6875rem;line-height:1.6;padding:.5rem .625rem!important;max-height:300px;overflow-y:auto}.filter-bar[data-v-1d33b8c9]{display:flex;align-items:center;gap:.25rem;padding:0 .25rem;margin-bottom:.75rem}.filter-chip[data-v-1d33b8c9]{display:inline-flex;align-items:center;gap:.375rem;padding:.25rem .625rem;font-size:.6875rem;font-weight:500;color:var(--color-text-subtle);background:transparent;border:1px solid var(--color-border-subtle);border-radius:9999px;cursor:pointer;transition:all .15s}.filter-chip[data-v-1d33b8c9]:hover{color:var(--color-text-muted);border-color:var(--color-border)}.filter-chip-active[data-v-1d33b8c9]{color:var(--color-text);background:var(--color-surface-sunken);border-color:var(--color-border)}.filter-chip-count[data-v-1d33b8c9]{font-size:.625rem;font-variant-numeric:tabular-nums;padding:0 .25rem;border-radius:9999px;background:var(--color-surface-sunken);color:var(--color-text-subtle);min-width:1.25rem;text-align:center}.filter-chip-active .filter-chip-count[data-v-1d33b8c9]{background:var(--color-surface-elevated)}.sub-tab[data-v-1d33b8c9]{display:flex;align-items:center;gap:.375rem;padding:.5rem .75rem;font-size:.75rem;font-weight:500;color:var(--color-text-subtle);border-bottom:2px solid transparent;margin-bottom:-1px;transition:color .15s,border-color .15s;cursor:pointer}.sub-tab[data-v-1d33b8c9]:hover{color:var(--color-text-muted)}.sub-tab-active[data-v-1d33b8c9]{color:var(--color-text);border-bottom-color:var(--seo-green)}.event-timeline[data-v-1d33b8c9]{display:flex;flex-direction:column;gap:.125rem}.event-row[data-v-1d33b8c9]{display:flex;align-items:center;gap:.625rem;padding:.25rem .375rem;border-radius:var(--radius-sm);font-size:.6875rem;transition:background .1s}.event-row[data-v-1d33b8c9]:hover{background:var(--color-surface-sunken)}.event-time[data-v-1d33b8c9]{color:var(--color-text-subtle);font-family:var(--font-mono);font-size:.625rem;font-variant-numeric:tabular-nums;white-space:nowrap;min-width:5.5rem}.event-badge[data-v-1d33b8c9]{display:inline-flex;padding:.0625rem .375rem;border-radius:9999px;font-size:.625rem;font-weight:600;letter-spacing:.01em;white-space:nowrap}.event-fn[data-v-1d33b8c9]{font-family:var(--font-mono);font-size:.6875rem;padding:.0625rem .5rem;border-radius:var(--radius-sm);background:var(--color-surface-sunken);color:var(--color-text-muted);border:1px solid var(--color-border-subtle);max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.status-badge-loaded[data-v-1d33b8c9]{background:#6bc6701f;color:#006818;color:oklch(45% .15 145)}.dark .status-badge-loaded[data-v-1d33b8c9]{background:#10782326;color:#75d079}.status-badge-loading[data-v-1d33b8c9]{background:#d9b9821f;color:#946900;color:oklch(55% .12 80)}.dark .status-badge-loading[data-v-1d33b8c9]{background:#67522d26;color:#cfa761}.status-badge-awaiting[data-v-1d33b8c9]{background:var(--color-surface-sunken);color:var(--color-text-muted)}.status-badge-error[data-v-1d33b8c9]{background:#ce70691a;color:#a83634}.dark .status-badge-error[data-v-1d33b8c9]{background:#843c3826;color:#e6857e}.status-badge-validation[data-v-1d33b8c9]{background:#a890d41a;color:#6e519d}.dark .status-badge-validation[data-v-1d33b8c9]{background:#4e3d6c26;color:#b7a0e4}.status-badge-default[data-v-1d33b8c9]{background:var(--color-surface-sunken);color:var(--color-text-subtle)}
@@ -1 +1 @@
1
- .registry-row[data-v-3f8fca8a]{background:var(--color-surface-elevated);border:1px solid var(--color-border-subtle);border-radius:var(--radius-md);transition:border-color .2s,box-shadow .2s}.registry-row[data-v-3f8fca8a]:hover{border-color:var(--color-border);box-shadow:0 2px 12px #0000000a}.dark .registry-row[data-v-3f8fca8a]:hover{box-shadow:0 2px 12px #0003}.cap-indicator[data-v-3f8fca8a]{align-items:center;border:1px solid transparent;border-radius:var(--radius-sm);display:flex;height:1.625rem;justify-content:center;transition:all .15s;width:1.625rem}.cap-active[data-v-3f8fca8a]{background:#6bc6701f;border-color:#4aa65133;color:#107823}.dark .cap-active[data-v-3f8fca8a]{background:#10782326;border-color:#3e834333;color:#75d079}.cap-available[data-v-3f8fca8a]{background:#d9b98214;border-color:#bf975226;border-style:dashed;color:#906a21}.dark .cap-available[data-v-3f8fca8a]{background:#67522d1a;border-color:#997b4626;color:#c9a973}.cap-off[data-v-3f8fca8a]{color:var(--color-text-subtle);opacity:.15}.cap-dot[data-v-3f8fca8a]{border-radius:50%;height:.5rem;transition:all .15s;width:.5rem}.cap-dot-active[data-v-3f8fca8a]{background:#11ad32;box-shadow:0 0 4px #11ad3266}.cap-dot-available[data-v-3f8fca8a]{background:transparent;border:2px dashed oklch(70% .12 80/.6)}.cap-dot-off[data-v-3f8fca8a]{background:var(--color-neutral-300);opacity:.3}.dark .cap-dot-off[data-v-3f8fca8a]{background:var(--color-neutral-600)}
1
+ .registry-row[data-v-3f8fca8a]{border-radius:var(--radius-md);border:1px solid var(--color-border-subtle);background:var(--color-surface-elevated);transition:border-color .2s,box-shadow .2s}.registry-row[data-v-3f8fca8a]:hover{border-color:var(--color-border);box-shadow:0 2px 12px #0000000a}.dark .registry-row[data-v-3f8fca8a]:hover{box-shadow:0 2px 12px #0003}.cap-indicator[data-v-3f8fca8a]{width:1.625rem;height:1.625rem;border-radius:var(--radius-sm);border:1px solid transparent;display:flex;align-items:center;justify-content:center;transition:all .15s}.cap-active[data-v-3f8fca8a]{background:#6bc6701f;border-color:#4aa65133;color:#107823}.dark .cap-active[data-v-3f8fca8a]{background:#10782326;border-color:#3e834333;color:#75d079}.cap-available[data-v-3f8fca8a]{background:#d9b98214;border-color:#bf975226;border-style:dashed;color:#906a21}.dark .cap-available[data-v-3f8fca8a]{background:#67522d1a;border-color:#997b4626;color:#c9a973}.cap-off[data-v-3f8fca8a]{opacity:.15;color:var(--color-text-subtle)}.cap-dot[data-v-3f8fca8a]{width:.5rem;height:.5rem;border-radius:50%;transition:all .15s}.cap-dot-active[data-v-3f8fca8a]{background:#11ad32;box-shadow:0 0 4px #11ad3266}.cap-dot-available[data-v-3f8fca8a]{background:transparent;border:2px dashed oklch(70% .12 80/.6)}.cap-dot-off[data-v-3f8fca8a]{background:var(--color-neutral-300);opacity:.3}.dark .cap-dot-off[data-v-3f8fca8a]{background:var(--color-neutral-600)}
@@ -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.XOvcedFq.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/D4HTNcLU.js"><script type="module" src="/__nuxt-scripts/_nuxt/D4HTNcLU.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"0b4ab733-07a6-40b2-b25e-aca95fa55188",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1778775649033,false]</script></body></html>
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.VwiedW44.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DWvCkA0U.js"><script type="module" src="/__nuxt-scripts/_nuxt/DWvCkA0U.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"df290ad6-a770-4973-bb7f-110a630b368c",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1780372324344,false]</script></body></html>
@@ -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.XOvcedFq.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/D4HTNcLU.js"><script type="module" src="/__nuxt-scripts/_nuxt/D4HTNcLU.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"0b4ab733-07a6-40b2-b25e-aca95fa55188",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1778775649034,false]</script></body></html>
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.VwiedW44.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DWvCkA0U.js"><script type="module" src="/__nuxt-scripts/_nuxt/DWvCkA0U.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"df290ad6-a770-4973-bb7f-110a630b368c",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1780372324345,false]</script></body></html>
@@ -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.XOvcedFq.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/D4HTNcLU.js"><script type="module" src="/__nuxt-scripts/_nuxt/D4HTNcLU.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"0b4ab733-07a6-40b2-b25e-aca95fa55188",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1778775649035,false]</script></body></html>
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.VwiedW44.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DWvCkA0U.js"><script type="module" src="/__nuxt-scripts/_nuxt/DWvCkA0U.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"df290ad6-a770-4973-bb7f-110a630b368c",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1780372324345,false]</script></body></html>
@@ -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.XOvcedFq.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/D4HTNcLU.js"><script type="module" src="/__nuxt-scripts/_nuxt/D4HTNcLU.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"0b4ab733-07a6-40b2-b25e-aca95fa55188",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1778775649034,false]</script></body></html>
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.VwiedW44.css" crossorigin><link rel="modulepreload" as="script" crossorigin href="/__nuxt-scripts/_nuxt/DWvCkA0U.js"><script type="module" src="/__nuxt-scripts/_nuxt/DWvCkA0U.js" crossorigin></script><script>"use strict";(()=>{const t=window,e=document.documentElement,c=["dark","light"],n=getStorageValue("localStorage","nuxt-color-mode")||"system";let i=n==="system"?u():n;const r=e.getAttribute("data-color-mode-forced");r&&(i=r),l(i),t["__NUXT_COLOR_MODE__"]={preference:n,value:i,getColorScheme:u,addColorScheme:l,removeColorScheme:d};function l(o){const s=""+o+"",a="";e.classList?e.classList.add(s):e.className+=" "+s,a&&e.setAttribute("data-"+a,o)}function d(o){const s=""+o+"",a="";e.classList?e.classList.remove(s):e.className=e.className.replace(new RegExp(s,"g"),""),a&&e.removeAttribute("data-"+a)}function f(o){return t.matchMedia("(prefers-color-scheme"+o+")")}function u(){if(t.matchMedia&&f("").media!=="not all"){for(const o of c)if(f(":"+o).matches)return o}return"light"}})();function getStorageValue(t,e){switch(t){case"localStorage":return window.localStorage.getItem(e);case"sessionStorage":return window.sessionStorage.getItem(e);case"cookie":return getCookie(e);default:return null}}function getCookie(t){const c=("; "+window.document.cookie).split("; "+t+"=");if(c.length===2)return c.pop()?.split(";").shift()}</script></head><body><div id="__nuxt" class="isolate"></div><div id="teleports"></div><script>window.__NUXT__={};window.__NUXT__.config={public:{},app:{baseURL:"/__nuxt-scripts",buildId:"df290ad6-a770-4973-bb7f-110a630b368c",buildAssetsDir:"/_nuxt/",cdnURL:""}}</script><script type="application/json" data-nuxt-data="nuxt-app" data-ssr="false" id="__NUXT_DATA__">[{"prerenderedAt":1,"serverRendered":2},1780372324345,false]</script></body></html>
package/dist/module.d.mts CHANGED
@@ -107,8 +107,12 @@ interface ModuleOptions {
107
107
  *
108
108
  * The secret must be deterministic across deployments so that prerendered URLs
109
109
  * remain valid. Set it via `NUXT_SCRIPTS_PROXY_SECRET` or `security.secret`.
110
+ *
111
+ * Set to `false` to disable proxy security entirely: no secret is resolved or
112
+ * auto-generated, no page token is injected into the SSR payload, and proxy
113
+ * endpoints pass requests through without signature verification.
110
114
  */
111
- security?: {
115
+ security?: false | {
112
116
  /**
113
117
  * HMAC secret used to sign proxy URLs.
114
118
  *
package/dist/module.d.ts CHANGED
@@ -107,8 +107,12 @@ interface ModuleOptions {
107
107
  *
108
108
  * The secret must be deterministic across deployments so that prerendered URLs
109
109
  * remain valid. Set it via `NUXT_SCRIPTS_PROXY_SECRET` or `security.secret`.
110
+ *
111
+ * Set to `false` to disable proxy security entirely: no secret is resolved or
112
+ * auto-generated, no page token is injected into the SSR payload, and proxy
113
+ * endpoints pass requests through without signature verification.
110
114
  */
111
- security?: {
115
+ security?: false | {
112
116
  /**
113
117
  * HMAC secret used to sign proxy URLs.
114
118
  *
package/dist/module.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "compatibility": {
5
5
  "nuxt": ">=3.16"
6
6
  },
7
- "version": "1.1.0",
7
+ "version": "1.2.0",
8
8
  "builder": {
9
9
  "@nuxt/module-builder": "1.0.2",
10
10
  "unbuild": "3.6.1"
package/dist/module.mjs CHANGED
@@ -1184,6 +1184,9 @@ declare module '#app' {
1184
1184
  }
1185
1185
  interface RuntimeNuxtHooks {
1186
1186
  'scripts:updated': (ctx: { scripts: Record<string, import('#nuxt-scripts/types').NuxtDevToolsScriptInstance> }) => void | Promise<void>
1187
+ // Index signature (not a literal-key Record) so listeners can both \`delete globals[key]\`
1188
+ // and mutate \`globals[key].src\` without TS2790 / possibly-undefined errors.
1189
+ 'scripts:globals': (globals: Record<string, Record<string, any>>) => void | Promise<void>
1187
1190
  }
1188
1191
  }
1189
1192
  ${globalsKeys.length ? `declare module '@nuxt/schema' {
@@ -1261,6 +1264,8 @@ function templatePlugin(config, registry) {
1261
1264
  }
1262
1265
  const imports = [];
1263
1266
  const inits = [];
1267
+ const globalMapEntries = [];
1268
+ const globalInits = [];
1264
1269
  const resolvedRegistryKeys = [];
1265
1270
  let needsIdleTimeoutImport = false;
1266
1271
  let needsInteractionImport = false;
@@ -1343,7 +1348,8 @@ function templatePlugin(config, registry) {
1343
1348
  }
1344
1349
  const useFn = `use: () => ({ ${k}: window.${k} })`;
1345
1350
  const optionsArg = optionsJson ? `{ ...${optionsJson}, ${useFn} }` : `{ ${useFn} }`;
1346
- inits.push(`const ${k} = useScript(${inputExpr}, ${optionsArg})`);
1351
+ globalMapEntries.push(`${JSON.stringify(k)}: ${inputExpr}`);
1352
+ globalInits.push(`const ${k} = __registerGlobal(__globals[${JSON.stringify(k)}], ${optionsArg})`);
1347
1353
  }
1348
1354
  const triggerImports = [];
1349
1355
  if (needsIdleTimeoutImport) {
@@ -1356,8 +1362,15 @@ function templatePlugin(config, registry) {
1356
1362
  triggerImports.push(`import { useScriptTriggerServiceWorker } from '#nuxt-scripts/composables/useScriptTriggerServiceWorker'`);
1357
1363
  }
1358
1364
  const setupBody = [];
1359
- if (hasGlobals)
1365
+ if (hasGlobals) {
1360
1366
  setupBody.push(` const __scriptsGlobals = useRuntimeConfig().public.scriptsGlobals || {}`);
1367
+ setupBody.push(` const __registerGlobal = (input, options) => { if (!input) return undefined; const { enabled, ...rest } = input; return (enabled === false || rest.src === '' || rest.src === null) ? undefined : useScript(rest, options) }`);
1368
+ setupBody.push(` const __globals = {`);
1369
+ setupBody.push(...globalMapEntries.map((e) => ` ${e},`));
1370
+ setupBody.push(` }`);
1371
+ setupBody.push(` await nuxtApp.hooks.callHook('scripts:globals', __globals)`);
1372
+ setupBody.push(...globalInits.map((i) => ` ${i}`));
1373
+ }
1361
1374
  setupBody.push(...inits.map((i) => ` ${i}`));
1362
1375
  setupBody.push(` return { provide: { scripts: { ${[...Object.keys(config.globals || {}), ...resolvedRegistryKeys].join(", ")} } } }`);
1363
1376
  return [
@@ -1370,7 +1383,7 @@ function templatePlugin(config, registry) {
1370
1383
  ` name: "scripts:init",`,
1371
1384
  ` env: { islands: false },`,
1372
1385
  ` parallel: true,`,
1373
- ` setup() {`,
1386
+ ` ${hasGlobals ? "async setup(nuxtApp) {" : "setup() {"}`,
1374
1387
  ...setupBody,
1375
1388
  ` }`,
1376
1389
  `})`
@@ -1840,6 +1853,20 @@ const module$1 = defineNuxtModule({
1840
1853
  return templateTriggerResolver(config.defaultScriptOptions);
1841
1854
  }
1842
1855
  });
1856
+ if (config.registry?.speedcurve) {
1857
+ addTemplate({
1858
+ filename: "nuxt-scripts-speedcurve-snippet.mjs",
1859
+ async getContents() {
1860
+ const snippetPath = await resolvePath("@speedcurve/lux/dist/lux-snippet.js");
1861
+ if (!existsSync(snippetPath)) {
1862
+ throw new Error("[nuxt-scripts] useScriptSpeedCurve requires the @speedcurve/lux package. Install it with: npm i -D @speedcurve/lux");
1863
+ }
1864
+ const source = readFileSync(snippetPath, "utf-8");
1865
+ return `export const luxSnippetSource = ${JSON.stringify(source)}
1866
+ `;
1867
+ }
1868
+ });
1869
+ }
1843
1870
  logger.debug("[nuxt-scripts] Proxy prefix:", proxyPrefix);
1844
1871
  for (const script of scripts) {
1845
1872
  if (script.import?.name) {
@@ -2119,7 +2146,11 @@ Options: configure platform rewrites, switch to server-rendered mode, or disable
2119
2146
  const nitroPreset = process.env.NITRO_PRESET || "";
2120
2147
  const isStaticTarget = staticPresets.includes(nitroPreset);
2121
2148
  const isSpa = nuxt.options.ssr === false;
2122
- if (anyHandlerRequiresSigning && (isSpa || isStaticTarget)) {
2149
+ if (config.security === false) {
2150
+ if (anyHandlerRequiresSigning && !nuxt.options.dev) {
2151
+ logger.info("[security] Proxy security disabled via `security: false`. Proxy endpoints will pass requests through without signature verification.");
2152
+ }
2153
+ } else if (anyHandlerRequiresSigning && (isSpa || isStaticTarget)) {
2123
2154
  logger.warn(
2124
2155
  `[security] URL signing requires a server runtime${isStaticTarget ? ` (detected preset: ${nitroPreset})` : " (ssr: false)"}.
2125
2156
  Proxy endpoints will work without signature verification.
package/dist/registry.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { joinURL, withQuery, withBase } from 'ufo';
2
- import { AhrefsAnalyticsOptions, CloudflareWebAnalyticsOptions, VercelAnalyticsOptions, PostHogOptions, FathomAnalyticsOptions, MatomoAnalyticsOptions, RybbitAnalyticsOptions, DatabuddyAnalyticsOptions, SegmentOptions, MixpanelAnalyticsOptions, BingUetOptions, MetaPixelOptions, XPixelOptions, TikTokPixelOptions, SnapTrPixelOptions, RedditPixelOptions, LinkedInInsightOptions, GoogleAdsenseOptions, IntercomOptions, HotjarOptions, ClarityOptions, StripeOptions, GoogleMapsOptions, BlueskyEmbedOptions, InstagramEmbedOptions, XEmbedOptions, CrispOptions, NpmOptions, CalendlyOptions, GoogleRecaptchaOptions, GoogleSignInOptions, GoogleTagManagerOptions, GoogleAnalyticsOptions, UmamiAnalyticsOptions, UsercentricsOptions, GravatarOptions } from '../dist/runtime/registry/schemas.js';
2
+ import { AhrefsAnalyticsOptions, CloudflareWebAnalyticsOptions, VercelAnalyticsOptions, PostHogOptions, FathomAnalyticsOptions, MatomoAnalyticsOptions, RybbitAnalyticsOptions, DatabuddyAnalyticsOptions, SegmentOptions, MixpanelAnalyticsOptions, BingUetOptions, MetaPixelOptions, XPixelOptions, TikTokPixelOptions, SnapTrPixelOptions, RedditPixelOptions, LinkedInInsightOptions, GoogleAdsenseOptions, IntercomOptions, HotjarOptions, ClarityOptions, StripeOptions, GoogleMapsOptions, BlueskyEmbedOptions, InstagramEmbedOptions, XEmbedOptions, CrispOptions, NpmOptions, CalendlyOptions, GoogleRecaptchaOptions, GoogleSignInOptions, GoogleTagManagerOptions, GoogleAnalyticsOptions, UmamiAnalyticsOptions, UsercentricsOptions, GravatarOptions, SpeedCurveOptions } from '../dist/runtime/registry/schemas.js';
3
3
 
4
4
  const LOGOS = {
5
5
  ahrefsAnalytics: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><path fill="#FF6A00" d="M9.6 4h4.8a4.8 4.8 0 0 1 4.8 4.8v4.8H9.6A4.8 4.8 0 0 1 4.8 8.8 4.8 4.8 0 0 1 9.6 4Zm14.4 24h-4.8a4.8 4.8 0 0 1-4.8-4.8v-9.6h4.8A4.8 4.8 0 0 1 24 18.4Z"/></svg>`,
@@ -61,7 +61,11 @@ const LOGOS = {
61
61
  gravatar: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 27 27"><path fill="#1d4fc4" d="M10.8 2.699v9.45a2.699 2.699 0 005.398 0V5.862a8.101 8.101 0 11-8.423 1.913 2.702 2.702 0 00-3.821-3.821A13.5 13.5 0 1013.499 0 2.699 2.699 0 0010.8 2.699z"/></svg>`,
62
62
  usercentrics: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 32 32"><circle cx="16" cy="16" r="16" fill="#1976d2"/><path fill="#fff" d="M16 7.5a4.25 4.25 0 1 0 0 8.5a4.25 4.25 0 0 0 0-8.5m-7 17a7 7 0 0 1 14 0v.5H9z"/></svg>`,
63
63
  bingUet: `<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 256 256"><path fill="#F25022" d="M0 0h121.5v121.5H0z"/><path fill="#7FBA00" d="M134.5 0H256v121.5H134.5z"/><path fill="#00A4EF" d="M0 134.5h121.5V256H0z"/><path fill="#FFB900" d="M134.5 134.5H256V256H134.5z"/></svg>`,
64
- snapchatPixel: `<svg width="50" height="50" viewBox="147.353 39.286 514.631 514.631" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"><path style="fill:#FFFC00;" d="M147.553,423.021v0.023c0.308,11.424,0.403,22.914,2.33,34.268 c2.042,12.012,4.961,23.725,10.53,34.627c7.529,14.756,17.869,27.217,30.921,37.396c9.371,7.309,19.608,13.111,30.94,16.771 c16.524,5.33,33.571,7.373,50.867,7.473c10.791,0.068,21.575,0.338,32.37,0.293c78.395-0.33,156.792,0.566,235.189-0.484 c10.403-0.141,20.636-1.41,30.846-3.277c19.569-3.582,36.864-11.932,51.661-25.133c17.245-15.381,28.88-34.205,34.132-56.924 c3.437-14.85,4.297-29.916,4.444-45.035v-3.016c0-1.17-0.445-256.892-0.486-260.272c-0.115-9.285-0.799-18.5-2.54-27.636 c-2.117-11.133-5.108-21.981-10.439-32.053c-5.629-10.641-12.68-20.209-21.401-28.57c-13.359-12.81-28.775-21.869-46.722-26.661 c-16.21-4.327-32.747-5.285-49.405-5.27c-0.027-0.004-0.09-0.173-0.094-0.255H278.56c-0.005,0.086-0.008,0.172-0.014,0.255 c-9.454,0.173-18.922,0.102-28.328,1.268c-10.304,1.281-20.509,3.21-30.262,6.812c-15.362,5.682-28.709,14.532-40.11,26.347 c-12.917,13.386-22.022,28.867-26.853,46.894c-4.31,16.084-5.248,32.488-5.271,49.008"/><path style="fill:#FFFFFF;" d="M407.001,473.488c-1.068,0-2.087-0.039-2.862-0.076c-0.615,0.053-1.25,0.076-1.886,0.076 c-22.437,0-37.439-10.607-50.678-19.973c-9.489-6.703-18.438-13.031-28.922-14.775c-5.149-0.854-10.271-1.287-15.22-1.287 c-8.917,0-15.964,1.383-21.109,2.389c-3.166,0.617-5.896,1.148-8.006,1.148c-2.21,0-4.895-0.49-6.014-4.311 c-0.887-3.014-1.523-5.934-2.137-8.746c-1.536-7.027-2.65-11.316-5.281-11.723c-28.141-4.342-44.768-10.738-48.08-18.484 c-0.347-0.814-0.541-1.633-0.584-2.443c-0.129-2.309,1.501-4.334,3.777-4.711c22.348-3.68,42.219-15.492,59.064-35.119 c13.049-15.195,19.457-29.713,20.145-31.316c0.03-0.072,0.065-0.148,0.101-0.217c3.247-6.588,3.893-12.281,1.926-16.916 c-3.626-8.551-15.635-12.361-23.58-14.882c-1.976-0.625-3.845-1.217-5.334-1.808c-7.043-2.782-18.626-8.66-17.083-16.773 c1.124-5.916,8.949-10.036,15.273-10.036c1.756,0,3.312,0.308,4.622,0.923c7.146,3.348,13.575,5.045,19.104,5.045 c6.876,0,10.197-2.618,11-3.362c-0.198-3.668-0.44-7.546-0.674-11.214c0-0.004-0.005-0.048-0.005-0.048 c-1.614-25.675-3.627-57.627,4.546-75.95c24.462-54.847,76.339-59.112,91.651-59.112c0.408,0,6.674-0.062,6.674-0.062 c0.283-0.005,0.59-0.009,0.908-0.009c15.354,0,67.339,4.27,91.816,59.15c8.173,18.335,6.158,50.314,4.539,76.016l-0.076,1.23 c-0.222,3.49-0.427,6.793-0.6,9.995c0.756,0.696,3.795,3.096,9.978,3.339c5.271-0.202,11.328-1.891,17.998-5.014 c2.062-0.968,4.345-1.169,5.895-1.169c2.343,0,4.727,0.456,6.714,1.285l0.106,0.041c5.66,2.009,9.367,6.024,9.447,10.242 c0.071,3.932-2.851,9.809-17.223,15.485c-1.472,0.583-3.35,1.179-5.334,1.808c-7.952,2.524-19.951,6.332-23.577,14.878 c-1.97,4.635-1.322,10.326,1.926,16.912c0.036,0.072,0.067,0.145,0.102,0.221c1,2.344,25.205,57.535,79.209,66.432 c2.275,0.379,3.908,2.406,3.778,4.711c-0.048,0.828-0.248,1.656-0.598,2.465c-3.289,7.703-19.915,14.09-48.064,18.438 c-2.642,0.408-3.755,4.678-5.277,11.668c-0.63,2.887-1.271,5.717-2.146,8.691c-0.819,2.797-2.641,4.164-5.567,4.164h-0.441 c-1.905,0-4.604-0.346-8.008-1.012c-5.95-1.158-12.623-2.236-21.109-2.236c-4.948,0-10.069,0.434-15.224,1.287 c-10.473,1.744-19.421,8.062-28.893,14.758C444.443,462.88,429.436,473.488,407.001,473.488"/><path style="fill:#020202;" d="M408.336,124.235c14.455,0,64.231,3.883,87.688,56.472c7.724,17.317,5.744,48.686,4.156,73.885 c-0.248,3.999-0.494,7.875-0.694,11.576l-0.084,1.591l1.062,1.185c0.429,0.476,4.444,4.672,13.374,5.017l0.144,0.008l0.15-0.003 c5.904-0.225,12.554-2.059,19.776-5.442c1.064-0.498,2.48-0.741,3.978-0.741c1.707,0,3.521,0.321,5.017,0.951l0.226,0.09 c3.787,1.327,6.464,3.829,6.505,6.093c0.022,1.28-0.935,5.891-14.359,11.194c-1.312,0.518-3.039,1.069-5.041,1.7 c-8.736,2.774-21.934,6.96-26.376,17.427c-2.501,5.896-1.816,12.854,2.034,20.678c1.584,3.697,26.52,59.865,82.631,69.111 c-0.011,0.266-0.079,0.557-0.229,0.9c-0.951,2.24-6.996,9.979-44.612,15.783c-5.886,0.902-7.328,7.5-9,15.17 c-0.604,2.746-1.218,5.518-2.062,8.381c-0.258,0.865-0.306,0.914-1.233,0.914c-0.128,0-0.278,0-0.442,0 c-1.668,0-4.2-0.346-7.135-0.922c-5.345-1.041-12.647-2.318-21.982-2.318c-5.21,0-10.577,0.453-15.962,1.352 c-11.511,1.914-20.872,8.535-30.786,15.543c-13.314,9.408-27.075,19.143-48.071,19.143c-0.917,0-1.812-0.031-2.709-0.076 l-0.236-0.01l-0.237,0.018c-0.515,0.045-1.034,0.068-1.564,0.068c-20.993,0-34.76-9.732-48.068-19.143 c-9.916-7.008-19.282-13.629-30.791-15.543c-5.38-0.896-10.752-1.352-15.959-1.352c-9.333,0-16.644,1.428-21.978,2.471 c-2.935,0.574-5.476,1.066-7.139,1.066c-1.362,0-1.388-0.08-1.676-1.064c-0.844-2.865-1.461-5.703-2.062-8.445 c-1.676-7.678-3.119-14.312-9.002-15.215c-37.613-5.809-43.659-13.561-44.613-15.795c-0.149-0.352-0.216-0.652-0.231-0.918 c56.11-9.238,81.041-65.408,82.63-69.119c3.857-7.818,4.541-14.775,2.032-20.678c-4.442-10.461-17.638-14.653-26.368-17.422 c-2.007-0.635-3.735-1.187-5.048-1.705c-11.336-4.479-14.823-8.991-14.305-11.725c0.601-3.153,6.067-6.359,10.837-6.359 c1.072,0,2.012,0.173,2.707,0.498c7.747,3.631,14.819,5.472,21.022,5.472c9.751,0,14.091-4.537,14.557-5.055l1.057-1.182 l-0.085-1.583c-0.197-3.699-0.44-7.574-0.696-11.565c-1.583-25.205-3.563-56.553,4.158-73.871 c23.37-52.396,72.903-56.435,87.525-56.435c0.36,0,6.717-0.065,6.717-0.065C407.744,124.239,408.033,124.235,408.336,124.235 M408.336,115.197h-0.017c-0.333,0-0.646,0-0.944,0.004c-2.376,0.024-6.282,0.062-6.633,0.066c-8.566,0-25.705,1.21-44.115,9.336 c-10.526,4.643-19.994,10.921-28.14,18.66c-9.712,9.221-17.624,20.59-23.512,33.796c-8.623,19.336-6.576,51.905-4.932,78.078 l0.006,0.041c0.176,2.803,0.361,5.73,0.53,8.582c-1.265,0.581-3.316,1.194-6.339,1.194c-4.864,0-10.648-1.555-17.187-4.619 c-1.924-0.896-4.12-1.349-6.543-1.349c-3.893,0-7.997,1.146-11.557,3.239c-4.479,2.63-7.373,6.347-8.159,10.468 c-0.518,2.726-0.493,8.114,5.492,13.578c3.292,3.008,8.128,5.782,14.37,8.249c1.638,0.645,3.582,1.261,5.641,1.914 c7.145,2.271,17.959,5.702,20.779,12.339c1.429,3.365,0.814,7.793-1.823,13.145c-0.069,0.146-0.138,0.289-0.201,0.439 c-0.659,1.539-6.807,15.465-19.418,30.152c-7.166,8.352-15.059,15.332-23.447,20.752c-10.238,6.617-21.316,10.943-32.923,12.855 c-4.558,0.748-7.813,4.809-7.559,9.424c0.078,1.33,0.39,2.656,0.931,3.939c0.004,0.008,0.009,0.016,0.013,0.023 c1.843,4.311,6.116,7.973,13.063,11.203c8.489,3.943,21.185,7.26,37.732,9.855c0.836,1.59,1.704,5.586,2.305,8.322 c0.629,2.908,1.285,5.898,2.22,9.074c1.009,3.441,3.626,7.553,10.349,7.553c2.548,0,5.478-0.574,8.871-1.232 c4.969-0.975,11.764-2.305,20.245-2.305c4.702,0,9.575,0.414,14.48,1.229c9.455,1.574,17.606,7.332,27.037,14 c13.804,9.758,29.429,20.803,53.302,20.803c0.651,0,1.304-0.021,1.949-0.066c0.789,0.037,1.767,0.066,2.799,0.066 c23.88,0,39.501-11.049,53.29-20.799l0.022-0.02c9.433-6.66,17.575-12.41,27.027-13.984c4.903-0.814,9.775-1.229,14.479-1.229 c8.102,0,14.517,1.033,20.245,2.15c3.738,0.736,6.643,1.09,8.872,1.09l0.218,0.004h0.226c4.917,0,8.53-2.699,9.909-7.422 c0.916-3.109,1.57-6.029,2.215-8.986c0.562-2.564,1.46-6.674,2.296-8.281c16.558-2.6,29.249-5.91,37.739-9.852 c6.931-3.215,11.199-6.873,13.053-11.166c0.556-1.287,0.881-2.621,0.954-3.979c0.261-4.607-2.999-8.676-7.56-9.424 c-51.585-8.502-74.824-61.506-75.785-63.758c-0.062-0.148-0.132-0.295-0.205-0.438c-2.637-5.354-3.246-9.777-1.816-13.148 c2.814-6.631,13.621-10.062,20.771-12.332c2.07-0.652,4.021-1.272,5.646-1.914c7.039-2.78,12.07-5.796,15.389-9.221 c3.964-4.083,4.736-7.995,4.688-10.555c-0.121-6.194-4.856-11.698-12.388-14.393c-2.544-1.052-5.445-1.607-8.399-1.607 c-2.011,0-4.989,0.276-7.808,1.592c-6.035,2.824-11.441,4.368-16.082,4.588c-2.468-0.125-4.199-0.66-5.32-1.171 c0.141-2.416,0.297-4.898,0.458-7.486l0.067-1.108c1.653-26.19,3.707-58.784-4.92-78.134c-5.913-13.253-13.853-24.651-23.604-33.892 c-8.178-7.744-17.678-14.021-28.242-18.661C434.052,116.402,416.914,115.197,408.336,115.197"/><rect x="147.553" y="39.443" style="fill:none;" width="514.231" height="514.23"/></svg>`
64
+ snapchatPixel: `<svg width="50" height="50" viewBox="147.353 39.286 514.631 514.631" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve"><path style="fill:#FFFC00;" d="M147.553,423.021v0.023c0.308,11.424,0.403,22.914,2.33,34.268 c2.042,12.012,4.961,23.725,10.53,34.627c7.529,14.756,17.869,27.217,30.921,37.396c9.371,7.309,19.608,13.111,30.94,16.771 c16.524,5.33,33.571,7.373,50.867,7.473c10.791,0.068,21.575,0.338,32.37,0.293c78.395-0.33,156.792,0.566,235.189-0.484 c10.403-0.141,20.636-1.41,30.846-3.277c19.569-3.582,36.864-11.932,51.661-25.133c17.245-15.381,28.88-34.205,34.132-56.924 c3.437-14.85,4.297-29.916,4.444-45.035v-3.016c0-1.17-0.445-256.892-0.486-260.272c-0.115-9.285-0.799-18.5-2.54-27.636 c-2.117-11.133-5.108-21.981-10.439-32.053c-5.629-10.641-12.68-20.209-21.401-28.57c-13.359-12.81-28.775-21.869-46.722-26.661 c-16.21-4.327-32.747-5.285-49.405-5.27c-0.027-0.004-0.09-0.173-0.094-0.255H278.56c-0.005,0.086-0.008,0.172-0.014,0.255 c-9.454,0.173-18.922,0.102-28.328,1.268c-10.304,1.281-20.509,3.21-30.262,6.812c-15.362,5.682-28.709,14.532-40.11,26.347 c-12.917,13.386-22.022,28.867-26.853,46.894c-4.31,16.084-5.248,32.488-5.271,49.008"/><path style="fill:#FFFFFF;" d="M407.001,473.488c-1.068,0-2.087-0.039-2.862-0.076c-0.615,0.053-1.25,0.076-1.886,0.076 c-22.437,0-37.439-10.607-50.678-19.973c-9.489-6.703-18.438-13.031-28.922-14.775c-5.149-0.854-10.271-1.287-15.22-1.287 c-8.917,0-15.964,1.383-21.109,2.389c-3.166,0.617-5.896,1.148-8.006,1.148c-2.21,0-4.895-0.49-6.014-4.311 c-0.887-3.014-1.523-5.934-2.137-8.746c-1.536-7.027-2.65-11.316-5.281-11.723c-28.141-4.342-44.768-10.738-48.08-18.484 c-0.347-0.814-0.541-1.633-0.584-2.443c-0.129-2.309,1.501-4.334,3.777-4.711c22.348-3.68,42.219-15.492,59.064-35.119 c13.049-15.195,19.457-29.713,20.145-31.316c0.03-0.072,0.065-0.148,0.101-0.217c3.247-6.588,3.893-12.281,1.926-16.916 c-3.626-8.551-15.635-12.361-23.58-14.882c-1.976-0.625-3.845-1.217-5.334-1.808c-7.043-2.782-18.626-8.66-17.083-16.773 c1.124-5.916,8.949-10.036,15.273-10.036c1.756,0,3.312,0.308,4.622,0.923c7.146,3.348,13.575,5.045,19.104,5.045 c6.876,0,10.197-2.618,11-3.362c-0.198-3.668-0.44-7.546-0.674-11.214c0-0.004-0.005-0.048-0.005-0.048 c-1.614-25.675-3.627-57.627,4.546-75.95c24.462-54.847,76.339-59.112,91.651-59.112c0.408,0,6.674-0.062,6.674-0.062 c0.283-0.005,0.59-0.009,0.908-0.009c15.354,0,67.339,4.27,91.816,59.15c8.173,18.335,6.158,50.314,4.539,76.016l-0.076,1.23 c-0.222,3.49-0.427,6.793-0.6,9.995c0.756,0.696,3.795,3.096,9.978,3.339c5.271-0.202,11.328-1.891,17.998-5.014 c2.062-0.968,4.345-1.169,5.895-1.169c2.343,0,4.727,0.456,6.714,1.285l0.106,0.041c5.66,2.009,9.367,6.024,9.447,10.242 c0.071,3.932-2.851,9.809-17.223,15.485c-1.472,0.583-3.35,1.179-5.334,1.808c-7.952,2.524-19.951,6.332-23.577,14.878 c-1.97,4.635-1.322,10.326,1.926,16.912c0.036,0.072,0.067,0.145,0.102,0.221c1,2.344,25.205,57.535,79.209,66.432 c2.275,0.379,3.908,2.406,3.778,4.711c-0.048,0.828-0.248,1.656-0.598,2.465c-3.289,7.703-19.915,14.09-48.064,18.438 c-2.642,0.408-3.755,4.678-5.277,11.668c-0.63,2.887-1.271,5.717-2.146,8.691c-0.819,2.797-2.641,4.164-5.567,4.164h-0.441 c-1.905,0-4.604-0.346-8.008-1.012c-5.95-1.158-12.623-2.236-21.109-2.236c-4.948,0-10.069,0.434-15.224,1.287 c-10.473,1.744-19.421,8.062-28.893,14.758C444.443,462.88,429.436,473.488,407.001,473.488"/><path style="fill:#020202;" d="M408.336,124.235c14.455,0,64.231,3.883,87.688,56.472c7.724,17.317,5.744,48.686,4.156,73.885 c-0.248,3.999-0.494,7.875-0.694,11.576l-0.084,1.591l1.062,1.185c0.429,0.476,4.444,4.672,13.374,5.017l0.144,0.008l0.15-0.003 c5.904-0.225,12.554-2.059,19.776-5.442c1.064-0.498,2.48-0.741,3.978-0.741c1.707,0,3.521,0.321,5.017,0.951l0.226,0.09 c3.787,1.327,6.464,3.829,6.505,6.093c0.022,1.28-0.935,5.891-14.359,11.194c-1.312,0.518-3.039,1.069-5.041,1.7 c-8.736,2.774-21.934,6.96-26.376,17.427c-2.501,5.896-1.816,12.854,2.034,20.678c1.584,3.697,26.52,59.865,82.631,69.111 c-0.011,0.266-0.079,0.557-0.229,0.9c-0.951,2.24-6.996,9.979-44.612,15.783c-5.886,0.902-7.328,7.5-9,15.17 c-0.604,2.746-1.218,5.518-2.062,8.381c-0.258,0.865-0.306,0.914-1.233,0.914c-0.128,0-0.278,0-0.442,0 c-1.668,0-4.2-0.346-7.135-0.922c-5.345-1.041-12.647-2.318-21.982-2.318c-5.21,0-10.577,0.453-15.962,1.352 c-11.511,1.914-20.872,8.535-30.786,15.543c-13.314,9.408-27.075,19.143-48.071,19.143c-0.917,0-1.812-0.031-2.709-0.076 l-0.236-0.01l-0.237,0.018c-0.515,0.045-1.034,0.068-1.564,0.068c-20.993,0-34.76-9.732-48.068-19.143 c-9.916-7.008-19.282-13.629-30.791-15.543c-5.38-0.896-10.752-1.352-15.959-1.352c-9.333,0-16.644,1.428-21.978,2.471 c-2.935,0.574-5.476,1.066-7.139,1.066c-1.362,0-1.388-0.08-1.676-1.064c-0.844-2.865-1.461-5.703-2.062-8.445 c-1.676-7.678-3.119-14.312-9.002-15.215c-37.613-5.809-43.659-13.561-44.613-15.795c-0.149-0.352-0.216-0.652-0.231-0.918 c56.11-9.238,81.041-65.408,82.63-69.119c3.857-7.818,4.541-14.775,2.032-20.678c-4.442-10.461-17.638-14.653-26.368-17.422 c-2.007-0.635-3.735-1.187-5.048-1.705c-11.336-4.479-14.823-8.991-14.305-11.725c0.601-3.153,6.067-6.359,10.837-6.359 c1.072,0,2.012,0.173,2.707,0.498c7.747,3.631,14.819,5.472,21.022,5.472c9.751,0,14.091-4.537,14.557-5.055l1.057-1.182 l-0.085-1.583c-0.197-3.699-0.44-7.574-0.696-11.565c-1.583-25.205-3.563-56.553,4.158-73.871 c23.37-52.396,72.903-56.435,87.525-56.435c0.36,0,6.717-0.065,6.717-0.065C407.744,124.239,408.033,124.235,408.336,124.235 M408.336,115.197h-0.017c-0.333,0-0.646,0-0.944,0.004c-2.376,0.024-6.282,0.062-6.633,0.066c-8.566,0-25.705,1.21-44.115,9.336 c-10.526,4.643-19.994,10.921-28.14,18.66c-9.712,9.221-17.624,20.59-23.512,33.796c-8.623,19.336-6.576,51.905-4.932,78.078 l0.006,0.041c0.176,2.803,0.361,5.73,0.53,8.582c-1.265,0.581-3.316,1.194-6.339,1.194c-4.864,0-10.648-1.555-17.187-4.619 c-1.924-0.896-4.12-1.349-6.543-1.349c-3.893,0-7.997,1.146-11.557,3.239c-4.479,2.63-7.373,6.347-8.159,10.468 c-0.518,2.726-0.493,8.114,5.492,13.578c3.292,3.008,8.128,5.782,14.37,8.249c1.638,0.645,3.582,1.261,5.641,1.914 c7.145,2.271,17.959,5.702,20.779,12.339c1.429,3.365,0.814,7.793-1.823,13.145c-0.069,0.146-0.138,0.289-0.201,0.439 c-0.659,1.539-6.807,15.465-19.418,30.152c-7.166,8.352-15.059,15.332-23.447,20.752c-10.238,6.617-21.316,10.943-32.923,12.855 c-4.558,0.748-7.813,4.809-7.559,9.424c0.078,1.33,0.39,2.656,0.931,3.939c0.004,0.008,0.009,0.016,0.013,0.023 c1.843,4.311,6.116,7.973,13.063,11.203c8.489,3.943,21.185,7.26,37.732,9.855c0.836,1.59,1.704,5.586,2.305,8.322 c0.629,2.908,1.285,5.898,2.22,9.074c1.009,3.441,3.626,7.553,10.349,7.553c2.548,0,5.478-0.574,8.871-1.232 c4.969-0.975,11.764-2.305,20.245-2.305c4.702,0,9.575,0.414,14.48,1.229c9.455,1.574,17.606,7.332,27.037,14 c13.804,9.758,29.429,20.803,53.302,20.803c0.651,0,1.304-0.021,1.949-0.066c0.789,0.037,1.767,0.066,2.799,0.066 c23.88,0,39.501-11.049,53.29-20.799l0.022-0.02c9.433-6.66,17.575-12.41,27.027-13.984c4.903-0.814,9.775-1.229,14.479-1.229 c8.102,0,14.517,1.033,20.245,2.15c3.738,0.736,6.643,1.09,8.872,1.09l0.218,0.004h0.226c4.917,0,8.53-2.699,9.909-7.422 c0.916-3.109,1.57-6.029,2.215-8.986c0.562-2.564,1.46-6.674,2.296-8.281c16.558-2.6,29.249-5.91,37.739-9.852 c6.931-3.215,11.199-6.873,13.053-11.166c0.556-1.287,0.881-2.621,0.954-3.979c0.261-4.607-2.999-8.676-7.56-9.424 c-51.585-8.502-74.824-61.506-75.785-63.758c-0.062-0.148-0.132-0.295-0.205-0.438c-2.637-5.354-3.246-9.777-1.816-13.148 c2.814-6.631,13.621-10.062,20.771-12.332c2.07-0.652,4.021-1.272,5.646-1.914c7.039-2.78,12.07-5.796,15.389-9.221 c3.964-4.083,4.736-7.995,4.688-10.555c-0.121-6.194-4.856-11.698-12.388-14.393c-2.544-1.052-5.445-1.607-8.399-1.607 c-2.011,0-4.989,0.276-7.808,1.592c-6.035,2.824-11.441,4.368-16.082,4.588c-2.468-0.125-4.199-0.66-5.32-1.171 c0.141-2.416,0.297-4.898,0.458-7.486l0.067-1.108c1.653-26.19,3.707-58.784-4.92-78.134c-5.913-13.253-13.853-24.651-23.604-33.892 c-8.178-7.744-17.678-14.021-28.242-18.661C434.052,116.402,416.914,115.197,408.336,115.197"/><rect x="147.553" y="39.443" style="fill:none;" width="514.231" height="514.23"/></svg>`,
65
+ speedcurve: {
66
+ light: `<svg viewBox="0 0 70 70" width="32" height="32" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="M65.2 24.44a16.81 16.81 0 0 0-11.61-4.53c-4.39 0-8.51 1.6-11.61 4.53l-8.24 7.76c-.16.16-.3.34-.45.58l-.04.08-.08.04c-.26.14-.45.27-.61.43l-8.66 8.16c-2 1.89-4.66 2.93-7.5 2.93-2.82 0-5.48-1.04-7.49-2.93a9.6 9.6 0 0 1 0-14.13l9.05-8.53c.05-.04.09-.1.13-.15l.07-.09 12.8-12.07a3.84 3.84 0 0 1 2.65-1.03c1 0 1.94.36 2.65 1.03a3.41 3.41 0 0 1 0 5L15.43 31.14a2.64 2.64 0 0 0 0 3.88c.55.52 1.28.8 2.06.8s1.5-.28 2.06-.8l20.82-19.64a8.7 8.7 0 0 0 2.8-6.37c0-2.41-1-4.68-2.8-6.38A9.8 9.8 0 0 0 33.61 0a9.8 9.8 0 0 0-6.76 2.64l-13.9 13.1-.13.15-.07.1-7.95 7.49C1.7 26.4 0 30.28 0 34.42s1.7 8.03 4.8 10.95a16.81 16.81 0 0 0 11.6 4.53c4.4 0 8.51-1.6 11.61-4.53l8.66-8.17c.16-.15.3-.33.45-.57l.05-.08.08-.04c.25-.14.45-.27.6-.43l8.24-7.76c2-1.89 4.67-2.93 7.5-2.93s5.49 1.04 7.49 2.93c2 1.89 3.1 4.4 3.1 7.06 0 2.67-1.1 5.18-3.1 7.07L38.84 63.42a4.1 4.1 0 0 1-2.8 1.1 4.07 4.07 0 0 1-2.81-1.1 3.6 3.6 0 0 1 0-5.29l21.53-20.3a2.65 2.65 0 0 0 0-3.88 2.98 2.98 0 0 0-2.06-.8c-.77 0-1.5.28-2.05.8L29.1 54.25a8.91 8.91 0 0 0-2.86 6.53 8.91 8.91 0 0 0 2.86 6.52c1.85 1.74 4.3 2.7 6.92 2.7s5.08-.96 6.92-2.7L65.2 46.33c3.1-2.93 4.8-6.81 4.8-10.95 0-4.13-1.7-8.02-4.8-10.94" fill="#3c95c5"></path></g></svg>`,
67
+ dark: `<svg viewBox="0 0 70 70" width="32" height="32" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="M65.2 24.44a16.81 16.81 0 0 0-11.61-4.53c-4.39 0-8.51 1.6-11.61 4.53l-8.24 7.76c-.16.16-.3.34-.45.58l-.04.08-.08.04c-.26.14-.45.27-.61.43l-8.66 8.16c-2 1.89-4.66 2.93-7.5 2.93-2.82 0-5.48-1.04-7.49-2.93a9.6 9.6 0 0 1 0-14.13l9.05-8.53c.05-.04.09-.1.13-.15l.07-.09 12.8-12.07a3.84 3.84 0 0 1 2.65-1.03c1 0 1.94.36 2.65 1.03a3.41 3.41 0 0 1 0 5L15.43 31.14a2.64 2.64 0 0 0 0 3.88c.55.52 1.28.8 2.06.8s1.5-.28 2.06-.8l20.82-19.64a8.7 8.7 0 0 0 2.8-6.37c0-2.41-1-4.68-2.8-6.38A9.8 9.8 0 0 0 33.61 0a9.8 9.8 0 0 0-6.76 2.64l-13.9 13.1-.13.15-.07.1-7.95 7.49C1.7 26.4 0 30.28 0 34.42s1.7 8.03 4.8 10.95a16.81 16.81 0 0 0 11.6 4.53c4.4 0 8.51-1.6 11.61-4.53l8.66-8.17c.16-.15.3-.33.45-.57l.05-.08.08-.04c.25-.14.45-.27.6-.43l8.24-7.76c2-1.89 4.67-2.93 7.5-2.93s5.49 1.04 7.49 2.93c2 1.89 3.1 4.4 3.1 7.06 0 2.67-1.1 5.18-3.1 7.07L38.84 63.42a4.1 4.1 0 0 1-2.8 1.1 4.07 4.07 0 0 1-2.81-1.1 3.6 3.6 0 0 1 0-5.29l21.53-20.3a2.65 2.65 0 0 0 0-3.88 2.98 2.98 0 0 0-2.06-.8c-.77 0-1.5.28-2.05.8L29.1 54.25a8.91 8.91 0 0 0-2.86 6.53 8.91 8.91 0 0 0 2.86 6.52c1.85 1.74 4.3 2.7 6.92 2.7s5.08-.96 6.92-2.7L65.2 46.33c3.1-2.93 4.8-6.81 4.8-10.95 0-4.13-1.7-8.02-4.8-10.94" fill="#fff"></path></g></svg>`
68
+ }
65
69
  };
66
70
 
67
71
  const PRIVACY_NONE = { ip: false, userAgent: false, language: false, screen: false, timezone: false, hardware: false };
@@ -148,7 +152,8 @@ const registryMeta = [
148
152
  m("gravatar", "Gravatar", "utility", "useScriptGravatar", { bundle: true, proxy: true }, PRIVACY_IP_ONLY),
149
153
  // Usercentrics is the consent layer itself: must hit the vendor origin so
150
154
  // signature/policy lookups succeed. Bundle/proxy are intentionally absent.
151
- m("usercentrics", "Usercentrics", "utility", "useScriptUsercentrics", {}, null)
155
+ m("usercentrics", "Usercentrics", "utility", "useScriptUsercentrics", {}, null),
156
+ m("speedcurve", "SpeedCurve LUX", "analytics", "useScriptSpeedCurve", {}, null)
152
157
  ];
153
158
  const REGISTRY_CATEGORIES = [
154
159
  { key: "analytics", label: "Analytics" },
@@ -784,6 +789,14 @@ async function registry(resolve) {
784
789
  serverHandlers: [
785
790
  { route: "/_scripts/proxy/gravatar", handler: "./runtime/server/gravatar-proxy", requiresSigning: true }
786
791
  ]
792
+ }),
793
+ def("speedcurve", {
794
+ schema: SpeedCurveOptions,
795
+ label: "SpeedCurve LUX",
796
+ src: false,
797
+ category: "analytics",
798
+ envDefaults: { id: "" },
799
+ composableName: "useScriptSpeedCurve"
787
800
  })
788
801
  ]);
789
802
  }
@@ -1,10 +1,27 @@
1
1
  type __VLS_Props = {
2
2
  /**
3
3
  * Configuration options for the heatmap layer visualization.
4
+ * @deprecated Google deprecated the Maps JavaScript API `HeatmapLayer` (May 2025) and removed it in v3.65 (May 2026). Consider [deck.gl HeatmapLayer](https://deck.gl/docs/api-reference/aggregation-layers/heatmap-layer) instead.
4
5
  * @see https://developers.google.com/maps/documentation/javascript/reference/visualization#HeatmapLayerOptions
5
6
  */
6
- options?: Omit<google.maps.visualization.HeatmapLayerOptions, 'map'>;
7
+ options?: Omit<HeatmapLayerOptions, 'map'>;
7
8
  };
9
+ /**
10
+ * Configuration options for the heatmap layer visualization.
11
+ *
12
+ * The `HeatmapLayer` types were removed from `@types/google.maps` in v3.65 as part of Google's
13
+ * deprecation (the runtime feature is still available until May 2026), so we type the surface locally.
14
+ * @see https://developers.google.com/maps/documentation/javascript/reference/visualization#HeatmapLayerOptions
15
+ */
16
+ interface HeatmapLayerOptions {
17
+ data?: unknown;
18
+ dissipating?: boolean;
19
+ gradient?: string[];
20
+ map?: google.maps.Map;
21
+ maxIntensity?: number;
22
+ opacity?: number;
23
+ radius?: number;
24
+ }
8
25
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
26
  declare const _default: typeof __VLS_export;
10
27
  export default _default;
@@ -4,10 +4,16 @@ import { useGoogleMapsResource } from "./useGoogleMapsResource";
4
4
  const props = defineProps({
5
5
  options: { type: Object, required: false }
6
6
  });
7
+ if (import.meta.dev) {
8
+ console.warn(
9
+ "[nuxt-scripts] <ScriptGoogleMapsHeatmapLayer> is deprecated. Google deprecated the Maps JavaScript API HeatmapLayer (May 2025) and removed it in v3.65 (May 2026). Consider deck.gl HeatmapLayer instead: https://deck.gl/docs/api-reference/aggregation-layers/heatmap-layer"
10
+ );
11
+ }
7
12
  const heatmapLayer = useGoogleMapsResource({
8
13
  async create({ mapsApi, map }) {
9
14
  await mapsApi.importLibrary("visualization");
10
- return new mapsApi.visualization.HeatmapLayer({
15
+ const Layer = mapsApi.visualization.HeatmapLayer;
16
+ return new Layer({
11
17
  map,
12
18
  ...props.options
13
19
  });
@@ -1,10 +1,27 @@
1
1
  type __VLS_Props = {
2
2
  /**
3
3
  * Configuration options for the heatmap layer visualization.
4
+ * @deprecated Google deprecated the Maps JavaScript API `HeatmapLayer` (May 2025) and removed it in v3.65 (May 2026). Consider [deck.gl HeatmapLayer](https://deck.gl/docs/api-reference/aggregation-layers/heatmap-layer) instead.
4
5
  * @see https://developers.google.com/maps/documentation/javascript/reference/visualization#HeatmapLayerOptions
5
6
  */
6
- options?: Omit<google.maps.visualization.HeatmapLayerOptions, 'map'>;
7
+ options?: Omit<HeatmapLayerOptions, 'map'>;
7
8
  };
9
+ /**
10
+ * Configuration options for the heatmap layer visualization.
11
+ *
12
+ * The `HeatmapLayer` types were removed from `@types/google.maps` in v3.65 as part of Google's
13
+ * deprecation (the runtime feature is still available until May 2026), so we type the surface locally.
14
+ * @see https://developers.google.com/maps/documentation/javascript/reference/visualization#HeatmapLayerOptions
15
+ */
16
+ interface HeatmapLayerOptions {
17
+ data?: unknown;
18
+ dissipating?: boolean;
19
+ gradient?: string[];
20
+ map?: google.maps.Map;
21
+ maxIntensity?: number;
22
+ opacity?: number;
23
+ radius?: number;
24
+ }
8
25
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
9
26
  declare const _default: typeof __VLS_export;
10
27
  export default _default;
@@ -91,6 +91,10 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
91
91
  * Additional attributes for the `<img>` element.
92
92
  */
93
93
  imgAttrs?: ImgHTMLAttributes & ReservedProps & Record<string, unknown>;
94
+ /**
95
+ * Alt text for the map image. Override to provide a more descriptive label for screen readers.
96
+ */
97
+ alt?: string;
94
98
  }, {
95
99
  src: import("vue").ComputedRef<string>;
96
100
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
@@ -181,11 +185,16 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
181
185
  * Additional attributes for the `<img>` element.
182
186
  */
183
187
  imgAttrs?: ImgHTMLAttributes & ReservedProps & Record<string, unknown>;
188
+ /**
189
+ * Alt text for the map image. Override to provide a more descriptive label for screen readers.
190
+ */
191
+ alt?: string;
184
192
  }> & Readonly<{}>, {
185
193
  loading: "eager" | "lazy";
186
194
  width: number | string;
187
195
  height: number | string;
188
196
  zoom: number;
197
+ alt: string;
189
198
  objectFit: "cover" | "contain" | "fill" | "none" | "scale-down";
190
199
  scale: 1 | 2;
191
200
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
@@ -28,7 +28,8 @@ const props = defineProps({
28
28
  height: { type: [Number, String], required: false, default: 400 },
29
29
  loading: { type: String, required: false, default: "lazy" },
30
30
  objectFit: { type: String, required: false, default: "cover" },
31
- imgAttrs: { type: Object, required: false }
31
+ imgAttrs: { type: Object, required: false },
32
+ alt: { type: String, required: false, default: "Google Maps" }
32
33
  });
33
34
  defineSlots();
34
35
  const runtimeConfig = useRuntimeConfig();
@@ -132,7 +133,7 @@ const src = computed(() => {
132
133
  const imgAttributes = computed(() => {
133
134
  return defu(props.imgAttrs, {
134
135
  src: src.value,
135
- alt: "Google Maps",
136
+ alt: props.alt,
136
137
  loading: props.loading,
137
138
  style: {
138
139
  width: "100%",
@@ -148,14 +149,14 @@ const rootStyle = computed(() => ({
148
149
  maxWidth: "100%",
149
150
  overflow: "hidden"
150
151
  }));
151
- if (import.meta.server) {
152
+ if (import.meta.server && !useProxy) {
152
153
  useHead({
153
154
  link: [
154
155
  {
155
156
  rel: props.loading === "eager" ? "preconnect" : "dns-prefetch",
156
- href: useProxy ? void 0 : "https://maps.googleapis.com"
157
+ href: "https://maps.googleapis.com"
157
158
  }
158
- ].filter((l) => l.href)
159
+ ]
159
160
  });
160
161
  }
161
162
  defineExpose({ src });
@@ -91,6 +91,10 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
91
91
  * Additional attributes for the `<img>` element.
92
92
  */
93
93
  imgAttrs?: ImgHTMLAttributes & ReservedProps & Record<string, unknown>;
94
+ /**
95
+ * Alt text for the map image. Override to provide a more descriptive label for screen readers.
96
+ */
97
+ alt?: string;
94
98
  }, {
95
99
  src: import("vue").ComputedRef<string>;
96
100
  }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
@@ -181,11 +185,16 @@ declare const __VLS_export: __VLS_WithSlots<import("vue").DefineComponent<{
181
185
  * Additional attributes for the `<img>` element.
182
186
  */
183
187
  imgAttrs?: ImgHTMLAttributes & ReservedProps & Record<string, unknown>;
188
+ /**
189
+ * Alt text for the map image. Override to provide a more descriptive label for screen readers.
190
+ */
191
+ alt?: string;
184
192
  }> & Readonly<{}>, {
185
193
  loading: "eager" | "lazy";
186
194
  width: number | string;
187
195
  height: number | string;
188
196
  zoom: number;
197
+ alt: string;
189
198
  objectFit: "cover" | "contain" | "fill" | "none" | "scale-down";
190
199
  scale: 1 | 2;
191
200
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>, {
@@ -41,6 +41,8 @@ onMounted(() => {
41
41
  >
42
42
  <span
43
43
  v-else
44
+ role="status"
45
+ aria-label="Loading avatar"
44
46
  :style="{ display: 'inline-block', width: `${size}px`, height: `${size}px`, borderRadius: '50%', background: '#e0e0e0' }"
45
47
  />
46
48
  </template>
@@ -11,7 +11,7 @@ const styles = computed(() => ({
11
11
  </script>
12
12
 
13
13
  <template>
14
- <div class="loader" :styles="styles" aria-label="Loading..." role="status" />
14
+ <div class="loader" :style="styles" aria-label="Loading..." role="status" />
15
15
  </template>
16
16
 
17
17
  <style scoped>
@@ -149,12 +149,35 @@ watch(status, (status2) => {
149
149
  emits("error");
150
150
  }
151
151
  });
152
+ const keyboardTriggerable = computed(() => {
153
+ if (ready.value)
154
+ return false;
155
+ const triggers = Array.isArray(props.trigger) ? props.trigger : [props.trigger];
156
+ return triggers.some((t) => typeof t === "string" && !["immediate", "onNuxtReady", "visibility", "visible"].includes(t));
157
+ });
158
+ function onPlaceholderKeydown(e) {
159
+ if (e.key !== "Enter" && e.key !== " ")
160
+ return;
161
+ e.preventDefault();
162
+ if (!rootEl.value)
163
+ return;
164
+ const triggers = (Array.isArray(props.trigger) ? props.trigger : [props.trigger]).filter(Boolean);
165
+ for (const t of triggers) {
166
+ if (typeof t !== "string")
167
+ continue;
168
+ if (["immediate", "onNuxtReady", "visibility", "visible"].includes(t))
169
+ continue;
170
+ rootEl.value.dispatchEvent(new Event(t, { bubbles: false }));
171
+ }
172
+ }
152
173
  const rootAttrs = computed(() => {
174
+ const interactive = keyboardTriggerable.value;
153
175
  return defu(props.rootAttrs, {
154
176
  "aria-busy": status.value === "loading",
155
- "aria-label": status.value === "awaitingLoad" ? "Vimeo Player - Placeholder" : status.value === "loading" ? "Vimeo Player - Loading" : "Vimeo Player - Loaded",
177
+ "aria-label": status.value === "awaitingLoad" ? interactive ? "Play video" : "Vimeo Player - Placeholder" : status.value === "loading" ? "Vimeo Player - Loading" : "Vimeo Player - Loaded",
156
178
  "aria-live": "polite",
157
- "role": "application",
179
+ "role": interactive ? "button" : "application",
180
+ "tabindex": interactive ? 0 : void 0,
158
181
  "style": {
159
182
  "--vimeo-ratio": props.ratio,
160
183
  "maxWidth": "100%",
@@ -170,7 +193,7 @@ const rootAttrs = computed(() => {
170
193
  const placeholderAttrs = computed(() => {
171
194
  return defu(props.placeholderAttrs, {
172
195
  src: placeholder.value,
173
- alt: "",
196
+ alt: "Play video",
174
197
  loading: props.aboveTheFold ? "eager" : "lazy",
175
198
  // @ts-expect-error untyped
176
199
  fetchpriority: props.aboveTheFold ? "high" : void 0,
@@ -186,7 +209,7 @@ onBeforeUnmount(() => player?.unload());
186
209
  </script>
187
210
 
188
211
  <template>
189
- <div ref="rootEl" v-bind="rootAttrs">
212
+ <div ref="rootEl" v-bind="rootAttrs" @keydown="keyboardTriggerable ? onPlaceholderKeydown($event) : void 0">
190
213
  <div v-show="ready" ref="elVimeo" class="vimeo-player" />
191
214
  <slot v-if="!ready" v-bind="payload" :placeholder="placeholder" name="placeholder">
192
215
  <img v-if="placeholder" v-bind="placeholderAttrs">