From 54daa72b3ca12bb2e90b0be10d3bd0bf185693eb Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Wed, 16 Oct 2024 20:52:14 +0200
Subject: [PATCH 01/16] feat(googleMaps): add composable SFCs

---
 eslint.config.js                              |   1 +
 package.json                                  |   1 +
 pnpm-lock.yaml                                | 117 ++++++-----------
 src/runtime/components/ScriptGoogleMaps.vue   |  15 ++-
 .../components/ScriptGoogleMapsCircle.vue     |  78 ++++++++++++
 .../ScriptGoogleMapsHeatmapLayer.vue          |  32 +++++
 .../components/ScriptGoogleMapsInfoWindow.vue |  91 ++++++++++++++
 .../components/ScriptGoogleMapsMarker.vue     | 119 ++++++++++++++++++
 .../ScriptGoogleMapsMarkerClusterer.vue       |  65 ++++++++++
 .../components/ScriptGoogleMapsPolygon.vue    |  75 +++++++++++
 .../components/ScriptGoogleMapsPolyline.vue   |  75 +++++++++++
 .../components/ScriptGoogleMapsRectangle.vue  |  76 +++++++++++
 12 files changed, 660 insertions(+), 85 deletions(-)
 create mode 100644 src/runtime/components/ScriptGoogleMapsCircle.vue
 create mode 100644 src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue
 create mode 100644 src/runtime/components/ScriptGoogleMapsInfoWindow.vue
 create mode 100644 src/runtime/components/ScriptGoogleMapsMarker.vue
 create mode 100644 src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
 create mode 100644 src/runtime/components/ScriptGoogleMapsPolygon.vue
 create mode 100644 src/runtime/components/ScriptGoogleMapsPolyline.vue
 create mode 100644 src/runtime/components/ScriptGoogleMapsRectangle.vue

diff --git a/eslint.config.js b/eslint.config.js
index 44406c9a..8c20720a 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -36,6 +36,7 @@ export default createConfigForNuxt({
       'vue/no-multiple-template-root': 'off',
       // NOTE: Disable this style rules if stylistic is not enabled
       'vue/max-attributes-per-line': 'off',
+      'vue/valid-template-root': 'off',
     },
   })
   .append({
diff --git a/package.json b/package.json
index 4856e9cb..52222b08 100644
--- a/package.json
+++ b/package.json
@@ -66,6 +66,7 @@
     ]
   },
   "dependencies": {
+    "@googlemaps/markerclusterer": "^2.5.3",
     "@nuxt/devtools-kit": "^1.5.1",
     "@nuxt/devtools-ui-kit": "^1.5.1",
     "@nuxt/kit": "^3.13.2",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index de5d3ce8..d74dda05 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -22,6 +22,9 @@ importers:
 
   .:
     dependencies:
+      '@googlemaps/markerclusterer':
+        specifier: ^2.5.3
+        version: 2.5.3
       '@nuxt/devtools-kit':
         specifier: ^1.5.1
         version: 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
@@ -90,7 +93,7 @@ importers:
         version: 3.7.0
       third-party-capital:
         specifier: 2.3.0
-        version: 3.0.0
+        version: 2.3.0
       ufo:
         specifier: ^1.5.4
         version: 1.5.4
@@ -175,7 +178,7 @@ importers:
         version: 1.6.0(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-ui-kit':
         specifier: ^1.6.0
-        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.63.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
+        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
       '@nuxt/kit':
         specifier: ^3.13.2
         version: 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
@@ -205,7 +208,7 @@ importers:
         version: 2.13.3(ioredis@5.4.1)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@nuxt/fonts':
         specifier: ^0.9.2
-        version: 0.10.0(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+        version: 0.9.2(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/image':
         specifier: ^1.8.0
         version: 1.8.1(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
@@ -1321,6 +1324,9 @@ packages:
     resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
     engines: {node: '>=14'}
 
+  '@googlemaps/markerclusterer@2.5.3':
+    resolution: {integrity: sha512-x7lX0R5yYOoiNectr10wLgCBasNcXFHiADIBdmn7jQllF2B5ENQw5XtZK+hIw4xnV0Df0xhN4LN98XqA5jaiOw==}
+
   '@headlessui/tailwindcss@0.2.1':
     resolution: {integrity: sha512-2+5+NZ+RzMyrVeCZOxdbvkUSssSxGvcUxphkIfSVLpRiKsj+/63T2TOL9dBYMXVfj/CGr6hMxSRInzXv6YY7sA==}
     engines: {node: '>=10'}
@@ -1509,8 +1515,8 @@ packages:
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
 
-  '@nuxt/fonts@0.10.0':
-    resolution: {integrity: sha512-VoK/rssN1PzMeQOplap8UYnbKtI6IDaI+sj5BmbCCpXRYY84gH8m+zePGRo88Mi9ujRhd1HUOXfsCvHN88iGmQ==}
+  '@nuxt/fonts@0.9.2':
+    resolution: {integrity: sha512-RMekoJh5AIaKG3tu0YaCdru3eTqNdXn6v7ggh5cdG4rWugr59HzihZ6n4C2Pkkv6nxOP4DOhxxdOwcZwXZM5vQ==}
 
   '@nuxt/icon@1.5.6':
     resolution: {integrity: sha512-7l99CWc/laHphSsoLikh99Hkwjv+59cwAMJ0f9eZddBV+vO7zLGWwocH/TDNjlX0IACgVoG+AfbP/p1fqlLKpg==}
@@ -2360,10 +2366,6 @@ packages:
     resolution: {integrity: sha512-XKudKxxW8P44JvlIdS6HBpfE3qZA9rhbemy6/sb8HyZjKYjgeM9jx5yjk+9+4hXNma/KlwDXwjAqY29z0S0SrA==}
     engines: {node: '>=14'}
 
-  '@unocss/config@0.63.4':
-    resolution: {integrity: sha512-LfAzM8z0r2comUW94KaSo4JaaEZjPkvrfyVWfO/hyaXa+/xSVIkCTW7+lfWh77hrg1e2SUY1HEvIFBg9Jvb1xQ==}
-    engines: {node: '>=14'}
-
   '@unocss/core@0.62.4':
     resolution: {integrity: sha512-Cc+Vo6XlaQpyVejkJrrzzWtiK9pgMWzVVBpm9VCVtwZPUjD4GSc+g7VQCPXSsr7m03tmSuRySJx72QcASmauNQ==}
 
@@ -2451,11 +2453,6 @@ packages:
     peerDependencies:
       webpack: ^4 || ^5
 
-  '@unocss/webpack@0.63.4':
-    resolution: {integrity: sha512-voDSHXbhmaJzYRohHHhSvKc73O3vh4F140wFrxbvPL5ujIXEfrF5ItV7y/2Kl0XHp5J6ytl6PyCsubIetsMlKw==}
-    peerDependencies:
-      webpack: ^4 || ^5
-
   '@vercel/nft@0.26.5':
     resolution: {integrity: sha512-NHxohEqad6Ra/r4lGknO52uc/GrWILXAMs1BB4401GTqww0fw1bAqzpG1XHuDO+dprg4GvsD9ZLLSsdo78p9hQ==}
     engines: {node: '>=16'}
@@ -4467,6 +4464,9 @@ packages:
   jsonfile@6.1.0:
     resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
 
+  kdbush@4.0.2:
+    resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==}
+
   keygrip@1.1.0:
     resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==}
     engines: {node: '>= 0.6'}
@@ -6048,6 +6048,9 @@ packages:
     engines: {node: '>=16 || 14 >=14.17'}
     hasBin: true
 
+  supercluster@8.0.1:
+    resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==}
+
   superjson@2.2.1:
     resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==}
     engines: {node: '>=16'}
@@ -6166,8 +6169,8 @@ packages:
   thenify@3.3.1:
     resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
 
-  third-party-capital@3.0.0:
-    resolution: {integrity: sha512-zCrYkb4lnFTpsz0cyZ7c3q9aqQ5zX4po1Gy4utqOf8UkIV9Jx45P8ty6kpF1gLVvfkfNB36nEKv3isQhJv7Ftw==}
+  third-party-capital@2.3.0:
+    resolution: {integrity: sha512-p4rGOF4JCkI18HH3a1Vfd89Mg37TLlAsGmePBt20MA52frviYSBE6ToGOmTpqRC4EIlS5/4Owv6TpegFJUSkOg==}
 
   tiny-inflate@1.0.3:
     resolution: {integrity: sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==}
@@ -6362,9 +6365,6 @@ packages:
   unified@11.0.5:
     resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
 
-  unifont@0.1.3:
-    resolution: {integrity: sha512-PZVkmHSUTgeinSIYEJ58lEzk4FTh8wZt9rd+5EapupFQLFXqOq9OPIp+e6a3JE404duS5qgSHvfGEg+cJ42lPA==}
-
   unimport@3.12.0:
     resolution: {integrity: sha512-5y8dSvNvyevsnw4TBQkIQR1Rjdbb+XjVSwQwxltpnVZrStBvvPkMPcZrh1kg5kY77kpx6+D4Ztd3W6FOBH/y2Q==}
 
@@ -7826,6 +7826,11 @@ snapshots:
 
   '@fastify/busboy@2.1.1': {}
 
+  '@googlemaps/markerclusterer@2.5.3':
+    dependencies:
+      fast-deep-equal: 3.1.3
+      supercluster: 8.0.1
+
   '@headlessui/tailwindcss@0.2.1(tailwindcss@3.4.14)':
     dependencies:
       tailwindcss: 3.4.14
@@ -8185,7 +8190,7 @@ snapshots:
       - webpack
       - webpack-sources
 
-  '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.63.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
+  '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
     dependencies:
       '@iconify-json/carbon': 1.2.3
       '@iconify-json/logos': 1.2.3
@@ -8206,7 +8211,7 @@ snapshots:
       defu: 6.1.4
       focus-trap: 7.6.0
       splitpanes: 3.1.5
-      unocss: 0.62.4(@unocss/webpack@0.63.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
       v-lazy-show: 0.2.4(@vue/compiler-core@3.5.12)
     transitivePeerDependencies:
       - '@unocss/webpack'
@@ -8531,7 +8536,7 @@ snapshots:
       - supports-color
       - typescript
 
-  '@nuxt/fonts@0.10.0(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/fonts@0.9.2(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
@@ -8541,7 +8546,7 @@ snapshots:
       esbuild: 0.24.0
       fontaine: 0.5.0(webpack-sources@3.2.3)
       h3: 1.13.0
-      jiti: 2.3.3
+      jiti: 1.21.6
       magic-regexp: 0.8.0(webpack-sources@3.2.3)
       magic-string: 0.30.12
       node-fetch-native: 1.6.4
@@ -8550,7 +8555,6 @@ snapshots:
       sirv: 2.0.4
       tinyglobby: 0.2.9
       ufo: 1.5.4
-      unifont: 0.1.3
       unplugin: 1.14.1(webpack-sources@3.2.3)
       unstorage: 1.12.0(ioredis@5.4.1)
     transitivePeerDependencies:
@@ -10080,14 +10084,6 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  '@unocss/config@0.63.4':
-    dependencies:
-      '@unocss/core': 0.63.4
-      unconfig: 0.5.5
-    transitivePeerDependencies:
-      - supports-color
-    optional: true
-
   '@unocss/core@0.62.4': {}
 
   '@unocss/core@0.63.4': {}
@@ -10317,23 +10313,6 @@ snapshots:
       - rollup
       - supports-color
 
-  '@unocss/webpack@0.63.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1))':
-    dependencies:
-      '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
-      '@unocss/config': 0.63.4
-      '@unocss/core': 0.63.4
-      chokidar: 3.6.0
-      magic-string: 0.30.12
-      tinyglobby: 0.2.9
-      unplugin: 1.14.1(webpack-sources@3.2.3)
-      webpack: 5.95.0(esbuild@0.23.1)
-      webpack-sources: 3.2.3
-    transitivePeerDependencies:
-      - rollup
-      - supports-color
-    optional: true
-
   '@vercel/nft@0.26.5':
     dependencies:
       '@mapbox/node-pre-gyp': 1.0.11
@@ -12870,6 +12849,8 @@ snapshots:
     optionalDependencies:
       graceful-fs: 4.2.11
 
+  kdbush@4.0.2: {}
+
   keygrip@1.1.0:
     dependencies:
       tsscmp: 1.0.6
@@ -15379,6 +15360,10 @@ snapshots:
       pirates: 4.0.6
       ts-interface-checker: 0.1.13
 
+  supercluster@8.0.1:
+    dependencies:
+      kdbush: 4.0.2
+
   superjson@2.2.1:
     dependencies:
       copy-anything: 3.0.5
@@ -15545,7 +15530,7 @@ snapshots:
     dependencies:
       any-promise: 1.3.0
 
-  third-party-capital@3.0.0:
+  third-party-capital@2.3.0:
     dependencies:
       semver: 7.6.3
 
@@ -15745,11 +15730,6 @@ snapshots:
       trough: 2.2.0
       vfile: 6.0.3
 
-  unifont@0.1.3:
-    dependencies:
-      css-tree: 3.0.0
-      ohash: 1.1.4
-
   unimport@3.12.0(rollup@4.21.3)(webpack-sources@3.2.3):
     dependencies:
       '@rollup/pluginutils': 5.1.0(rollup@4.21.3)
@@ -15909,33 +15889,6 @@ snapshots:
       - rollup
       - supports-color
 
-  unocss@0.62.4(@unocss/webpack@0.63.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
-    dependencies:
-      '@unocss/astro': 0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      '@unocss/cli': 0.62.4(rollup@4.24.0)
-      '@unocss/core': 0.62.4
-      '@unocss/postcss': 0.62.4(postcss@8.4.47)
-      '@unocss/preset-attributify': 0.62.4
-      '@unocss/preset-icons': 0.62.4
-      '@unocss/preset-mini': 0.62.4
-      '@unocss/preset-tagify': 0.62.4
-      '@unocss/preset-typography': 0.62.4
-      '@unocss/preset-uno': 0.62.4
-      '@unocss/preset-web-fonts': 0.62.4
-      '@unocss/preset-wind': 0.62.4
-      '@unocss/transformer-attributify-jsx': 0.62.4
-      '@unocss/transformer-compile-class': 0.62.4
-      '@unocss/transformer-directives': 0.62.4
-      '@unocss/transformer-variant-group': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-    optionalDependencies:
-      '@unocss/webpack': 0.63.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1))
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-    transitivePeerDependencies:
-      - postcss
-      - rollup
-      - supports-color
-
   unplugin-ast@0.10.0(rollup@4.24.0)(webpack-sources@3.2.3):
     dependencies:
       '@antfu/utils': 0.7.10
diff --git a/src/runtime/components/ScriptGoogleMaps.vue b/src/runtime/components/ScriptGoogleMaps.vue
index 3a073c5f..55dcaaff 100644
--- a/src/runtime/components/ScriptGoogleMaps.vue
+++ b/src/runtime/components/ScriptGoogleMaps.vue
@@ -1,7 +1,7 @@
-<script lang="ts" setup>
+<script lang="ts">
 /// <reference types="google.maps" />
-import { computed, onBeforeUnmount, onMounted, ref, watch, toRaw } from 'vue'
-import type { HTMLAttributes, ImgHTMLAttributes, Ref, ReservedProps } from 'vue'
+import { computed, onBeforeUnmount, onMounted, ref, watch, toRaw, provide } from 'vue'
+import type { HTMLAttributes, ImgHTMLAttributes, InjectionKey, Ref, ReservedProps } from 'vue'
 import { withQuery } from 'ufo'
 import type { QueryObject } from 'ufo'
 import { defu } from 'defu'
@@ -12,6 +12,13 @@ import { useScriptTriggerElement } from '../composables/useScriptTriggerElement'
 import { useScriptGoogleMaps } from '../registry/google-maps'
 import { resolveComponent, useHead } from '#imports'
 
+export const MAP_INJECTION_KEY = Symbol('map') as InjectionKey<{
+  map: Ref<google.maps.Map | undefined>
+  mapsApi: Ref<typeof google.maps | undefined>
+}>
+</script>
+
+<script lang="ts" setup>
 interface PlaceholderOptions {
   width?: string | number
   height?: string | number
@@ -245,6 +252,8 @@ const googleMaps = {
 
 defineExpose(googleMaps)
 
+provide(MAP_INJECTION_KEY, { map, mapsApi })
+
 onMounted(() => {
   watch(ready, (v) => {
     if (v) {
diff --git a/src/runtime/components/ScriptGoogleMapsCircle.vue b/src/runtime/components/ScriptGoogleMapsCircle.vue
new file mode 100644
index 00000000..23c17f6d
--- /dev/null
+++ b/src/runtime/components/ScriptGoogleMapsCircle.vue
@@ -0,0 +1,78 @@
+<template>
+</template>
+
+<script setup lang="ts">
+import { inject, onUnmounted } from 'vue'
+import { whenever } from '@vueuse/core'
+import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
+
+const props = defineProps<{
+  options?: Omit<google.maps.CircleOptions, 'map'>
+}>()
+
+const emit = defineEmits<{
+  (event:
+    | 'center_changed'
+    | 'radius_changed'
+  ): void
+  (event:
+    | 'click'
+    | 'dblclick'
+    | 'drag'
+    | 'dragend'
+    | 'dragstart'
+    | 'mousedown'
+    | 'mousemove'
+    | 'mouseout'
+    | 'mouseover'
+    | 'mouseup'
+    | 'rightclick',
+    payload: google.maps.MapMouseEvent
+  ): void
+}>()
+
+const mapContext = inject(MAP_INJECTION_KEY, undefined)
+
+let circle: google.maps.Circle | undefined = undefined
+
+const circleEventListeners: google.maps.MapsEventListener[] = []
+
+whenever(() => mapContext?.map.value, (map) => {
+  circle = new google.maps.Circle({
+    map,
+    ...props.options,
+  })
+
+  circleEventListeners.push(...setupCircleEventListeners(circle))
+}, {
+  immediate: true,
+  once: true,
+})
+
+onUnmounted(() => {
+  circleEventListeners.forEach(listener => listener.remove())
+
+  circle?.setMap(null)
+})
+
+function setupCircleEventListeners(circle: google.maps.Circle): google.maps.MapsEventListener[] {
+  const listeners: google.maps.MapsEventListener[] = []
+
+  listeners.push(circle.addListener('center_changed', () => emit('center_changed')))
+  listeners.push(circle.addListener('radius_changed', () => emit('radius_changed')))
+
+  listeners.push(circle.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event)))
+  listeners.push(circle.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event)))
+  listeners.push(circle.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event)))
+  listeners.push(circle.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event)))
+  listeners.push(circle.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event)))
+  listeners.push(circle.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event)))
+  listeners.push(circle.addListener('mousemove', (event: google.maps.MapMouseEvent) => emit('mousemove', event)))
+  listeners.push(circle.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event)))
+  listeners.push(circle.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event)))
+  listeners.push(circle.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event)))
+  listeners.push(circle.addListener('rightclick', (event: google.maps.MapMouseEvent) => emit('rightclick', event)))
+
+  return listeners
+}
+</script>
diff --git a/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue b/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue
new file mode 100644
index 00000000..b10507a6
--- /dev/null
+++ b/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue
@@ -0,0 +1,32 @@
+<template>
+</template>
+
+<script setup lang="ts">
+import { inject, onUnmounted } from 'vue'
+import { whenever } from '@vueuse/core'
+import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
+
+const props = defineProps<{
+  options?: Omit<google.maps.visualization.HeatmapLayerOptions, 'map'>
+}>()
+
+const mapContext = inject(MAP_INJECTION_KEY, undefined)
+
+let heatmapLayer: google.maps.visualization.HeatmapLayer | undefined = undefined
+
+whenever(() => mapContext?.map.value && mapContext.mapsApi.value, async () => {
+  await mapContext!.mapsApi.value!.importLibrary('visualization')
+
+  heatmapLayer = new google.maps.visualization.HeatmapLayer({
+    map: mapContext!.map.value!,
+    ...props.options,
+  })
+}, {
+  immediate: true,
+  once: true,
+})
+
+onUnmounted(() => {
+  heatmapLayer?.setMap(null)
+})
+</script>
diff --git a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
new file mode 100644
index 00000000..99a1b2be
--- /dev/null
+++ b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
@@ -0,0 +1,91 @@
+<template>
+  <div
+    v-show="false"
+    ref="info-window-container"
+    aria-hidden="true"
+  >
+    <slot />
+  </div>
+</template>
+
+<script setup lang="ts">
+import { inject, onUnmounted, useTemplateRef } from 'vue'
+import { whenever } from '@vueuse/core'
+import { MARKER_INJECTION_KEY } from './ScriptGoogleMapsMarker.vue'
+import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
+
+const props = defineProps<{
+  options?: google.maps.InfoWindowOptions
+}>()
+
+const emit = defineEmits<{
+  (event:
+    | 'close'
+    | 'closeclick'
+    | 'content_changed'
+    | 'domready'
+    | 'headercontent_changed'
+    | 'headerdisabled_changed'
+    | 'position_changed'
+    | 'visible'
+    | 'zindex_changed'
+  ): void
+}>()
+
+const mapContext = inject(MAP_INJECTION_KEY, undefined)
+const markerContext = inject(MARKER_INJECTION_KEY, undefined)
+
+const infoWindowContainer = useTemplateRef('info-window-container')
+
+let infoWindow: google.maps.InfoWindow | undefined = undefined
+
+const infoWindowListeners: google.maps.MapsEventListener[] = []
+
+whenever(
+  () => mapContext?.map.value
+    && infoWindowContainer.value,
+  () => {
+    infoWindow = new google.maps.InfoWindow({
+      content: infoWindowContainer.value!.firstElementChild || infoWindowContainer.value!.textContent,
+      ...props.options,
+    })
+
+    infoWindowContainer.value!.parentElement?.removeChild(infoWindowContainer.value!)
+
+    infoWindowListeners.push(...setupInfoWindowEventListeners(infoWindow))
+
+    if (markerContext?.marker.value) {
+      markerContext.marker.value.addListener('click', () => {
+        infoWindow!.open({
+          anchor: markerContext.marker.value,
+          map: mapContext!.map.value,
+        })
+      })
+    }
+  }, {
+    immediate: true,
+    once: true,
+  })
+
+onUnmounted(() => {
+  infoWindowListeners.forEach(listener => listener.remove())
+
+  infoWindow?.close()
+})
+
+function setupInfoWindowEventListeners(infoWindow: google.maps.InfoWindow): google.maps.MapsEventListener[] {
+  const listeners: google.maps.MapsEventListener[] = []
+
+  listeners.push(infoWindow.addListener('close', () => emit('close')))
+  listeners.push(infoWindow.addListener('closeclick', () => emit('closeclick')))
+  listeners.push(infoWindow.addListener('content_changed', () => emit('content_changed')))
+  listeners.push(infoWindow.addListener('domready', () => emit('domready')))
+  listeners.push(infoWindow.addListener('headercontent_changed', () => emit('headercontent_changed')))
+  listeners.push(infoWindow.addListener('headerdisabled_changed', () => emit('headerdisabled_changed')))
+  listeners.push(infoWindow.addListener('position_changed', () => emit('position_changed')))
+  listeners.push(infoWindow.addListener('visible', () => emit('visible')))
+  listeners.push(infoWindow.addListener('zindex_changed', () => emit('zindex_changed')))
+
+  return listeners
+}
+</script>
diff --git a/src/runtime/components/ScriptGoogleMapsMarker.vue b/src/runtime/components/ScriptGoogleMapsMarker.vue
new file mode 100644
index 00000000..6a734723
--- /dev/null
+++ b/src/runtime/components/ScriptGoogleMapsMarker.vue
@@ -0,0 +1,119 @@
+<template>
+  <slot />
+</template>
+
+<script lang="ts">
+import type { InjectionKey, Ref } from 'vue'
+import { inject, onUnmounted, provide, ref } from 'vue'
+import { whenever } from '@vueuse/core'
+import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
+import { MARKER_CLUSTERER_INJECTION_KEY } from './ScriptGoogleMapsMarkerClusterer.vue'
+
+export const MARKER_INJECTION_KEY = Symbol('marker') as InjectionKey<{
+  marker: Ref<google.maps.Marker | undefined>
+}>
+</script>
+
+<script setup lang="ts">
+const props = defineProps<{
+  options?: Omit<google.maps.MarkerOptions, 'map'>
+}>()
+
+const emit = defineEmits<{
+  (event:
+    | 'animation_changed'
+    | 'clickable_changed'
+    | 'cursor_changed'
+    | 'draggable_changed'
+    | 'flat_changed'
+    | 'icon_changed'
+    | 'position_changed'
+    | 'shape_changed'
+    | 'title_changed'
+    | 'visible_changed'
+    | 'zindex_changed'
+  ): void
+  (event:
+    | 'click'
+    | 'contextmenu'
+    | 'dblclick'
+    | 'drag'
+    | 'dragend'
+    | 'dragstart'
+    | 'mousedown'
+    | 'mouseout'
+    | 'mouseover'
+    | 'mouseup',
+    payload: google.maps.MapMouseEvent
+  ): void
+}>()
+
+const mapContext = inject(MAP_INJECTION_KEY, undefined)
+const markerClustererContext = inject(MARKER_CLUSTERER_INJECTION_KEY, undefined)
+
+let marker: google.maps.Marker | undefined = undefined
+
+const markerEventListeners: google.maps.MapsEventListener[] = []
+
+whenever(() => mapContext?.map.value, (map) => {
+  marker = new google.maps.Marker(props.options)
+
+  markerEventListeners.push(...setupMarkerEventListeners(marker))
+
+  if (markerClustererContext?.markerClusterer.value) {
+    markerClustererContext.markerClusterer.value.addMarker(marker)
+  }
+  else {
+    marker.setMap(map)
+  }
+}, {
+  immediate: true,
+  once: true,
+})
+
+onUnmounted(() => {
+  if (!marker) {
+    return
+  }
+
+  markerEventListeners.forEach(listener => listener.remove())
+
+  if (markerClustererContext) {
+    markerClustererContext.markerClusterer.value?.removeMarker(marker)
+  }
+  else {
+    marker.setMap(null)
+  }
+})
+
+provide(MARKER_INJECTION_KEY, { marker: ref(marker) })
+
+function setupMarkerEventListeners(marker: google.maps.Marker): google.maps.MapsEventListener[] {
+  const listeners: google.maps.MapsEventListener[] = []
+
+  listeners.push(marker.addListener('animation_changed', () => emit('animation_changed')))
+  listeners.push(marker.addListener('clickable_changed', () => emit('clickable_changed')))
+  listeners.push(marker.addListener('cursor_changed', () => emit('cursor_changed')))
+  listeners.push(marker.addListener('draggable_changed', () => emit('draggable_changed')))
+  listeners.push(marker.addListener('flat_changed', () => emit('flat_changed')))
+  listeners.push(marker.addListener('icon_changed', () => emit('icon_changed')))
+  listeners.push(marker.addListener('position_changed', () => emit('position_changed')))
+  listeners.push(marker.addListener('shape_changed', () => emit('shape_changed')))
+  listeners.push(marker.addListener('title_changed', () => emit('title_changed')))
+  listeners.push(marker.addListener('visible_changed', () => emit('visible_changed')))
+  listeners.push(marker.addListener('zindex_changed', () => emit('zindex_changed')))
+
+  listeners.push(marker.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event)))
+  listeners.push(marker.addListener('contextmenu', (event: google.maps.MapMouseEvent) => emit('contextmenu', event)))
+  listeners.push(marker.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event)))
+  listeners.push(marker.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event)))
+  listeners.push(marker.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event)))
+  listeners.push(marker.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event)))
+  listeners.push(marker.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event)))
+  listeners.push(marker.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event)))
+  listeners.push(marker.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event)))
+  listeners.push(marker.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event)))
+
+  return listeners
+}
+</script>
diff --git a/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue b/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
new file mode 100644
index 00000000..bbef03bd
--- /dev/null
+++ b/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
@@ -0,0 +1,65 @@
+<template>
+  <slot />
+</template>
+
+<script lang="ts">
+import { MarkerClusterer, type MarkerClustererOptions } from '@googlemaps/markerclusterer'
+import { inject, onUnmounted, provide, ref, type InjectionKey, type Ref } from 'vue'
+import { whenever } from '@vueuse/core'
+import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
+
+export const MARKER_CLUSTERER_INJECTION_KEY = Symbol('marker-clusterer') as InjectionKey<{
+  markerClusterer: Ref<MarkerClusterer | undefined>
+}>
+</script>
+
+<script setup lang="ts">
+const props = defineProps<{
+  options?: Omit<MarkerClustererOptions, 'map'>
+}>()
+
+const emit = defineEmits<{
+  (
+    event: 'click' | 'clusteringbegin' | 'clusteringend',
+    payload: MarkerClusterer
+  ): void
+}>()
+
+const mapContext = inject(MAP_INJECTION_KEY, undefined)
+
+let markerClusterer: MarkerClusterer | undefined = undefined
+
+const markerClustererEventListeners: google.maps.MapsEventListener[] = []
+
+whenever(() => mapContext?.map.value, (map) => {
+  markerClusterer = new MarkerClusterer({
+    map,
+    ...props.options,
+  })
+
+  markerClustererEventListeners.push(...setupMarkerClustererEventListeners(markerClusterer))
+}, {
+  immediate: true,
+  once: true,
+})
+
+onUnmounted(() => {
+  markerClustererEventListeners.forEach(listener => listener.remove())
+
+  markerClusterer?.setMap(null)
+})
+
+provide(MARKER_CLUSTERER_INJECTION_KEY, {
+  markerClusterer: ref(markerClusterer),
+})
+
+function setupMarkerClustererEventListeners(markerClusterer: MarkerClusterer): google.maps.MapsEventListener[] {
+  const listeners: google.maps.MapsEventListener[] = []
+
+  listeners.push(markerClusterer.addListener('click', () => emit('click', markerClusterer)))
+  listeners.push(markerClusterer.addListener('clusteringbegin', () => emit('clusteringbegin', markerClusterer)))
+  listeners.push(markerClusterer.addListener('clusteringend', () => emit('clusteringend', markerClusterer)))
+
+  return listeners
+}
+</script>
diff --git a/src/runtime/components/ScriptGoogleMapsPolygon.vue b/src/runtime/components/ScriptGoogleMapsPolygon.vue
new file mode 100644
index 00000000..8cf605a4
--- /dev/null
+++ b/src/runtime/components/ScriptGoogleMapsPolygon.vue
@@ -0,0 +1,75 @@
+<template>
+</template>
+
+<script setup lang="ts">
+import { inject, onUnmounted } from 'vue'
+import { whenever } from '@vueuse/core'
+import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
+
+const props = defineProps<{
+  options?: Omit<google.maps.PolygonOptions, 'map'>
+}>()
+
+const emit = defineEmits<{
+  (event:
+    | 'click'
+    | 'contextmenu'
+    | 'dblclick'
+    | 'mousedown'
+    | 'mousemove'
+    | 'mouseout'
+    | 'mouseover'
+    | 'mouseup',
+    payload: google.maps.PolyMouseEvent
+  ): void
+  (event:
+    | 'drag'
+    | 'dragend'
+    | 'dragstart',
+    payload: google.maps.MapMouseEvent
+  ): void
+}>()
+
+const mapContext = inject(MAP_INJECTION_KEY, undefined)
+
+let polygon: google.maps.Polygon | undefined = undefined
+
+const polygonEventListeners: google.maps.MapsEventListener[] = []
+
+whenever(() => mapContext?.map.value, (map) => {
+  polygon = new google.maps.Polygon({
+    map,
+    ...props.options,
+  })
+
+  polygonEventListeners.push(...setupPolygonEventListeners(polygon))
+}, {
+  immediate: true,
+  once: true,
+})
+
+onUnmounted(() => {
+  polygonEventListeners.forEach(listener => listener.remove())
+
+  polygon?.setMap(null)
+})
+
+function setupPolygonEventListeners(polygon: google.maps.Polygon): google.maps.MapsEventListener[] {
+  const listeners: google.maps.MapsEventListener[] = []
+
+  listeners.push(polygon.addListener('click', (event: google.maps.PolyMouseEvent) => emit('click', event)))
+  listeners.push(polygon.addListener('contextmenu', (event: google.maps.PolyMouseEvent) => emit('contextmenu', event)))
+  listeners.push(polygon.addListener('dblclick', (event: google.maps.PolyMouseEvent) => emit('dblclick', event)))
+  listeners.push(polygon.addListener('mousedown', (event: google.maps.PolyMouseEvent) => emit('mousedown', event)))
+  listeners.push(polygon.addListener('mousemove', (event: google.maps.PolyMouseEvent) => emit('mousemove', event)))
+  listeners.push(polygon.addListener('mouseout', (event: google.maps.PolyMouseEvent) => emit('mouseout', event)))
+  listeners.push(polygon.addListener('mouseover', (event: google.maps.PolyMouseEvent) => emit('mouseover', event)))
+  listeners.push(polygon.addListener('mouseup', (event: google.maps.PolyMouseEvent) => emit('mouseup', event)))
+
+  listeners.push(polygon.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event)))
+  listeners.push(polygon.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event)))
+  listeners.push(polygon.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event)))
+
+  return listeners
+}
+</script>
diff --git a/src/runtime/components/ScriptGoogleMapsPolyline.vue b/src/runtime/components/ScriptGoogleMapsPolyline.vue
new file mode 100644
index 00000000..dccbaf96
--- /dev/null
+++ b/src/runtime/components/ScriptGoogleMapsPolyline.vue
@@ -0,0 +1,75 @@
+<template>
+</template>
+
+<script setup lang="ts">
+import { inject, onUnmounted } from 'vue'
+import { whenever } from '@vueuse/core'
+import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
+
+const props = defineProps<{
+  options?: Omit<google.maps.PolylineOptions, 'map'>
+}>()
+
+const emit = defineEmits<{
+  (event:
+    | 'click'
+    | 'contextmenu'
+    | 'dblclick'
+    | 'mousedown'
+    | 'mousemove'
+    | 'mouseout'
+    | 'mouseover'
+    | 'mouseup',
+    payload: google.maps.PolyMouseEvent
+  ): void
+  (event:
+    | 'drag'
+    | 'dragend'
+    | 'dragstart',
+    payload: google.maps.MapMouseEvent
+  ): void
+}>()
+
+const mapContext = inject(MAP_INJECTION_KEY, undefined)
+
+let polyline: google.maps.Polyline | undefined = undefined
+
+const polylineEventListeners: google.maps.MapsEventListener[] = []
+
+whenever(() => mapContext?.map.value, (map) => {
+  polyline = new google.maps.Polyline({
+    map,
+    ...props.options,
+  })
+
+  polylineEventListeners.push(...setupPolylineEventListeners(polyline))
+}, {
+  immediate: true,
+  once: true,
+})
+
+onUnmounted(() => {
+  polylineEventListeners.forEach(listener => listener.remove())
+
+  polyline?.setMap(null)
+})
+
+function setupPolylineEventListeners(polyline: google.maps.Polyline): google.maps.MapsEventListener[] {
+  const listeners: google.maps.MapsEventListener[] = []
+
+  listeners.push(polyline.addListener('click', (event: google.maps.PolyMouseEvent) => emit('click', event)))
+  listeners.push(polyline.addListener('contextmenu', (event: google.maps.PolyMouseEvent) => emit('contextmenu', event)))
+  listeners.push(polyline.addListener('dblclick', (event: google.maps.PolyMouseEvent) => emit('dblclick', event)))
+  listeners.push(polyline.addListener('mousedown', (event: google.maps.PolyMouseEvent) => emit('mousedown', event)))
+  listeners.push(polyline.addListener('mousemove', (event: google.maps.PolyMouseEvent) => emit('mousemove', event)))
+  listeners.push(polyline.addListener('mouseout', (event: google.maps.PolyMouseEvent) => emit('mouseout', event)))
+  listeners.push(polyline.addListener('mouseover', (event: google.maps.PolyMouseEvent) => emit('mouseover', event)))
+  listeners.push(polyline.addListener('mouseup', (event: google.maps.PolyMouseEvent) => emit('mouseup', event)))
+
+  listeners.push(polyline.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event)))
+  listeners.push(polyline.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event)))
+  listeners.push(polyline.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event)))
+
+  return listeners
+}
+</script>
diff --git a/src/runtime/components/ScriptGoogleMapsRectangle.vue b/src/runtime/components/ScriptGoogleMapsRectangle.vue
new file mode 100644
index 00000000..34407ae7
--- /dev/null
+++ b/src/runtime/components/ScriptGoogleMapsRectangle.vue
@@ -0,0 +1,76 @@
+<template>
+</template>
+
+<script setup lang="ts">
+import { inject, onUnmounted } from 'vue'
+import { whenever } from '@vueuse/core'
+import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
+
+const props = defineProps<{
+  options?: Omit<google.maps.RectangleOptions, 'map'>
+}>()
+
+const emit = defineEmits<{
+  (event:
+    | 'bounds_changed'
+  ): void
+  (event:
+    | 'click'
+    | 'contextmenu'
+    | 'dblclick'
+    | 'drag'
+    | 'dragend'
+    | 'dragstart'
+    | 'mousedown'
+    | 'mousemove'
+    | 'mouseout'
+    | 'mouseover'
+    | 'mouseup',
+    payload: google.maps.MapMouseEvent
+  ): void
+}>()
+
+const mapContext = inject(MAP_INJECTION_KEY, undefined)
+
+let rectangle: google.maps.Rectangle | undefined = undefined
+
+const rectangleEventListeners: google.maps.MapsEventListener[] = []
+
+whenever(() => mapContext?.map.value, (map) => {
+  rectangle = new google.maps.Rectangle({
+    map,
+    ...props.options,
+  })
+
+  rectangleEventListeners.push(...setupRectangleEventListeners(rectangle))
+}, {
+  immediate: true,
+  once: true,
+})
+
+onUnmounted(() => {
+  rectangleEventListeners.forEach(listener => listener.remove())
+
+  rectangle?.setMap(null)
+})
+
+function setupRectangleEventListeners(rectangle: google.maps.Rectangle): google.maps.MapsEventListener[] {
+  const listeners: google.maps.MapsEventListener[] = []
+
+  listeners.push(rectangle.addListener('bounds_changed', () => emit('bounds_changed')))
+
+  listeners.push(rectangle.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event)))
+  listeners.push(rectangle.addListener('contextmenu', (event: google.maps.MapMouseEvent) => emit('contextmenu', event)))
+  listeners.push(rectangle.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event)))
+  listeners.push(rectangle.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event)))
+  listeners.push(rectangle.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event)))
+  listeners.push(rectangle.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event)))
+  listeners.push(rectangle.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event)))
+  listeners.push(rectangle.addListener('mousemove', (event: google.maps.MapMouseEvent) => emit('mousemove', event)))
+  listeners.push(rectangle.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event)))
+  listeners.push(rectangle.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event)))
+  listeners.push(rectangle.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event)))
+
+  return listeners
+}
+</script>

From c4f49da21060eebfc4349d9a556c9022915bda40 Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Thu, 17 Oct 2024 16:11:08 +0200
Subject: [PATCH 02/16] feat: make SFC's options reactive

---
 src/runtime/components/ScriptGoogleMapsCircle.vue       | 6 ++++++
 src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue | 6 ++++++
 src/runtime/components/ScriptGoogleMapsInfoWindow.vue   | 6 ++++++
 src/runtime/components/ScriptGoogleMapsMarker.vue       | 6 ++++++
 src/runtime/components/ScriptGoogleMapsPolygon.vue      | 6 ++++++
 src/runtime/components/ScriptGoogleMapsPolyline.vue     | 6 ++++++
 src/runtime/components/ScriptGoogleMapsRectangle.vue    | 6 ++++++
 7 files changed, 42 insertions(+)

diff --git a/src/runtime/components/ScriptGoogleMapsCircle.vue b/src/runtime/components/ScriptGoogleMapsCircle.vue
index 23c17f6d..675ca88f 100644
--- a/src/runtime/components/ScriptGoogleMapsCircle.vue
+++ b/src/runtime/components/ScriptGoogleMapsCircle.vue
@@ -43,6 +43,12 @@ whenever(() => mapContext?.map.value, (map) => {
     ...props.options,
   })
 
+  whenever(() => props.options, (options) => {
+    circle?.setOptions(options)
+  }, {
+    deep: true,
+  })
+
   circleEventListeners.push(...setupCircleEventListeners(circle))
 }, {
   immediate: true,
diff --git a/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue b/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue
index b10507a6..e5afc6f3 100644
--- a/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue
+++ b/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue
@@ -21,6 +21,12 @@ whenever(() => mapContext?.map.value && mapContext.mapsApi.value, async () => {
     map: mapContext!.map.value!,
     ...props.options,
   })
+
+  whenever(() => props.options, (options) => {
+    heatmapLayer?.setOptions(options)
+  }, {
+    deep: true,
+  })
 }, {
   immediate: true,
   once: true,
diff --git a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
index 99a1b2be..5d23cfb1 100644
--- a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
+++ b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
@@ -50,6 +50,12 @@ whenever(
       ...props.options,
     })
 
+    whenever(() => props.options, (options) => {
+      infoWindow?.setOptions(options)
+    }, {
+      deep: true,
+    })
+
     infoWindowContainer.value!.parentElement?.removeChild(infoWindowContainer.value!)
 
     infoWindowListeners.push(...setupInfoWindowEventListeners(infoWindow))
diff --git a/src/runtime/components/ScriptGoogleMapsMarker.vue b/src/runtime/components/ScriptGoogleMapsMarker.vue
index 6a734723..2da3279e 100644
--- a/src/runtime/components/ScriptGoogleMapsMarker.vue
+++ b/src/runtime/components/ScriptGoogleMapsMarker.vue
@@ -60,6 +60,12 @@ whenever(() => mapContext?.map.value, (map) => {
 
   markerEventListeners.push(...setupMarkerEventListeners(marker))
 
+  whenever(() => props.options, (options) => {
+    marker?.setOptions(options)
+  }, {
+    deep: true,
+  })
+
   if (markerClustererContext?.markerClusterer.value) {
     markerClustererContext.markerClusterer.value.addMarker(marker)
   }
diff --git a/src/runtime/components/ScriptGoogleMapsPolygon.vue b/src/runtime/components/ScriptGoogleMapsPolygon.vue
index 8cf605a4..d31928f4 100644
--- a/src/runtime/components/ScriptGoogleMapsPolygon.vue
+++ b/src/runtime/components/ScriptGoogleMapsPolygon.vue
@@ -42,6 +42,12 @@ whenever(() => mapContext?.map.value, (map) => {
     ...props.options,
   })
 
+  whenever(() => props.options, (options) => {
+    polygon?.setOptions(options)
+  }, {
+    deep: true,
+  })
+
   polygonEventListeners.push(...setupPolygonEventListeners(polygon))
 }, {
   immediate: true,
diff --git a/src/runtime/components/ScriptGoogleMapsPolyline.vue b/src/runtime/components/ScriptGoogleMapsPolyline.vue
index dccbaf96..d6605e27 100644
--- a/src/runtime/components/ScriptGoogleMapsPolyline.vue
+++ b/src/runtime/components/ScriptGoogleMapsPolyline.vue
@@ -42,6 +42,12 @@ whenever(() => mapContext?.map.value, (map) => {
     ...props.options,
   })
 
+  whenever(() => props.options, (options) => {
+    polyline?.setOptions(options)
+  }, {
+    deep: true,
+  })
+
   polylineEventListeners.push(...setupPolylineEventListeners(polyline))
 }, {
   immediate: true,
diff --git a/src/runtime/components/ScriptGoogleMapsRectangle.vue b/src/runtime/components/ScriptGoogleMapsRectangle.vue
index 34407ae7..e3798eb1 100644
--- a/src/runtime/components/ScriptGoogleMapsRectangle.vue
+++ b/src/runtime/components/ScriptGoogleMapsRectangle.vue
@@ -43,6 +43,12 @@ whenever(() => mapContext?.map.value, (map) => {
   })
 
   rectangleEventListeners.push(...setupRectangleEventListeners(rectangle))
+
+  whenever(() => props.options, (options) => {
+    rectangle?.setOptions(options)
+  }, {
+    deep: true,
+  })
 }, {
   immediate: true,
   once: true,

From 5d990f846184a1eb708f1e39a02d94ff3b9ada87 Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Fri, 18 Oct 2024 16:38:05 +0200
Subject: [PATCH 03/16] fix: address reactivity issues by using `shallowRef`

---
 src/runtime/components/ScriptGoogleMaps.vue   |  8 +++---
 .../components/ScriptGoogleMapsMarker.vue     | 28 +++++++++----------
 .../ScriptGoogleMapsMarkerClusterer.vue       | 18 ++++++------
 3 files changed, 26 insertions(+), 28 deletions(-)

diff --git a/src/runtime/components/ScriptGoogleMaps.vue b/src/runtime/components/ScriptGoogleMaps.vue
index 55dcaaff..7fe19f27 100644
--- a/src/runtime/components/ScriptGoogleMaps.vue
+++ b/src/runtime/components/ScriptGoogleMaps.vue
@@ -1,7 +1,7 @@
 <script lang="ts">
 /// <reference types="google.maps" />
-import { computed, onBeforeUnmount, onMounted, ref, watch, toRaw, provide } from 'vue'
-import type { HTMLAttributes, ImgHTMLAttributes, InjectionKey, Ref, ReservedProps } from 'vue'
+import { computed, onBeforeUnmount, onMounted, ref, watch, toRaw, provide, shallowRef } from 'vue'
+import type { HTMLAttributes, ImgHTMLAttributes, InjectionKey, Ref, ReservedProps, ShallowRef } from 'vue'
 import { withQuery } from 'ufo'
 import type { QueryObject } from 'ufo'
 import { defu } from 'defu'
@@ -13,7 +13,7 @@ import { useScriptGoogleMaps } from '../registry/google-maps'
 import { resolveComponent, useHead } from '#imports'
 
 export const MAP_INJECTION_KEY = Symbol('map') as InjectionKey<{
-  map: Ref<google.maps.Map | undefined>
+  map: ShallowRef<google.maps.Map | undefined>
   mapsApi: Ref<typeof google.maps | undefined>
 }>
 </script>
@@ -135,7 +135,7 @@ const options = computed(() => {
 })
 const ready = ref(false)
 
-const map: Ref<google.maps.Map | undefined> = ref()
+const map: ShallowRef<google.maps.Map | undefined> = shallowRef()
 const mapMarkers: Ref<Map<string, Promise<google.maps.marker.AdvancedMarkerElement>>> = ref(new Map())
 
 function isLocationQuery(s: string | any) {
diff --git a/src/runtime/components/ScriptGoogleMapsMarker.vue b/src/runtime/components/ScriptGoogleMapsMarker.vue
index 2da3279e..8db8546b 100644
--- a/src/runtime/components/ScriptGoogleMapsMarker.vue
+++ b/src/runtime/components/ScriptGoogleMapsMarker.vue
@@ -1,16 +1,16 @@
 <template>
-  <slot />
+  <slot v-if="marker" />
 </template>
 
 <script lang="ts">
-import type { InjectionKey, Ref } from 'vue'
-import { inject, onUnmounted, provide, ref } from 'vue'
+import type { InjectionKey, ShallowRef } from 'vue'
+import { inject, onUnmounted, provide, shallowRef } from 'vue'
 import { whenever } from '@vueuse/core'
 import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
 import { MARKER_CLUSTERER_INJECTION_KEY } from './ScriptGoogleMapsMarkerClusterer.vue'
 
 export const MARKER_INJECTION_KEY = Symbol('marker') as InjectionKey<{
-  marker: Ref<google.maps.Marker | undefined>
+  marker: ShallowRef<google.maps.Marker | undefined>
 }>
 </script>
 
@@ -51,26 +51,26 @@ const emit = defineEmits<{
 const mapContext = inject(MAP_INJECTION_KEY, undefined)
 const markerClustererContext = inject(MARKER_CLUSTERER_INJECTION_KEY, undefined)
 
-let marker: google.maps.Marker | undefined = undefined
+const marker = shallowRef<google.maps.Marker | undefined>(undefined)
 
 const markerEventListeners: google.maps.MapsEventListener[] = []
 
 whenever(() => mapContext?.map.value, (map) => {
-  marker = new google.maps.Marker(props.options)
+  marker.value = new google.maps.Marker(props.options)
 
-  markerEventListeners.push(...setupMarkerEventListeners(marker))
+  markerEventListeners.push(...setupMarkerEventListeners(marker.value))
 
   whenever(() => props.options, (options) => {
-    marker?.setOptions(options)
+    marker.value?.setOptions(options)
   }, {
     deep: true,
   })
 
   if (markerClustererContext?.markerClusterer.value) {
-    markerClustererContext.markerClusterer.value.addMarker(marker)
+    markerClustererContext.markerClusterer.value.addMarker(marker.value)
   }
   else {
-    marker.setMap(map)
+    marker.value.setMap(map)
   }
 }, {
   immediate: true,
@@ -78,21 +78,21 @@ whenever(() => mapContext?.map.value, (map) => {
 })
 
 onUnmounted(() => {
-  if (!marker) {
+  if (!marker.value) {
     return
   }
 
   markerEventListeners.forEach(listener => listener.remove())
 
   if (markerClustererContext) {
-    markerClustererContext.markerClusterer.value?.removeMarker(marker)
+    markerClustererContext.markerClusterer.value?.removeMarker(marker.value)
   }
   else {
-    marker.setMap(null)
+    marker.value.setMap(null)
   }
 })
 
-provide(MARKER_INJECTION_KEY, { marker: ref(marker) })
+provide(MARKER_INJECTION_KEY, { marker })
 
 function setupMarkerEventListeners(marker: google.maps.Marker): google.maps.MapsEventListener[] {
   const listeners: google.maps.MapsEventListener[] = []
diff --git a/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue b/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
index bbef03bd..5f087c76 100644
--- a/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
+++ b/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
@@ -1,15 +1,15 @@
 <template>
-  <slot />
+  <slot v-if="markerClusterer" />
 </template>
 
 <script lang="ts">
 import { MarkerClusterer, type MarkerClustererOptions } from '@googlemaps/markerclusterer'
-import { inject, onUnmounted, provide, ref, type InjectionKey, type Ref } from 'vue'
+import { inject, onUnmounted, provide, shallowRef, type InjectionKey, type ShallowRef } from 'vue'
 import { whenever } from '@vueuse/core'
 import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
 
 export const MARKER_CLUSTERER_INJECTION_KEY = Symbol('marker-clusterer') as InjectionKey<{
-  markerClusterer: Ref<MarkerClusterer | undefined>
+  markerClusterer: ShallowRef<MarkerClusterer | undefined>
 }>
 </script>
 
@@ -27,17 +27,17 @@ const emit = defineEmits<{
 
 const mapContext = inject(MAP_INJECTION_KEY, undefined)
 
-let markerClusterer: MarkerClusterer | undefined = undefined
+const markerClusterer = shallowRef<MarkerClusterer | undefined>(undefined)
 
 const markerClustererEventListeners: google.maps.MapsEventListener[] = []
 
 whenever(() => mapContext?.map.value, (map) => {
-  markerClusterer = new MarkerClusterer({
+  markerClusterer.value = new MarkerClusterer({
     map,
     ...props.options,
   })
 
-  markerClustererEventListeners.push(...setupMarkerClustererEventListeners(markerClusterer))
+  markerClustererEventListeners.push(...setupMarkerClustererEventListeners(markerClusterer.value))
 }, {
   immediate: true,
   once: true,
@@ -46,12 +46,10 @@ whenever(() => mapContext?.map.value, (map) => {
 onUnmounted(() => {
   markerClustererEventListeners.forEach(listener => listener.remove())
 
-  markerClusterer?.setMap(null)
+  markerClusterer.value?.setMap(null)
 })
 
-provide(MARKER_CLUSTERER_INJECTION_KEY, {
-  markerClusterer: ref(markerClusterer),
-})
+provide(MARKER_CLUSTERER_INJECTION_KEY, { markerClusterer })
 
 function setupMarkerClustererEventListeners(markerClusterer: MarkerClusterer): google.maps.MapsEventListener[] {
   const listeners: google.maps.MapsEventListener[] = []

From f811c93f56f724e7d199efe68a0effcc26c9040e Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Fri, 18 Oct 2024 16:59:40 +0200
Subject: [PATCH 04/16] feat: add SFCs playground

---
 .../pages/third-parties/google-maps/sfcs.vue  | 215 ++++++++++++++++++
 1 file changed, 215 insertions(+)
 create mode 100644 playground/pages/third-parties/google-maps/sfcs.vue

diff --git a/playground/pages/third-parties/google-maps/sfcs.vue b/playground/pages/third-parties/google-maps/sfcs.vue
new file mode 100644
index 00000000..9ab28f7a
--- /dev/null
+++ b/playground/pages/third-parties/google-maps/sfcs.vue
@@ -0,0 +1,215 @@
+<script setup lang="ts">
+import { whenever } from '@vueuse/core'
+import { ref, useTemplateRef } from 'vue'
+
+const isMarkerShown = ref(false)
+
+const markerOptions = ref({
+  position: { lat: -33.8688, lng: 151.2093 },
+})
+
+const isMarkerClustererShown = ref(false)
+
+const markers = [
+  { position: { lat: -33.8688, lng: 151.2093 } },
+  { position: { lat: -33.8690, lng: 151.2100 } },
+  { position: { lat: -33.8700, lng: 151.2150 } },
+  { position: { lat: -33.8710, lng: 151.2200 } },
+  { position: { lat: -33.8720, lng: 151.2250 } },
+]
+
+const isRectangleShown = ref(false)
+
+const isPolylineShown = ref(false)
+
+const isPolygonShown = ref(false)
+
+const isHeatmapLayerShown = ref(false)
+
+const heatmapLayerData = ref<google.maps.LatLng[]>([])
+
+const isCircleShown = ref(false)
+
+const googleMapsRef = useTemplateRef('googleMapsRef')
+
+whenever(() => googleMapsRef.value?.googleMaps, (googleMaps) => {
+  heatmapLayerData.value.push(...[
+    new googleMaps.LatLng(-33.8688, 151.2093),
+    new googleMaps.LatLng(-33.8690, 151.2100),
+    new googleMaps.LatLng(-33.8700, 151.2150),
+    new googleMaps.LatLng(-33.8710, 151.2200),
+    new googleMaps.LatLng(-33.8720, 151.2250),
+    new googleMaps.LatLng(-33.8730, 151.2300),
+    new googleMaps.LatLng(-33.8740, 151.2350),
+    new googleMaps.LatLng(-33.8750, 151.2400),
+    new googleMaps.LatLng(-33.8760, 151.2450),
+    new googleMaps.LatLng(-33.8770, 151.2500),
+    new googleMaps.LatLng(-33.8780, 151.2550),
+    new googleMaps.LatLng(-33.8790, 151.2600),
+    new googleMaps.LatLng(-33.8800, 151.2650),
+    new googleMaps.LatLng(-33.8810, 151.2700),
+  ])
+})
+</script>
+
+<template>
+  <div>
+    <ScriptGoogleMaps
+      ref="googleMapsRef"
+      api-key="AIzaSyAOEIQ_xOdLx2dNwnFMzyJoswwvPCTcGzU"
+      :width="1280"
+      :height="720"
+      above-the-fold
+      :map-options="{
+        center: { lat: -34.397, lng: 150.644 },
+        zoom: 8,
+      }"
+    >
+      <ScriptGoogleMapsMarker
+        v-if="isMarkerShown"
+        :options="markerOptions"
+      >
+        <ScriptGoogleMapsInfoWindow>
+          info window content
+        </ScriptGoogleMapsInfoWindow>
+      </ScriptGoogleMapsMarker>
+
+      <ScriptGoogleMapsMarkerClusterer v-if="isMarkerClustererShown">
+        <ScriptGoogleMapsMarker
+          v-for="marker in markers"
+          :key="marker.position.lat + marker.position.lng"
+          :options="{ position: marker.position }"
+        >
+          <ScriptGoogleMapsInfoWindow>
+            info window content
+          </ScriptGoogleMapsInfoWindow>
+        </ScriptGoogleMapsMarker>
+      </ScriptGoogleMapsMarkerClusterer>
+
+      <ScriptGoogleMapsRectangle
+        v-if="isRectangleShown"
+        :options="{
+          bounds: {
+            north: -33.85,
+            south: -33.90,
+            east: 151.25,
+            west: 151.20,
+          },
+          editable: true,
+          draggable: true,
+        }"
+      />
+
+      <ScriptGoogleMapsPolyline
+        v-if="isPolylineShown"
+        :options="{
+          path: [
+            { lat: -33.8688, lng: 151.2093 },
+            { lat: -33.8700, lng: 151.2200 },
+            { lat: -33.8750, lng: 151.2300 },
+            { lat: -33.8800, lng: 151.2400 },
+            { lat: -33.8850, lng: 151.2500 },
+          ],
+          geodesic: true,
+          strokeColor: '#FF0000',
+          strokeOpacity: 1.0,
+          strokeWeight: 2,
+        }"
+      />
+
+      <ScriptGoogleMapsPolygon
+        v-if="isPolygonShown"
+        :options="{
+          paths: [
+            { lat: -33.8688, lng: 151.2093 },
+            { lat: -33.8700, lng: 151.2200 },
+            { lat: -33.8750, lng: 151.2300 },
+            { lat: -33.8800, lng: 151.2400 },
+            { lat: -33.8850, lng: 151.2500 },
+            { lat: -33.8900, lng: 151.2600 },
+            { lat: -33.8950, lng: 151.2700 },
+            { lat: -33.9000, lng: 151.2800 },
+            { lat: -33.9050, lng: 151.2900 },
+            { lat: -33.9100, lng: 151.3000 },
+          ],
+          strokeColor: '#FF0000',
+          strokeOpacity: 0.8,
+          strokeWeight: 2,
+          fillColor: '#FF0000',
+          fillOpacity: 0.35,
+        }"
+      />
+
+      <ScriptGoogleMapsHeatmapLayer
+        v-if="isHeatmapLayerShown"
+        :options="{
+          data: heatmapLayerData,
+        }"
+      />
+
+      <ScriptGoogleMapsCircle
+        v-if="isCircleShown"
+        :options="{
+          center: { lat: -33.8688, lng: 151.2093 },
+          radius: 1000,
+          strokeColor: '#FF0000',
+          strokeOpacity: 0.8,
+          strokeWeight: 2,
+          fillColor: '#FF0000',
+          fillOpacity: 0.35,
+        }"
+      />
+    </ScriptGoogleMaps>
+
+    <div class="my-5 flex gap-5 flex-wrap">
+      <button
+        class="bg-[#ffa500] rounded-lg px-2 py-1"
+        @click="isMarkerShown = !isMarkerShown"
+      >
+        {{ `${isMarkerShown ? 'Hide' : 'Show'} marker` }}
+      </button>
+
+      <button
+        class="bg-[#ffa500] rounded-lg px-2 py-1"
+        @click="isMarkerClustererShown = !isMarkerClustererShown"
+      >
+        {{ `${isMarkerClustererShown ? 'Hide' : 'Show'} marker clusterer` }}
+      </button>
+
+      <button
+        class="bg-[#ffa500] rounded-lg px-2 py-1"
+        @click="isRectangleShown = !isRectangleShown"
+      >
+        {{ `${isRectangleShown ? 'Hide' : 'Show'} rectangle` }}
+      </button>
+
+      <button
+        class="bg-[#ffa500] rounded-lg px-2 py-1"
+        @click="isPolylineShown = !isPolylineShown"
+      >
+        {{ `${isPolylineShown ? 'Hide' : 'Show'} polyline` }}
+      </button>
+
+      <button
+        class="bg-[#ffa500] rounded-lg px-2 py-1"
+        @click="isPolygonShown = !isPolygonShown"
+      >
+        {{ `${isPolygonShown ? 'Hide' : 'Show'} polygon` }}
+      </button>
+
+      <button
+        class="bg-[#ffa500] rounded-lg px-2 py-1"
+        @click="isHeatmapLayerShown = !isHeatmapLayerShown"
+      >
+        {{ `${isHeatmapLayerShown ? 'Hide' : 'Show'} heatmap layer` }}
+      </button>
+
+      <button
+        class="bg-[#ffa500] rounded-lg px-2 py-1"
+        @click="isCircleShown = !isCircleShown"
+      >
+        {{ `${isCircleShown ? 'Hide' : 'Show'} circle` }}
+      </button>
+    </div>
+  </div>
+</template>

From 23dfd260d084b7cf09d3914ac7f949c763a8d5f3 Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Fri, 18 Oct 2024 17:11:03 +0200
Subject: [PATCH 05/16] fix: allow mounting info window to map when not within
 marker

---
 .../pages/third-parties/google-maps/sfcs.vue     | 16 ++++++++++++++++
 .../components/ScriptGoogleMapsInfoWindow.vue    |  5 +++++
 2 files changed, 21 insertions(+)

diff --git a/playground/pages/third-parties/google-maps/sfcs.vue b/playground/pages/third-parties/google-maps/sfcs.vue
index 9ab28f7a..a59a5e59 100644
--- a/playground/pages/third-parties/google-maps/sfcs.vue
+++ b/playground/pages/third-parties/google-maps/sfcs.vue
@@ -2,6 +2,8 @@
 import { whenever } from '@vueuse/core'
 import { ref, useTemplateRef } from 'vue'
 
+const isInfoWindowShown = ref(false)
+
 const isMarkerShown = ref(false)
 
 const markerOptions = ref({
@@ -65,6 +67,13 @@ whenever(() => googleMapsRef.value?.googleMaps, (googleMaps) => {
         zoom: 8,
       }"
     >
+      <ScriptGoogleMapsInfoWindow
+        v-if="isInfoWindowShown"
+        :options="{ position: { lat: -33.8688, lng: 151.2093 } }"
+      >
+        info window content
+      </ScriptGoogleMapsInfoWindow>
+
       <ScriptGoogleMapsMarker
         v-if="isMarkerShown"
         :options="markerOptions"
@@ -162,6 +171,13 @@ whenever(() => googleMapsRef.value?.googleMaps, (googleMaps) => {
     </ScriptGoogleMaps>
 
     <div class="my-5 flex gap-5 flex-wrap">
+      <button
+        class="bg-[#ffa500] rounded-lg px-2 py-1"
+        @click="isInfoWindowShown = !isInfoWindowShown"
+      >
+        {{ `${isInfoWindowShown ? 'Hide' : 'Show'} info window` }}
+      </button>
+
       <button
         class="bg-[#ffa500] rounded-lg px-2 py-1"
         @click="isMarkerShown = !isMarkerShown"
diff --git a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
index 5d23cfb1..d2ac04e0 100644
--- a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
+++ b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
@@ -68,6 +68,11 @@ whenever(
         })
       })
     }
+    else {
+      infoWindow.setPosition(props.options?.position)
+
+      infoWindow.open(mapContext?.map.value)
+    }
   }, {
     immediate: true,
     once: true,

From 9c8d2d0a1207076e5d498854e5f1a92adf931fc2 Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Fri, 18 Oct 2024 17:53:07 +0200
Subject: [PATCH 06/16] refactor: simplify clearing instance listeners

---
 .../components/ScriptGoogleMapsCircle.vue     | 46 ++++++-------
 .../components/ScriptGoogleMapsInfoWindow.vue | 48 +++++++------
 .../components/ScriptGoogleMapsMarker.vue     | 68 +++++++++----------
 .../ScriptGoogleMapsMarkerClusterer.vue       | 24 +++----
 .../components/ScriptGoogleMapsPolygon.vue    | 42 ++++++------
 .../components/ScriptGoogleMapsPolyline.vue   | 42 ++++++------
 .../components/ScriptGoogleMapsRectangle.vue  | 42 ++++++------
 7 files changed, 147 insertions(+), 165 deletions(-)

diff --git a/src/runtime/components/ScriptGoogleMapsCircle.vue b/src/runtime/components/ScriptGoogleMapsCircle.vue
index 675ca88f..5f972696 100644
--- a/src/runtime/components/ScriptGoogleMapsCircle.vue
+++ b/src/runtime/components/ScriptGoogleMapsCircle.vue
@@ -35,50 +35,48 @@ const mapContext = inject(MAP_INJECTION_KEY, undefined)
 
 let circle: google.maps.Circle | undefined = undefined
 
-const circleEventListeners: google.maps.MapsEventListener[] = []
-
 whenever(() => mapContext?.map.value, (map) => {
   circle = new google.maps.Circle({
     map,
     ...props.options,
   })
 
+  setupCircleEventListeners(circle)
+
   whenever(() => props.options, (options) => {
     circle?.setOptions(options)
   }, {
     deep: true,
   })
-
-  circleEventListeners.push(...setupCircleEventListeners(circle))
 }, {
   immediate: true,
   once: true,
 })
 
 onUnmounted(() => {
-  circleEventListeners.forEach(listener => listener.remove())
+  if (!circle) {
+    return
+  }
 
-  circle?.setMap(null)
-})
-
-function setupCircleEventListeners(circle: google.maps.Circle): google.maps.MapsEventListener[] {
-  const listeners: google.maps.MapsEventListener[] = []
+  google.maps.event.clearInstanceListeners(circle)
 
-  listeners.push(circle.addListener('center_changed', () => emit('center_changed')))
-  listeners.push(circle.addListener('radius_changed', () => emit('radius_changed')))
+  circle.setMap(null)
+})
 
-  listeners.push(circle.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event)))
-  listeners.push(circle.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event)))
-  listeners.push(circle.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event)))
-  listeners.push(circle.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event)))
-  listeners.push(circle.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event)))
-  listeners.push(circle.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event)))
-  listeners.push(circle.addListener('mousemove', (event: google.maps.MapMouseEvent) => emit('mousemove', event)))
-  listeners.push(circle.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event)))
-  listeners.push(circle.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event)))
-  listeners.push(circle.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event)))
-  listeners.push(circle.addListener('rightclick', (event: google.maps.MapMouseEvent) => emit('rightclick', event)))
+function setupCircleEventListeners(circle: google.maps.Circle) {
+  circle.addListener('center_changed', () => emit('center_changed'))
+  circle.addListener('radius_changed', () => emit('radius_changed'))
 
-  return listeners
+  circle.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event))
+  circle.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event))
+  circle.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
+  circle.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
+  circle.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
+  circle.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event))
+  circle.addListener('mousemove', (event: google.maps.MapMouseEvent) => emit('mousemove', event))
+  circle.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event))
+  circle.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event))
+  circle.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event))
+  circle.addListener('rightclick', (event: google.maps.MapMouseEvent) => emit('rightclick', event))
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
index d2ac04e0..80f57549 100644
--- a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
+++ b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
@@ -39,8 +39,6 @@ const infoWindowContainer = useTemplateRef('info-window-container')
 
 let infoWindow: google.maps.InfoWindow | undefined = undefined
 
-const infoWindowListeners: google.maps.MapsEventListener[] = []
-
 whenever(
   () => mapContext?.map.value
     && infoWindowContainer.value,
@@ -50,15 +48,9 @@ whenever(
       ...props.options,
     })
 
-    whenever(() => props.options, (options) => {
-      infoWindow?.setOptions(options)
-    }, {
-      deep: true,
-    })
-
     infoWindowContainer.value!.parentElement?.removeChild(infoWindowContainer.value!)
 
-    infoWindowListeners.push(...setupInfoWindowEventListeners(infoWindow))
+    setupInfoWindowEventListeners(infoWindow)
 
     if (markerContext?.marker.value) {
       markerContext.marker.value.addListener('click', () => {
@@ -73,30 +65,36 @@ whenever(
 
       infoWindow.open(mapContext?.map.value)
     }
+
+    whenever(() => props.options, (options) => {
+      infoWindow?.setOptions(options)
+    }, {
+      deep: true,
+    })
   }, {
     immediate: true,
     once: true,
   })
 
 onUnmounted(() => {
-  infoWindowListeners.forEach(listener => listener.remove())
-
-  infoWindow?.close()
-})
+  if (!infoWindow) {
+    return
+  }
 
-function setupInfoWindowEventListeners(infoWindow: google.maps.InfoWindow): google.maps.MapsEventListener[] {
-  const listeners: google.maps.MapsEventListener[] = []
+  google.maps.event.clearInstanceListeners(infoWindow)
 
-  listeners.push(infoWindow.addListener('close', () => emit('close')))
-  listeners.push(infoWindow.addListener('closeclick', () => emit('closeclick')))
-  listeners.push(infoWindow.addListener('content_changed', () => emit('content_changed')))
-  listeners.push(infoWindow.addListener('domready', () => emit('domready')))
-  listeners.push(infoWindow.addListener('headercontent_changed', () => emit('headercontent_changed')))
-  listeners.push(infoWindow.addListener('headerdisabled_changed', () => emit('headerdisabled_changed')))
-  listeners.push(infoWindow.addListener('position_changed', () => emit('position_changed')))
-  listeners.push(infoWindow.addListener('visible', () => emit('visible')))
-  listeners.push(infoWindow.addListener('zindex_changed', () => emit('zindex_changed')))
+  infoWindow.close()
+})
 
-  return listeners
+function setupInfoWindowEventListeners(infoWindow: google.maps.InfoWindow) {
+  infoWindow.addListener('close', () => emit('close'))
+  infoWindow.addListener('closeclick', () => emit('closeclick'))
+  infoWindow.addListener('content_changed', () => emit('content_changed'))
+  infoWindow.addListener('domready', () => emit('domready'))
+  infoWindow.addListener('headercontent_changed', () => emit('headercontent_changed'))
+  infoWindow.addListener('headerdisabled_changed', () => emit('headerdisabled_changed'))
+  infoWindow.addListener('position_changed', () => emit('position_changed'))
+  infoWindow.addListener('visible', () => emit('visible'))
+  infoWindow.addListener('zindex_changed', () => emit('zindex_changed'))
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsMarker.vue b/src/runtime/components/ScriptGoogleMapsMarker.vue
index 8db8546b..7444f0a9 100644
--- a/src/runtime/components/ScriptGoogleMapsMarker.vue
+++ b/src/runtime/components/ScriptGoogleMapsMarker.vue
@@ -53,18 +53,10 @@ const markerClustererContext = inject(MARKER_CLUSTERER_INJECTION_KEY, undefined)
 
 const marker = shallowRef<google.maps.Marker | undefined>(undefined)
 
-const markerEventListeners: google.maps.MapsEventListener[] = []
-
 whenever(() => mapContext?.map.value, (map) => {
   marker.value = new google.maps.Marker(props.options)
 
-  markerEventListeners.push(...setupMarkerEventListeners(marker.value))
-
-  whenever(() => props.options, (options) => {
-    marker.value?.setOptions(options)
-  }, {
-    deep: true,
-  })
+  setupMarkerEventListeners(marker.value)
 
   if (markerClustererContext?.markerClusterer.value) {
     markerClustererContext.markerClusterer.value.addMarker(marker.value)
@@ -72,6 +64,12 @@ whenever(() => mapContext?.map.value, (map) => {
   else {
     marker.value.setMap(map)
   }
+
+  whenever(() => props.options, (options) => {
+    marker.value?.setOptions(options)
+  }, {
+    deep: true,
+  })
 }, {
   immediate: true,
   once: true,
@@ -82,7 +80,7 @@ onUnmounted(() => {
     return
   }
 
-  markerEventListeners.forEach(listener => listener.remove())
+  google.maps.event.clearInstanceListeners(marker.value)
 
   if (markerClustererContext) {
     markerClustererContext.markerClusterer.value?.removeMarker(marker.value)
@@ -94,32 +92,28 @@ onUnmounted(() => {
 
 provide(MARKER_INJECTION_KEY, { marker })
 
-function setupMarkerEventListeners(marker: google.maps.Marker): google.maps.MapsEventListener[] {
-  const listeners: google.maps.MapsEventListener[] = []
-
-  listeners.push(marker.addListener('animation_changed', () => emit('animation_changed')))
-  listeners.push(marker.addListener('clickable_changed', () => emit('clickable_changed')))
-  listeners.push(marker.addListener('cursor_changed', () => emit('cursor_changed')))
-  listeners.push(marker.addListener('draggable_changed', () => emit('draggable_changed')))
-  listeners.push(marker.addListener('flat_changed', () => emit('flat_changed')))
-  listeners.push(marker.addListener('icon_changed', () => emit('icon_changed')))
-  listeners.push(marker.addListener('position_changed', () => emit('position_changed')))
-  listeners.push(marker.addListener('shape_changed', () => emit('shape_changed')))
-  listeners.push(marker.addListener('title_changed', () => emit('title_changed')))
-  listeners.push(marker.addListener('visible_changed', () => emit('visible_changed')))
-  listeners.push(marker.addListener('zindex_changed', () => emit('zindex_changed')))
-
-  listeners.push(marker.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event)))
-  listeners.push(marker.addListener('contextmenu', (event: google.maps.MapMouseEvent) => emit('contextmenu', event)))
-  listeners.push(marker.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event)))
-  listeners.push(marker.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event)))
-  listeners.push(marker.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event)))
-  listeners.push(marker.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event)))
-  listeners.push(marker.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event)))
-  listeners.push(marker.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event)))
-  listeners.push(marker.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event)))
-  listeners.push(marker.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event)))
-
-  return listeners
+function setupMarkerEventListeners(marker: google.maps.Marker) {
+  marker.addListener('animation_changed', () => emit('animation_changed'))
+  marker.addListener('clickable_changed', () => emit('clickable_changed'))
+  marker.addListener('cursor_changed', () => emit('cursor_changed'))
+  marker.addListener('draggable_changed', () => emit('draggable_changed'))
+  marker.addListener('flat_changed', () => emit('flat_changed'))
+  marker.addListener('icon_changed', () => emit('icon_changed'))
+  marker.addListener('position_changed', () => emit('position_changed'))
+  marker.addListener('shape_changed', () => emit('shape_changed'))
+  marker.addListener('title_changed', () => emit('title_changed'))
+  marker.addListener('visible_changed', () => emit('visible_changed'))
+  marker.addListener('zindex_changed', () => emit('zindex_changed'))
+
+  marker.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event))
+  marker.addListener('contextmenu', (event: google.maps.MapMouseEvent) => emit('contextmenu', event))
+  marker.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event))
+  marker.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
+  marker.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
+  marker.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
+  marker.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event))
+  marker.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event))
+  marker.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event))
+  marker.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event))
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue b/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
index 5f087c76..a1251c6b 100644
--- a/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
+++ b/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
@@ -29,35 +29,33 @@ const mapContext = inject(MAP_INJECTION_KEY, undefined)
 
 const markerClusterer = shallowRef<MarkerClusterer | undefined>(undefined)
 
-const markerClustererEventListeners: google.maps.MapsEventListener[] = []
-
 whenever(() => mapContext?.map.value, (map) => {
   markerClusterer.value = new MarkerClusterer({
     map,
     ...props.options,
   })
 
-  markerClustererEventListeners.push(...setupMarkerClustererEventListeners(markerClusterer.value))
+  setupMarkerClustererEventListeners(markerClusterer.value)
 }, {
   immediate: true,
   once: true,
 })
 
 onUnmounted(() => {
-  markerClustererEventListeners.forEach(listener => listener.remove())
+  if (!markerClusterer.value) {
+    return
+  }
+
+  google.maps.event.clearInstanceListeners(markerClusterer.value)
 
-  markerClusterer.value?.setMap(null)
+  markerClusterer.value.setMap(null)
 })
 
 provide(MARKER_CLUSTERER_INJECTION_KEY, { markerClusterer })
 
-function setupMarkerClustererEventListeners(markerClusterer: MarkerClusterer): google.maps.MapsEventListener[] {
-  const listeners: google.maps.MapsEventListener[] = []
-
-  listeners.push(markerClusterer.addListener('click', () => emit('click', markerClusterer)))
-  listeners.push(markerClusterer.addListener('clusteringbegin', () => emit('clusteringbegin', markerClusterer)))
-  listeners.push(markerClusterer.addListener('clusteringend', () => emit('clusteringend', markerClusterer)))
-
-  return listeners
+function setupMarkerClustererEventListeners(markerClusterer: MarkerClusterer) {
+  markerClusterer.addListener('click', () => emit('click', markerClusterer))
+  markerClusterer.addListener('clusteringbegin', () => emit('clusteringbegin', markerClusterer))
+  markerClusterer.addListener('clusteringend', () => emit('clusteringend', markerClusterer))
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsPolygon.vue b/src/runtime/components/ScriptGoogleMapsPolygon.vue
index d31928f4..5810882d 100644
--- a/src/runtime/components/ScriptGoogleMapsPolygon.vue
+++ b/src/runtime/components/ScriptGoogleMapsPolygon.vue
@@ -34,48 +34,46 @@ const mapContext = inject(MAP_INJECTION_KEY, undefined)
 
 let polygon: google.maps.Polygon | undefined = undefined
 
-const polygonEventListeners: google.maps.MapsEventListener[] = []
-
 whenever(() => mapContext?.map.value, (map) => {
   polygon = new google.maps.Polygon({
     map,
     ...props.options,
   })
 
+  setupPolygonEventListeners(polygon)
+
   whenever(() => props.options, (options) => {
     polygon?.setOptions(options)
   }, {
     deep: true,
   })
-
-  polygonEventListeners.push(...setupPolygonEventListeners(polygon))
 }, {
   immediate: true,
   once: true,
 })
 
 onUnmounted(() => {
-  polygonEventListeners.forEach(listener => listener.remove())
+  if (!polygon) {
+    return
+  }
 
-  polygon?.setMap(null)
-})
-
-function setupPolygonEventListeners(polygon: google.maps.Polygon): google.maps.MapsEventListener[] {
-  const listeners: google.maps.MapsEventListener[] = []
+  google.maps.event.clearInstanceListeners(polygon)
 
-  listeners.push(polygon.addListener('click', (event: google.maps.PolyMouseEvent) => emit('click', event)))
-  listeners.push(polygon.addListener('contextmenu', (event: google.maps.PolyMouseEvent) => emit('contextmenu', event)))
-  listeners.push(polygon.addListener('dblclick', (event: google.maps.PolyMouseEvent) => emit('dblclick', event)))
-  listeners.push(polygon.addListener('mousedown', (event: google.maps.PolyMouseEvent) => emit('mousedown', event)))
-  listeners.push(polygon.addListener('mousemove', (event: google.maps.PolyMouseEvent) => emit('mousemove', event)))
-  listeners.push(polygon.addListener('mouseout', (event: google.maps.PolyMouseEvent) => emit('mouseout', event)))
-  listeners.push(polygon.addListener('mouseover', (event: google.maps.PolyMouseEvent) => emit('mouseover', event)))
-  listeners.push(polygon.addListener('mouseup', (event: google.maps.PolyMouseEvent) => emit('mouseup', event)))
+  polygon.setMap(null)
+})
 
-  listeners.push(polygon.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event)))
-  listeners.push(polygon.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event)))
-  listeners.push(polygon.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event)))
+function setupPolygonEventListeners(polygon: google.maps.Polygon) {
+  polygon.addListener('click', (event: google.maps.PolyMouseEvent) => emit('click', event))
+  polygon.addListener('contextmenu', (event: google.maps.PolyMouseEvent) => emit('contextmenu', event))
+  polygon.addListener('dblclick', (event: google.maps.PolyMouseEvent) => emit('dblclick', event))
+  polygon.addListener('mousedown', (event: google.maps.PolyMouseEvent) => emit('mousedown', event))
+  polygon.addListener('mousemove', (event: google.maps.PolyMouseEvent) => emit('mousemove', event))
+  polygon.addListener('mouseout', (event: google.maps.PolyMouseEvent) => emit('mouseout', event))
+  polygon.addListener('mouseover', (event: google.maps.PolyMouseEvent) => emit('mouseover', event))
+  polygon.addListener('mouseup', (event: google.maps.PolyMouseEvent) => emit('mouseup', event))
 
-  return listeners
+  polygon.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
+  polygon.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
+  polygon.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsPolyline.vue b/src/runtime/components/ScriptGoogleMapsPolyline.vue
index d6605e27..abb1e37e 100644
--- a/src/runtime/components/ScriptGoogleMapsPolyline.vue
+++ b/src/runtime/components/ScriptGoogleMapsPolyline.vue
@@ -34,48 +34,46 @@ const mapContext = inject(MAP_INJECTION_KEY, undefined)
 
 let polyline: google.maps.Polyline | undefined = undefined
 
-const polylineEventListeners: google.maps.MapsEventListener[] = []
-
 whenever(() => mapContext?.map.value, (map) => {
   polyline = new google.maps.Polyline({
     map,
     ...props.options,
   })
 
+  setupPolylineEventListeners(polyline)
+
   whenever(() => props.options, (options) => {
     polyline?.setOptions(options)
   }, {
     deep: true,
   })
-
-  polylineEventListeners.push(...setupPolylineEventListeners(polyline))
 }, {
   immediate: true,
   once: true,
 })
 
 onUnmounted(() => {
-  polylineEventListeners.forEach(listener => listener.remove())
+  if (!polyline) {
+    return
+  }
 
-  polyline?.setMap(null)
-})
-
-function setupPolylineEventListeners(polyline: google.maps.Polyline): google.maps.MapsEventListener[] {
-  const listeners: google.maps.MapsEventListener[] = []
+  google.maps.event.clearInstanceListeners(polyline)
 
-  listeners.push(polyline.addListener('click', (event: google.maps.PolyMouseEvent) => emit('click', event)))
-  listeners.push(polyline.addListener('contextmenu', (event: google.maps.PolyMouseEvent) => emit('contextmenu', event)))
-  listeners.push(polyline.addListener('dblclick', (event: google.maps.PolyMouseEvent) => emit('dblclick', event)))
-  listeners.push(polyline.addListener('mousedown', (event: google.maps.PolyMouseEvent) => emit('mousedown', event)))
-  listeners.push(polyline.addListener('mousemove', (event: google.maps.PolyMouseEvent) => emit('mousemove', event)))
-  listeners.push(polyline.addListener('mouseout', (event: google.maps.PolyMouseEvent) => emit('mouseout', event)))
-  listeners.push(polyline.addListener('mouseover', (event: google.maps.PolyMouseEvent) => emit('mouseover', event)))
-  listeners.push(polyline.addListener('mouseup', (event: google.maps.PolyMouseEvent) => emit('mouseup', event)))
+  polyline.setMap(null)
+})
 
-  listeners.push(polyline.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event)))
-  listeners.push(polyline.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event)))
-  listeners.push(polyline.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event)))
+function setupPolylineEventListeners(polyline: google.maps.Polyline) {
+  polyline.addListener('click', (event: google.maps.PolyMouseEvent) => emit('click', event))
+  polyline.addListener('contextmenu', (event: google.maps.PolyMouseEvent) => emit('contextmenu', event))
+  polyline.addListener('dblclick', (event: google.maps.PolyMouseEvent) => emit('dblclick', event))
+  polyline.addListener('mousedown', (event: google.maps.PolyMouseEvent) => emit('mousedown', event))
+  polyline.addListener('mousemove', (event: google.maps.PolyMouseEvent) => emit('mousemove', event))
+  polyline.addListener('mouseout', (event: google.maps.PolyMouseEvent) => emit('mouseout', event))
+  polyline.addListener('mouseover', (event: google.maps.PolyMouseEvent) => emit('mouseover', event))
+  polyline.addListener('mouseup', (event: google.maps.PolyMouseEvent) => emit('mouseup', event))
 
-  return listeners
+  polyline.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
+  polyline.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
+  polyline.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsRectangle.vue b/src/runtime/components/ScriptGoogleMapsRectangle.vue
index e3798eb1..1f1aa1bf 100644
--- a/src/runtime/components/ScriptGoogleMapsRectangle.vue
+++ b/src/runtime/components/ScriptGoogleMapsRectangle.vue
@@ -34,15 +34,13 @@ const mapContext = inject(MAP_INJECTION_KEY, undefined)
 
 let rectangle: google.maps.Rectangle | undefined = undefined
 
-const rectangleEventListeners: google.maps.MapsEventListener[] = []
-
 whenever(() => mapContext?.map.value, (map) => {
   rectangle = new google.maps.Rectangle({
     map,
     ...props.options,
   })
 
-  rectangleEventListeners.push(...setupRectangleEventListeners(rectangle))
+  setupRectangleEventListeners(rectangle)
 
   whenever(() => props.options, (options) => {
     rectangle?.setOptions(options)
@@ -55,28 +53,28 @@ whenever(() => mapContext?.map.value, (map) => {
 })
 
 onUnmounted(() => {
-  rectangleEventListeners.forEach(listener => listener.remove())
-
-  rectangle?.setMap(null)
-})
+  if (!rectangle) {
+    return
+  }
 
-function setupRectangleEventListeners(rectangle: google.maps.Rectangle): google.maps.MapsEventListener[] {
-  const listeners: google.maps.MapsEventListener[] = []
+  google.maps.event.clearInstanceListeners(rectangle)
 
-  listeners.push(rectangle.addListener('bounds_changed', () => emit('bounds_changed')))
+  rectangle.setMap(null)
+})
 
-  listeners.push(rectangle.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event)))
-  listeners.push(rectangle.addListener('contextmenu', (event: google.maps.MapMouseEvent) => emit('contextmenu', event)))
-  listeners.push(rectangle.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event)))
-  listeners.push(rectangle.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event)))
-  listeners.push(rectangle.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event)))
-  listeners.push(rectangle.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event)))
-  listeners.push(rectangle.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event)))
-  listeners.push(rectangle.addListener('mousemove', (event: google.maps.MapMouseEvent) => emit('mousemove', event)))
-  listeners.push(rectangle.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event)))
-  listeners.push(rectangle.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event)))
-  listeners.push(rectangle.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event)))
+function setupRectangleEventListeners(rectangle: google.maps.Rectangle) {
+  rectangle.addListener('bounds_changed', () => emit('bounds_changed'))
 
-  return listeners
+  rectangle.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event))
+  rectangle.addListener('contextmenu', (event: google.maps.MapMouseEvent) => emit('contextmenu', event))
+  rectangle.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event))
+  rectangle.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
+  rectangle.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
+  rectangle.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
+  rectangle.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event))
+  rectangle.addListener('mousemove', (event: google.maps.MapMouseEvent) => emit('mousemove', event))
+  rectangle.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event))
+  rectangle.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event))
+  rectangle.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event))
 }
 </script>

From dee6917e4b4bdea0701bc5521f2110461a003643 Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Fri, 18 Oct 2024 18:21:41 +0200
Subject: [PATCH 07/16] refactor: modify the way event listeners are registered

---
 .../components/ScriptGoogleMapsCircle.vue     | 58 ++++++-------
 .../components/ScriptGoogleMapsInfoWindow.vue | 36 ++++----
 .../components/ScriptGoogleMapsMarker.vue     | 84 ++++++++-----------
 .../ScriptGoogleMapsMarkerClusterer.vue       | 17 ++--
 .../components/ScriptGoogleMapsPolygon.vue    | 53 ++++++------
 .../components/ScriptGoogleMapsPolyline.vue   | 53 ++++++------
 .../components/ScriptGoogleMapsRectangle.vue  | 55 ++++++------
 7 files changed, 165 insertions(+), 191 deletions(-)

diff --git a/src/runtime/components/ScriptGoogleMapsCircle.vue b/src/runtime/components/ScriptGoogleMapsCircle.vue
index 5f972696..2976f366 100644
--- a/src/runtime/components/ScriptGoogleMapsCircle.vue
+++ b/src/runtime/components/ScriptGoogleMapsCircle.vue
@@ -10,25 +10,28 @@ const props = defineProps<{
   options?: Omit<google.maps.CircleOptions, 'map'>
 }>()
 
+const eventsWithoutPayload = [
+  'center_changed',
+  'radius_changed',
+] as const
+
+const eventsWithMapMouseEventPayload = [
+  'click',
+  'dblclick',
+  'drag',
+  'dragend',
+  'dragstart',
+  'mousedown',
+  'mousemove',
+  'mouseout',
+  'mouseover',
+  'mouseup',
+  'rightclick',
+] as const
+
 const emit = defineEmits<{
-  (event:
-    | 'center_changed'
-    | 'radius_changed'
-  ): void
-  (event:
-    | 'click'
-    | 'dblclick'
-    | 'drag'
-    | 'dragend'
-    | 'dragstart'
-    | 'mousedown'
-    | 'mousemove'
-    | 'mouseout'
-    | 'mouseover'
-    | 'mouseup'
-    | 'rightclick',
-    payload: google.maps.MapMouseEvent
-  ): void
+  (event: typeof eventsWithoutPayload[number]): void
+  (event: typeof eventsWithMapMouseEventPayload[number], payload: google.maps.MapMouseEvent): void
 }>()
 
 const mapContext = inject(MAP_INJECTION_KEY, undefined)
@@ -64,19 +67,12 @@ onUnmounted(() => {
 })
 
 function setupCircleEventListeners(circle: google.maps.Circle) {
-  circle.addListener('center_changed', () => emit('center_changed'))
-  circle.addListener('radius_changed', () => emit('radius_changed'))
+  eventsWithoutPayload.forEach((event) => {
+    circle.addListener(event, () => emit(event))
+  })
 
-  circle.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event))
-  circle.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event))
-  circle.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
-  circle.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
-  circle.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
-  circle.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event))
-  circle.addListener('mousemove', (event: google.maps.MapMouseEvent) => emit('mousemove', event))
-  circle.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event))
-  circle.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event))
-  circle.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event))
-  circle.addListener('rightclick', (event: google.maps.MapMouseEvent) => emit('rightclick', event))
+  eventsWithMapMouseEventPayload.forEach((event) => {
+    circle.addListener(event, (payload: google.maps.MapMouseEvent) => emit(event, payload))
+  })
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
index 80f57549..2123d387 100644
--- a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
+++ b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
@@ -18,18 +18,20 @@ const props = defineProps<{
   options?: google.maps.InfoWindowOptions
 }>()
 
+const infoWindowEvents = [
+  'close',
+  'closeclick',
+  'content_changed',
+  'domready',
+  'headercontent_changed',
+  'headerdisabled_changed',
+  'position_changed',
+  'visible',
+  'zindex_changed',
+] as const
+
 const emit = defineEmits<{
-  (event:
-    | 'close'
-    | 'closeclick'
-    | 'content_changed'
-    | 'domready'
-    | 'headercontent_changed'
-    | 'headerdisabled_changed'
-    | 'position_changed'
-    | 'visible'
-    | 'zindex_changed'
-  ): void
+  (event: typeof infoWindowEvents[number]): void
 }>()
 
 const mapContext = inject(MAP_INJECTION_KEY, undefined)
@@ -87,14 +89,8 @@ onUnmounted(() => {
 })
 
 function setupInfoWindowEventListeners(infoWindow: google.maps.InfoWindow) {
-  infoWindow.addListener('close', () => emit('close'))
-  infoWindow.addListener('closeclick', () => emit('closeclick'))
-  infoWindow.addListener('content_changed', () => emit('content_changed'))
-  infoWindow.addListener('domready', () => emit('domready'))
-  infoWindow.addListener('headercontent_changed', () => emit('headercontent_changed'))
-  infoWindow.addListener('headerdisabled_changed', () => emit('headerdisabled_changed'))
-  infoWindow.addListener('position_changed', () => emit('position_changed'))
-  infoWindow.addListener('visible', () => emit('visible'))
-  infoWindow.addListener('zindex_changed', () => emit('zindex_changed'))
+  infoWindowEvents.forEach((event) => {
+    infoWindow.addListener(event, () => emit(event))
+  })
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsMarker.vue b/src/runtime/components/ScriptGoogleMapsMarker.vue
index 7444f0a9..79550d67 100644
--- a/src/runtime/components/ScriptGoogleMapsMarker.vue
+++ b/src/runtime/components/ScriptGoogleMapsMarker.vue
@@ -19,33 +19,36 @@ const props = defineProps<{
   options?: Omit<google.maps.MarkerOptions, 'map'>
 }>()
 
+const eventsWithoutPayload = [
+  'animation_changed',
+  'clickable_changed',
+  'cursor_changed',
+  'draggable_changed',
+  'flat_changed',
+  'icon_changed',
+  'position_changed',
+  'shape_changed',
+  'title_changed',
+  'visible_changed',
+  'zindex_changed',
+] as const
+
+const eventsWithMapMouseEventPayload = [
+  'click',
+  'contextmenu',
+  'dblclick',
+  'drag',
+  'dragend',
+  'dragstart',
+  'mousedown',
+  'mouseout',
+  'mouseover',
+  'mouseup',
+] as const
+
 const emit = defineEmits<{
-  (event:
-    | 'animation_changed'
-    | 'clickable_changed'
-    | 'cursor_changed'
-    | 'draggable_changed'
-    | 'flat_changed'
-    | 'icon_changed'
-    | 'position_changed'
-    | 'shape_changed'
-    | 'title_changed'
-    | 'visible_changed'
-    | 'zindex_changed'
-  ): void
-  (event:
-    | 'click'
-    | 'contextmenu'
-    | 'dblclick'
-    | 'drag'
-    | 'dragend'
-    | 'dragstart'
-    | 'mousedown'
-    | 'mouseout'
-    | 'mouseover'
-    | 'mouseup',
-    payload: google.maps.MapMouseEvent
-  ): void
+  (event: typeof eventsWithoutPayload[number]): void
+  (event: typeof eventsWithMapMouseEventPayload[number], payload: google.maps.MapMouseEvent): void
 }>()
 
 const mapContext = inject(MAP_INJECTION_KEY, undefined)
@@ -93,27 +96,12 @@ onUnmounted(() => {
 provide(MARKER_INJECTION_KEY, { marker })
 
 function setupMarkerEventListeners(marker: google.maps.Marker) {
-  marker.addListener('animation_changed', () => emit('animation_changed'))
-  marker.addListener('clickable_changed', () => emit('clickable_changed'))
-  marker.addListener('cursor_changed', () => emit('cursor_changed'))
-  marker.addListener('draggable_changed', () => emit('draggable_changed'))
-  marker.addListener('flat_changed', () => emit('flat_changed'))
-  marker.addListener('icon_changed', () => emit('icon_changed'))
-  marker.addListener('position_changed', () => emit('position_changed'))
-  marker.addListener('shape_changed', () => emit('shape_changed'))
-  marker.addListener('title_changed', () => emit('title_changed'))
-  marker.addListener('visible_changed', () => emit('visible_changed'))
-  marker.addListener('zindex_changed', () => emit('zindex_changed'))
-
-  marker.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event))
-  marker.addListener('contextmenu', (event: google.maps.MapMouseEvent) => emit('contextmenu', event))
-  marker.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event))
-  marker.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
-  marker.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
-  marker.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
-  marker.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event))
-  marker.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event))
-  marker.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event))
-  marker.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event))
+  eventsWithoutPayload.forEach((event) => {
+    marker.addListener(event, () => emit(event))
+  })
+
+  eventsWithMapMouseEventPayload.forEach((event) => {
+    marker.addListener(event, (payload: google.maps.MapMouseEvent) => emit(event, payload))
+  })
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue b/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
index a1251c6b..c4428cb2 100644
--- a/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
+++ b/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
@@ -18,11 +18,14 @@ const props = defineProps<{
   options?: Omit<MarkerClustererOptions, 'map'>
 }>()
 
+const markerClustererEvents = [
+  'click',
+  'clusteringbegin',
+  'clusteringend',
+] as const
+
 const emit = defineEmits<{
-  (
-    event: 'click' | 'clusteringbegin' | 'clusteringend',
-    payload: MarkerClusterer
-  ): void
+  (event: typeof markerClustererEvents[number], payload: MarkerClusterer): void
 }>()
 
 const mapContext = inject(MAP_INJECTION_KEY, undefined)
@@ -54,8 +57,8 @@ onUnmounted(() => {
 provide(MARKER_CLUSTERER_INJECTION_KEY, { markerClusterer })
 
 function setupMarkerClustererEventListeners(markerClusterer: MarkerClusterer) {
-  markerClusterer.addListener('click', () => emit('click', markerClusterer))
-  markerClusterer.addListener('clusteringbegin', () => emit('clusteringbegin', markerClusterer))
-  markerClusterer.addListener('clusteringend', () => emit('clusteringend', markerClusterer))
+  markerClustererEvents.forEach((event) => {
+    markerClusterer.addListener(event, () => emit(event, markerClusterer))
+  })
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsPolygon.vue b/src/runtime/components/ScriptGoogleMapsPolygon.vue
index 5810882d..7d84719d 100644
--- a/src/runtime/components/ScriptGoogleMapsPolygon.vue
+++ b/src/runtime/components/ScriptGoogleMapsPolygon.vue
@@ -10,24 +10,26 @@ const props = defineProps<{
   options?: Omit<google.maps.PolygonOptions, 'map'>
 }>()
 
+const eventsWithPolyMouseEventPayload = [
+  'click',
+  'contextmenu',
+  'dblclick',
+  'mousedown',
+  'mousemove',
+  'mouseout',
+  'mouseover',
+  'mouseup',
+] as const
+
+const eventsWithMapMouseEventPayload = [
+  'drag',
+  'dragend',
+  'dragstart',
+] as const
+
 const emit = defineEmits<{
-  (event:
-    | 'click'
-    | 'contextmenu'
-    | 'dblclick'
-    | 'mousedown'
-    | 'mousemove'
-    | 'mouseout'
-    | 'mouseover'
-    | 'mouseup',
-    payload: google.maps.PolyMouseEvent
-  ): void
-  (event:
-    | 'drag'
-    | 'dragend'
-    | 'dragstart',
-    payload: google.maps.MapMouseEvent
-  ): void
+  (event: typeof eventsWithPolyMouseEventPayload[number], payload: google.maps.PolyMouseEvent): void
+  (event: typeof eventsWithMapMouseEventPayload[number], payload: google.maps.MapMouseEvent): void
 }>()
 
 const mapContext = inject(MAP_INJECTION_KEY, undefined)
@@ -63,17 +65,12 @@ onUnmounted(() => {
 })
 
 function setupPolygonEventListeners(polygon: google.maps.Polygon) {
-  polygon.addListener('click', (event: google.maps.PolyMouseEvent) => emit('click', event))
-  polygon.addListener('contextmenu', (event: google.maps.PolyMouseEvent) => emit('contextmenu', event))
-  polygon.addListener('dblclick', (event: google.maps.PolyMouseEvent) => emit('dblclick', event))
-  polygon.addListener('mousedown', (event: google.maps.PolyMouseEvent) => emit('mousedown', event))
-  polygon.addListener('mousemove', (event: google.maps.PolyMouseEvent) => emit('mousemove', event))
-  polygon.addListener('mouseout', (event: google.maps.PolyMouseEvent) => emit('mouseout', event))
-  polygon.addListener('mouseover', (event: google.maps.PolyMouseEvent) => emit('mouseover', event))
-  polygon.addListener('mouseup', (event: google.maps.PolyMouseEvent) => emit('mouseup', event))
+  eventsWithPolyMouseEventPayload.forEach((event) => {
+    polygon.addListener(event, (payload: google.maps.PolyMouseEvent) => emit(event, payload))
+  })
 
-  polygon.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
-  polygon.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
-  polygon.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
+  eventsWithMapMouseEventPayload.forEach((event) => {
+    polygon.addListener(event, (payload: google.maps.MapMouseEvent) => emit(event, payload))
+  })
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsPolyline.vue b/src/runtime/components/ScriptGoogleMapsPolyline.vue
index abb1e37e..7aeca4ee 100644
--- a/src/runtime/components/ScriptGoogleMapsPolyline.vue
+++ b/src/runtime/components/ScriptGoogleMapsPolyline.vue
@@ -10,24 +10,26 @@ const props = defineProps<{
   options?: Omit<google.maps.PolylineOptions, 'map'>
 }>()
 
+const eventsWithPolyMouseEventPayload = [
+  'click',
+  'contextmenu',
+  'dblclick',
+  'mousedown',
+  'mousemove',
+  'mouseout',
+  'mouseover',
+  'mouseup',
+] as const
+
+const eventsWithMapMouseEventPayload = [
+  'drag',
+  'dragend',
+  'dragstart',
+] as const
+
 const emit = defineEmits<{
-  (event:
-    | 'click'
-    | 'contextmenu'
-    | 'dblclick'
-    | 'mousedown'
-    | 'mousemove'
-    | 'mouseout'
-    | 'mouseover'
-    | 'mouseup',
-    payload: google.maps.PolyMouseEvent
-  ): void
-  (event:
-    | 'drag'
-    | 'dragend'
-    | 'dragstart',
-    payload: google.maps.MapMouseEvent
-  ): void
+  (event: typeof eventsWithPolyMouseEventPayload[number], payload: google.maps.PolyMouseEvent): void
+  (event: typeof eventsWithMapMouseEventPayload[number], payload: google.maps.MapMouseEvent): void
 }>()
 
 const mapContext = inject(MAP_INJECTION_KEY, undefined)
@@ -63,17 +65,12 @@ onUnmounted(() => {
 })
 
 function setupPolylineEventListeners(polyline: google.maps.Polyline) {
-  polyline.addListener('click', (event: google.maps.PolyMouseEvent) => emit('click', event))
-  polyline.addListener('contextmenu', (event: google.maps.PolyMouseEvent) => emit('contextmenu', event))
-  polyline.addListener('dblclick', (event: google.maps.PolyMouseEvent) => emit('dblclick', event))
-  polyline.addListener('mousedown', (event: google.maps.PolyMouseEvent) => emit('mousedown', event))
-  polyline.addListener('mousemove', (event: google.maps.PolyMouseEvent) => emit('mousemove', event))
-  polyline.addListener('mouseout', (event: google.maps.PolyMouseEvent) => emit('mouseout', event))
-  polyline.addListener('mouseover', (event: google.maps.PolyMouseEvent) => emit('mouseover', event))
-  polyline.addListener('mouseup', (event: google.maps.PolyMouseEvent) => emit('mouseup', event))
+  eventsWithPolyMouseEventPayload.forEach((event) => {
+    polyline.addListener(event, (payload: google.maps.PolyMouseEvent) => emit(event, payload))
+  })
 
-  polyline.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
-  polyline.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
-  polyline.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
+  eventsWithMapMouseEventPayload.forEach((event) => {
+    polyline.addListener(event, (payload: google.maps.MapMouseEvent) => emit(event, payload))
+  })
 }
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsRectangle.vue b/src/runtime/components/ScriptGoogleMapsRectangle.vue
index 1f1aa1bf..451adea7 100644
--- a/src/runtime/components/ScriptGoogleMapsRectangle.vue
+++ b/src/runtime/components/ScriptGoogleMapsRectangle.vue
@@ -10,24 +10,27 @@ const props = defineProps<{
   options?: Omit<google.maps.RectangleOptions, 'map'>
 }>()
 
+const eventsWithoutPayload = [
+  'bounds_changed',
+] as const
+
+const eventsWithMapMouseEventPayload = [
+  'click',
+  'contextmenu',
+  'dblclick',
+  'drag',
+  'dragend',
+  'dragstart',
+  'mousedown',
+  'mousemove',
+  'mouseout',
+  'mouseover',
+  'mouseup',
+] as const
+
 const emit = defineEmits<{
-  (event:
-    | 'bounds_changed'
-  ): void
-  (event:
-    | 'click'
-    | 'contextmenu'
-    | 'dblclick'
-    | 'drag'
-    | 'dragend'
-    | 'dragstart'
-    | 'mousedown'
-    | 'mousemove'
-    | 'mouseout'
-    | 'mouseover'
-    | 'mouseup',
-    payload: google.maps.MapMouseEvent
-  ): void
+  (event: typeof eventsWithoutPayload[number]): void
+  (event: typeof eventsWithMapMouseEventPayload[number], payload: google.maps.MapMouseEvent): void
 }>()
 
 const mapContext = inject(MAP_INJECTION_KEY, undefined)
@@ -63,18 +66,12 @@ onUnmounted(() => {
 })
 
 function setupRectangleEventListeners(rectangle: google.maps.Rectangle) {
-  rectangle.addListener('bounds_changed', () => emit('bounds_changed'))
+  eventsWithoutPayload.forEach((event) => {
+    rectangle.addListener(event, () => emit(event))
+  })
 
-  rectangle.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event))
-  rectangle.addListener('contextmenu', (event: google.maps.MapMouseEvent) => emit('contextmenu', event))
-  rectangle.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event))
-  rectangle.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
-  rectangle.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
-  rectangle.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
-  rectangle.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event))
-  rectangle.addListener('mousemove', (event: google.maps.MapMouseEvent) => emit('mousemove', event))
-  rectangle.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event))
-  rectangle.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event))
-  rectangle.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event))
+  eventsWithMapMouseEventPayload.forEach((event) => {
+    rectangle.addListener(event, (payload: google.maps.MapMouseEvent) => emit(event, payload))
+  })
 }
 </script>

From 81ada1787d8594012771e0b8741ccf2106dc6327 Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Fri, 18 Oct 2024 20:22:49 +0200
Subject: [PATCH 08/16] feat: add advanced marker element

---
 .../pages/third-parties/google-maps/sfcs.vue  |  25 +++-
 .../ScriptGoogleMapsAdvancedMarkerElement.vue | 115 ++++++++++++++++++
 .../components/ScriptGoogleMapsInfoWindow.vue |  30 +++--
 3 files changed, 160 insertions(+), 10 deletions(-)
 create mode 100644 src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue

diff --git a/playground/pages/third-parties/google-maps/sfcs.vue b/playground/pages/third-parties/google-maps/sfcs.vue
index a59a5e59..0c95d6a6 100644
--- a/playground/pages/third-parties/google-maps/sfcs.vue
+++ b/playground/pages/third-parties/google-maps/sfcs.vue
@@ -10,6 +10,8 @@ const markerOptions = ref({
   position: { lat: -33.8688, lng: 151.2093 },
 })
 
+const isAdvancedMarkerElementShown = ref(false)
+
 const isMarkerClustererShown = ref(false)
 
 const markers = [
@@ -65,13 +67,16 @@ whenever(() => googleMapsRef.value?.googleMaps, (googleMaps) => {
       :map-options="{
         center: { lat: -34.397, lng: 150.644 },
         zoom: 8,
+        mapId: 'DEMO_MAP_ID',
       }"
     >
       <ScriptGoogleMapsInfoWindow
         v-if="isInfoWindowShown"
         :options="{ position: { lat: -33.8688, lng: 151.2093 } }"
       >
-        info window content
+        <div>
+          info window content
+        </div>
       </ScriptGoogleMapsInfoWindow>
 
       <ScriptGoogleMapsMarker
@@ -83,6 +88,17 @@ whenever(() => googleMapsRef.value?.googleMaps, (googleMaps) => {
         </ScriptGoogleMapsInfoWindow>
       </ScriptGoogleMapsMarker>
 
+      <ScriptGoogleMapsAdvancedMarkerElement
+        v-if="isAdvancedMarkerElementShown"
+        :options="{
+          position: { lat: -33.8688, lng: 151.2093 },
+        }"
+      >
+        <ScriptGoogleMapsInfoWindow>
+          info window content
+        </ScriptGoogleMapsInfoWindow>
+      </ScriptGoogleMapsAdvancedMarkerElement>
+
       <ScriptGoogleMapsMarkerClusterer v-if="isMarkerClustererShown">
         <ScriptGoogleMapsMarker
           v-for="marker in markers"
@@ -185,6 +201,13 @@ whenever(() => googleMapsRef.value?.googleMaps, (googleMaps) => {
         {{ `${isMarkerShown ? 'Hide' : 'Show'} marker` }}
       </button>
 
+      <button
+        class="bg-[#ffa500] rounded-lg px-2 py-1"
+        @click="isAdvancedMarkerElementShown = !isAdvancedMarkerElementShown"
+      >
+        {{ `${isAdvancedMarkerElementShown ? 'Hide' : 'Show'} advanced marker element` }}
+      </button>
+
       <button
         class="bg-[#ffa500] rounded-lg px-2 py-1"
         @click="isMarkerClustererShown = !isMarkerClustererShown"
diff --git a/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue b/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
new file mode 100644
index 00000000..8b7e671b
--- /dev/null
+++ b/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
@@ -0,0 +1,115 @@
+<template>
+  <slot v-if="advancedMarkerElement" />
+</template>
+
+<script lang="ts">
+import type { InjectionKey, ShallowRef } from 'vue'
+import { inject, onUnmounted, provide, shallowRef } from 'vue'
+import { whenever } from '@vueuse/core'
+import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
+import { MARKER_CLUSTERER_INJECTION_KEY } from './ScriptGoogleMapsMarkerClusterer.vue'
+
+export const ADVANCED_MARKER_ELEMENT_INJECTION_KEY = Symbol('marker') as InjectionKey<{
+  advancedMarkerElement: ShallowRef<google.maps.marker.AdvancedMarkerElement | undefined>
+}>
+</script>
+
+<script setup lang="ts">
+const props = defineProps<{
+  options?: Omit<google.maps.marker.AdvancedMarkerElementOptions, 'map'>
+}>()
+
+const emit = defineEmits<{
+  (event:
+    | 'animation_changed'
+    | 'clickable_changed'
+    | 'cursor_changed'
+    | 'draggable_changed'
+    | 'flat_changed'
+    | 'icon_changed'
+    | 'position_changed'
+    | 'shape_changed'
+    | 'title_changed'
+    | 'visible_changed'
+    | 'zindex_changed'
+  ): void
+  (event:
+    | 'click'
+    | 'contextmenu'
+    | 'dblclick'
+    | 'drag'
+    | 'dragend'
+    | 'dragstart'
+    | 'mousedown'
+    | 'mouseout'
+    | 'mouseover'
+    | 'mouseup',
+    payload: google.maps.MapMouseEvent
+  ): void
+}>()
+
+const mapContext = inject(MAP_INJECTION_KEY, undefined)
+const markerClustererContext = inject(MARKER_CLUSTERER_INJECTION_KEY, undefined)
+
+const advancedMarkerElement = shallowRef<google.maps.marker.AdvancedMarkerElement | undefined>(undefined)
+
+whenever(() => mapContext?.map.value, async (map) => {
+  await mapContext!.mapsApi.value!.importLibrary('marker')
+
+  advancedMarkerElement.value = new google.maps.marker.AdvancedMarkerElement(props.options)
+
+  setupAdvancedMarkerElementEventListeners(advancedMarkerElement.value)
+
+  if (markerClustererContext?.markerClusterer.value) {
+    markerClustererContext.markerClusterer.value.addMarker(advancedMarkerElement.value)
+  }
+  else {
+    advancedMarkerElement.value.map = map
+  }
+}, {
+  immediate: true,
+  once: true,
+})
+
+onUnmounted(() => {
+  if (!advancedMarkerElement.value) {
+    return
+  }
+
+  google.maps.event.clearInstanceListeners(advancedMarkerElement.value)
+
+  if (markerClustererContext) {
+    markerClustererContext.markerClusterer.value?.removeMarker(advancedMarkerElement.value)
+  }
+  else {
+    advancedMarkerElement.value.map = null
+  }
+})
+
+provide(ADVANCED_MARKER_ELEMENT_INJECTION_KEY, { advancedMarkerElement })
+
+function setupAdvancedMarkerElementEventListeners(advancedMarkerElement: google.maps.marker.AdvancedMarkerElement) {
+  advancedMarkerElement.addListener('animation_changed', () => emit('animation_changed'))
+  advancedMarkerElement.addListener('clickable_changed', () => emit('clickable_changed'))
+  advancedMarkerElement.addListener('cursor_changed', () => emit('cursor_changed'))
+  advancedMarkerElement.addListener('draggable_changed', () => emit('draggable_changed'))
+  advancedMarkerElement.addListener('flat_changed', () => emit('flat_changed'))
+  advancedMarkerElement.addListener('icon_changed', () => emit('icon_changed'))
+  advancedMarkerElement.addListener('position_changed', () => emit('position_changed'))
+  advancedMarkerElement.addListener('shape_changed', () => emit('shape_changed'))
+  advancedMarkerElement.addListener('title_changed', () => emit('title_changed'))
+  advancedMarkerElement.addListener('visible_changed', () => emit('visible_changed'))
+  advancedMarkerElement.addListener('zindex_changed', () => emit('zindex_changed'))
+
+  advancedMarkerElement.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event))
+  advancedMarkerElement.addListener('contextmenu', (event: google.maps.MapMouseEvent) => emit('contextmenu', event))
+  advancedMarkerElement.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event))
+  advancedMarkerElement.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
+  advancedMarkerElement.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
+  advancedMarkerElement.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
+  advancedMarkerElement.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event))
+  advancedMarkerElement.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event))
+  advancedMarkerElement.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event))
+  advancedMarkerElement.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event))
+}
+</script>
diff --git a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
index 2123d387..612a03dc 100644
--- a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
+++ b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
@@ -1,10 +1,8 @@
 <template>
-  <div
-    v-show="false"
-    ref="info-window-container"
-    aria-hidden="true"
-  >
-    <slot />
+  <div class="info-window-container">
+    <div ref="info-window-container">
+      <slot />
+    </div>
   </div>
 </template>
 
@@ -13,6 +11,7 @@ import { inject, onUnmounted, useTemplateRef } from 'vue'
 import { whenever } from '@vueuse/core'
 import { MARKER_INJECTION_KEY } from './ScriptGoogleMapsMarker.vue'
 import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
+import { ADVANCED_MARKER_ELEMENT_INJECTION_KEY } from './ScriptGoogleMapsAdvancedMarkerElement.vue'
 
 const props = defineProps<{
   options?: google.maps.InfoWindowOptions
@@ -36,6 +35,7 @@ const emit = defineEmits<{
 
 const mapContext = inject(MAP_INJECTION_KEY, undefined)
 const markerContext = inject(MARKER_INJECTION_KEY, undefined)
+const advancedMarkerElementContext = inject(ADVANCED_MARKER_ELEMENT_INJECTION_KEY, undefined)
 
 const infoWindowContainer = useTemplateRef('info-window-container')
 
@@ -46,12 +46,10 @@ whenever(
     && infoWindowContainer.value,
   () => {
     infoWindow = new google.maps.InfoWindow({
-      content: infoWindowContainer.value!.firstElementChild || infoWindowContainer.value!.textContent,
+      content: infoWindowContainer.value,
       ...props.options,
     })
 
-    infoWindowContainer.value!.parentElement?.removeChild(infoWindowContainer.value!)
-
     setupInfoWindowEventListeners(infoWindow)
 
     if (markerContext?.marker.value) {
@@ -62,6 +60,14 @@ whenever(
         })
       })
     }
+    else if (advancedMarkerElementContext?.advancedMarkerElement.value) {
+      advancedMarkerElementContext.advancedMarkerElement.value.addListener('click', () => {
+        infoWindow!.open({
+          anchor: advancedMarkerElementContext.advancedMarkerElement.value,
+          map: mapContext!.map.value,
+        })
+      })
+    }
     else {
       infoWindow.setPosition(props.options?.position)
 
@@ -94,3 +100,9 @@ function setupInfoWindowEventListeners(infoWindow: google.maps.InfoWindow) {
   })
 }
 </script>
+
+<style scoped>
+.info-window-container {
+    display: none;
+}
+</style>

From 22bfd2466d48f1af95f144684bd9cf1fef2e2165 Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Fri, 18 Oct 2024 20:48:57 +0200
Subject: [PATCH 09/16] fix: add options reactivity to advanced marker element

---
 .../components/ScriptGoogleMapsAdvancedMarkerElement.vue  | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue b/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
index 8b7e671b..d46b317b 100644
--- a/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
+++ b/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
@@ -66,6 +66,14 @@ whenever(() => mapContext?.map.value, async (map) => {
   else {
     advancedMarkerElement.value.map = map
   }
+
+  whenever(() => props.options, (options) => {
+    for (const option in options) {
+      advancedMarkerElement.value![option as keyof typeof props.options] = options[option as keyof typeof props.options]
+    }
+  }, {
+    deep: true,
+  })
 }, {
   immediate: true,
   once: true,

From 1ae0c9bb6c964c736f125607e2bfba3b1fbbf868 Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Sun, 20 Oct 2024 18:32:15 +0200
Subject: [PATCH 10/16] feat: add pin element component

---
 .../pages/third-parties/google-maps/sfcs.vue  | 26 +++++++++++++
 .../components/ScriptGoogleMapsPinElement.vue | 39 +++++++++++++++++++
 2 files changed, 65 insertions(+)
 create mode 100644 src/runtime/components/ScriptGoogleMapsPinElement.vue

diff --git a/playground/pages/third-parties/google-maps/sfcs.vue b/playground/pages/third-parties/google-maps/sfcs.vue
index 0c95d6a6..cf58f3fb 100644
--- a/playground/pages/third-parties/google-maps/sfcs.vue
+++ b/playground/pages/third-parties/google-maps/sfcs.vue
@@ -12,6 +12,8 @@ const markerOptions = ref({
 
 const isAdvancedMarkerElementShown = ref(false)
 
+const isAdvancedMarkerElementWithPinElementShown = ref(false)
+
 const isMarkerClustererShown = ref(false)
 
 const markers = [
@@ -99,6 +101,23 @@ whenever(() => googleMapsRef.value?.googleMaps, (googleMaps) => {
         </ScriptGoogleMapsInfoWindow>
       </ScriptGoogleMapsAdvancedMarkerElement>
 
+      <ScriptGoogleMapsAdvancedMarkerElement
+        v-if="isAdvancedMarkerElementWithPinElementShown"
+        :options="{
+          position: { lat: -33.8688, lng: 151.2093 },
+        }"
+      >
+        <ScriptGoogleMapsPinElement
+          :options="{
+            scale: 1.5,
+          }"
+        />
+
+        <ScriptGoogleMapsInfoWindow>
+          info window content
+        </ScriptGoogleMapsInfoWindow>
+      </ScriptGoogleMapsAdvancedMarkerElement>
+
       <ScriptGoogleMapsMarkerClusterer v-if="isMarkerClustererShown">
         <ScriptGoogleMapsMarker
           v-for="marker in markers"
@@ -208,6 +227,13 @@ whenever(() => googleMapsRef.value?.googleMaps, (googleMaps) => {
         {{ `${isAdvancedMarkerElementShown ? 'Hide' : 'Show'} advanced marker element` }}
       </button>
 
+      <button
+        class="bg-[#ffa500] rounded-lg px-2 py-1"
+        @click="isAdvancedMarkerElementWithPinElementShown = !isAdvancedMarkerElementWithPinElementShown"
+      >
+        {{ `${isAdvancedMarkerElementWithPinElementShown ? 'Hide' : 'Show'} advanced marker element with pin element` }}
+      </button>
+
       <button
         class="bg-[#ffa500] rounded-lg px-2 py-1"
         @click="isMarkerClustererShown = !isMarkerClustererShown"
diff --git a/src/runtime/components/ScriptGoogleMapsPinElement.vue b/src/runtime/components/ScriptGoogleMapsPinElement.vue
new file mode 100644
index 00000000..cd0e6ece
--- /dev/null
+++ b/src/runtime/components/ScriptGoogleMapsPinElement.vue
@@ -0,0 +1,39 @@
+<template>
+</template>
+
+<script setup lang="ts">
+import { inject, shallowRef } from 'vue'
+import { whenever } from '@vueuse/core'
+import { MAP_INJECTION_KEY } from './ScriptGoogleMaps.vue'
+import { ADVANCED_MARKER_ELEMENT_INJECTION_KEY } from './ScriptGoogleMapsAdvancedMarkerElement.vue'
+
+const props = defineProps<{
+  options?: Omit<google.maps.marker.PinElementOptions, 'map'>
+}>()
+
+const mapContext = inject(MAP_INJECTION_KEY, undefined)
+const advancedMarkerElementContext = inject(ADVANCED_MARKER_ELEMENT_INJECTION_KEY, undefined)
+
+const pinElement = shallowRef<google.maps.marker.PinElement | undefined>(undefined)
+
+whenever(() => mapContext?.map.value && advancedMarkerElementContext?.advancedMarkerElement.value, async () => {
+  await mapContext!.mapsApi.value!.importLibrary('marker')
+
+  pinElement.value = new google.maps.marker.PinElement(props.options)
+
+  if (advancedMarkerElementContext?.advancedMarkerElement.value) {
+    advancedMarkerElementContext.advancedMarkerElement.value.content = pinElement.value.element
+  }
+
+  whenever(() => props.options, (options) => {
+    for (const option in options) {
+      pinElement.value![option as keyof typeof props.options] = options[option as keyof typeof props.options]
+    }
+  }, {
+    deep: true,
+  })
+}, {
+  immediate: true,
+  once: true,
+})
+</script>

From fae7d865f98f976a87c59bb21d4c7a9be83f4828 Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Tue, 22 Oct 2024 19:21:10 +0200
Subject: [PATCH 11/16] refactor: modify event listeners registration for
 advanced marker element

---
 .../ScriptGoogleMapsAdvancedMarkerElement.vue | 84 ++++++++-----------
 1 file changed, 36 insertions(+), 48 deletions(-)

diff --git a/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue b/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
index d46b317b..f51a18d6 100644
--- a/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
+++ b/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
@@ -19,33 +19,36 @@ const props = defineProps<{
   options?: Omit<google.maps.marker.AdvancedMarkerElementOptions, 'map'>
 }>()
 
+const eventsWithoutPayload = [
+  'animation_changed',
+  'clickable_changed',
+  'cursor_changed',
+  'draggable_changed',
+  'flat_changed',
+  'icon_changed',
+  'position_changed',
+  'shape_changed',
+  'title_changed',
+  'visible_changed',
+  'zindex_changed',
+] as const
+
+const eventsWithMapMouseEventPayload = [
+  'click',
+  'contextmenu',
+  'dblclick',
+  'drag',
+  'dragend',
+  'dragstart',
+  'mousedown',
+  'mouseout',
+  'mouseover',
+  'mouseup',
+] as const
+
 const emit = defineEmits<{
-  (event:
-    | 'animation_changed'
-    | 'clickable_changed'
-    | 'cursor_changed'
-    | 'draggable_changed'
-    | 'flat_changed'
-    | 'icon_changed'
-    | 'position_changed'
-    | 'shape_changed'
-    | 'title_changed'
-    | 'visible_changed'
-    | 'zindex_changed'
-  ): void
-  (event:
-    | 'click'
-    | 'contextmenu'
-    | 'dblclick'
-    | 'drag'
-    | 'dragend'
-    | 'dragstart'
-    | 'mousedown'
-    | 'mouseout'
-    | 'mouseover'
-    | 'mouseup',
-    payload: google.maps.MapMouseEvent
-  ): void
+  (event: typeof eventsWithoutPayload[number]): void
+  (event: typeof eventsWithMapMouseEventPayload[number], payload: google.maps.MapMouseEvent): void
 }>()
 
 const mapContext = inject(MAP_INJECTION_KEY, undefined)
@@ -97,27 +100,12 @@ onUnmounted(() => {
 provide(ADVANCED_MARKER_ELEMENT_INJECTION_KEY, { advancedMarkerElement })
 
 function setupAdvancedMarkerElementEventListeners(advancedMarkerElement: google.maps.marker.AdvancedMarkerElement) {
-  advancedMarkerElement.addListener('animation_changed', () => emit('animation_changed'))
-  advancedMarkerElement.addListener('clickable_changed', () => emit('clickable_changed'))
-  advancedMarkerElement.addListener('cursor_changed', () => emit('cursor_changed'))
-  advancedMarkerElement.addListener('draggable_changed', () => emit('draggable_changed'))
-  advancedMarkerElement.addListener('flat_changed', () => emit('flat_changed'))
-  advancedMarkerElement.addListener('icon_changed', () => emit('icon_changed'))
-  advancedMarkerElement.addListener('position_changed', () => emit('position_changed'))
-  advancedMarkerElement.addListener('shape_changed', () => emit('shape_changed'))
-  advancedMarkerElement.addListener('title_changed', () => emit('title_changed'))
-  advancedMarkerElement.addListener('visible_changed', () => emit('visible_changed'))
-  advancedMarkerElement.addListener('zindex_changed', () => emit('zindex_changed'))
-
-  advancedMarkerElement.addListener('click', (event: google.maps.MapMouseEvent) => emit('click', event))
-  advancedMarkerElement.addListener('contextmenu', (event: google.maps.MapMouseEvent) => emit('contextmenu', event))
-  advancedMarkerElement.addListener('dblclick', (event: google.maps.MapMouseEvent) => emit('dblclick', event))
-  advancedMarkerElement.addListener('drag', (event: google.maps.MapMouseEvent) => emit('drag', event))
-  advancedMarkerElement.addListener('dragend', (event: google.maps.MapMouseEvent) => emit('dragend', event))
-  advancedMarkerElement.addListener('dragstart', (event: google.maps.MapMouseEvent) => emit('dragstart', event))
-  advancedMarkerElement.addListener('mousedown', (event: google.maps.MapMouseEvent) => emit('mousedown', event))
-  advancedMarkerElement.addListener('mouseout', (event: google.maps.MapMouseEvent) => emit('mouseout', event))
-  advancedMarkerElement.addListener('mouseover', (event: google.maps.MapMouseEvent) => emit('mouseover', event))
-  advancedMarkerElement.addListener('mouseup', (event: google.maps.MapMouseEvent) => emit('mouseup', event))
+  eventsWithoutPayload.forEach((event) => {
+    advancedMarkerElement.addListener(event, () => emit(event))
+  })
+
+  eventsWithMapMouseEventPayload.forEach((event) => {
+    advancedMarkerElement.addListener(event, (payload: google.maps.MapMouseEvent) => emit(event, payload))
+  })
 }
 </script>

From f7bc9893c5e7be42a051127a92808edf79bba897 Mon Sep 17 00:00:00 2001
From: Damian Glowala <damian.glowala.rebkow@gmail.com>
Date: Fri, 25 Oct 2024 08:35:45 +0200
Subject: [PATCH 12/16] refactor: use `mapsApi` for instantiation and clearing
 event listeners

---
 .../ScriptGoogleMapsAdvancedMarkerElement.vue | 10 ++---
 .../components/ScriptGoogleMapsCircle.vue     | 10 ++---
 .../ScriptGoogleMapsHeatmapLayer.vue          |  2 +-
 .../components/ScriptGoogleMapsInfoWindow.vue |  9 ++--
 .../components/ScriptGoogleMapsMarker.vue     | 14 +++----
 .../ScriptGoogleMapsMarkerClusterer.vue       |  4 +-
 .../components/ScriptGoogleMapsPinElement.vue | 42 +++++++++++--------
 .../components/ScriptGoogleMapsPolygon.vue    | 10 ++---
 .../components/ScriptGoogleMapsPolyline.vue   | 10 ++---
 .../components/ScriptGoogleMapsRectangle.vue  | 10 ++---
 10 files changed, 64 insertions(+), 57 deletions(-)

diff --git a/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue b/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
index f51a18d6..f2c2963f 100644
--- a/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
+++ b/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
@@ -56,10 +56,10 @@ const markerClustererContext = inject(MARKER_CLUSTERER_INJECTION_KEY, undefined)
 
 const advancedMarkerElement = shallowRef<google.maps.marker.AdvancedMarkerElement | undefined>(undefined)
 
-whenever(() => mapContext?.map.value, async (map) => {
+whenever(() => mapContext?.map.value && mapContext.mapsApi.value, async () => {
   await mapContext!.mapsApi.value!.importLibrary('marker')
 
-  advancedMarkerElement.value = new google.maps.marker.AdvancedMarkerElement(props.options)
+  advancedMarkerElement.value = new mapContext!.mapsApi.value!.marker.AdvancedMarkerElement(props.options)
 
   setupAdvancedMarkerElementEventListeners(advancedMarkerElement.value)
 
@@ -67,7 +67,7 @@ whenever(() => mapContext?.map.value, async (map) => {
     markerClustererContext.markerClusterer.value.addMarker(advancedMarkerElement.value)
   }
   else {
-    advancedMarkerElement.value.map = map
+    advancedMarkerElement.value.map = mapContext!.map.value
   }
 
   whenever(() => props.options, (options) => {
@@ -83,11 +83,11 @@ whenever(() => mapContext?.map.value, async (map) => {
 })
 
 onUnmounted(() => {
-  if (!advancedMarkerElement.value) {
+  if (!advancedMarkerElement.value || !mapContext?.mapsApi.value) {
     return
   }
 
-  google.maps.event.clearInstanceListeners(advancedMarkerElement.value)
+  mapContext.mapsApi.value.event.clearInstanceListeners(advancedMarkerElement.value)
 
   if (markerClustererContext) {
     markerClustererContext.markerClusterer.value?.removeMarker(advancedMarkerElement.value)
diff --git a/src/runtime/components/ScriptGoogleMapsCircle.vue b/src/runtime/components/ScriptGoogleMapsCircle.vue
index 2976f366..0c45cb0c 100644
--- a/src/runtime/components/ScriptGoogleMapsCircle.vue
+++ b/src/runtime/components/ScriptGoogleMapsCircle.vue
@@ -38,9 +38,9 @@ const mapContext = inject(MAP_INJECTION_KEY, undefined)
 
 let circle: google.maps.Circle | undefined = undefined
 
-whenever(() => mapContext?.map.value, (map) => {
-  circle = new google.maps.Circle({
-    map,
+whenever(() => mapContext?.map.value && mapContext.mapsApi.value, () => {
+  circle = new mapContext!.mapsApi.value!.Circle({
+    map: mapContext!.map.value,
     ...props.options,
   })
 
@@ -57,11 +57,11 @@ whenever(() => mapContext?.map.value, (map) => {
 })
 
 onUnmounted(() => {
-  if (!circle) {
+  if (!circle || !mapContext?.mapsApi.value) {
     return
   }
 
-  google.maps.event.clearInstanceListeners(circle)
+  mapContext.mapsApi.value.event.clearInstanceListeners(circle)
 
   circle.setMap(null)
 })
diff --git a/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue b/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue
index e5afc6f3..7250968b 100644
--- a/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue
+++ b/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue
@@ -17,7 +17,7 @@ let heatmapLayer: google.maps.visualization.HeatmapLayer | undefined = undefined
 whenever(() => mapContext?.map.value && mapContext.mapsApi.value, async () => {
   await mapContext!.mapsApi.value!.importLibrary('visualization')
 
-  heatmapLayer = new google.maps.visualization.HeatmapLayer({
+  heatmapLayer = new mapContext!.mapsApi.value!.visualization.HeatmapLayer({
     map: mapContext!.map.value!,
     ...props.options,
   })
diff --git a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
index 612a03dc..39c3f9a5 100644
--- a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
+++ b/src/runtime/components/ScriptGoogleMapsInfoWindow.vue
@@ -43,9 +43,10 @@ let infoWindow: google.maps.InfoWindow | undefined = undefined
 
 whenever(
   () => mapContext?.map.value
+    && mapContext.mapsApi.value
     && infoWindowContainer.value,
   () => {
-    infoWindow = new google.maps.InfoWindow({
+    infoWindow = new mapContext!.mapsApi.value!.InfoWindow({
       content: infoWindowContainer.value,
       ...props.options,
     })
@@ -71,7 +72,7 @@ whenever(
     else {
       infoWindow.setPosition(props.options?.position)
 
-      infoWindow.open(mapContext?.map.value)
+      infoWindow.open(mapContext!.map.value)
     }
 
     whenever(() => props.options, (options) => {
@@ -85,11 +86,11 @@ whenever(
   })
 
 onUnmounted(() => {
-  if (!infoWindow) {
+  if (!infoWindow || !mapContext?.mapsApi.value) {
     return
   }
 
-  google.maps.event.clearInstanceListeners(infoWindow)
+  mapContext.mapsApi.value.event.clearInstanceListeners(infoWindow)
 
   infoWindow.close()
 })
diff --git a/src/runtime/components/ScriptGoogleMapsMarker.vue b/src/runtime/components/ScriptGoogleMapsMarker.vue
index 79550d67..48e63d49 100644
--- a/src/runtime/components/ScriptGoogleMapsMarker.vue
+++ b/src/runtime/components/ScriptGoogleMapsMarker.vue
@@ -56,8 +56,8 @@ const markerClustererContext = inject(MARKER_CLUSTERER_INJECTION_KEY, undefined)
 
 const marker = shallowRef<google.maps.Marker | undefined>(undefined)
 
-whenever(() => mapContext?.map.value, (map) => {
-  marker.value = new google.maps.Marker(props.options)
+whenever(() => mapContext?.map.value && mapContext.mapsApi.value, () => {
+  marker.value = new mapContext!.mapsApi.value!.Marker(props.options)
 
   setupMarkerEventListeners(marker.value)
 
@@ -65,7 +65,7 @@ whenever(() => mapContext?.map.value, (map) => {
     markerClustererContext.markerClusterer.value.addMarker(marker.value)
   }
   else {
-    marker.value.setMap(map)
+    marker.value.setMap(mapContext!.map.value!)
   }
 
   whenever(() => props.options, (options) => {
@@ -79,14 +79,14 @@ whenever(() => mapContext?.map.value, (map) => {
 })
 
 onUnmounted(() => {
-  if (!marker.value) {
+  if (!marker.value || !mapContext?.mapsApi.value) {
     return
   }
 
-  google.maps.event.clearInstanceListeners(marker.value)
+  mapContext.mapsApi.value.event.clearInstanceListeners(marker.value)
 
-  if (markerClustererContext) {
-    markerClustererContext.markerClusterer.value?.removeMarker(marker.value)
+  if (markerClustererContext?.markerClusterer.value) {
+    markerClustererContext.markerClusterer.value.removeMarker(marker.value)
   }
   else {
     marker.value.setMap(null)
diff --git a/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue b/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
index c4428cb2..2f6bd7cf 100644
--- a/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
+++ b/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
@@ -45,11 +45,11 @@ whenever(() => mapContext?.map.value, (map) => {
 })
 
 onUnmounted(() => {
-  if (!markerClusterer.value) {
+  if (!markerClusterer.value || !mapContext?.mapsApi.value) {
     return
   }
 
-  google.maps.event.clearInstanceListeners(markerClusterer.value)
+  mapContext.mapsApi.value.event.clearInstanceListeners(markerClusterer.value)
 
   markerClusterer.value.setMap(null)
 })
diff --git a/src/runtime/components/ScriptGoogleMapsPinElement.vue b/src/runtime/components/ScriptGoogleMapsPinElement.vue
index cd0e6ece..db3bc430 100644
--- a/src/runtime/components/ScriptGoogleMapsPinElement.vue
+++ b/src/runtime/components/ScriptGoogleMapsPinElement.vue
@@ -16,24 +16,30 @@ const advancedMarkerElementContext = inject(ADVANCED_MARKER_ELEMENT_INJECTION_KE
 
 const pinElement = shallowRef<google.maps.marker.PinElement | undefined>(undefined)
 
-whenever(() => mapContext?.map.value && advancedMarkerElementContext?.advancedMarkerElement.value, async () => {
-  await mapContext!.mapsApi.value!.importLibrary('marker')
-
-  pinElement.value = new google.maps.marker.PinElement(props.options)
-
-  if (advancedMarkerElementContext?.advancedMarkerElement.value) {
-    advancedMarkerElementContext.advancedMarkerElement.value.content = pinElement.value.element
-  }
-
-  whenever(() => props.options, (options) => {
-    for (const option in options) {
-      pinElement.value![option as keyof typeof props.options] = options[option as keyof typeof props.options]
+whenever(
+  () =>
+    mapContext?.map.value
+    && mapContext.mapsApi.value
+    && advancedMarkerElementContext?.advancedMarkerElement.value,
+  async () => {
+    await mapContext!.mapsApi.value!.importLibrary('marker')
+
+    pinElement.value = new mapContext!.mapsApi.value!.marker.PinElement(props.options)
+
+    if (advancedMarkerElementContext?.advancedMarkerElement.value) {
+      advancedMarkerElementContext.advancedMarkerElement.value.content = pinElement.value.element
     }
+
+    whenever(() => props.options, (options) => {
+      for (const option in options) {
+        pinElement.value![option as keyof typeof props.options] = options[option as keyof typeof props.options]
+      }
+    }, {
+      deep: true,
+    })
   }, {
-    deep: true,
-  })
-}, {
-  immediate: true,
-  once: true,
-})
+    immediate: true,
+    once: true,
+  },
+)
 </script>
diff --git a/src/runtime/components/ScriptGoogleMapsPolygon.vue b/src/runtime/components/ScriptGoogleMapsPolygon.vue
index 7d84719d..921a8383 100644
--- a/src/runtime/components/ScriptGoogleMapsPolygon.vue
+++ b/src/runtime/components/ScriptGoogleMapsPolygon.vue
@@ -36,9 +36,9 @@ const mapContext = inject(MAP_INJECTION_KEY, undefined)
 
 let polygon: google.maps.Polygon | undefined = undefined
 
-whenever(() => mapContext?.map.value, (map) => {
-  polygon = new google.maps.Polygon({
-    map,
+whenever(() => mapContext?.map.value && mapContext.mapsApi.value, () => {
+  polygon = new mapContext!.mapsApi.value!.Polygon({
+    map: mapContext!.map.value,
     ...props.options,
   })
 
@@ -55,11 +55,11 @@ whenever(() => mapContext?.map.value, (map) => {
 })
 
 onUnmounted(() => {
-  if (!polygon) {
+  if (!polygon || !mapContext?.mapsApi.value) {
     return
   }
 
-  google.maps.event.clearInstanceListeners(polygon)
+  mapContext.mapsApi.value.event.clearInstanceListeners(polygon)
 
   polygon.setMap(null)
 })
diff --git a/src/runtime/components/ScriptGoogleMapsPolyline.vue b/src/runtime/components/ScriptGoogleMapsPolyline.vue
index 7aeca4ee..2448d16d 100644
--- a/src/runtime/components/ScriptGoogleMapsPolyline.vue
+++ b/src/runtime/components/ScriptGoogleMapsPolyline.vue
@@ -36,9 +36,9 @@ const mapContext = inject(MAP_INJECTION_KEY, undefined)
 
 let polyline: google.maps.Polyline | undefined = undefined
 
-whenever(() => mapContext?.map.value, (map) => {
-  polyline = new google.maps.Polyline({
-    map,
+whenever(() => mapContext?.map.value && mapContext.mapsApi.value, () => {
+  polyline = new mapContext!.mapsApi.value!.Polyline({
+    map: mapContext!.map.value,
     ...props.options,
   })
 
@@ -55,11 +55,11 @@ whenever(() => mapContext?.map.value, (map) => {
 })
 
 onUnmounted(() => {
-  if (!polyline) {
+  if (!polyline || !mapContext?.mapsApi.value) {
     return
   }
 
-  google.maps.event.clearInstanceListeners(polyline)
+  mapContext.mapsApi.value.event.clearInstanceListeners(polyline)
 
   polyline.setMap(null)
 })
diff --git a/src/runtime/components/ScriptGoogleMapsRectangle.vue b/src/runtime/components/ScriptGoogleMapsRectangle.vue
index 451adea7..fd2d0609 100644
--- a/src/runtime/components/ScriptGoogleMapsRectangle.vue
+++ b/src/runtime/components/ScriptGoogleMapsRectangle.vue
@@ -37,9 +37,9 @@ const mapContext = inject(MAP_INJECTION_KEY, undefined)
 
 let rectangle: google.maps.Rectangle | undefined = undefined
 
-whenever(() => mapContext?.map.value, (map) => {
-  rectangle = new google.maps.Rectangle({
-    map,
+whenever(() => mapContext?.map.value && mapContext.mapsApi.value, () => {
+  rectangle = new mapContext!.mapsApi.value!.Rectangle({
+    map: mapContext!.map.value,
     ...props.options,
   })
 
@@ -56,11 +56,11 @@ whenever(() => mapContext?.map.value, (map) => {
 })
 
 onUnmounted(() => {
-  if (!rectangle) {
+  if (!rectangle || !mapContext?.mapsApi.value) {
     return
   }
 
-  google.maps.event.clearInstanceListeners(rectangle)
+  mapContext.mapsApi.value.event.clearInstanceListeners(rectangle)
 
   rectangle.setMap(null)
 })

From 397af2bc4f213bd4ffa60c7e60610e54e564b79e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Damian=20G=C5=82owala?= <damian.glowala.rebkow@gmail.com>
Date: Fri, 25 Oct 2024 08:41:11 +0200
Subject: [PATCH 13/16] chore: sync dependencies

---
 package.json   |   4 +-
 pnpm-lock.yaml | 650 ++++++++++++++++++++++++++++++++++++-------------
 2 files changed, 483 insertions(+), 171 deletions(-)

diff --git a/package.json b/package.json
index 52222b08..b02245a7 100644
--- a/package.json
+++ b/package.json
@@ -67,8 +67,8 @@
   },
   "dependencies": {
     "@googlemaps/markerclusterer": "^2.5.3",
-    "@nuxt/devtools-kit": "^1.5.1",
-    "@nuxt/devtools-ui-kit": "^1.5.1",
+    "@nuxt/devtools-kit": "^1.6.0",
+    "@nuxt/devtools-ui-kit": "^1.6.0",
     "@nuxt/kit": "^3.13.2",
     "@stripe/stripe-js": "^4.8.0",
     "@types/google.maps": "^3.58.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index d74dda05..c05f0038 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -26,14 +26,14 @@ importers:
         specifier: ^2.5.3
         version: 2.5.3
       '@nuxt/devtools-kit':
-        specifier: ^1.5.1
-        version: 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+        specifier: ^1.6.0
+        version: 1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-ui-kit':
-        specifier: ^1.5.1
-        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
+        specifier: ^1.6.0
+        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0)
       '@nuxt/kit':
         specifier: ^3.13.2
-        version: 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+        version: 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
       '@stripe/stripe-js':
         specifier: ^4.8.0
         version: 4.8.0
@@ -99,7 +99,7 @@ importers:
         version: 1.5.4
       unimport:
         specifier: ^3.13.0
-        version: 3.13.1(rollup@4.21.3)(webpack-sources@3.2.3)
+        version: 3.13.1(rollup@3.29.4)(webpack-sources@3.2.3)
       unplugin:
         specifier: ^1.14.1
         version: 1.14.1(webpack-sources@3.2.3)
@@ -115,10 +115,10 @@ importers:
         version: 0.6.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)
       '@nuxt/module-builder':
         specifier: ^0.8.4
-        version: 0.8.4(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(nuxi@3.14.0)(typescript@5.6.3)(webpack-sources@3.2.3)
+        version: 0.8.4(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(nuxi@3.14.0)(typescript@5.6.3)(webpack-sources@3.2.3)
       '@nuxt/test-utils':
         specifier: 3.14.3
-        version: 3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+        version: 3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@types/semver':
         specifier: ^7.5.8
         version: 7.5.8
@@ -148,7 +148,7 @@ importers:
         version: 1.1.0
       nuxt:
         specifier: ^3.13.2
-        version: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+        version: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       nuxt-scripts-devtools:
         specifier: workspace:*
         version: link:client
@@ -175,16 +175,16 @@ importers:
         version: 1.2.3
       '@nuxt/devtools-kit':
         specifier: ^1.6.0
-        version: 1.6.0(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+        version: 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-ui-kit':
         specifier: ^1.6.0
-        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
+        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
       '@nuxt/kit':
         specifier: ^3.13.2
-        version: 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
+        version: 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       nuxt:
         specifier: ^3.13.2
-        version: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+        version: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       vue:
         specifier: ^3.5.9
         version: 3.5.12(typescript@5.6.3)
@@ -217,7 +217,7 @@ importers:
         version: link:..
       '@nuxt/ui-pro':
         specifier: ^1.4.3
-        version: 1.4.4(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+        version: 1.4.4(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@nuxthq/studio':
         specifier: ^2.1.1
         version: 2.1.1(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
@@ -244,7 +244,7 @@ importers:
         version: link:..
       '@nuxt/ui':
         specifier: ^2.18.6
-        version: 2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+        version: 2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       nuxt-scripts-devtools:
         specifier: workspace:*
         version: link:../client
@@ -8058,10 +8058,10 @@ snapshots:
 
   '@nuxt/devalue@2.0.2': {}
 
-  '@nuxt/devtools-kit@1.4.2(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/devtools-kit@1.4.2(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
       execa: 7.2.0
       vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
@@ -8070,12 +8070,12 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/devtools-kit@1.4.2(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/devtools-kit@1.4.2(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@4.24.0)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
       execa: 7.2.0
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - magicast
       - rollup
@@ -8094,10 +8094,10 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
       execa: 7.2.0
       vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
@@ -8106,10 +8106,10 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
       execa: 7.2.0
       vite: 5.4.9(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
@@ -8118,12 +8118,12 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@4.24.0)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
       execa: 7.2.0
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - magicast
       - rollup
@@ -8142,28 +8142,28 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
+  '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0)':
     dependencies:
       '@iconify-json/carbon': 1.2.3
       '@iconify-json/logos': 1.2.3
       '@iconify-json/ri': 1.2.1
       '@iconify-json/tabler': 1.2.5
-      '@nuxt/devtools': 1.6.0(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
-      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/devtools': 1.6.0(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
       '@unocss/core': 0.62.4
-      '@unocss/nuxt': 0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
+      '@unocss/nuxt': 0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0)
       '@unocss/preset-attributify': 0.62.4
       '@unocss/preset-icons': 0.62.4
       '@unocss/preset-mini': 0.62.4
       '@unocss/reset': 0.62.4
       '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
       '@vueuse/integrations': 11.1.0(focus-trap@7.6.0)(fuse.js@7.0.0)(vue@3.5.12(typescript@5.6.3))
-      '@vueuse/nuxt': 11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.21.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@vueuse/nuxt': 11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@3.29.4)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       defu: 6.1.4
       focus-trap: 7.6.0
       splitpanes: 3.1.5
-      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0))(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
       v-lazy-show: 0.2.4(@vue/compiler-core@3.5.12)
     transitivePeerDependencies:
       - '@unocss/webpack'
@@ -8190,28 +8190,28 @@ snapshots:
       - webpack
       - webpack-sources
 
-  '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
+  '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
     dependencies:
       '@iconify-json/carbon': 1.2.3
       '@iconify-json/logos': 1.2.3
       '@iconify-json/ri': 1.2.1
       '@iconify-json/tabler': 1.2.5
-      '@nuxt/devtools': 1.6.0(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
-      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
+      '@nuxt/devtools': 1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       '@unocss/core': 0.62.4
-      '@unocss/nuxt': 0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
+      '@unocss/nuxt': 0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
       '@unocss/preset-attributify': 0.62.4
       '@unocss/preset-icons': 0.62.4
       '@unocss/preset-mini': 0.62.4
       '@unocss/reset': 0.62.4
       '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
       '@vueuse/integrations': 11.1.0(focus-trap@7.6.0)(fuse.js@7.0.0)(vue@3.5.12(typescript@5.6.3))
-      '@vueuse/nuxt': 11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@vueuse/nuxt': 11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.21.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       defu: 6.1.4
       focus-trap: 7.6.0
       splitpanes: 3.1.5
-      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
       v-lazy-show: 0.2.4(@vue/compiler-core@3.5.12)
     transitivePeerDependencies:
       - '@unocss/webpack'
@@ -8264,12 +8264,12 @@ snapshots:
       rc9: 2.1.2
       semver: 7.6.3
 
-  '@nuxt/devtools@1.4.2(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/devtools@1.4.2(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@antfu/utils': 0.7.10
-      '@nuxt/devtools-kit': 1.4.2(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.4.2(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-wizard': 1.4.2
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
       '@vue/devtools-core': 7.4.4(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
       '@vue/devtools-kit': 7.4.4
       birpc: 0.2.17
@@ -8298,9 +8298,9 @@ snapshots:
       simple-git: 3.26.0
       sirv: 2.0.4
       tinyglobby: 0.2.6
-      unimport: 3.13.1(rollup@4.21.3)(webpack-sources@3.2.3)
+      unimport: 3.13.1(rollup@3.29.4)(webpack-sources@3.2.3)
       vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
       vite-plugin-vue-inspector: 5.2.0(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
       which: 3.0.1
       ws: 8.18.0
@@ -8312,13 +8312,13 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/devtools@1.4.2(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/devtools@1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@antfu/utils': 0.7.10
-      '@nuxt/devtools-kit': 1.4.2(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.4.2(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-wizard': 1.4.2
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
-      '@vue/devtools-core': 7.4.4(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@vue/devtools-core': 7.4.4(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
       '@vue/devtools-kit': 7.4.4
       birpc: 0.2.17
       consola: 3.2.3
@@ -8346,10 +8346,10 @@ snapshots:
       simple-git: 3.26.0
       sirv: 2.0.4
       tinyglobby: 0.2.6
-      unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3)
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      vite-plugin-vue-inspector: 5.2.0(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      unimport: 3.13.1(rollup@4.21.3)(webpack-sources@3.2.3)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      vite-plugin-vue-inspector: 5.2.0(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
       which: 3.0.1
       ws: 8.18.0
     transitivePeerDependencies:
@@ -8396,7 +8396,7 @@ snapshots:
       tinyglobby: 0.2.6
       unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3)
       vite: 5.4.9(@types/node@22.7.5)(terser@5.34.1)
-      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))
       vite-plugin-vue-inspector: 5.2.0(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))
       which: 3.0.1
       ws: 8.18.0
@@ -8408,12 +8408,12 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/devtools@1.6.0(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@antfu/utils': 0.7.10
-      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-wizard': 1.6.0
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
       '@vue/devtools-core': 7.4.4(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
       '@vue/devtools-kit': 7.4.4
       birpc: 0.2.19
@@ -8442,9 +8442,9 @@ snapshots:
       simple-git: 3.27.0
       sirv: 2.0.4
       tinyglobby: 0.2.9
-      unimport: 3.13.1(rollup@4.21.3)(webpack-sources@3.2.3)
+      unimport: 3.13.1(rollup@3.29.4)(webpack-sources@3.2.3)
       vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
       vite-plugin-vue-inspector: 5.1.3(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
       which: 3.0.1
       ws: 8.18.0
@@ -8456,13 +8456,13 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/devtools@1.6.0(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@antfu/utils': 0.7.10
-      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-wizard': 1.6.0
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
-      '@vue/devtools-core': 7.4.4(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@vue/devtools-core': 7.4.4(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
       '@vue/devtools-kit': 7.4.4
       birpc: 0.2.19
       consola: 3.2.3
@@ -8490,10 +8490,10 @@ snapshots:
       simple-git: 3.27.0
       sirv: 2.0.4
       tinyglobby: 0.2.9
-      unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3)
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      vite-plugin-vue-inspector: 5.1.3(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      unimport: 3.13.1(rollup@4.21.3)(webpack-sources@3.2.3)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      vite-plugin-vue-inspector: 5.1.3(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
       which: 3.0.1
       ws: 8.18.0
     transitivePeerDependencies:
@@ -8579,14 +8579,14 @@ snapshots:
       - vite
       - webpack-sources
 
-  '@nuxt/icon@1.5.6(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/icon@1.5.6(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@iconify/collections': 1.0.471
       '@iconify/types': 2.0.0
       '@iconify/utils': 2.1.33
       '@iconify/vue': 4.1.3-beta.1(vue@3.5.12(typescript@5.6.3))
-      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
       consola: 3.2.3
       local-pkg: 0.5.0
       mlly: 1.7.2
@@ -8659,6 +8659,34 @@ snapshots:
       - uWebSockets.js
       - webpack-sources
 
+  '@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)':
+    dependencies:
+      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
+      c12: 1.11.2(magicast@0.3.5)
+      consola: 3.2.3
+      defu: 6.1.4
+      destr: 2.0.3
+      globby: 14.0.2
+      hash-sum: 2.0.0
+      ignore: 5.3.2
+      jiti: 1.21.6
+      klona: 2.0.6
+      knitwork: 1.1.0
+      mlly: 1.7.1
+      pathe: 1.1.2
+      pkg-types: 1.2.0
+      scule: 1.3.0
+      semver: 7.6.3
+      ufo: 1.5.4
+      unctx: 2.3.1(webpack-sources@3.2.3)
+      unimport: 3.12.0(rollup@3.29.4)(webpack-sources@3.2.3)
+      untyped: 1.4.2
+    transitivePeerDependencies:
+      - magicast
+      - rollup
+      - supports-color
+      - webpack-sources
+
   '@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
@@ -8715,9 +8743,9 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/module-builder@0.8.4(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(nuxi@3.14.0)(typescript@5.6.3)(webpack-sources@3.2.3)':
+  '@nuxt/module-builder@0.8.4(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(nuxi@3.14.0)(typescript@5.6.3)(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
       citty: 0.1.6
       consola: 3.2.3
       defu: 6.1.4
@@ -8735,6 +8763,25 @@ snapshots:
       - vue-tsc
       - webpack-sources
 
+  '@nuxt/schema@3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)':
+    dependencies:
+      compatx: 0.1.8
+      consola: 3.2.3
+      defu: 6.1.4
+      hookable: 5.5.3
+      pathe: 1.1.2
+      pkg-types: 1.2.1
+      scule: 1.3.0
+      std-env: 3.7.0
+      ufo: 1.5.4
+      uncrypto: 0.1.3
+      unimport: 3.13.1(rollup@3.29.4)(webpack-sources@3.2.3)
+      untyped: 1.5.1
+    transitivePeerDependencies:
+      - rollup
+      - supports-color
+      - webpack-sources
+
   '@nuxt/schema@3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)':
     dependencies:
       compatx: 0.1.8
@@ -8773,6 +8820,32 @@ snapshots:
       - supports-color
       - webpack-sources
 
+  '@nuxt/telemetry@2.6.0(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)':
+    dependencies:
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      ci-info: 4.0.0
+      consola: 3.2.3
+      create-require: 1.1.1
+      defu: 6.1.4
+      destr: 2.0.3
+      dotenv: 16.4.5
+      git-url-parse: 15.0.0
+      is-docker: 3.0.0
+      jiti: 1.21.6
+      mri: 1.2.0
+      nanoid: 5.0.7
+      ofetch: 1.4.1
+      package-manager-detector: 0.2.0
+      parse-git-config: 3.0.0
+      pathe: 1.1.2
+      rc9: 2.1.2
+      std-env: 3.7.0
+    transitivePeerDependencies:
+      - magicast
+      - rollup
+      - supports-color
+      - webpack-sources
+
   '@nuxt/telemetry@2.6.0(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
@@ -8825,10 +8898,10 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/test-utils@3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/test-utils@3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
       c12: 2.0.1(magicast@0.3.5)
       consola: 3.2.3
       defu: 6.1.4
@@ -8852,7 +8925,7 @@ snapshots:
       unenv: 1.10.0
       unplugin: 1.14.1(webpack-sources@3.2.3)
       vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-      vitest-environment-nuxt: 1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      vitest-environment-nuxt: 1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       vue: 3.5.12(typescript@5.6.3)
       vue-router: 4.4.5(vue@3.5.12(typescript@5.6.3))
     optionalDependencies:
@@ -8866,10 +8939,10 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/ui-pro@1.4.4(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/ui-pro@1.4.4(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@iconify-json/vscode-icons': 1.2.2
-      '@nuxt/ui': 2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/ui': 2.18.7(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
       defu: 6.1.4
       git-url-parse: 15.0.0
@@ -8901,15 +8974,15 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/ui@2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/ui@2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.14)
       '@headlessui/vue': 1.7.23(vue@3.5.12(typescript@5.6.3))
       '@iconify-json/heroicons': 1.2.1
-      '@nuxt/icon': 1.5.6(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxtjs/color-mode': 3.5.1(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxtjs/tailwindcss': 6.12.1(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/icon': 1.5.6(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxtjs/color-mode': 3.5.1(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxtjs/tailwindcss': 6.12.1(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
       '@popperjs/core': 2.11.8
       '@tailwindcss/aspect-ratio': 0.4.2(tailwindcss@3.4.14)
       '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.14)
@@ -8947,7 +9020,7 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/ui@2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/ui@2.18.7(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.14)
       '@headlessui/vue': 1.7.23(vue@3.5.12(typescript@5.6.3))
@@ -8993,6 +9066,66 @@ snapshots:
       - vue
       - webpack-sources
 
+  '@nuxt/vite-builder@3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+    dependencies:
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@rollup/plugin-replace': 5.0.7(rollup@3.29.4)
+      '@vitejs/plugin-vue': 5.1.3(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
+      '@vitejs/plugin-vue-jsx': 4.0.1(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
+      autoprefixer: 10.4.20(postcss@8.4.47)
+      clear: 0.1.0
+      consola: 3.2.3
+      cssnano: 7.0.6(postcss@8.4.47)
+      defu: 6.1.4
+      esbuild: 0.23.1
+      escape-string-regexp: 5.0.0
+      estree-walker: 3.0.3
+      externality: 1.0.2
+      get-port-please: 3.1.2
+      h3: 1.13.0
+      knitwork: 1.1.0
+      magic-string: 0.30.12
+      mlly: 1.7.2
+      ohash: 1.1.4
+      pathe: 1.1.2
+      perfect-debounce: 1.0.0
+      pkg-types: 1.2.1
+      postcss: 8.4.47
+      rollup-plugin-visualizer: 5.12.0(rollup@3.29.4)
+      std-env: 3.7.0
+      strip-literal: 2.1.0
+      ufo: 1.5.4
+      unenv: 1.10.0
+      unplugin: 1.14.1(webpack-sources@3.2.3)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
+      vite-node: 2.1.1(@types/node@22.7.5)(terser@5.34.1)
+      vite-plugin-checker: 0.8.0(eslint@9.12.0(jiti@2.3.3))(optionator@0.9.4)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      vue: 3.5.12(typescript@5.6.3)
+      vue-bundle-renderer: 2.1.0
+    transitivePeerDependencies:
+      - '@biomejs/biome'
+      - '@types/node'
+      - eslint
+      - less
+      - lightningcss
+      - magicast
+      - meow
+      - optionator
+      - rollup
+      - sass
+      - sass-embedded
+      - stylelint
+      - stylus
+      - sugarss
+      - supports-color
+      - terser
+      - typescript
+      - uWebSockets.js
+      - vls
+      - vti
+      - vue-tsc
+      - webpack-sources
+
   '@nuxt/vite-builder@3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
@@ -9132,9 +9265,9 @@ snapshots:
       - utf-8-validate
       - webpack-sources
 
-  '@nuxtjs/color-mode@3.5.1(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)':
+  '@nuxtjs/color-mode@3.5.1(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
       changelogen: 0.5.7(magicast@0.3.5)
       pathe: 1.1.2
       pkg-types: 1.2.1
@@ -9272,9 +9405,9 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxtjs/tailwindcss@6.12.1(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)':
+  '@nuxtjs/tailwindcss@6.12.1(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
       autoprefixer: 10.4.20(postcss@8.4.47)
       consola: 3.2.3
       defu: 6.1.4
@@ -10017,32 +10150,32 @@ snapshots:
       unhead: 1.11.9
       vue: 3.5.12(typescript@5.6.3)
 
-  '@unocss/astro@0.62.4(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))':
+  '@unocss/astro@0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))':
     dependencies:
       '@unocss/core': 0.62.4
       '@unocss/reset': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
     optionalDependencies:
       vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  '@unocss/astro@0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))':
+  '@unocss/astro@0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))':
     dependencies:
       '@unocss/core': 0.62.4
       '@unocss/reset': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
     optionalDependencies:
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  '@unocss/cli@0.62.4(rollup@4.21.3)':
+  '@unocss/cli@0.62.4(rollup@3.29.4)':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
+      '@rollup/pluginutils': 5.1.2(rollup@3.29.4)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/preset-uno': 0.62.4
@@ -10058,10 +10191,10 @@ snapshots:
       - rollup
       - supports-color
 
-  '@unocss/cli@0.62.4(rollup@4.24.0)':
+  '@unocss/cli@0.62.4(rollup@4.21.3)':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
+      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/preset-uno': 0.62.4
@@ -10103,9 +10236,9 @@ snapshots:
       gzip-size: 6.0.0
       sirv: 2.0.4
 
-  '@unocss/nuxt@0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
+  '@unocss/nuxt@0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/preset-attributify': 0.62.4
@@ -10116,9 +10249,9 @@ snapshots:
       '@unocss/preset-web-fonts': 0.62.4
       '@unocss/preset-wind': 0.62.4
       '@unocss/reset': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      '@unocss/webpack': 0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))
-      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/webpack': 0.62.4(rollup@3.29.4)(webpack@5.95.0)
+      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0))(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
     transitivePeerDependencies:
       - magicast
       - postcss
@@ -10128,9 +10261,9 @@ snapshots:
       - webpack
       - webpack-sources
 
-  '@unocss/nuxt@0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
+  '@unocss/nuxt@0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/preset-attributify': 0.62.4
@@ -10141,9 +10274,9 @@ snapshots:
       '@unocss/preset-web-fonts': 0.62.4
       '@unocss/preset-wind': 0.62.4
       '@unocss/reset': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      '@unocss/webpack': 0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1))
-      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/webpack': 0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))
+      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
     transitivePeerDependencies:
       - magicast
       - postcss
@@ -10251,10 +10384,10 @@ snapshots:
     dependencies:
       '@unocss/core': 0.62.4
 
-  '@unocss/vite@0.62.4(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))':
+  '@unocss/vite@0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
+      '@rollup/pluginutils': 5.1.2(rollup@3.29.4)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/inspector': 0.62.4
@@ -10266,41 +10399,41 @@ snapshots:
       - rollup
       - supports-color
 
-  '@unocss/vite@0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))':
+  '@unocss/vite@0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
+      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/inspector': 0.62.4
       chokidar: 3.6.0
       magic-string: 0.30.12
       tinyglobby: 0.2.9
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  '@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))':
+  '@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0)':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
+      '@rollup/pluginutils': 5.1.2(rollup@3.29.4)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       chokidar: 3.6.0
       magic-string: 0.30.12
       tinyglobby: 0.2.9
       unplugin: 1.14.1(webpack-sources@3.2.3)
-      webpack: 5.95.0(esbuild@0.23.1)
+      webpack: 5.95.0
       webpack-sources: 3.2.3
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  '@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1))':
+  '@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
+      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       chokidar: 3.6.0
@@ -10398,6 +10531,19 @@ snapshots:
       path-browserify: 1.0.1
       vscode-uri: 3.0.8
 
+  '@vue-macros/common@1.14.0(rollup@3.29.4)(vue@3.5.12(typescript@5.6.3))':
+    dependencies:
+      '@babel/types': 7.25.6
+      '@rollup/pluginutils': 5.1.2(rollup@3.29.4)
+      '@vue/compiler-sfc': 3.5.12
+      ast-kit: 1.1.0
+      local-pkg: 0.5.0
+      magic-string-ast: 0.6.2
+    optionalDependencies:
+      vue: 3.5.12(typescript@5.6.3)
+    transitivePeerDependencies:
+      - rollup
+
   '@vue-macros/common@1.14.0(rollup@4.21.3)(vue@3.5.12(typescript@5.6.3))':
     dependencies:
       '@babel/types': 7.25.6
@@ -10519,6 +10665,18 @@ snapshots:
 
   '@vue/devtools-api@6.6.4': {}
 
+  '@vue/devtools-core@7.4.4(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))':
+    dependencies:
+      '@vue/devtools-kit': 7.4.4
+      '@vue/devtools-shared': 7.4.5
+      mitt: 3.0.1
+      nanoid: 3.3.7
+      pathe: 1.1.2
+      vite-hot-client: 0.2.3(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      vue: 3.5.12(typescript@5.6.3)
+    transitivePeerDependencies:
+      - vite
+
   '@vue/devtools-core@7.4.4(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))':
     dependencies:
       '@vue/devtools-kit': 7.4.4
@@ -10642,13 +10800,13 @@ snapshots:
 
   '@vueuse/metadata@11.1.0': {}
 
-  '@vueuse/nuxt@11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.21.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@vueuse/nuxt@11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@3.29.4)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
       '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
       '@vueuse/metadata': 11.1.0
       local-pkg: 0.5.0
-      nuxt: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      nuxt: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3))
     transitivePeerDependencies:
       - '@vue/composition-api'
@@ -10658,13 +10816,13 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@vueuse/nuxt@11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@vueuse/nuxt@11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.21.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
       '@vueuse/metadata': 11.1.0
       local-pkg: 0.5.0
-      nuxt: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      nuxt: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3))
     transitivePeerDependencies:
       - '@vue/composition-api'
@@ -12598,6 +12756,17 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  impound@0.1.0(rollup@3.29.4)(webpack-sources@3.2.3):
+    dependencies:
+      '@rollup/pluginutils': 5.1.0(rollup@3.29.4)
+      mlly: 1.7.2
+      pathe: 1.1.2
+      unenv: 1.10.0
+      unplugin: 1.14.1(webpack-sources@3.2.3)
+    transitivePeerDependencies:
+      - rollup
+      - webpack-sources
+
   impound@0.1.0(rollup@4.21.3)(webpack-sources@3.2.3):
     dependencies:
       '@rollup/pluginutils': 5.1.0(rollup@4.21.3)
@@ -13854,14 +14023,14 @@ snapshots:
       - vue
       - webpack-sources
 
-  nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3):
+  nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3):
     dependencies:
       '@nuxt/devalue': 2.0.2
-      '@nuxt/devtools': 1.4.2(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/vite-builder': 3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/devtools': 1.4.2(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/vite-builder': 3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@unhead/dom': 1.11.9
       '@unhead/shared': 1.11.9
       '@unhead/ssr': 1.11.9
@@ -13884,7 +14053,7 @@ snapshots:
       h3: 1.12.0
       hookable: 5.5.3
       ignore: 5.3.2
-      impound: 0.1.0(rollup@4.21.3)(webpack-sources@3.2.3)
+      impound: 0.1.0(rollup@3.29.4)(webpack-sources@3.2.3)
       jiti: 1.21.6
       klona: 2.0.6
       knitwork: 1.1.0
@@ -13911,9 +14080,9 @@ snapshots:
       unctx: 2.3.1(webpack-sources@3.2.3)
       unenv: 1.10.0
       unhead: 1.11.9
-      unimport: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3)
+      unimport: 3.12.0(rollup@3.29.4)(webpack-sources@3.2.3)
       unplugin: 1.14.1(webpack-sources@3.2.3)
-      unplugin-vue-router: 0.10.8(rollup@4.21.3)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      unplugin-vue-router: 0.10.8(rollup@3.29.4)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       unstorage: 1.12.0(ioredis@5.4.1)
       untyped: 1.4.2
       vue: 3.5.12(typescript@5.6.3)
@@ -13967,14 +14136,14 @@ snapshots:
       - webpack-sources
       - xml2js
 
-  nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3):
+  nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3):
     dependencies:
       '@nuxt/devalue': 2.0.2
-      '@nuxt/devtools': 1.4.2(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@4.24.0)(webpack-sources@3.2.3)
-      '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
-      '@nuxt/vite-builder': 3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/devtools': 1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/vite-builder': 3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@unhead/dom': 1.11.9
       '@unhead/shared': 1.11.9
       '@unhead/ssr': 1.11.9
@@ -13997,7 +14166,7 @@ snapshots:
       h3: 1.12.0
       hookable: 5.5.3
       ignore: 5.3.2
-      impound: 0.1.0(rollup@4.24.0)(webpack-sources@3.2.3)
+      impound: 0.1.0(rollup@4.21.3)(webpack-sources@3.2.3)
       jiti: 1.21.6
       klona: 2.0.6
       knitwork: 1.1.0
@@ -14024,9 +14193,9 @@ snapshots:
       unctx: 2.3.1(webpack-sources@3.2.3)
       unenv: 1.10.0
       unhead: 1.11.9
-      unimport: 3.12.0(rollup@4.24.0)(webpack-sources@3.2.3)
+      unimport: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3)
       unplugin: 1.14.1(webpack-sources@3.2.3)
-      unplugin-vue-router: 0.10.8(rollup@4.24.0)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      unplugin-vue-router: 0.10.8(rollup@4.21.3)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       unstorage: 1.12.0(ioredis@5.4.1)
       untyped: 1.4.2
       vue: 3.5.12(typescript@5.6.3)
@@ -14925,6 +15094,15 @@ snapshots:
     optionalDependencies:
       '@babel/code-frame': 7.24.7
 
+  rollup-plugin-visualizer@5.12.0(rollup@3.29.4):
+    dependencies:
+      open: 8.4.2
+      picomatch: 2.3.1
+      source-map: 0.7.4
+      yargs: 17.7.2
+    optionalDependencies:
+      rollup: 3.29.4
+
   rollup-plugin-visualizer@5.12.0(rollup@4.21.3):
     dependencies:
       open: 8.4.2
@@ -15502,6 +15680,15 @@ snapshots:
     optionalDependencies:
       esbuild: 0.23.1
 
+  terser-webpack-plugin@5.3.10(webpack@5.95.0):
+    dependencies:
+      '@jridgewell/trace-mapping': 0.3.25
+      jest-worker: 27.5.1
+      schema-utils: 3.3.0
+      serialize-javascript: 6.0.2
+      terser: 5.34.1
+      webpack: 5.95.0
+
   terser@5.32.0:
     dependencies:
       '@jridgewell/source-map': 0.3.6
@@ -15730,6 +15917,25 @@ snapshots:
       trough: 2.2.0
       vfile: 6.0.3
 
+  unimport@3.12.0(rollup@3.29.4)(webpack-sources@3.2.3):
+    dependencies:
+      '@rollup/pluginutils': 5.1.0(rollup@3.29.4)
+      acorn: 8.12.1
+      escape-string-regexp: 5.0.0
+      estree-walker: 3.0.3
+      fast-glob: 3.3.2
+      local-pkg: 0.5.0
+      magic-string: 0.30.12
+      mlly: 1.7.2
+      pathe: 1.1.2
+      pkg-types: 1.2.1
+      scule: 1.3.0
+      strip-literal: 2.1.0
+      unplugin: 1.14.1(webpack-sources@3.2.3)
+    transitivePeerDependencies:
+      - rollup
+      - webpack-sources
+
   unimport@3.12.0(rollup@4.21.3)(webpack-sources@3.2.3):
     dependencies:
       '@rollup/pluginutils': 5.1.0(rollup@4.21.3)
@@ -15768,6 +15974,25 @@ snapshots:
       - rollup
       - webpack-sources
 
+  unimport@3.13.1(rollup@3.29.4)(webpack-sources@3.2.3):
+    dependencies:
+      '@rollup/pluginutils': 5.1.2(rollup@3.29.4)
+      acorn: 8.12.1
+      escape-string-regexp: 5.0.0
+      estree-walker: 3.0.3
+      fast-glob: 3.3.2
+      local-pkg: 0.5.0
+      magic-string: 0.30.12
+      mlly: 1.7.2
+      pathe: 1.1.2
+      pkg-types: 1.2.1
+      scule: 1.3.0
+      strip-literal: 2.1.0
+      unplugin: 1.14.1(webpack-sources@3.2.3)
+    transitivePeerDependencies:
+      - rollup
+      - webpack-sources
+
   unimport@3.13.1(rollup@4.21.3)(webpack-sources@3.2.3):
     dependencies:
       '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
@@ -15835,10 +16060,10 @@ snapshots:
 
   universalify@2.0.1: {}
 
-  unocss@0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
+  unocss@0.62.4(@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0))(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
-      '@unocss/astro': 0.62.4(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      '@unocss/cli': 0.62.4(rollup@4.21.3)
+      '@unocss/astro': 0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/cli': 0.62.4(rollup@3.29.4)
       '@unocss/core': 0.62.4
       '@unocss/postcss': 0.62.4(postcss@8.4.47)
       '@unocss/preset-attributify': 0.62.4
@@ -15853,19 +16078,19 @@ snapshots:
       '@unocss/transformer-compile-class': 0.62.4
       '@unocss/transformer-directives': 0.62.4
       '@unocss/transformer-variant-group': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
     optionalDependencies:
-      '@unocss/webpack': 0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))
+      '@unocss/webpack': 0.62.4(rollup@3.29.4)(webpack@5.95.0)
       vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - postcss
       - rollup
       - supports-color
 
-  unocss@0.62.4(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
+  unocss@0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
-      '@unocss/astro': 0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      '@unocss/cli': 0.62.4(rollup@4.24.0)
+      '@unocss/astro': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/cli': 0.62.4(rollup@4.21.3)
       '@unocss/core': 0.62.4
       '@unocss/postcss': 0.62.4(postcss@8.4.47)
       '@unocss/preset-attributify': 0.62.4
@@ -15880,10 +16105,10 @@ snapshots:
       '@unocss/transformer-compile-class': 0.62.4
       '@unocss/transformer-directives': 0.62.4
       '@unocss/transformer-variant-group': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
     optionalDependencies:
-      '@unocss/webpack': 0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1))
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
+      '@unocss/webpack': 0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - postcss
       - rollup
@@ -15902,6 +16127,29 @@ snapshots:
       - rollup
       - webpack-sources
 
+  unplugin-vue-router@0.10.8(rollup@3.29.4)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
+    dependencies:
+      '@babel/types': 7.25.6
+      '@rollup/pluginutils': 5.1.0(rollup@3.29.4)
+      '@vue-macros/common': 1.14.0(rollup@3.29.4)(vue@3.5.12(typescript@5.6.3))
+      ast-walker-scope: 0.6.2
+      chokidar: 3.6.0
+      fast-glob: 3.3.2
+      json5: 2.2.3
+      local-pkg: 0.5.0
+      magic-string: 0.30.12
+      mlly: 1.7.2
+      pathe: 1.1.2
+      scule: 1.3.0
+      unplugin: 1.14.1(webpack-sources@3.2.3)
+      yaml: 2.5.1
+    optionalDependencies:
+      vue-router: 4.4.5(vue@3.5.12(typescript@5.6.3))
+    transitivePeerDependencies:
+      - rollup
+      - vue
+      - webpack-sources
+
   unplugin-vue-router@0.10.8(rollup@4.21.3)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
     dependencies:
       '@babel/types': 7.25.6
@@ -16065,6 +16313,10 @@ snapshots:
       '@types/unist': 3.0.3
       vfile-message: 4.0.2
 
+  vite-hot-client@0.2.3(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
+    dependencies:
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
+
   vite-hot-client@0.2.3(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
@@ -16129,10 +16381,10 @@ snapshots:
       optionator: 0.9.4
       typescript: 5.6.3
 
-  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
+  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       '@antfu/utils': 0.7.10
-      '@rollup/pluginutils': 5.1.0(rollup@4.21.3)
+      '@rollup/pluginutils': 5.1.0(rollup@3.29.4)
       debug: 4.3.7
       error-stack-parser-es: 0.1.5
       fs-extra: 11.2.0
@@ -16142,12 +16394,12 @@ snapshots:
       sirv: 2.0.4
       vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
     optionalDependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1)):
+  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       '@antfu/utils': 0.7.10
       '@rollup/pluginutils': 5.1.0(rollup@4.24.0)
@@ -16160,15 +16412,15 @@ snapshots:
       sirv: 2.0.4
       vite: 5.4.9(@types/node@22.7.5)(terser@5.34.1)
     optionalDependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
+  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       '@antfu/utils': 0.7.10
-      '@rollup/pluginutils': 5.1.0(rollup@4.24.0)
+      '@rollup/pluginutils': 5.1.0(rollup@4.21.3)
       debug: 4.3.7
       error-stack-parser-es: 0.1.5
       fs-extra: 11.2.0
@@ -16176,13 +16428,28 @@ snapshots:
       perfect-debounce: 1.0.0
       picocolors: 1.1.0
       sirv: 2.0.4
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     optionalDependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
+  vite-plugin-vue-inspector@5.1.3(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/plugin-proposal-decorators': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.8)
+      '@babel/plugin-transform-typescript': 7.25.7(@babel/core@7.25.8)
+      '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.8)
+      '@vue/compiler-dom': 3.5.12
+      kolorist: 1.8.0
+      magic-string: 0.30.12
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
+    transitivePeerDependencies:
+      - supports-color
+
   vite-plugin-vue-inspector@5.1.3(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       '@babel/core': 7.25.8
@@ -16198,6 +16465,21 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  vite-plugin-vue-inspector@5.2.0(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
+    dependencies:
+      '@babel/core': 7.25.2
+      '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.25.2)
+      '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2)
+      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2)
+      '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2)
+      '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.2)
+      '@vue/compiler-dom': 3.5.12
+      kolorist: 1.8.0
+      magic-string: 0.30.11
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
+    transitivePeerDependencies:
+      - supports-color
+
   vite-plugin-vue-inspector@5.2.0(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       '@babel/core': 7.25.2
@@ -16258,9 +16540,9 @@ snapshots:
       fsevents: 2.3.3
       terser: 5.34.1
 
-  vitest-environment-nuxt@1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
+  vitest-environment-nuxt@1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
     dependencies:
-      '@nuxt/test-utils': 3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@4.21.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/test-utils': 3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
     transitivePeerDependencies:
       - '@cucumber/cucumber'
       - '@jest/globals'
@@ -16410,6 +16692,36 @@ snapshots:
 
   webpack-virtual-modules@0.6.2: {}
 
+  webpack@5.95.0:
+    dependencies:
+      '@types/estree': 1.0.6
+      '@webassemblyjs/ast': 1.12.1
+      '@webassemblyjs/wasm-edit': 1.12.1
+      '@webassemblyjs/wasm-parser': 1.12.1
+      acorn: 8.12.1
+      acorn-import-attributes: 1.9.5(acorn@8.12.1)
+      browserslist: 4.24.0
+      chrome-trace-event: 1.0.4
+      enhanced-resolve: 5.17.1
+      es-module-lexer: 1.5.4
+      eslint-scope: 5.1.1
+      events: 3.3.0
+      glob-to-regexp: 0.4.1
+      graceful-fs: 4.2.11
+      json-parse-even-better-errors: 2.3.1
+      loader-runner: 4.3.0
+      mime-types: 2.1.35
+      neo-async: 2.6.2
+      schema-utils: 3.3.0
+      tapable: 2.2.1
+      terser-webpack-plugin: 5.3.10(webpack@5.95.0)
+      watchpack: 2.4.2
+      webpack-sources: 3.2.3
+    transitivePeerDependencies:
+      - '@swc/core'
+      - esbuild
+      - uglify-js
+
   webpack@5.95.0(esbuild@0.23.1):
     dependencies:
       '@types/estree': 1.0.6

From 8636a3d44eb754de1379ce1665efa248ca633f5f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Damian=20G=C5=82owala?= <damian.glowala.rebkow@gmail.com>
Date: Fri, 25 Oct 2024 08:49:27 +0200
Subject: [PATCH 14/16] fix: sync lockfile

---
 pnpm-lock.yaml | 687 ++++++++++++++-----------------------------------
 1 file changed, 192 insertions(+), 495 deletions(-)

diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ae8cbb17..f274434d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -27,13 +27,13 @@ importers:
         version: 2.5.3
       '@nuxt/devtools-kit':
         specifier: ^1.6.0
-        version: 1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+        version: 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-ui-kit':
         specifier: ^1.6.0
-        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0)
+        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
       '@nuxt/kit':
         specifier: ^3.13.2
-        version: 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+        version: 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       '@stripe/stripe-js':
         specifier: ^4.8.0
         version: 4.8.0
@@ -98,8 +98,8 @@ importers:
         specifier: ^1.5.4
         version: 1.5.4
       unimport:
-        specifier: ^3.13.0
-        version: 3.13.1(rollup@3.29.4)(webpack-sources@3.2.3)
+        specifier: ^3.13.1
+        version: 3.13.1(rollup@4.21.3)(webpack-sources@3.2.3)
       unplugin:
         specifier: ^1.14.1
         version: 1.14.1(webpack-sources@3.2.3)
@@ -115,10 +115,10 @@ importers:
         version: 0.6.0(eslint@9.12.0(jiti@2.3.3))(typescript@5.6.3)
       '@nuxt/module-builder':
         specifier: ^0.8.4
-        version: 0.8.4(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(nuxi@3.14.0)(typescript@5.6.3)(webpack-sources@3.2.3)
+        version: 0.8.4(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(nuxi@3.14.0)(typescript@5.6.3)(webpack-sources@3.2.3)
       '@nuxt/test-utils':
         specifier: 3.14.3
-        version: 3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+        version: 3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.1)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@types/semver':
         specifier: ^7.5.8
         version: 7.5.8
@@ -148,7 +148,7 @@ importers:
         version: 1.1.0
       nuxt:
         specifier: ^3.13.2
-        version: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+        version: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       nuxt-scripts-devtools:
         specifier: workspace:*
         version: link:client
@@ -175,16 +175,16 @@ importers:
         version: 1.2.3
       '@nuxt/devtools-kit':
         specifier: ^1.6.0
-        version: 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+        version: 1.6.0(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-ui-kit':
         specifier: ^1.6.0
-        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
+        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
       '@nuxt/kit':
         specifier: ^3.13.2
-        version: 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+        version: 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
       nuxt:
         specifier: ^3.13.2
-        version: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+        version: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       vue:
         specifier: ^3.5.12
         version: 3.5.12(typescript@5.6.3)
@@ -207,8 +207,8 @@ importers:
         specifier: ^2.13.4
         version: 2.13.4(ioredis@5.4.1)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@nuxt/fonts':
-        specifier: ^0.9.2
-        version: 0.9.2(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+        specifier: ^0.10.0
+        version: 0.10.0(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/image':
         specifier: ^1.8.1
         version: 1.8.1(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
@@ -216,8 +216,8 @@ importers:
         specifier: workspace:*
         version: link:..
       '@nuxt/ui-pro':
-        specifier: ^1.4.3
-        version: 1.4.4(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+        specifier: ^1.4.4
+        version: 1.4.4(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@nuxthq/studio':
         specifier: ^2.1.1
         version: 2.1.1(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
@@ -247,8 +247,8 @@ importers:
         specifier: workspace:*
         version: link:..
       '@nuxt/ui':
-        specifier: ^2.18.6
-        version: 2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+        specifier: ^2.18.7
+        version: 2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       nuxt-scripts-devtools:
         specifier: workspace:*
         version: link:../client
@@ -1522,8 +1522,8 @@ packages:
     peerDependencies:
       eslint: ^8.57.0 || ^9.0.0
 
-  '@nuxt/fonts@0.9.2':
-    resolution: {integrity: sha512-RMekoJh5AIaKG3tu0YaCdru3eTqNdXn6v7ggh5cdG4rWugr59HzihZ6n4C2Pkkv6nxOP4DOhxxdOwcZwXZM5vQ==}
+  '@nuxt/fonts@0.10.0':
+    resolution: {integrity: sha512-VoK/rssN1PzMeQOplap8UYnbKtI6IDaI+sj5BmbCCpXRYY84gH8m+zePGRo88Mi9ujRhd1HUOXfsCvHN88iGmQ==}
 
   '@nuxt/icon@1.5.6':
     resolution: {integrity: sha512-7l99CWc/laHphSsoLikh99Hkwjv+59cwAMJ0f9eZddBV+vO7zLGWwocH/TDNjlX0IACgVoG+AfbP/p1fqlLKpg==}
@@ -2512,7 +2512,7 @@ packages:
   '@vue/language-core@2.1.6':
     resolution: {integrity: sha512-MW569cSky9R/ooKMh6xa2g1D0AtRKbL56k83dzus/bx//RDJk24RHWkMzbAlXjMdDNyxAaagKPRquBIxkxlCkg==}
     peerDependencies:
-      typescript: '*'
+      typescript: 5.5.4
     peerDependenciesMeta:
       typescript:
         optional: true
@@ -6298,6 +6298,9 @@ packages:
   unified@11.0.5:
     resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
 
+  unifont@0.1.3:
+    resolution: {integrity: sha512-PZVkmHSUTgeinSIYEJ58lEzk4FTh8wZt9rd+5EapupFQLFXqOq9OPIp+e6a3JE404duS5qgSHvfGEg+cJ42lPA==}
+
   unimport@3.12.0:
     resolution: {integrity: sha512-5y8dSvNvyevsnw4TBQkIQR1Rjdbb+XjVSwQwxltpnVZrStBvvPkMPcZrh1kg5kY77kpx6+D4Ztd3W6FOBH/y2Q==}
 
@@ -7964,22 +7967,22 @@ snapshots:
 
   '@nuxt/devalue@2.0.2': {}
 
-  '@nuxt/devtools-kit@1.4.2(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/devtools-kit@1.4.2(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
       execa: 7.2.0
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - magicast
       - rollup
       - supports-color
       - webpack-sources
 
-  '@nuxt/devtools-kit@1.4.2(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/devtools-kit@1.4.2(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@4.24.0)(webpack-sources@3.2.3)
       execa: 7.2.0
       vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
@@ -8000,22 +8003,22 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
       execa: 7.2.0
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - magicast
       - rollup
       - supports-color
       - webpack-sources
 
-  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
       execa: 7.2.0
       vite: 5.4.9(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
@@ -8024,10 +8027,10 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@4.24.0)(webpack-sources@3.2.3)
       execa: 7.2.0
       vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
@@ -8048,28 +8051,28 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0)':
+  '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
     dependencies:
       '@iconify-json/carbon': 1.2.3
       '@iconify-json/logos': 1.2.3
       '@iconify-json/ri': 1.2.1
       '@iconify-json/tabler': 1.2.5
-      '@nuxt/devtools': 1.6.0(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
-      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/devtools': 1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       '@unocss/core': 0.62.4
-      '@unocss/nuxt': 0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0)
+      '@unocss/nuxt': 0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
       '@unocss/preset-attributify': 0.62.4
       '@unocss/preset-icons': 0.62.4
       '@unocss/preset-mini': 0.62.4
       '@unocss/reset': 0.62.4
       '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
       '@vueuse/integrations': 11.1.0(focus-trap@7.6.0)(fuse.js@7.0.0)(vue@3.5.12(typescript@5.6.3))
-      '@vueuse/nuxt': 11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@3.29.4)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@vueuse/nuxt': 11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.21.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       defu: 6.1.4
       focus-trap: 7.6.0
       splitpanes: 3.1.5
-      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0))(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
       v-lazy-show: 0.2.4(@vue/compiler-core@3.5.12)
     transitivePeerDependencies:
       - '@unocss/webpack'
@@ -8096,28 +8099,28 @@ snapshots:
       - webpack
       - webpack-sources
 
-  '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
+  '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
     dependencies:
       '@iconify-json/carbon': 1.2.3
       '@iconify-json/logos': 1.2.3
       '@iconify-json/ri': 1.2.1
       '@iconify-json/tabler': 1.2.5
-      '@nuxt/devtools': 1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
-      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/devtools': 1.6.0(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
       '@unocss/core': 0.62.4
-      '@unocss/nuxt': 0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
+      '@unocss/nuxt': 0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))
       '@unocss/preset-attributify': 0.62.4
       '@unocss/preset-icons': 0.62.4
       '@unocss/preset-mini': 0.62.4
       '@unocss/reset': 0.62.4
       '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
       '@vueuse/integrations': 11.1.0(focus-trap@7.6.0)(fuse.js@7.0.0)(vue@3.5.12(typescript@5.6.3))
-      '@vueuse/nuxt': 11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.21.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@vueuse/nuxt': 11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       defu: 6.1.4
       focus-trap: 7.6.0
       splitpanes: 3.1.5
-      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
       v-lazy-show: 0.2.4(@vue/compiler-core@3.5.12)
     transitivePeerDependencies:
       - '@unocss/webpack'
@@ -8170,13 +8173,13 @@ snapshots:
       rc9: 2.1.2
       semver: 7.6.3
 
-  '@nuxt/devtools@1.4.2(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/devtools@1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@antfu/utils': 0.7.10
-      '@nuxt/devtools-kit': 1.4.2(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.4.2(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-wizard': 1.4.2
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@vue/devtools-core': 7.4.4(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@vue/devtools-core': 7.4.4(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
       '@vue/devtools-kit': 7.4.4
       birpc: 0.2.17
       consola: 3.2.3
@@ -8204,10 +8207,10 @@ snapshots:
       simple-git: 3.26.0
       sirv: 2.0.4
       tinyglobby: 0.2.6
-      unimport: 3.13.1(rollup@3.29.4)(webpack-sources@3.2.3)
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      vite-plugin-vue-inspector: 5.2.0(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      unimport: 3.13.1(rollup@4.21.3)(webpack-sources@3.2.3)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      vite-plugin-vue-inspector: 5.2.0(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
       which: 3.0.1
       ws: 8.18.0
     transitivePeerDependencies:
@@ -8218,12 +8221,12 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/devtools@1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/devtools@1.4.2(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@antfu/utils': 0.7.10
-      '@nuxt/devtools-kit': 1.4.2(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.4.2(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-wizard': 1.4.2
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
       '@vue/devtools-core': 7.4.4(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
       '@vue/devtools-kit': 7.4.4
       birpc: 0.2.17
@@ -8252,9 +8255,9 @@ snapshots:
       simple-git: 3.26.0
       sirv: 2.0.4
       tinyglobby: 0.2.6
-      unimport: 3.13.1(rollup@4.21.3)(webpack-sources@3.2.3)
+      unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3)
       vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
-      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
       vite-plugin-vue-inspector: 5.2.0(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
       which: 3.0.1
       ws: 8.18.0
@@ -8302,7 +8305,7 @@ snapshots:
       tinyglobby: 0.2.6
       unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3)
       vite: 5.4.9(@types/node@22.7.5)(terser@5.34.1)
-      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))
       vite-plugin-vue-inspector: 5.2.0(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))
       which: 3.0.1
       ws: 8.18.0
@@ -8314,13 +8317,13 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/devtools@1.6.0(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@antfu/utils': 0.7.10
-      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-wizard': 1.6.0
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@vue/devtools-core': 7.4.4(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@vue/devtools-core': 7.4.4(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
       '@vue/devtools-kit': 7.4.4
       birpc: 0.2.19
       consola: 3.2.3
@@ -8348,10 +8351,10 @@ snapshots:
       simple-git: 3.27.0
       sirv: 2.0.4
       tinyglobby: 0.2.9
-      unimport: 3.13.1(rollup@3.29.4)(webpack-sources@3.2.3)
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      vite-plugin-vue-inspector: 5.1.3(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      unimport: 3.13.1(rollup@4.21.3)(webpack-sources@3.2.3)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      vite-plugin-vue-inspector: 5.1.3(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
       which: 3.0.1
       ws: 8.18.0
     transitivePeerDependencies:
@@ -8362,12 +8365,12 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/devtools@1.6.0(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/devtools@1.6.0(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@antfu/utils': 0.7.10
-      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/devtools-wizard': 1.6.0
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
       '@vue/devtools-core': 7.4.4(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
       '@vue/devtools-kit': 7.4.4
       birpc: 0.2.19
@@ -8396,9 +8399,9 @@ snapshots:
       simple-git: 3.27.0
       sirv: 2.0.4
       tinyglobby: 0.2.9
-      unimport: 3.13.1(rollup@4.21.3)(webpack-sources@3.2.3)
+      unimport: 3.13.1(rollup@4.24.0)(webpack-sources@3.2.3)
       vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
-      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
       vite-plugin-vue-inspector: 5.1.3(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
       which: 3.0.1
       ws: 8.18.0
@@ -8442,7 +8445,7 @@ snapshots:
       - supports-color
       - typescript
 
-  '@nuxt/fonts@0.9.2(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
+  '@nuxt/fonts@0.10.0(ioredis@5.4.1)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
@@ -8452,7 +8455,7 @@ snapshots:
       esbuild: 0.24.0
       fontaine: 0.5.0(webpack-sources@3.2.3)
       h3: 1.13.0
-      jiti: 1.21.6
+      jiti: 2.3.3
       magic-regexp: 0.8.0(webpack-sources@3.2.3)
       magic-string: 0.30.12
       node-fetch-native: 1.6.4
@@ -8461,6 +8464,7 @@ snapshots:
       sirv: 2.0.4
       tinyglobby: 0.2.9
       ufo: 1.5.4
+      unifont: 0.1.3
       unplugin: 1.14.1(webpack-sources@3.2.3)
       unstorage: 1.12.0(ioredis@5.4.1)
     transitivePeerDependencies:
@@ -8485,14 +8489,14 @@ snapshots:
       - vite
       - webpack-sources
 
-  '@nuxt/icon@1.5.6(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/icon@1.5.6(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@iconify/collections': 1.0.471
       '@iconify/types': 2.0.0
       '@iconify/utils': 2.1.33
       '@iconify/vue': 4.1.3-beta.1(vue@3.5.12(typescript@5.6.3))
-      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       consola: 3.2.3
       local-pkg: 0.5.0
       mlly: 1.7.2
@@ -8565,34 +8569,6 @@ snapshots:
       - uWebSockets.js
       - webpack-sources
 
-  '@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)':
-    dependencies:
-      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
-      c12: 1.11.2(magicast@0.3.5)
-      consola: 3.2.3
-      defu: 6.1.4
-      destr: 2.0.3
-      globby: 14.0.2
-      hash-sum: 2.0.0
-      ignore: 5.3.2
-      jiti: 1.21.6
-      klona: 2.0.6
-      knitwork: 1.1.0
-      mlly: 1.7.1
-      pathe: 1.1.2
-      pkg-types: 1.2.0
-      scule: 1.3.0
-      semver: 7.6.3
-      ufo: 1.5.4
-      unctx: 2.3.1(webpack-sources@3.2.3)
-      unimport: 3.12.0(rollup@3.29.4)(webpack-sources@3.2.3)
-      untyped: 1.4.2
-    transitivePeerDependencies:
-      - magicast
-      - rollup
-      - supports-color
-      - webpack-sources
-
   '@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
@@ -8649,9 +8625,9 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/module-builder@0.8.4(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(nuxi@3.14.0)(typescript@5.6.3)(webpack-sources@3.2.3)':
+  '@nuxt/module-builder@0.8.4(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(nuxi@3.14.0)(typescript@5.6.3)(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       citty: 0.1.6
       consola: 3.2.3
       defu: 6.1.4
@@ -8669,25 +8645,6 @@ snapshots:
       - vue-tsc
       - webpack-sources
 
-  '@nuxt/schema@3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)':
-    dependencies:
-      compatx: 0.1.8
-      consola: 3.2.3
-      defu: 6.1.4
-      hookable: 5.5.3
-      pathe: 1.1.2
-      pkg-types: 1.2.1
-      scule: 1.3.0
-      std-env: 3.7.0
-      ufo: 1.5.4
-      uncrypto: 0.1.3
-      unimport: 3.13.1(rollup@3.29.4)(webpack-sources@3.2.3)
-      untyped: 1.5.1
-    transitivePeerDependencies:
-      - rollup
-      - supports-color
-      - webpack-sources
-
   '@nuxt/schema@3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)':
     dependencies:
       compatx: 0.1.8
@@ -8726,32 +8683,6 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/telemetry@2.6.0(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)':
-    dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      ci-info: 4.0.0
-      consola: 3.2.3
-      create-require: 1.1.1
-      defu: 6.1.4
-      destr: 2.0.3
-      dotenv: 16.4.5
-      git-url-parse: 15.0.0
-      is-docker: 3.0.0
-      jiti: 1.21.6
-      mri: 1.2.0
-      nanoid: 5.0.7
-      ofetch: 1.4.1
-      package-manager-detector: 0.2.0
-      parse-git-config: 3.0.0
-      pathe: 1.1.2
-      rc9: 2.1.2
-      std-env: 3.7.0
-    transitivePeerDependencies:
-      - magicast
-      - rollup
-      - supports-color
-      - webpack-sources
-
   '@nuxt/telemetry@2.6.0(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
@@ -8804,10 +8735,10 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/test-utils@3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/test-utils@3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.1)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
       c12: 2.0.1(magicast@0.3.5)
       consola: 3.2.3
       defu: 6.1.4
@@ -8830,8 +8761,8 @@ snapshots:
       ufo: 1.5.4
       unenv: 1.10.0
       unplugin: 1.14.1(webpack-sources@3.2.3)
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-      vitest-environment-nuxt: 1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
+      vitest-environment-nuxt: 1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.1)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       vue: 3.5.12(typescript@5.6.3)
       vue-router: 4.4.5(vue@3.5.12(typescript@5.6.3))
     optionalDependencies:
@@ -8845,10 +8776,10 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/ui-pro@1.4.4(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/ui-pro@1.4.4(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@iconify-json/vscode-icons': 1.2.2
-      '@nuxt/ui': 2.18.7(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/ui': 2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
       defu: 6.1.4
       git-url-parse: 15.0.0
@@ -8879,15 +8810,15 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/ui@2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/ui@2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.14)
       '@headlessui/vue': 1.7.23(vue@3.5.12(typescript@5.6.3))
       '@iconify-json/heroicons': 1.2.1
-      '@nuxt/icon': 1.5.6(magicast@0.3.5)(rollup@3.29.4)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@nuxtjs/color-mode': 3.5.1(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@nuxtjs/tailwindcss': 6.12.1(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/icon': 1.5.6(magicast@0.3.5)(rollup@4.21.3)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxtjs/color-mode': 3.5.1(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxtjs/tailwindcss': 6.12.1(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       '@popperjs/core': 2.11.8
       '@tailwindcss/aspect-ratio': 0.4.2(tailwindcss@3.4.14)
       '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.14)
@@ -8924,7 +8855,7 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/ui@2.18.7(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/ui@2.18.7(focus-trap@7.6.0)(magicast@0.3.5)(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.14)
       '@headlessui/vue': 1.7.23(vue@3.5.12(typescript@5.6.3))
@@ -8969,66 +8900,6 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/vite-builder@3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
-    dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@rollup/plugin-replace': 5.0.7(rollup@3.29.4)
-      '@vitejs/plugin-vue': 5.1.3(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
-      '@vitejs/plugin-vue-jsx': 4.0.1(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))
-      autoprefixer: 10.4.20(postcss@8.4.47)
-      clear: 0.1.0
-      consola: 3.2.3
-      cssnano: 7.0.6(postcss@8.4.47)
-      defu: 6.1.4
-      esbuild: 0.23.1
-      escape-string-regexp: 5.0.0
-      estree-walker: 3.0.3
-      externality: 1.0.2
-      get-port-please: 3.1.2
-      h3: 1.13.0
-      knitwork: 1.1.0
-      magic-string: 0.30.12
-      mlly: 1.7.2
-      ohash: 1.1.4
-      pathe: 1.1.2
-      perfect-debounce: 1.0.0
-      pkg-types: 1.2.1
-      postcss: 8.4.47
-      rollup-plugin-visualizer: 5.12.0(rollup@3.29.4)
-      std-env: 3.7.0
-      strip-literal: 2.1.0
-      ufo: 1.5.4
-      unenv: 1.10.0
-      unplugin: 1.14.1(webpack-sources@3.2.3)
-      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
-      vite-node: 2.1.1(@types/node@22.7.5)(terser@5.34.1)
-      vite-plugin-checker: 0.8.0(eslint@9.12.0(jiti@2.3.3))(optionator@0.9.4)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
-      vue: 3.5.12(typescript@5.6.3)
-      vue-bundle-renderer: 2.1.0
-    transitivePeerDependencies:
-      - '@biomejs/biome'
-      - '@types/node'
-      - eslint
-      - less
-      - lightningcss
-      - magicast
-      - meow
-      - optionator
-      - rollup
-      - sass
-      - sass-embedded
-      - stylelint
-      - stylus
-      - sugarss
-      - supports-color
-      - terser
-      - typescript
-      - uWebSockets.js
-      - vls
-      - vti
-      - vue-tsc
-      - webpack-sources
-
   '@nuxt/vite-builder@3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
@@ -9166,9 +9037,9 @@ snapshots:
       - utf-8-validate
       - webpack-sources
 
-  '@nuxtjs/color-mode@3.5.1(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)':
+  '@nuxtjs/color-mode@3.5.1(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       changelogen: 0.5.7(magicast@0.3.5)
       pathe: 1.1.2
       pkg-types: 1.2.1
@@ -9306,9 +9177,9 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxtjs/tailwindcss@6.12.1(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)':
+  '@nuxtjs/tailwindcss@6.12.1(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       autoprefixer: 10.4.20(postcss@8.4.47)
       consola: 3.2.3
       defu: 6.1.4
@@ -10023,32 +9894,32 @@ snapshots:
       unhead: 1.11.10
       vue: 3.5.12(typescript@5.6.3)
 
-  '@unocss/astro@0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))':
+  '@unocss/astro@0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))':
     dependencies:
       '@unocss/core': 0.62.4
       '@unocss/reset': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
     optionalDependencies:
-      vite: 5.4.9(@types/node@22.7.5)(terser@5.34.1)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  '@unocss/astro@0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))':
+  '@unocss/astro@0.62.4(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))':
     dependencies:
       '@unocss/core': 0.62.4
       '@unocss/reset': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
     optionalDependencies:
       vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  '@unocss/cli@0.62.4(rollup@3.29.4)':
+  '@unocss/cli@0.62.4(rollup@4.21.3)':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@3.29.4)
+      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/preset-uno': 0.62.4
@@ -10064,10 +9935,10 @@ snapshots:
       - rollup
       - supports-color
 
-  '@unocss/cli@0.62.4(rollup@4.21.3)':
+  '@unocss/cli@0.62.4(rollup@4.24.0)':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
+      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/preset-uno': 0.62.4
@@ -10109,9 +9980,9 @@ snapshots:
       gzip-size: 6.0.0
       sirv: 2.0.4
 
-  '@unocss/nuxt@0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0)':
+  '@unocss/nuxt@0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/preset-attributify': 0.62.4
@@ -10122,9 +9993,9 @@ snapshots:
       '@unocss/preset-web-fonts': 0.62.4
       '@unocss/preset-wind': 0.62.4
       '@unocss/reset': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      '@unocss/webpack': 0.62.4(rollup@3.29.4)(webpack@5.95.0)
-      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0))(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/webpack': 0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))
+      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
     transitivePeerDependencies:
       - magicast
       - postcss
@@ -10134,9 +10005,9 @@ snapshots:
       - webpack
       - webpack-sources
 
-  '@unocss/nuxt@0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
+  '@unocss/nuxt@0.62.4(magicast@0.3.5)(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)(webpack@5.95.0(esbuild@0.23.1))':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/preset-attributify': 0.62.4
@@ -10147,9 +10018,9 @@ snapshots:
       '@unocss/preset-web-fonts': 0.62.4
       '@unocss/preset-wind': 0.62.4
       '@unocss/reset': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
-      '@unocss/webpack': 0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))
-      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/webpack': 0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1))
+      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
     transitivePeerDependencies:
       - magicast
       - postcss
@@ -10257,25 +10128,25 @@ snapshots:
     dependencies:
       '@unocss/core': 0.62.4
 
-  '@unocss/vite@0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))':
+  '@unocss/vite@0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@3.29.4)
+      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/inspector': 0.62.4
       chokidar: 3.6.0
       magic-string: 0.30.12
       tinyglobby: 0.2.9
-      vite: 5.4.9(@types/node@22.7.5)(terser@5.34.1)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  '@unocss/vite@0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))':
+  '@unocss/vite@0.62.4(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
+      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       '@unocss/inspector': 0.62.4
@@ -10287,26 +10158,26 @@ snapshots:
       - rollup
       - supports-color
 
-  '@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0)':
+  '@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@3.29.4)
+      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       chokidar: 3.6.0
       magic-string: 0.30.12
       tinyglobby: 0.2.9
       unplugin: 1.14.1(webpack-sources@3.2.3)
-      webpack: 5.95.0
+      webpack: 5.95.0(esbuild@0.23.1)
       webpack-sources: 3.2.3
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  '@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))':
+  '@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1))':
     dependencies:
       '@ampproject/remapping': 2.3.0
-      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
+      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
       '@unocss/config': 0.62.4
       '@unocss/core': 0.62.4
       chokidar: 3.6.0
@@ -10404,19 +10275,6 @@ snapshots:
       path-browserify: 1.0.1
       vscode-uri: 3.0.8
 
-  '@vue-macros/common@1.14.0(rollup@3.29.4)(vue@3.5.12(typescript@5.6.3))':
-    dependencies:
-      '@babel/types': 7.25.6
-      '@rollup/pluginutils': 5.1.2(rollup@3.29.4)
-      '@vue/compiler-sfc': 3.5.12
-      ast-kit: 1.1.0
-      local-pkg: 0.5.0
-      magic-string-ast: 0.6.2
-    optionalDependencies:
-      vue: 3.5.12(typescript@5.6.3)
-    transitivePeerDependencies:
-      - rollup
-
   '@vue-macros/common@1.14.0(rollup@4.21.3)(vue@3.5.12(typescript@5.6.3))':
     dependencies:
       '@babel/types': 7.25.6
@@ -10550,18 +10408,6 @@ snapshots:
     transitivePeerDependencies:
       - vite
 
-  '@vue/devtools-core@7.4.4(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))':
-    dependencies:
-      '@vue/devtools-kit': 7.4.4
-      '@vue/devtools-shared': 7.4.5
-      mitt: 3.0.1
-      nanoid: 3.3.7
-      pathe: 1.1.2
-      vite-hot-client: 0.2.3(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      vue: 3.5.12(typescript@5.6.3)
-    transitivePeerDependencies:
-      - vite
-
   '@vue/devtools-core@7.4.4(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))':
     dependencies:
       '@vue/devtools-kit': 7.4.4
@@ -10673,13 +10519,13 @@ snapshots:
 
   '@vueuse/metadata@11.1.0': {}
 
-  '@vueuse/nuxt@11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@3.29.4)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@vueuse/nuxt@11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.21.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
       '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
       '@vueuse/metadata': 11.1.0
       local-pkg: 0.5.0
-      nuxt: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      nuxt: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3))
     transitivePeerDependencies:
       - '@vue/composition-api'
@@ -10689,13 +10535,13 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@vueuse/nuxt@11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.21.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@vueuse/nuxt@11.1.0(magicast@0.3.5)(nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3))(rollup@4.24.0)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
       '@vueuse/core': 11.1.0(vue@3.5.12(typescript@5.6.3))
       '@vueuse/metadata': 11.1.0
       local-pkg: 0.5.0
-      nuxt: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
+      nuxt: 3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3)
       vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3))
     transitivePeerDependencies:
       - '@vue/composition-api'
@@ -12625,17 +12471,6 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  impound@0.1.0(rollup@3.29.4)(webpack-sources@3.2.3):
-    dependencies:
-      '@rollup/pluginutils': 5.1.0(rollup@3.29.4)
-      mlly: 1.7.2
-      pathe: 1.1.2
-      unenv: 1.10.0
-      unplugin: 1.14.1(webpack-sources@3.2.3)
-    transitivePeerDependencies:
-      - rollup
-      - webpack-sources
-
   impound@0.1.0(rollup@4.21.3)(webpack-sources@3.2.3):
     dependencies:
       '@rollup/pluginutils': 5.1.0(rollup@4.21.3)
@@ -13886,18 +13721,18 @@ snapshots:
       - vue
       - webpack-sources
 
-  nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3):
+  nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3):
     dependencies:
       '@nuxt/devalue': 2.0.2
-      '@nuxt/devtools': 1.4.2(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
-      '@nuxt/vite-builder': 3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.4)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
-      '@unhead/dom': 1.11.9
-      '@unhead/shared': 1.11.9
-      '@unhead/ssr': 1.11.9
-      '@unhead/vue': 1.11.9(vue@3.5.12(typescript@5.6.3))
+      '@nuxt/devtools': 1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/vite-builder': 3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@unhead/dom': 1.11.10
+      '@unhead/shared': 1.11.10
+      '@unhead/ssr': 1.11.10
+      '@unhead/vue': 1.11.10(vue@3.5.12(typescript@5.6.3))
       '@vue/shared': 3.5.5
       acorn: 8.12.1
       c12: 1.11.2(magicast@0.3.5)
@@ -13916,7 +13751,7 @@ snapshots:
       h3: 1.12.0
       hookable: 5.5.3
       ignore: 5.3.2
-      impound: 0.1.0(rollup@3.29.4)(webpack-sources@3.2.3)
+      impound: 0.1.0(rollup@4.21.3)(webpack-sources@3.2.3)
       jiti: 1.21.6
       klona: 2.0.6
       knitwork: 1.1.0
@@ -13942,10 +13777,10 @@ snapshots:
       uncrypto: 0.1.3
       unctx: 2.3.1(webpack-sources@3.2.3)
       unenv: 1.10.0
-      unhead: 1.11.9
-      unimport: 3.12.0(rollup@3.29.4)(webpack-sources@3.2.3)
+      unhead: 1.11.10
+      unimport: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3)
       unplugin: 1.14.1(webpack-sources@3.2.3)
-      unplugin-vue-router: 0.10.8(rollup@3.29.4)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      unplugin-vue-router: 0.10.8(rollup@4.21.3)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       unstorage: 1.12.0(ioredis@5.4.1)
       untyped: 1.4.2
       vue: 3.5.12(typescript@5.6.3)
@@ -13999,14 +13834,14 @@ snapshots:
       - webpack-sources
       - xml2js
 
-  nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3):
+  nuxt@3.13.2(@parcel/watcher@2.4.1)(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(webpack-sources@3.2.3):
     dependencies:
       '@nuxt/devalue': 2.0.2
-      '@nuxt/devtools': 1.4.2(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.13.2(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
-      '@nuxt/vite-builder': 3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.21.3)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/devtools': 1.4.2(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.13.2(rollup@4.24.0)(webpack-sources@3.2.3)
+      '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
+      '@nuxt/vite-builder': 3.13.2(@types/node@22.7.5)(eslint@9.12.0(jiti@2.3.3))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.24.0)(terser@5.34.1)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@unhead/dom': 1.11.10
       '@unhead/shared': 1.11.10
       '@unhead/ssr': 1.11.10
@@ -14029,7 +13864,7 @@ snapshots:
       h3: 1.12.0
       hookable: 5.5.3
       ignore: 5.3.2
-      impound: 0.1.0(rollup@4.21.3)(webpack-sources@3.2.3)
+      impound: 0.1.0(rollup@4.24.0)(webpack-sources@3.2.3)
       jiti: 1.21.6
       klona: 2.0.6
       knitwork: 1.1.0
@@ -14056,9 +13891,9 @@ snapshots:
       unctx: 2.3.1(webpack-sources@3.2.3)
       unenv: 1.10.0
       unhead: 1.11.10
-      unimport: 3.12.0(rollup@4.21.3)(webpack-sources@3.2.3)
+      unimport: 3.12.0(rollup@4.24.0)(webpack-sources@3.2.3)
       unplugin: 1.14.1(webpack-sources@3.2.3)
-      unplugin-vue-router: 0.10.8(rollup@4.21.3)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      unplugin-vue-router: 0.10.8(rollup@4.24.0)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       unstorage: 1.12.0(ioredis@5.4.1)
       untyped: 1.4.2
       vue: 3.5.12(typescript@5.6.3)
@@ -14957,15 +14792,6 @@ snapshots:
     optionalDependencies:
       '@babel/code-frame': 7.24.7
 
-  rollup-plugin-visualizer@5.12.0(rollup@3.29.4):
-    dependencies:
-      open: 8.4.2
-      picomatch: 2.3.1
-      source-map: 0.7.4
-      yargs: 17.7.2
-    optionalDependencies:
-      rollup: 3.29.4
-
   rollup-plugin-visualizer@5.12.0(rollup@4.21.3):
     dependencies:
       open: 8.4.2
@@ -15521,15 +15347,6 @@ snapshots:
     optionalDependencies:
       esbuild: 0.23.1
 
-  terser-webpack-plugin@5.3.10(webpack@5.95.0):
-    dependencies:
-      '@jridgewell/trace-mapping': 0.3.25
-      jest-worker: 27.5.1
-      schema-utils: 3.3.0
-      serialize-javascript: 6.0.2
-      terser: 5.34.1
-      webpack: 5.95.0
-
   terser@5.32.0:
     dependencies:
       '@jridgewell/source-map': 0.3.6
@@ -15758,24 +15575,10 @@ snapshots:
       trough: 2.2.0
       vfile: 6.0.3
 
-  unimport@3.12.0(rollup@3.29.4)(webpack-sources@3.2.3):
+  unifont@0.1.3:
     dependencies:
-      '@rollup/pluginutils': 5.1.0(rollup@3.29.4)
-      acorn: 8.12.1
-      escape-string-regexp: 5.0.0
-      estree-walker: 3.0.3
-      fast-glob: 3.3.2
-      local-pkg: 0.5.0
-      magic-string: 0.30.12
-      mlly: 1.7.2
-      pathe: 1.1.2
-      pkg-types: 1.2.1
-      scule: 1.3.0
-      strip-literal: 2.1.0
-      unplugin: 1.14.1(webpack-sources@3.2.3)
-    transitivePeerDependencies:
-      - rollup
-      - webpack-sources
+      css-tree: 3.0.0
+      ohash: 1.1.4
 
   unimport@3.12.0(rollup@4.21.3)(webpack-sources@3.2.3):
     dependencies:
@@ -15815,25 +15618,6 @@ snapshots:
       - rollup
       - webpack-sources
 
-  unimport@3.13.1(rollup@3.29.4)(webpack-sources@3.2.3):
-    dependencies:
-      '@rollup/pluginutils': 5.1.2(rollup@3.29.4)
-      acorn: 8.12.1
-      escape-string-regexp: 5.0.0
-      estree-walker: 3.0.3
-      fast-glob: 3.3.2
-      local-pkg: 0.5.0
-      magic-string: 0.30.12
-      mlly: 1.7.2
-      pathe: 1.1.2
-      pkg-types: 1.2.1
-      scule: 1.3.0
-      strip-literal: 2.1.0
-      unplugin: 1.14.1(webpack-sources@3.2.3)
-    transitivePeerDependencies:
-      - rollup
-      - webpack-sources
-
   unimport@3.13.1(rollup@4.21.3)(webpack-sources@3.2.3):
     dependencies:
       '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
@@ -15901,10 +15685,10 @@ snapshots:
 
   universalify@2.0.1: {}
 
-  unocss@0.62.4(@unocss/webpack@0.62.4(rollup@3.29.4)(webpack@5.95.0))(postcss@8.4.47)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
+  unocss@0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
-      '@unocss/astro': 0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
-      '@unocss/cli': 0.62.4(rollup@3.29.4)
+      '@unocss/astro': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/cli': 0.62.4(rollup@4.21.3)
       '@unocss/core': 0.62.4
       '@unocss/postcss': 0.62.4(postcss@8.4.47)
       '@unocss/preset-attributify': 0.62.4
@@ -15919,19 +15703,19 @@ snapshots:
       '@unocss/transformer-compile-class': 0.62.4
       '@unocss/transformer-directives': 0.62.4
       '@unocss/transformer-variant-group': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
     optionalDependencies:
-      '@unocss/webpack': 0.62.4(rollup@3.29.4)(webpack@5.95.0)
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
+      '@unocss/webpack': 0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - postcss
       - rollup
       - supports-color
 
-  unocss@0.62.4(@unocss/webpack@0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
+  unocss@0.62.4(@unocss/webpack@0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1)))(postcss@8.4.47)(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
-      '@unocss/astro': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
-      '@unocss/cli': 0.62.4(rollup@4.21.3)
+      '@unocss/astro': 0.62.4(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/cli': 0.62.4(rollup@4.24.0)
       '@unocss/core': 0.62.4
       '@unocss/postcss': 0.62.4(postcss@8.4.47)
       '@unocss/preset-attributify': 0.62.4
@@ -15946,9 +15730,9 @@ snapshots:
       '@unocss/transformer-compile-class': 0.62.4
       '@unocss/transformer-directives': 0.62.4
       '@unocss/transformer-variant-group': 0.62.4
-      '@unocss/vite': 0.62.4(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
+      '@unocss/vite': 0.62.4(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))
     optionalDependencies:
-      '@unocss/webpack': 0.62.4(rollup@4.21.3)(webpack@5.95.0(esbuild@0.23.1))
+      '@unocss/webpack': 0.62.4(rollup@4.24.0)(webpack@5.95.0(esbuild@0.23.1))
       vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - postcss
@@ -15968,29 +15752,6 @@ snapshots:
       - rollup
       - webpack-sources
 
-  unplugin-vue-router@0.10.8(rollup@3.29.4)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
-    dependencies:
-      '@babel/types': 7.25.6
-      '@rollup/pluginutils': 5.1.0(rollup@3.29.4)
-      '@vue-macros/common': 1.14.0(rollup@3.29.4)(vue@3.5.12(typescript@5.6.3))
-      ast-walker-scope: 0.6.2
-      chokidar: 3.6.0
-      fast-glob: 3.3.2
-      json5: 2.2.3
-      local-pkg: 0.5.0
-      magic-string: 0.30.12
-      mlly: 1.7.2
-      pathe: 1.1.2
-      scule: 1.3.0
-      unplugin: 1.14.1(webpack-sources@3.2.3)
-      yaml: 2.5.1
-    optionalDependencies:
-      vue-router: 4.4.5(vue@3.5.12(typescript@5.6.3))
-    transitivePeerDependencies:
-      - rollup
-      - vue
-      - webpack-sources
-
   unplugin-vue-router@0.10.8(rollup@4.21.3)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
     dependencies:
       '@babel/types': 7.25.6
@@ -16158,10 +15919,6 @@ snapshots:
     dependencies:
       vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
 
-  vite-hot-client@0.2.3(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
-    dependencies:
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-
   vite-hot-client@0.2.3(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       vite: 5.4.9(@types/node@22.7.5)(terser@5.34.1)
@@ -16222,10 +15979,10 @@ snapshots:
       optionator: 0.9.4
       typescript: 5.6.3
 
-  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
+  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       '@antfu/utils': 0.7.10
-      '@rollup/pluginutils': 5.1.0(rollup@3.29.4)
+      '@rollup/pluginutils': 5.1.2(rollup@4.21.3)
       debug: 4.3.7
       error-stack-parser-es: 0.1.5
       fs-extra: 11.2.0
@@ -16233,17 +15990,17 @@ snapshots:
       perfect-debounce: 1.0.0
       picocolors: 1.1.0
       sirv: 2.0.4
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
+      vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     optionalDependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1)):
+  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       '@antfu/utils': 0.7.10
-      '@rollup/pluginutils': 5.1.0(rollup@4.24.0)
+      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
       debug: 4.3.7
       error-stack-parser-es: 0.1.5
       fs-extra: 11.2.0
@@ -16253,15 +16010,15 @@ snapshots:
       sirv: 2.0.4
       vite: 5.4.9(@types/node@22.7.5)(terser@5.34.1)
     optionalDependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@3.29.4)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
     transitivePeerDependencies:
       - rollup
       - supports-color
 
-  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3))(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
+  vite-plugin-inspect@0.8.7(@nuxt/kit@3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3))(rollup@4.24.0)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       '@antfu/utils': 0.7.10
-      '@rollup/pluginutils': 5.1.0(rollup@4.21.3)
+      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
       debug: 4.3.7
       error-stack-parser-es: 0.1.5
       fs-extra: 11.2.0
@@ -16271,7 +16028,7 @@ snapshots:
       sirv: 2.0.4
       vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     optionalDependencies:
-      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.21.3)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.13.2(magicast@0.3.5)(rollup@4.24.0)(webpack-sources@3.2.3)
     transitivePeerDependencies:
       - rollup
       - supports-color
@@ -16291,21 +16048,6 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  vite-plugin-vue-inspector@5.1.3(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
-    dependencies:
-      '@babel/core': 7.25.8
-      '@babel/plugin-proposal-decorators': 7.25.7(@babel/core@7.25.8)
-      '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.8)
-      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.8)
-      '@babel/plugin-transform-typescript': 7.25.7(@babel/core@7.25.8)
-      '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.8)
-      '@vue/compiler-dom': 3.5.12
-      kolorist: 1.8.0
-      magic-string: 0.30.12
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-    transitivePeerDependencies:
-      - supports-color
-
   vite-plugin-vue-inspector@5.2.0(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       '@babel/core': 7.25.2
@@ -16316,26 +16058,11 @@ snapshots:
       '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.2)
       '@vue/compiler-dom': 3.5.12
       kolorist: 1.8.0
-      magic-string: 0.30.11
+      magic-string: 0.30.12
       vite: 5.4.5(@types/node@22.7.5)(terser@5.34.1)
     transitivePeerDependencies:
       - supports-color
 
-  vite-plugin-vue-inspector@5.2.0(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1)):
-    dependencies:
-      '@babel/core': 7.25.2
-      '@babel/plugin-proposal-decorators': 7.24.7(@babel/core@7.25.2)
-      '@babel/plugin-syntax-import-attributes': 7.25.6(@babel/core@7.25.2)
-      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.2)
-      '@babel/plugin-transform-typescript': 7.25.2(@babel/core@7.25.2)
-      '@vue/babel-plugin-jsx': 1.2.5(@babel/core@7.25.2)
-      '@vue/compiler-dom': 3.5.12
-      kolorist: 1.8.0
-      magic-string: 0.30.11
-      vite: 5.4.8(@types/node@22.7.5)(terser@5.34.1)
-    transitivePeerDependencies:
-      - supports-color
-
   vite-plugin-vue-inspector@5.2.0(vite@5.4.9(@types/node@22.7.5)(terser@5.34.1)):
     dependencies:
       '@babel/core': 7.25.2
@@ -16371,9 +16098,9 @@ snapshots:
       fsevents: 2.3.3
       terser: 5.34.1
 
-  vitest-environment-nuxt@1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
+  vitest-environment-nuxt@1.0.1(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.1)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
     dependencies:
-      '@nuxt/test-utils': 3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.0)(rollup@3.29.4)(vite@5.4.8(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/test-utils': 3.14.3(@vue/test-utils@2.4.6)(h3@1.13.0)(happy-dom@15.7.4)(magicast@0.3.5)(nitropack@2.9.7(magicast@0.3.5)(webpack-sources@3.2.3))(playwright-core@1.48.1)(rollup@4.21.3)(vite@5.4.5(@types/node@22.7.5)(terser@5.34.1))(vitest@2.1.3(@types/node@22.7.5)(happy-dom@15.7.4)(terser@5.34.1))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
     transitivePeerDependencies:
       - '@cucumber/cucumber'
       - '@jest/globals'
@@ -16523,36 +16250,6 @@ snapshots:
 
   webpack-virtual-modules@0.6.2: {}
 
-  webpack@5.95.0:
-    dependencies:
-      '@types/estree': 1.0.6
-      '@webassemblyjs/ast': 1.12.1
-      '@webassemblyjs/wasm-edit': 1.12.1
-      '@webassemblyjs/wasm-parser': 1.12.1
-      acorn: 8.12.1
-      acorn-import-attributes: 1.9.5(acorn@8.12.1)
-      browserslist: 4.24.0
-      chrome-trace-event: 1.0.4
-      enhanced-resolve: 5.17.1
-      es-module-lexer: 1.5.4
-      eslint-scope: 5.1.1
-      events: 3.3.0
-      glob-to-regexp: 0.4.1
-      graceful-fs: 4.2.11
-      json-parse-even-better-errors: 2.3.1
-      loader-runner: 4.3.0
-      mime-types: 2.1.35
-      neo-async: 2.6.2
-      schema-utils: 3.3.0
-      tapable: 2.2.1
-      terser-webpack-plugin: 5.3.10(webpack@5.95.0)
-      watchpack: 2.4.2
-      webpack-sources: 3.2.3
-    transitivePeerDependencies:
-      - '@swc/core'
-      - esbuild
-      - uglify-js
-
   webpack@5.95.0(esbuild@0.23.1):
     dependencies:
       '@types/estree': 1.0.6

From 0cf13ff22bedcc8a61590866b2d739931298ce6e Mon Sep 17 00:00:00 2001
From: harlan <harlan@harlanzw.com>
Date: Tue, 12 Nov 2024 23:02:34 +1100
Subject: [PATCH 15/16] chore: sync lock

---
 pnpm-lock.yaml | 818 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 784 insertions(+), 34 deletions(-)

diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 25224dd7..cad51249 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -22,15 +22,18 @@ importers:
 
   .:
     dependencies:
+      '@googlemaps/markerclusterer':
+        specifier: ^2.5.3
+        version: 2.5.3
       '@nuxt/devtools-kit':
         specifier: ^1.6.0
-        version: 1.6.0(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)
+        version: 1.6.0(magicast@0.3.5)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)
       '@nuxt/devtools-ui-kit':
         specifier: ^1.6.0
-        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.25.0)(webpack@5.96.1(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(change-case@5.4.4)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.25.0)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3))(postcss@8.4.48)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.96.1(esbuild@0.23.1))
+        version: 1.6.0(@nuxt/devtools@1.6.0(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@3.29.5)(webpack@5.96.1))(@vue/compiler-core@3.5.12)(change-case@5.4.4)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3))(postcss@8.4.48)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.96.1)
       '@nuxt/kit':
         specifier: ^3.14.159
-        version: 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
+        version: 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
       '@stripe/stripe-js':
         specifier: ^4.9.0
         version: 4.9.0
@@ -96,7 +99,7 @@ importers:
         version: 1.5.4
       unimport:
         specifier: ^3.13.1
-        version: 3.13.1(rollup@4.25.0)(webpack-sources@3.2.3)
+        version: 3.13.1(rollup@3.29.5)(webpack-sources@3.2.3)
       unplugin:
         specifier: ^1.15.0
         version: 1.15.0(webpack-sources@3.2.3)
@@ -112,10 +115,10 @@ importers:
         version: 0.6.1(eslint@9.14.0(jiti@2.4.0))(typescript@5.6.3)
       '@nuxt/module-builder':
         specifier: ^0.8.4
-        version: 0.8.4(@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3))(nuxi@3.15.0)(typescript@5.6.3)(webpack-sources@3.2.3)
+        version: 0.8.4(@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3))(nuxi@3.15.0)(typescript@5.6.3)(webpack-sources@3.2.3)
       '@nuxt/test-utils':
         specifier: 3.14.4
-        version: 3.14.4(h3@1.13.0)(happy-dom@15.11.0)(magicast@0.3.5)(nitropack@2.10.4(typescript@5.6.3)(webpack-sources@3.2.3))(playwright-core@1.48.2)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vitest@2.1.4(@types/node@22.9.0)(happy-dom@15.11.0)(terser@5.36.0))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+        version: 3.14.4(h3@1.13.0)(happy-dom@15.11.0)(magicast@0.3.5)(nitropack@2.10.4(typescript@5.6.3)(webpack-sources@3.2.3))(playwright-core@1.48.2)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vitest@2.1.4(@types/node@22.9.0)(happy-dom@15.11.0)(terser@5.36.0))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@types/semver':
         specifier: ^7.5.8
         version: 7.5.8
@@ -148,7 +151,7 @@ importers:
         version: 1.1.0
       nuxt:
         specifier: ^3.14.159
-        version: 3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.25.0)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)
+        version: 3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)
       nuxt-scripts-devtools:
         specifier: workspace:*
         version: link:client
@@ -220,7 +223,7 @@ importers:
         version: link:..
       '@nuxt/ui-pro':
         specifier: ^1.4.4
-        version: 1.5.0(change-case@5.4.4)(focus-trap@7.6.1)(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+        version: 1.5.0(change-case@5.4.4)(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@nuxthq/studio':
         specifier: ^2.1.1
         version: 2.2.1(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
@@ -247,7 +250,7 @@ importers:
         version: link:..
       '@nuxt/ui':
         specifier: ^2.18.7
-        version: 2.19.2(change-case@5.4.4)(focus-trap@7.6.1)(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+        version: 2.19.2(change-case@5.4.4)(focus-trap@7.6.1)(magicast@0.3.5)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       nuxt-scripts-devtools:
         specifier: workspace:*
         version: link:../client
@@ -1045,6 +1048,9 @@ packages:
     resolution: {integrity: sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==}
     engines: {node: '>=14'}
 
+  '@googlemaps/markerclusterer@2.5.3':
+    resolution: {integrity: sha512-x7lX0R5yYOoiNectr10wLgCBasNcXFHiADIBdmn7jQllF2B5ENQw5XtZK+hIw4xnV0Df0xhN4LN98XqA5jaiOw==}
+
   '@headlessui/tailwindcss@0.2.1':
     resolution: {integrity: sha512-2+5+NZ+RzMyrVeCZOxdbvkUSssSxGvcUxphkIfSVLpRiKsj+/63T2TOL9dBYMXVfj/CGr6hMxSRInzXv6YY7sA==}
     engines: {node: '>=10'}
@@ -3982,6 +3988,9 @@ packages:
   jsonfile@6.1.0:
     resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
 
+  kdbush@4.0.2:
+    resolution: {integrity: sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==}
+
   keygrip@1.1.0:
     resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==}
     engines: {node: '>= 0.6'}
@@ -5530,6 +5539,9 @@ packages:
     engines: {node: '>=16 || 14 >=14.17'}
     hasBin: true
 
+  supercluster@8.0.1:
+    resolution: {integrity: sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==}
+
   superjson@2.2.1:
     resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==}
     engines: {node: '>=16'}
@@ -6913,6 +6925,11 @@ snapshots:
   '@fastify/accept-negotiator@1.1.0':
     optional: true
 
+  '@googlemaps/markerclusterer@2.5.3':
+    dependencies:
+      fast-deep-equal: 3.1.3
+      supercluster: 8.0.1
+
   '@headlessui/tailwindcss@0.2.1(tailwindcss@3.4.14)':
     dependencies:
       tailwindcss: 3.4.14
@@ -7145,6 +7162,18 @@ snapshots:
 
   '@nuxt/devalue@2.0.2': {}
 
+  '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)':
+    dependencies:
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      execa: 7.2.0
+      vite: 5.4.11(@types/node@22.9.0)(terser@5.36.0)
+    transitivePeerDependencies:
+      - magicast
+      - rollup
+      - supports-color
+      - webpack-sources
+
   '@nuxt/devtools-kit@1.6.0(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
@@ -7157,6 +7186,54 @@ snapshots:
       - supports-color
       - webpack-sources
 
+  '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@3.29.5)(webpack@5.96.1))(@vue/compiler-core@3.5.12)(change-case@5.4.4)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3))(postcss@8.4.48)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.96.1)':
+    dependencies:
+      '@iconify-json/carbon': 1.2.4
+      '@iconify-json/logos': 1.2.3
+      '@iconify-json/ri': 1.2.3
+      '@iconify-json/tabler': 1.2.7
+      '@nuxt/devtools': 1.6.0(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@unocss/core': 0.62.4
+      '@unocss/nuxt': 0.62.4(magicast@0.3.5)(postcss@8.4.48)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)(webpack@5.96.1)
+      '@unocss/preset-attributify': 0.62.4
+      '@unocss/preset-icons': 0.62.4
+      '@unocss/preset-mini': 0.62.4
+      '@unocss/reset': 0.62.4
+      '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3))
+      '@vueuse/integrations': 11.2.0(change-case@5.4.4)(focus-trap@7.6.1)(fuse.js@7.0.0)(vue@3.5.12(typescript@5.6.3))
+      '@vueuse/nuxt': 11.2.0(magicast@0.3.5)(nuxt@3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3))(rollup@3.29.5)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      defu: 6.1.4
+      focus-trap: 7.6.1
+      splitpanes: 3.1.5
+      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@3.29.5)(webpack@5.96.1))(postcss@8.4.48)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))
+      v-lazy-show: 0.2.4(@vue/compiler-core@3.5.12)
+    transitivePeerDependencies:
+      - '@unocss/webpack'
+      - '@vue/compiler-core'
+      - '@vue/composition-api'
+      - async-validator
+      - axios
+      - change-case
+      - drauu
+      - fuse.js
+      - idb-keyval
+      - jwt-decode
+      - magicast
+      - nprogress
+      - nuxt
+      - postcss
+      - qrcode
+      - rollup
+      - sortablejs
+      - supports-color
+      - universal-cookie
+      - vite
+      - vue
+      - webpack
+      - webpack-sources
+
   '@nuxt/devtools-ui-kit@1.6.0(@nuxt/devtools@1.6.0(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3))(@unocss/webpack@0.62.4(rollup@4.25.0)(webpack@5.96.1(esbuild@0.23.1)))(@vue/compiler-core@3.5.12)(change-case@5.4.4)(fuse.js@7.0.0)(magicast@0.3.5)(nuxt@3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.25.0)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3))(postcss@8.4.48)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)(webpack@5.96.1(esbuild@0.23.1))':
     dependencies:
       '@iconify-json/carbon': 1.2.4
@@ -7218,6 +7295,54 @@ snapshots:
       rc9: 2.1.2
       semver: 7.6.3
 
+  '@nuxt/devtools@1.6.0(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+    dependencies:
+      '@antfu/utils': 0.7.10
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)
+      '@nuxt/devtools-wizard': 1.6.0
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@vue/devtools-core': 7.4.4(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))
+      '@vue/devtools-kit': 7.4.4
+      birpc: 0.2.19
+      consola: 3.2.3
+      cronstrue: 2.51.0
+      destr: 2.0.3
+      error-stack-parser-es: 0.1.5
+      execa: 7.2.0
+      fast-npm-meta: 0.2.2
+      flatted: 3.3.1
+      get-port-please: 3.1.2
+      hookable: 5.5.3
+      image-meta: 0.2.1
+      is-installed-globally: 1.0.0
+      launch-editor: 2.9.1
+      local-pkg: 0.5.0
+      magicast: 0.3.5
+      nypm: 0.3.12
+      ohash: 1.1.4
+      pathe: 1.1.2
+      perfect-debounce: 1.0.0
+      pkg-types: 1.2.1
+      rc9: 2.1.2
+      scule: 1.3.0
+      semver: 7.6.3
+      simple-git: 3.27.0
+      sirv: 2.0.4
+      tinyglobby: 0.2.10
+      unimport: 3.13.1(rollup@3.29.5)(webpack-sources@3.2.3)
+      vite: 5.4.11(@types/node@22.9.0)(terser@5.36.0)
+      vite-plugin-inspect: 0.8.7(@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3))(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))
+      vite-plugin-vue-inspector: 5.1.3(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))
+      which: 3.0.1
+      ws: 8.18.0
+    transitivePeerDependencies:
+      - bufferutil
+      - rollup
+      - supports-color
+      - utf-8-validate
+      - vue
+      - webpack-sources
+
   '@nuxt/devtools@1.6.0(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@antfu/utils': 0.7.10
@@ -7341,6 +7466,29 @@ snapshots:
       - vite
       - webpack-sources
 
+  '@nuxt/icon@1.7.2(magicast@0.3.5)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+    dependencies:
+      '@iconify/collections': 1.0.481
+      '@iconify/types': 2.0.0
+      '@iconify/utils': 2.1.33
+      '@iconify/vue': 4.2.0-dev.2(vue@3.5.12(typescript@5.6.3))
+      '@nuxt/devtools-kit': 1.6.0(magicast@0.3.5)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      consola: 3.2.3
+      local-pkg: 0.5.0
+      mlly: 1.7.2
+      ohash: 1.1.4
+      pathe: 1.1.2
+      std-env: 3.8.0
+      tinyglobby: 0.2.10
+    transitivePeerDependencies:
+      - magicast
+      - rollup
+      - supports-color
+      - vite
+      - vue
+      - webpack-sources
+
   '@nuxt/icon@1.7.2(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@iconify/collections': 1.0.481
@@ -7397,6 +7545,34 @@ snapshots:
       - supports-color
       - webpack-sources
 
+  '@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)':
+    dependencies:
+      '@nuxt/schema': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      c12: 2.0.1(magicast@0.3.5)
+      consola: 3.2.3
+      defu: 6.1.4
+      destr: 2.0.3
+      globby: 14.0.2
+      hash-sum: 2.0.0
+      ignore: 6.0.2
+      jiti: 2.4.0
+      klona: 2.0.6
+      knitwork: 1.1.0
+      mlly: 1.7.2
+      pathe: 1.1.2
+      pkg-types: 1.2.1
+      scule: 1.3.0
+      semver: 7.6.3
+      ufo: 1.5.4
+      unctx: 2.3.1(webpack-sources@3.2.3)
+      unimport: 3.13.1(rollup@3.29.5)(webpack-sources@3.2.3)
+      untyped: 1.5.1
+    transitivePeerDependencies:
+      - magicast
+      - rollup
+      - supports-color
+      - webpack-sources
+
   '@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/schema': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
@@ -7425,9 +7601,9 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/module-builder@0.8.4(@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3))(nuxi@3.15.0)(typescript@5.6.3)(webpack-sources@3.2.3)':
+  '@nuxt/module-builder@0.8.4(@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3))(nuxi@3.15.0)(typescript@5.6.3)(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
       citty: 0.1.6
       consola: 3.2.3
       defu: 6.1.4
@@ -7445,6 +7621,27 @@ snapshots:
       - vue-tsc
       - webpack-sources
 
+  '@nuxt/schema@3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)':
+    dependencies:
+      c12: 2.0.1(magicast@0.3.5)
+      compatx: 0.1.8
+      consola: 3.2.3
+      defu: 6.1.4
+      hookable: 5.5.3
+      pathe: 1.1.2
+      pkg-types: 1.2.1
+      scule: 1.3.0
+      std-env: 3.8.0
+      ufo: 1.5.4
+      uncrypto: 0.1.3
+      unimport: 3.13.1(rollup@3.29.5)(webpack-sources@3.2.3)
+      untyped: 1.5.1
+    transitivePeerDependencies:
+      - magicast
+      - rollup
+      - supports-color
+      - webpack-sources
+
   '@nuxt/schema@3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)':
     dependencies:
       c12: 2.0.1(magicast@0.3.5)
@@ -7466,6 +7663,32 @@ snapshots:
       - supports-color
       - webpack-sources
 
+  '@nuxt/telemetry@2.6.0(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)':
+    dependencies:
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      ci-info: 4.0.0
+      consola: 3.2.3
+      create-require: 1.1.1
+      defu: 6.1.4
+      destr: 2.0.3
+      dotenv: 16.4.5
+      git-url-parse: 15.0.0
+      is-docker: 3.0.0
+      jiti: 1.21.6
+      mri: 1.2.0
+      nanoid: 5.0.8
+      ofetch: 1.4.1
+      package-manager-detector: 0.2.2
+      parse-git-config: 3.0.0
+      pathe: 1.1.2
+      rc9: 2.1.2
+      std-env: 3.8.0
+    transitivePeerDependencies:
+      - magicast
+      - rollup
+      - supports-color
+      - webpack-sources
+
   '@nuxt/telemetry@2.6.0(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
@@ -7492,10 +7715,10 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/test-utils@3.14.4(h3@1.13.0)(happy-dom@15.11.0)(magicast@0.3.5)(nitropack@2.10.4(typescript@5.6.3)(webpack-sources@3.2.3))(playwright-core@1.48.2)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vitest@2.1.4(@types/node@22.9.0)(happy-dom@15.11.0)(terser@5.36.0))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/test-utils@3.14.4(h3@1.13.0)(happy-dom@15.11.0)(magicast@0.3.5)(nitropack@2.10.4(typescript@5.6.3)(webpack-sources@3.2.3))(playwright-core@1.48.2)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vitest@2.1.4(@types/node@22.9.0)(happy-dom@15.11.0)(terser@5.36.0))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
-      '@nuxt/schema': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
       c12: 2.0.1(magicast@0.3.5)
       consola: 3.2.3
       defu: 6.1.4
@@ -7519,7 +7742,7 @@ snapshots:
       unenv: 1.10.0
       unplugin: 1.15.0(webpack-sources@3.2.3)
       vite: 5.4.11(@types/node@22.9.0)(terser@5.36.0)
-      vitest-environment-nuxt: 1.0.1(h3@1.13.0)(happy-dom@15.11.0)(magicast@0.3.5)(nitropack@2.10.4(typescript@5.6.3)(webpack-sources@3.2.3))(playwright-core@1.48.2)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vitest@2.1.4(@types/node@22.9.0)(happy-dom@15.11.0)(terser@5.36.0))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      vitest-environment-nuxt: 1.0.1(h3@1.13.0)(happy-dom@15.11.0)(magicast@0.3.5)(nitropack@2.10.4(typescript@5.6.3)(webpack-sources@3.2.3))(playwright-core@1.48.2)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vitest@2.1.4(@types/node@22.9.0)(happy-dom@15.11.0)(terser@5.36.0))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       vue: 3.5.12(typescript@5.6.3)
       vue-router: 4.4.5(vue@3.5.12(typescript@5.6.3))
     optionalDependencies:
@@ -7532,10 +7755,10 @@ snapshots:
       - supports-color
       - webpack-sources
 
-  '@nuxt/ui-pro@1.5.0(change-case@5.4.4)(focus-trap@7.6.1)(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/ui-pro@1.5.0(change-case@5.4.4)(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@iconify-json/vscode-icons': 1.2.2
-      '@nuxt/ui': 2.19.2(change-case@5.4.4)(focus-trap@7.6.1)(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/ui': 2.19.2(change-case@5.4.4)(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
       '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3))
       defu: 6.1.4
       git-url-parse: 15.0.0
@@ -7566,7 +7789,52 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/ui@2.19.2(change-case@5.4.4)(focus-trap@7.6.1)(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/ui@2.19.2(change-case@5.4.4)(focus-trap@7.6.1)(magicast@0.3.5)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+    dependencies:
+      '@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.14)
+      '@headlessui/vue': 1.7.23(vue@3.5.12(typescript@5.6.3))
+      '@iconify-json/heroicons': 1.2.1
+      '@nuxt/icon': 1.7.2(magicast@0.3.5)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@nuxtjs/color-mode': 3.5.2(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@nuxtjs/tailwindcss': 6.12.2(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@popperjs/core': 2.11.8
+      '@tailwindcss/aspect-ratio': 0.4.2(tailwindcss@3.4.14)
+      '@tailwindcss/container-queries': 0.1.1(tailwindcss@3.4.14)
+      '@tailwindcss/forms': 0.5.9(tailwindcss@3.4.14)
+      '@tailwindcss/typography': 0.5.15(tailwindcss@3.4.14)
+      '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3))
+      '@vueuse/integrations': 11.2.0(change-case@5.4.4)(focus-trap@7.6.1)(fuse.js@7.0.0)(vue@3.5.12(typescript@5.6.3))
+      '@vueuse/math': 11.2.0(vue@3.5.12(typescript@5.6.3))
+      defu: 6.1.4
+      fuse.js: 7.0.0
+      ohash: 1.1.4
+      pathe: 1.1.2
+      scule: 1.3.0
+      tailwind-merge: 2.5.4
+      tailwindcss: 3.4.14
+    transitivePeerDependencies:
+      - '@vue/composition-api'
+      - async-validator
+      - axios
+      - change-case
+      - drauu
+      - focus-trap
+      - idb-keyval
+      - jwt-decode
+      - magicast
+      - nprogress
+      - qrcode
+      - rollup
+      - sortablejs
+      - supports-color
+      - ts-node
+      - universal-cookie
+      - vite
+      - vue
+      - webpack-sources
+
+  '@nuxt/ui@2.19.2(change-case@5.4.4)(magicast@0.3.5)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@headlessui/tailwindcss': 0.2.1(tailwindcss@3.4.14)
       '@headlessui/vue': 1.7.23(vue@3.5.12(typescript@5.6.3))
@@ -7611,10 +7879,10 @@ snapshots:
       - vue
       - webpack-sources
 
-  '@nuxt/vite-builder@3.14.159(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.25.0)(terser@5.36.0)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+  '@nuxt/vite-builder@3.14.159(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(terser@5.36.0)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
-      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
-      '@rollup/plugin-replace': 6.0.1(rollup@4.25.0)
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@rollup/plugin-replace': 6.0.1(rollup@3.29.5)
       '@vitejs/plugin-vue': 5.1.5(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))
       '@vitejs/plugin-vue-jsx': 4.1.0(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))
       autoprefixer: 10.4.20(postcss@8.4.48)
@@ -7637,7 +7905,7 @@ snapshots:
       perfect-debounce: 1.0.0
       pkg-types: 1.2.1
       postcss: 8.4.48
-      rollup-plugin-visualizer: 5.12.0(rollup@4.25.0)
+      rollup-plugin-visualizer: 5.12.0(rollup@3.29.5)
       std-env: 3.8.0
       strip-literal: 2.1.0
       ufo: 1.5.4
@@ -7671,25 +7939,97 @@ snapshots:
       - vue-tsc
       - webpack-sources
 
-  '@nuxthq/studio@2.2.1(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)':
+  '@nuxt/vite-builder@3.14.159(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(magicast@0.3.5)(optionator@0.9.4)(rollup@4.25.0)(terser@5.36.0)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
+      '@rollup/plugin-replace': 6.0.1(rollup@4.25.0)
+      '@vitejs/plugin-vue': 5.1.5(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))
+      '@vitejs/plugin-vue-jsx': 4.1.0(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))
+      autoprefixer: 10.4.20(postcss@8.4.48)
+      clear: 0.1.0
+      consola: 3.2.3
+      cssnano: 7.0.6(postcss@8.4.48)
       defu: 6.1.4
-      git-url-parse: 15.0.0
-      nuxt-component-meta: 0.9.0(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
-      parse-git-config: 3.0.0
-      pkg-types: 1.2.1
-      socket.io-client: 4.8.1
-      ufo: 1.5.4
-      untyped: 1.5.1
-    transitivePeerDependencies:
-      - bufferutil
+      esbuild: 0.24.0
+      escape-string-regexp: 5.0.0
+      estree-walker: 3.0.3
+      externality: 1.0.2
+      get-port-please: 3.1.2
+      h3: 1.13.0
+      jiti: 2.4.0
+      knitwork: 1.1.0
+      magic-string: 0.30.12
+      mlly: 1.7.2
+      ohash: 1.1.4
+      pathe: 1.1.2
+      perfect-debounce: 1.0.0
+      pkg-types: 1.2.1
+      postcss: 8.4.48
+      rollup-plugin-visualizer: 5.12.0(rollup@4.25.0)
+      std-env: 3.8.0
+      strip-literal: 2.1.0
+      ufo: 1.5.4
+      unenv: 1.10.0
+      unplugin: 1.15.0(webpack-sources@3.2.3)
+      vite: 5.4.11(@types/node@22.9.0)(terser@5.36.0)
+      vite-node: 2.1.4(@types/node@22.9.0)(terser@5.36.0)
+      vite-plugin-checker: 0.8.0(eslint@9.14.0(jiti@2.4.0))(optionator@0.9.4)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))
+      vue: 3.5.12(typescript@5.6.3)
+      vue-bundle-renderer: 2.1.1
+    transitivePeerDependencies:
+      - '@biomejs/biome'
+      - '@types/node'
+      - eslint
+      - less
+      - lightningcss
+      - magicast
+      - meow
+      - optionator
+      - rollup
+      - sass
+      - sass-embedded
+      - stylelint
+      - stylus
+      - sugarss
+      - supports-color
+      - terser
+      - typescript
+      - vls
+      - vti
+      - vue-tsc
+      - webpack-sources
+
+  '@nuxthq/studio@2.2.1(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)':
+    dependencies:
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
+      defu: 6.1.4
+      git-url-parse: 15.0.0
+      nuxt-component-meta: 0.9.0(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
+      parse-git-config: 3.0.0
+      pkg-types: 1.2.1
+      socket.io-client: 4.8.1
+      ufo: 1.5.4
+      untyped: 1.5.1
+    transitivePeerDependencies:
+      - bufferutil
       - magicast
       - rollup
       - supports-color
       - utf-8-validate
       - webpack-sources
 
+  '@nuxtjs/color-mode@3.5.2(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)':
+    dependencies:
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      pathe: 1.1.2
+      pkg-types: 1.2.1
+      semver: 7.6.3
+    transitivePeerDependencies:
+      - magicast
+      - rollup
+      - supports-color
+      - webpack-sources
+
   '@nuxtjs/color-mode@3.5.2(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
@@ -7816,6 +8156,28 @@ snapshots:
       - vue
       - webpack-sources
 
+  '@nuxtjs/tailwindcss@6.12.2(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)':
+    dependencies:
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      autoprefixer: 10.4.20(postcss@8.4.48)
+      consola: 3.2.3
+      defu: 6.1.4
+      h3: 1.13.0
+      klona: 2.0.6
+      pathe: 1.1.2
+      postcss: 8.4.48
+      postcss-nesting: 13.0.1(postcss@8.4.48)
+      tailwind-config-viewer: 2.0.4(tailwindcss@3.4.14)
+      tailwindcss: 3.4.14
+      ufo: 1.5.4
+      unctx: 2.3.1(webpack-sources@3.2.3)
+    transitivePeerDependencies:
+      - magicast
+      - rollup
+      - supports-color
+      - ts-node
+      - webpack-sources
+
   '@nuxtjs/tailwindcss@6.12.2(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
@@ -8069,6 +8431,13 @@ snapshots:
     optionalDependencies:
       rollup: 3.29.5
 
+  '@rollup/plugin-replace@6.0.1(rollup@3.29.5)':
+    dependencies:
+      '@rollup/pluginutils': 5.1.3(rollup@3.29.5)
+      magic-string: 0.30.12
+    optionalDependencies:
+      rollup: 3.29.5
+
   '@rollup/plugin-replace@6.0.1(rollup@4.25.0)':
     dependencies:
       '@rollup/pluginutils': 5.1.3(rollup@4.25.0)
@@ -8437,6 +8806,17 @@ snapshots:
       unhead: 1.11.10
       vue: 3.5.12(typescript@5.6.3)
 
+  '@unocss/astro@0.62.4(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))':
+    dependencies:
+      '@unocss/core': 0.62.4
+      '@unocss/reset': 0.62.4
+      '@unocss/vite': 0.62.4(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))
+    optionalDependencies:
+      vite: 5.4.11(@types/node@22.9.0)(terser@5.36.0)
+    transitivePeerDependencies:
+      - rollup
+      - supports-color
+
   '@unocss/astro@0.62.4(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))':
     dependencies:
       '@unocss/core': 0.62.4
@@ -8448,6 +8828,25 @@ snapshots:
       - rollup
       - supports-color
 
+  '@unocss/cli@0.62.4(rollup@3.29.5)':
+    dependencies:
+      '@ampproject/remapping': 2.3.0
+      '@rollup/pluginutils': 5.1.3(rollup@3.29.5)
+      '@unocss/config': 0.62.4
+      '@unocss/core': 0.62.4
+      '@unocss/preset-uno': 0.62.4
+      cac: 6.7.14
+      chokidar: 3.6.0
+      colorette: 2.0.20
+      consola: 3.2.3
+      magic-string: 0.30.12
+      pathe: 1.1.2
+      perfect-debounce: 1.0.0
+      tinyglobby: 0.2.10
+    transitivePeerDependencies:
+      - rollup
+      - supports-color
+
   '@unocss/cli@0.62.4(rollup@4.25.0)':
     dependencies:
       '@ampproject/remapping': 2.3.0
@@ -8493,6 +8892,31 @@ snapshots:
       gzip-size: 6.0.0
       sirv: 2.0.4
 
+  '@unocss/nuxt@0.62.4(magicast@0.3.5)(postcss@8.4.48)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)(webpack@5.96.1)':
+    dependencies:
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@unocss/config': 0.62.4
+      '@unocss/core': 0.62.4
+      '@unocss/preset-attributify': 0.62.4
+      '@unocss/preset-icons': 0.62.4
+      '@unocss/preset-tagify': 0.62.4
+      '@unocss/preset-typography': 0.62.4
+      '@unocss/preset-uno': 0.62.4
+      '@unocss/preset-web-fonts': 0.62.4
+      '@unocss/preset-wind': 0.62.4
+      '@unocss/reset': 0.62.4
+      '@unocss/vite': 0.62.4(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))
+      '@unocss/webpack': 0.62.4(rollup@3.29.5)(webpack@5.96.1)
+      unocss: 0.62.4(@unocss/webpack@0.62.4(rollup@3.29.5)(webpack@5.96.1))(postcss@8.4.48)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))
+    transitivePeerDependencies:
+      - magicast
+      - postcss
+      - rollup
+      - supports-color
+      - vite
+      - webpack
+      - webpack-sources
+
   '@unocss/nuxt@0.62.4(magicast@0.3.5)(postcss@8.4.48)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)(webpack@5.96.1(esbuild@0.23.1))':
     dependencies:
       '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
@@ -8616,6 +9040,21 @@ snapshots:
     dependencies:
       '@unocss/core': 0.62.4
 
+  '@unocss/vite@0.62.4(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))':
+    dependencies:
+      '@ampproject/remapping': 2.3.0
+      '@rollup/pluginutils': 5.1.3(rollup@3.29.5)
+      '@unocss/config': 0.62.4
+      '@unocss/core': 0.62.4
+      '@unocss/inspector': 0.62.4
+      chokidar: 3.6.0
+      magic-string: 0.30.12
+      tinyglobby: 0.2.10
+      vite: 5.4.11(@types/node@22.9.0)(terser@5.36.0)
+    transitivePeerDependencies:
+      - rollup
+      - supports-color
+
   '@unocss/vite@0.62.4(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))':
     dependencies:
       '@ampproject/remapping': 2.3.0
@@ -8631,6 +9070,22 @@ snapshots:
       - rollup
       - supports-color
 
+  '@unocss/webpack@0.62.4(rollup@3.29.5)(webpack@5.96.1)':
+    dependencies:
+      '@ampproject/remapping': 2.3.0
+      '@rollup/pluginutils': 5.1.3(rollup@3.29.5)
+      '@unocss/config': 0.62.4
+      '@unocss/core': 0.62.4
+      chokidar: 3.6.0
+      magic-string: 0.30.12
+      tinyglobby: 0.2.10
+      unplugin: 1.15.0(webpack-sources@3.2.3)
+      webpack: 5.96.1
+      webpack-sources: 3.2.3
+    transitivePeerDependencies:
+      - rollup
+      - supports-color
+
   '@unocss/webpack@0.62.4(rollup@4.25.0)(webpack@5.96.1(esbuild@0.23.1))':
     dependencies:
       '@ampproject/remapping': 2.3.0
@@ -8732,6 +9187,19 @@ snapshots:
       path-browserify: 1.0.1
       vscode-uri: 3.0.8
 
+  '@vue-macros/common@1.15.0(rollup@3.29.5)(vue@3.5.12(typescript@5.6.3))':
+    dependencies:
+      '@babel/types': 7.26.0
+      '@rollup/pluginutils': 5.1.3(rollup@3.29.5)
+      '@vue/compiler-sfc': 3.5.12
+      ast-kit: 1.3.1
+      local-pkg: 0.5.0
+      magic-string-ast: 0.6.2
+    optionalDependencies:
+      vue: 3.5.12(typescript@5.6.3)
+    transitivePeerDependencies:
+      - rollup
+
   '@vue-macros/common@1.15.0(rollup@4.25.0)(vue@3.5.12(typescript@5.6.3))':
     dependencies:
       '@babel/types': 7.26.0
@@ -8916,6 +9384,22 @@ snapshots:
 
   '@vueuse/metadata@11.2.0': {}
 
+  '@vueuse/nuxt@11.2.0(magicast@0.3.5)(nuxt@3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3))(rollup@3.29.5)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
+    dependencies:
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@vueuse/core': 11.2.0(vue@3.5.12(typescript@5.6.3))
+      '@vueuse/metadata': 11.2.0
+      local-pkg: 0.5.0
+      nuxt: 3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3)
+      vue-demi: 0.14.10(vue@3.5.12(typescript@5.6.3))
+    transitivePeerDependencies:
+      - '@vue/composition-api'
+      - magicast
+      - rollup
+      - supports-color
+      - vue
+      - webpack-sources
+
   '@vueuse/nuxt@11.2.0(magicast@0.3.5)(nuxt@3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.25.0)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3))(rollup@4.25.0)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)':
     dependencies:
       '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3)
@@ -10745,6 +11229,17 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
+  impound@0.2.0(rollup@3.29.5)(webpack-sources@3.2.3):
+    dependencies:
+      '@rollup/pluginutils': 5.1.3(rollup@3.29.5)
+      mlly: 1.7.2
+      pathe: 1.1.2
+      unenv: 1.10.0
+      unplugin: 1.15.0(webpack-sources@3.2.3)
+    transitivePeerDependencies:
+      - rollup
+      - webpack-sources
+
   impound@0.2.0(rollup@4.25.0)(webpack-sources@3.2.3):
     dependencies:
       '@rollup/pluginutils': 5.1.3(rollup@4.25.0)
@@ -10976,6 +11471,8 @@ snapshots:
     optionalDependencies:
       graceful-fs: 4.2.11
 
+  kdbush@4.0.2: {}
+
   keygrip@1.1.0:
     dependencies:
       tsscmp: 1.0.6
@@ -11966,6 +12463,120 @@ snapshots:
       - vue
       - webpack-sources
 
+  nuxt@3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3):
+    dependencies:
+      '@nuxt/devalue': 2.0.2
+      '@nuxt/devtools': 1.6.0(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@nuxt/schema': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@nuxt/telemetry': 2.6.0(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+      '@nuxt/vite-builder': 3.14.159(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(magicast@0.3.5)(optionator@0.9.4)(rollup@3.29.5)(terser@5.36.0)(typescript@5.6.3)(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@unhead/dom': 1.11.10
+      '@unhead/shared': 1.11.10
+      '@unhead/ssr': 1.11.10
+      '@unhead/vue': 1.11.10(vue@3.5.12(typescript@5.6.3))
+      '@vue/shared': 3.5.12
+      acorn: 8.14.0
+      c12: 2.0.1(magicast@0.3.5)
+      chokidar: 4.0.1
+      compatx: 0.1.8
+      consola: 3.2.3
+      cookie-es: 1.2.2
+      defu: 6.1.4
+      destr: 2.0.3
+      devalue: 5.1.1
+      errx: 0.1.0
+      esbuild: 0.24.0
+      escape-string-regexp: 5.0.0
+      estree-walker: 3.0.3
+      globby: 14.0.2
+      h3: 1.13.0
+      hookable: 5.5.3
+      ignore: 6.0.2
+      impound: 0.2.0(rollup@3.29.5)(webpack-sources@3.2.3)
+      jiti: 2.4.0
+      klona: 2.0.6
+      knitwork: 1.1.0
+      magic-string: 0.30.12
+      mlly: 1.7.2
+      nanotar: 0.1.1
+      nitropack: 2.10.4(typescript@5.6.3)(webpack-sources@3.2.3)
+      nuxi: 3.15.0
+      nypm: 0.3.12
+      ofetch: 1.4.1
+      ohash: 1.1.4
+      pathe: 1.1.2
+      perfect-debounce: 1.0.0
+      pkg-types: 1.2.1
+      radix3: 1.1.2
+      scule: 1.3.0
+      semver: 7.6.3
+      std-env: 3.8.0
+      strip-literal: 2.1.0
+      tinyglobby: 0.2.10
+      ufo: 1.5.4
+      ultrahtml: 1.5.3
+      uncrypto: 0.1.3
+      unctx: 2.3.1(webpack-sources@3.2.3)
+      unenv: 1.10.0
+      unhead: 1.11.10
+      unimport: 3.13.1(rollup@3.29.5)(webpack-sources@3.2.3)
+      unplugin: 1.15.0(webpack-sources@3.2.3)
+      unplugin-vue-router: 0.10.8(rollup@3.29.5)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      unstorage: 1.13.1(ioredis@5.4.1)
+      untyped: 1.5.1
+      vue: 3.5.12(typescript@5.6.3)
+      vue-bundle-renderer: 2.1.1
+      vue-devtools-stub: 0.1.0
+      vue-router: 4.4.5(vue@3.5.12(typescript@5.6.3))
+    optionalDependencies:
+      '@parcel/watcher': 2.5.0
+      '@types/node': 22.9.0
+    transitivePeerDependencies:
+      - '@azure/app-configuration'
+      - '@azure/cosmos'
+      - '@azure/data-tables'
+      - '@azure/identity'
+      - '@azure/keyvault-secrets'
+      - '@azure/storage-blob'
+      - '@biomejs/biome'
+      - '@capacitor/preferences'
+      - '@electric-sql/pglite'
+      - '@libsql/client'
+      - '@netlify/blobs'
+      - '@planetscale/database'
+      - '@upstash/redis'
+      - '@vercel/kv'
+      - better-sqlite3
+      - bufferutil
+      - drizzle-orm
+      - encoding
+      - eslint
+      - idb-keyval
+      - ioredis
+      - less
+      - lightningcss
+      - magicast
+      - meow
+      - mysql2
+      - optionator
+      - rollup
+      - sass
+      - sass-embedded
+      - stylelint
+      - stylus
+      - sugarss
+      - supports-color
+      - terser
+      - typescript
+      - utf-8-validate
+      - vite
+      - vls
+      - vti
+      - vue-tsc
+      - webpack-sources
+      - xml2js
+
   nuxt@3.14.159(@parcel/watcher@2.5.0)(@types/node@22.9.0)(eslint@9.14.0(jiti@2.4.0))(ioredis@5.4.1)(magicast@0.3.5)(optionator@0.9.4)(rollup@4.25.0)(terser@5.36.0)(typescript@5.6.3)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(webpack-sources@3.2.3):
     dependencies:
       '@nuxt/devalue': 2.0.2
@@ -12802,6 +13413,15 @@ snapshots:
     optionalDependencies:
       '@babel/code-frame': 7.26.2
 
+  rollup-plugin-visualizer@5.12.0(rollup@3.29.5):
+    dependencies:
+      open: 8.4.2
+      picomatch: 2.3.1
+      source-map: 0.7.4
+      yargs: 17.7.2
+    optionalDependencies:
+      rollup: 3.29.5
+
   rollup-plugin-visualizer@5.12.0(rollup@4.25.0):
     dependencies:
       open: 8.4.2
@@ -13172,6 +13792,10 @@ snapshots:
       pirates: 4.0.6
       ts-interface-checker: 0.1.13
 
+  supercluster@8.0.1:
+    dependencies:
+      kdbush: 4.0.2
+
   superjson@2.2.1:
     dependencies:
       copy-anything: 3.0.5
@@ -13306,6 +13930,15 @@ snapshots:
     optionalDependencies:
       esbuild: 0.23.1
 
+  terser-webpack-plugin@5.3.10(webpack@5.96.1):
+    dependencies:
+      '@jridgewell/trace-mapping': 0.3.25
+      jest-worker: 27.5.1
+      schema-utils: 3.3.0
+      serialize-javascript: 6.0.2
+      terser: 5.36.0
+      webpack: 5.96.1
+
   terser@5.36.0:
     dependencies:
       '@jridgewell/source-map': 0.3.6
@@ -13519,6 +14152,25 @@ snapshots:
       css-tree: 3.0.1
       ohash: 1.1.4
 
+  unimport@3.13.1(rollup@3.29.5)(webpack-sources@3.2.3):
+    dependencies:
+      '@rollup/pluginutils': 5.1.3(rollup@3.29.5)
+      acorn: 8.14.0
+      escape-string-regexp: 5.0.0
+      estree-walker: 3.0.3
+      fast-glob: 3.3.2
+      local-pkg: 0.5.0
+      magic-string: 0.30.12
+      mlly: 1.7.2
+      pathe: 1.1.2
+      pkg-types: 1.2.1
+      scule: 1.3.0
+      strip-literal: 2.1.0
+      unplugin: 1.15.0(webpack-sources@3.2.3)
+    transitivePeerDependencies:
+      - rollup
+      - webpack-sources
+
   unimport@3.13.1(rollup@4.25.0)(webpack-sources@3.2.3):
     dependencies:
       '@rollup/pluginutils': 5.1.3(rollup@4.25.0)
@@ -13567,6 +14219,33 @@ snapshots:
 
   universalify@2.0.1: {}
 
+  unocss@0.62.4(@unocss/webpack@0.62.4(rollup@3.29.5)(webpack@5.96.1))(postcss@8.4.48)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0)):
+    dependencies:
+      '@unocss/astro': 0.62.4(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))
+      '@unocss/cli': 0.62.4(rollup@3.29.5)
+      '@unocss/core': 0.62.4
+      '@unocss/postcss': 0.62.4(postcss@8.4.48)
+      '@unocss/preset-attributify': 0.62.4
+      '@unocss/preset-icons': 0.62.4
+      '@unocss/preset-mini': 0.62.4
+      '@unocss/preset-tagify': 0.62.4
+      '@unocss/preset-typography': 0.62.4
+      '@unocss/preset-uno': 0.62.4
+      '@unocss/preset-web-fonts': 0.62.4
+      '@unocss/preset-wind': 0.62.4
+      '@unocss/transformer-attributify-jsx': 0.62.4
+      '@unocss/transformer-compile-class': 0.62.4
+      '@unocss/transformer-directives': 0.62.4
+      '@unocss/transformer-variant-group': 0.62.4
+      '@unocss/vite': 0.62.4(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))
+    optionalDependencies:
+      '@unocss/webpack': 0.62.4(rollup@3.29.5)(webpack@5.96.1)
+      vite: 5.4.11(@types/node@22.9.0)(terser@5.36.0)
+    transitivePeerDependencies:
+      - postcss
+      - rollup
+      - supports-color
+
   unocss@0.62.4(@unocss/webpack@0.62.4(rollup@4.25.0)(webpack@5.96.1(esbuild@0.23.1)))(postcss@8.4.48)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0)):
     dependencies:
       '@unocss/astro': 0.62.4(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))
@@ -13607,6 +14286,29 @@ snapshots:
       - rollup
       - webpack-sources
 
+  unplugin-vue-router@0.10.8(rollup@3.29.5)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
+    dependencies:
+      '@babel/types': 7.26.0
+      '@rollup/pluginutils': 5.1.3(rollup@3.29.5)
+      '@vue-macros/common': 1.15.0(rollup@3.29.5)(vue@3.5.12(typescript@5.6.3))
+      ast-walker-scope: 0.6.2
+      chokidar: 3.6.0
+      fast-glob: 3.3.2
+      json5: 2.2.3
+      local-pkg: 0.5.0
+      magic-string: 0.30.12
+      mlly: 1.7.2
+      pathe: 1.1.2
+      scule: 1.3.0
+      unplugin: 1.15.0(webpack-sources@3.2.3)
+      yaml: 2.6.0
+    optionalDependencies:
+      vue-router: 4.4.5(vue@3.5.12(typescript@5.6.3))
+    transitivePeerDependencies:
+      - rollup
+      - vue
+      - webpack-sources
+
   unplugin-vue-router@0.10.8(rollup@4.25.0)(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
     dependencies:
       '@babel/types': 7.26.0
@@ -13772,6 +14474,24 @@ snapshots:
       optionator: 0.9.4
       typescript: 5.6.3
 
+  vite-plugin-inspect@0.8.7(@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3))(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0)):
+    dependencies:
+      '@antfu/utils': 0.7.10
+      '@rollup/pluginutils': 5.1.3(rollup@3.29.5)
+      debug: 4.3.7(supports-color@9.4.0)
+      error-stack-parser-es: 0.1.5
+      fs-extra: 11.2.0
+      open: 10.1.0
+      perfect-debounce: 1.0.0
+      picocolors: 1.1.1
+      sirv: 2.0.4
+      vite: 5.4.11(@types/node@22.9.0)(terser@5.36.0)
+    optionalDependencies:
+      '@nuxt/kit': 3.14.159(magicast@0.3.5)(rollup@3.29.5)(webpack-sources@3.2.3)
+    transitivePeerDependencies:
+      - rollup
+      - supports-color
+
   vite-plugin-inspect@0.8.7(@nuxt/kit@3.14.159(magicast@0.3.5)(rollup@4.25.0)(webpack-sources@3.2.3))(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0)):
     dependencies:
       '@antfu/utils': 0.7.10
@@ -13815,9 +14535,9 @@ snapshots:
       fsevents: 2.3.3
       terser: 5.36.0
 
-  vitest-environment-nuxt@1.0.1(h3@1.13.0)(happy-dom@15.11.0)(magicast@0.3.5)(nitropack@2.10.4(typescript@5.6.3)(webpack-sources@3.2.3))(playwright-core@1.48.2)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vitest@2.1.4(@types/node@22.9.0)(happy-dom@15.11.0)(terser@5.36.0))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
+  vitest-environment-nuxt@1.0.1(h3@1.13.0)(happy-dom@15.11.0)(magicast@0.3.5)(nitropack@2.10.4(typescript@5.6.3)(webpack-sources@3.2.3))(playwright-core@1.48.2)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vitest@2.1.4(@types/node@22.9.0)(happy-dom@15.11.0)(terser@5.36.0))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3):
     dependencies:
-      '@nuxt/test-utils': 3.14.4(h3@1.13.0)(happy-dom@15.11.0)(magicast@0.3.5)(nitropack@2.10.4(typescript@5.6.3)(webpack-sources@3.2.3))(playwright-core@1.48.2)(rollup@4.25.0)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vitest@2.1.4(@types/node@22.9.0)(happy-dom@15.11.0)(terser@5.36.0))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
+      '@nuxt/test-utils': 3.14.4(h3@1.13.0)(happy-dom@15.11.0)(magicast@0.3.5)(nitropack@2.10.4(typescript@5.6.3)(webpack-sources@3.2.3))(playwright-core@1.48.2)(rollup@3.29.5)(vite@5.4.11(@types/node@22.9.0)(terser@5.36.0))(vitest@2.1.4(@types/node@22.9.0)(happy-dom@15.11.0)(terser@5.36.0))(vue-router@4.4.5(vue@3.5.12(typescript@5.6.3)))(vue@3.5.12(typescript@5.6.3))(webpack-sources@3.2.3)
     transitivePeerDependencies:
       - '@cucumber/cucumber'
       - '@jest/globals'
@@ -13967,6 +14687,36 @@ snapshots:
 
   webpack-virtual-modules@0.6.2: {}
 
+  webpack@5.96.1:
+    dependencies:
+      '@types/eslint-scope': 3.7.7
+      '@types/estree': 1.0.6
+      '@webassemblyjs/ast': 1.14.1
+      '@webassemblyjs/wasm-edit': 1.14.1
+      '@webassemblyjs/wasm-parser': 1.14.1
+      acorn: 8.14.0
+      browserslist: 4.24.2
+      chrome-trace-event: 1.0.4
+      enhanced-resolve: 5.17.1
+      es-module-lexer: 1.5.4
+      eslint-scope: 5.1.1
+      events: 3.3.0
+      glob-to-regexp: 0.4.1
+      graceful-fs: 4.2.11
+      json-parse-even-better-errors: 2.3.1
+      loader-runner: 4.3.0
+      mime-types: 2.1.35
+      neo-async: 2.6.2
+      schema-utils: 3.3.0
+      tapable: 2.2.1
+      terser-webpack-plugin: 5.3.10(webpack@5.96.1)
+      watchpack: 2.4.2
+      webpack-sources: 3.2.3
+    transitivePeerDependencies:
+      - '@swc/core'
+      - esbuild
+      - uglify-js
+
   webpack@5.96.1(esbuild@0.23.1):
     dependencies:
       '@types/eslint-scope': 3.7.7

From 934dc66d685683f9fe7e3e16d85762d2b54560c5 Mon Sep 17 00:00:00 2001
From: harlan <harlan@harlanzw.com>
Date: Tue, 12 Nov 2024 23:24:54 +1100
Subject: [PATCH 16/16] fix: move to dedicated GoogleMaps folder

---
 src/module.ts                                             | 1 +
 .../components/{ => GoogleMaps}/ScriptGoogleMaps.vue      | 8 ++++----
 .../ScriptGoogleMapsAdvancedMarkerElement.vue             | 0
 .../{ => GoogleMaps}/ScriptGoogleMapsCircle.vue           | 0
 .../{ => GoogleMaps}/ScriptGoogleMapsHeatmapLayer.vue     | 0
 .../{ => GoogleMaps}/ScriptGoogleMapsInfoWindow.vue       | 0
 .../{ => GoogleMaps}/ScriptGoogleMapsMarker.vue           | 0
 .../{ => GoogleMaps}/ScriptGoogleMapsMarkerClusterer.vue  | 0
 .../{ => GoogleMaps}/ScriptGoogleMapsPinElement.vue       | 0
 .../{ => GoogleMaps}/ScriptGoogleMapsPolygon.vue          | 0
 .../{ => GoogleMaps}/ScriptGoogleMapsPolyline.vue         | 0
 .../{ => GoogleMaps}/ScriptGoogleMapsRectangle.vue        | 0
 12 files changed, 5 insertions(+), 4 deletions(-)
 rename src/runtime/components/{ => GoogleMaps}/ScriptGoogleMaps.vue (98%)
 rename src/runtime/components/{ => GoogleMaps}/ScriptGoogleMapsAdvancedMarkerElement.vue (100%)
 rename src/runtime/components/{ => GoogleMaps}/ScriptGoogleMapsCircle.vue (100%)
 rename src/runtime/components/{ => GoogleMaps}/ScriptGoogleMapsHeatmapLayer.vue (100%)
 rename src/runtime/components/{ => GoogleMaps}/ScriptGoogleMapsInfoWindow.vue (100%)
 rename src/runtime/components/{ => GoogleMaps}/ScriptGoogleMapsMarker.vue (100%)
 rename src/runtime/components/{ => GoogleMaps}/ScriptGoogleMapsMarkerClusterer.vue (100%)
 rename src/runtime/components/{ => GoogleMaps}/ScriptGoogleMapsPinElement.vue (100%)
 rename src/runtime/components/{ => GoogleMaps}/ScriptGoogleMapsPolygon.vue (100%)
 rename src/runtime/components/{ => GoogleMaps}/ScriptGoogleMapsPolyline.vue (100%)
 rename src/runtime/components/{ => GoogleMaps}/ScriptGoogleMapsRectangle.vue (100%)

diff --git a/src/module.ts b/src/module.ts
index 30754d14..2c57d478 100644
--- a/src/module.ts
+++ b/src/module.ts
@@ -132,6 +132,7 @@ export default defineNuxtModule<ModuleOptions>({
 
     addComponentsDir({
       path: resolve('./runtime/components'),
+      pathPrefix: false,
     })
 
     const scripts = registry(resolve)
diff --git a/src/runtime/components/ScriptGoogleMaps.vue b/src/runtime/components/GoogleMaps/ScriptGoogleMaps.vue
similarity index 98%
rename from src/runtime/components/ScriptGoogleMaps.vue
rename to src/runtime/components/GoogleMaps/ScriptGoogleMaps.vue
index 7fe19f27..57396d42 100644
--- a/src/runtime/components/ScriptGoogleMaps.vue
+++ b/src/runtime/components/GoogleMaps/ScriptGoogleMaps.vue
@@ -6,10 +6,10 @@ import { withQuery } from 'ufo'
 import type { QueryObject } from 'ufo'
 import { defu } from 'defu'
 import { hash } from 'ohash'
-import type { ElementScriptTrigger } from '../types'
-import { scriptRuntimeConfig } from '../utils'
-import { useScriptTriggerElement } from '../composables/useScriptTriggerElement'
-import { useScriptGoogleMaps } from '../registry/google-maps'
+import type { ElementScriptTrigger } from '#nuxt-scripts/types'
+import { scriptRuntimeConfig } from '#nuxt-scripts/utils'
+import { useScriptTriggerElement } from '#nuxt-scripts/composables/useScriptTriggerElement'
+import { useScriptGoogleMaps } from '#nuxt-scripts/registry/google-maps'
 import { resolveComponent, useHead } from '#imports'
 
 export const MAP_INJECTION_KEY = Symbol('map') as InjectionKey<{
diff --git a/src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue b/src/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue
similarity index 100%
rename from src/runtime/components/ScriptGoogleMapsAdvancedMarkerElement.vue
rename to src/runtime/components/GoogleMaps/ScriptGoogleMapsAdvancedMarkerElement.vue
diff --git a/src/runtime/components/ScriptGoogleMapsCircle.vue b/src/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue
similarity index 100%
rename from src/runtime/components/ScriptGoogleMapsCircle.vue
rename to src/runtime/components/GoogleMaps/ScriptGoogleMapsCircle.vue
diff --git a/src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue b/src/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue
similarity index 100%
rename from src/runtime/components/ScriptGoogleMapsHeatmapLayer.vue
rename to src/runtime/components/GoogleMaps/ScriptGoogleMapsHeatmapLayer.vue
diff --git a/src/runtime/components/ScriptGoogleMapsInfoWindow.vue b/src/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue
similarity index 100%
rename from src/runtime/components/ScriptGoogleMapsInfoWindow.vue
rename to src/runtime/components/GoogleMaps/ScriptGoogleMapsInfoWindow.vue
diff --git a/src/runtime/components/ScriptGoogleMapsMarker.vue b/src/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue
similarity index 100%
rename from src/runtime/components/ScriptGoogleMapsMarker.vue
rename to src/runtime/components/GoogleMaps/ScriptGoogleMapsMarker.vue
diff --git a/src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue b/src/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue
similarity index 100%
rename from src/runtime/components/ScriptGoogleMapsMarkerClusterer.vue
rename to src/runtime/components/GoogleMaps/ScriptGoogleMapsMarkerClusterer.vue
diff --git a/src/runtime/components/ScriptGoogleMapsPinElement.vue b/src/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue
similarity index 100%
rename from src/runtime/components/ScriptGoogleMapsPinElement.vue
rename to src/runtime/components/GoogleMaps/ScriptGoogleMapsPinElement.vue
diff --git a/src/runtime/components/ScriptGoogleMapsPolygon.vue b/src/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue
similarity index 100%
rename from src/runtime/components/ScriptGoogleMapsPolygon.vue
rename to src/runtime/components/GoogleMaps/ScriptGoogleMapsPolygon.vue
diff --git a/src/runtime/components/ScriptGoogleMapsPolyline.vue b/src/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue
similarity index 100%
rename from src/runtime/components/ScriptGoogleMapsPolyline.vue
rename to src/runtime/components/GoogleMaps/ScriptGoogleMapsPolyline.vue
diff --git a/src/runtime/components/ScriptGoogleMapsRectangle.vue b/src/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue
similarity index 100%
rename from src/runtime/components/ScriptGoogleMapsRectangle.vue
rename to src/runtime/components/GoogleMaps/ScriptGoogleMapsRectangle.vue