[READ-ONLY] a fast, modern browser for the npm registry
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

refactor: prefer `VueUse`, reuse `formatBytes` (#612)

authored by

Vida Xie and committed by
GitHub
4796b78e ec831b8a

+90 -101
+1 -7
app/components/CodeDirectoryListing.vue
··· 1 1 <script setup lang="ts"> 2 2 import type { PackageFileTree } from '#shared/types' 3 3 import { getFileIcon } from '~/utils/file-icons' 4 + import { formatBytes } from '~/utils/formatters' 4 5 5 6 const props = defineProps<{ 6 7 tree: PackageFileTree[] ··· 35 36 if (parts.length <= 1) return '' 36 37 return parts.slice(0, -1).join('/') 37 38 }) 38 - 39 - // Format file size 40 - function formatBytes(bytes: number): string { 41 - if (bytes < 1024) return `${bytes} B` 42 - if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} kB` 43 - return `${(bytes / (1024 * 1024)).toFixed(1)} MB` 44 - } 45 39 </script> 46 40 47 41 <template>
+9 -19
app/components/ColumnPicker.vue
··· 16 16 const menuId = useId() 17 17 18 18 // Close on click outside (check both button and menu) 19 - function handleClickOutside(event: MouseEvent) { 20 - const target = event.target as Node 21 - const isOutsideButton = buttonRef.value && !buttonRef.value.contains(target) 22 - const isOutsideMenu = !menuRef.value || !menuRef.value.contains(target) 23 - if (isOutsideButton && isOutsideMenu) { 19 + onClickOutside( 20 + menuRef, 21 + () => { 24 22 isOpen.value = false 25 - } 26 - } 23 + }, 24 + { 25 + ignore: [buttonRef], 26 + }, 27 + ) 27 28 28 29 // Close on Escape key 29 - function handleKeydown(event: KeyboardEvent) { 30 + useEventListener('keydown', event => { 30 31 if (event.key === 'Escape' && isOpen.value) { 31 32 isOpen.value = false 32 33 buttonRef.value?.focus() 33 34 } 34 - } 35 - 36 - onMounted(() => { 37 - document.addEventListener('click', handleClickOutside) 38 - document.addEventListener('keydown', handleKeydown) 39 35 }) 40 - 41 - onUnmounted(() => { 42 - document.removeEventListener('click', handleClickOutside) 43 - document.removeEventListener('keydown', handleKeydown) 44 - }) 45 - 46 36 // Columns that can be toggled (name is always visible) 47 37 const toggleableColumns = computed(() => props.columns.filter(col => col.id !== 'name')) 48 38
+7 -16
app/components/HeaderAccountMenu.client.vue
··· 23 23 /** Only show count of active (pending/approved/running) operations */ 24 24 const operationCount = computed(() => activeOperations.value.length) 25 25 26 - function handleClickOutside(event: MouseEvent) { 27 - const target = event.target as HTMLElement 28 - if (!target.closest('.account-menu')) { 29 - isOpen.value = false 30 - } 31 - } 26 + const accountMenuRef = useTemplateRef('accountMenuRef') 32 27 33 - function handleKeydown(event: KeyboardEvent) { 28 + onClickOutside(accountMenuRef, () => { 29 + isOpen.value = false 30 + }) 31 + 32 + useEventListener('keydown', event => { 34 33 if (event.key === 'Escape' && isOpen.value) { 35 34 isOpen.value = false 36 35 } 37 - } 38 - 39 - onMounted(() => { 40 - document.addEventListener('click', handleClickOutside) 41 - }) 42 - 43 - onUnmounted(() => { 44 - document.removeEventListener('click', handleClickOutside) 45 36 }) 46 37 47 38 function openConnectorModal() { ··· 56 47 </script> 57 48 58 49 <template> 59 - <div class="account-menu relative" @keydown="handleKeydown"> 50 + <div ref="accountMenuRef" class="relative"> 60 51 <button 61 52 type="button" 62 53 class="relative flex items-center justify-end gap-2 px-2 py-1.5 min-w-24 rounded-md transition-colors duration-200 hover:bg-bg-subtle focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-fg/50"
+5 -3
app/components/ScrollToTop.vue
··· 9 9 const isMounted = useMounted() 10 10 const isVisible = shallowRef(false) 11 11 const scrollThreshold = 300 12 - const supportsScrollStateQueries = useSupported(() => { 13 - return isMounted.value && CSS.supports('container-type', 'scroll-state') 14 - }) 12 + const { isSupported: supportsScrollStateQueries } = useCssSupports( 13 + 'container-type', 14 + 'scroll-state', 15 + { ssrValue: false }, 16 + ) 15 17 16 18 function onScroll() { 17 19 if (!supportsScrollStateQueries.value) {
+1 -6
app/pages/[...package].vue
··· 5 5 import { joinURL } from 'ufo' 6 6 import { areUrlsEquivalent } from '#shared/utils/url' 7 7 import { isEditableElement } from '~/utils/input' 8 + import { formatBytes } from '~/utils/formatters' 8 9 9 10 definePageMeta({ 10 11 name: 'package', ··· 241 242 .replace(/\.git$/, '') 242 243 .replace(/^ssh:\/\/git@github\.com/, 'https://github.com') 243 244 .replace(/^git@github\.com:/, 'https://github.com/') 244 - } 245 - 246 - function formatBytes(bytes: number): string { 247 - if (bytes < 1024) return `${bytes} B` 248 - if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} kB` 249 - return `${(bytes / (1024 * 1024)).toFixed(1)} MB` 250 245 } 251 246 252 247 function getDependencyCount(version: PackumentVersion | null): number {
+1 -7
app/pages/code/[...path].vue
··· 4 4 PackageFileTreeResponse, 5 5 PackageFileContentResponse, 6 6 } from '#shared/types' 7 + import { formatBytes } from '~/utils/formatters' 7 8 8 9 definePageMeta({ 9 10 name: 'code', ··· 192 193 segments.push('v', ver) 193 194 } 194 195 return { name: 'package' as const, params: { package: segments } } 195 - } 196 - 197 - // Format file size 198 - function formatBytes(bytes: number): string { 199 - if (bytes < 1024) return `${bytes} B` 200 - if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} kB` 201 - return `${(bytes / (1024 * 1024)).toFixed(1)} MB` 202 196 } 203 197 204 198 // Line number click handler - update URL hash without scrolling
+7
app/utils/formatters.ts
··· 46 46 47 47 return `${sign}${Math.round(abs)}` 48 48 } 49 + 50 + // Format file size 51 + export function formatBytes(bytes: number): string { 52 + if (bytes < 1024) return `${bytes} B` 53 + if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} kB` 54 + return `${(bytes / (1024 * 1024)).toFixed(1)} MB` 55 + }
+3 -3
package.json
··· 65 65 "@vite-pwa/assets-generator": "1.0.2", 66 66 "@vite-pwa/nuxt": "1.1.0", 67 67 "@voidzero-dev/vite-plus-core": "0.0.0-833c515fa25cef20905a7f9affb156dfa6f151ab", 68 - "@vueuse/core": "14.1.0", 69 - "@vueuse/nuxt": "14.1.0", 70 - "@vueuse/router": "^14.1.0", 68 + "@vueuse/core": "14.2.0", 69 + "@vueuse/nuxt": "14.2.0", 70 + "@vueuse/router": "^14.2.0", 71 71 "marked": "17.0.1", 72 72 "module-replacements": "2.11.0", 73 73 "nuxt": "4.3.0",
+56 -40
pnpm-lock.yaml
··· 108 108 specifier: 0.0.0-833c515fa25cef20905a7f9affb156dfa6f151ab 109 109 version: 0.0.0-833c515fa25cef20905a7f9affb156dfa6f151ab(@types/node@24.10.9)(esbuild@0.27.2)(jiti@2.6.1)(terser@5.46.0)(typescript@5.9.3)(yaml@2.8.2) 110 110 '@vueuse/core': 111 - specifier: 14.1.0 112 - version: 14.1.0(vue@3.5.27(typescript@5.9.3)) 111 + specifier: 14.2.0 112 + version: 14.2.0(vue@3.5.27(typescript@5.9.3)) 113 113 '@vueuse/nuxt': 114 - specifier: 14.1.0 115 - version: 14.1.0(magicast@0.5.1)(nuxt@4.3.0(@parcel/watcher@2.5.6)(@types/node@24.10.9)(@upstash/redis@1.36.1)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(oxlint@1.42.0(oxlint-tsgolint@0.11.3))(rolldown@1.0.0-rc.1)(rollup@4.57.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)) 114 + specifier: 14.2.0 115 + version: 14.2.0(magicast@0.5.1)(nuxt@4.3.0(@parcel/watcher@2.5.6)(@types/node@24.10.9)(@upstash/redis@1.36.1)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(oxlint@1.42.0(oxlint-tsgolint@0.11.3))(rolldown@1.0.0-rc.1)(rollup@4.57.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)) 116 116 '@vueuse/router': 117 - specifier: ^14.1.0 118 - version: 14.1.0(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) 117 + specifier: ^14.2.0 118 + version: 14.2.0(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) 119 119 marked: 120 120 specifier: 17.0.1 121 121 version: 17.0.1 ··· 337 337 338 338 '@atproto/api@0.18.20': 339 339 resolution: {integrity: sha512-BZYZkh2VJIFCXEnc/vzKwAwWjAQQTgbNJ8FBxpBK+z+KYh99O0uPCsRYKoCQsRrnkgrhzdU9+g2G+7zanTIGbw==} 340 - 341 - '@atproto/common-web@0.4.14': 342 - resolution: {integrity: sha512-rMU8Q+kpyPpirUS9OqT7aOD1hxKa+diem3vc7BA0lOkj0tU6wcAxegxmbPZ8JaOsR7SSYhP/jCt/5wbT4qqkuQ==} 343 340 344 341 '@atproto/common-web@0.4.15': 345 342 resolution: {integrity: sha512-A4l9gyqUNez8CjZp/Trypz/D3WIQsNj8dN05WR6+RoBbvwc9JhWjKPrm+WoVYc/F16RPdXHLkE3BEJlGIyYIiA==} ··· 4351 4348 peerDependencies: 4352 4349 vue: ^3.5.0 4353 4350 4351 + '@vueuse/core@14.2.0': 4352 + resolution: {integrity: sha512-tpjzVl7KCQNVd/qcaCE9XbejL38V6KJAEq/tVXj7mDPtl6JtzmUdnXelSS+ULRkkrDgzYVK7EerQJvd2jR794Q==} 4353 + peerDependencies: 4354 + vue: ^3.5.0 4355 + 4354 4356 '@vueuse/integrations@14.1.0': 4355 4357 resolution: {integrity: sha512-eNQPdisnO9SvdydTIXnTE7c29yOsJBD/xkwEyQLdhDC/LKbqrFpXHb3uS//7NcIrQO3fWVuvMGp8dbK6mNEMCA==} 4356 4358 peerDependencies: ··· 4402 4404 '@vueuse/metadata@14.1.0': 4403 4405 resolution: {integrity: sha512-7hK4g015rWn2PhKcZ99NyT+ZD9sbwm7SGvp7k+k+rKGWnLjS/oQozoIZzWfCewSUeBmnJkIb+CNr7Zc/EyRnnA==} 4404 4406 4405 - '@vueuse/nuxt@14.1.0': 4406 - resolution: {integrity: sha512-zw8WSgRrdtsA1daqlFl5ojoTJnvWad/IbMIcHw4EN8Wci09koeFfh5/oKbkKeIQ3gzihvr9x0bu8BVz8Z2auSg==} 4407 + '@vueuse/metadata@14.2.0': 4408 + resolution: {integrity: sha512-i3axTGjU8b13FtyR4Keeama+43iD+BwX9C2TmzBVKqjSHArF03hjkp2SBZ1m72Jk2UtrX0aYCugBq2R1fhkuAQ==} 4409 + 4410 + '@vueuse/nuxt@14.2.0': 4411 + resolution: {integrity: sha512-MpxTYd7/W0izL6DgMEYUUTYkm1q0aqE0kfMr6oBcj5R0TIrdPJAJIwVaqs5pbSjQUPjNNgQ7mCRvx9RKFUq+VQ==} 4407 4412 peerDependencies: 4408 4413 nuxt: ^3.0.0 || ^4.0.0-0 4409 4414 vue: ^3.5.0 4410 4415 4411 - '@vueuse/router@14.1.0': 4412 - resolution: {integrity: sha512-8h7g0PhjcMC2Vnu9zBkN1J038JFIzkS3/DP2L5ouzFEhY3YAM8zkIOZ0K+hzAWkYEFLGmWGcgBfuvCUD0U42Jw==} 4416 + '@vueuse/router@14.2.0': 4417 + resolution: {integrity: sha512-5cTINBtMOF04ByLm0n6V7bOnBhYCD8j2JNSectSA4qIFk6SMfs3MunVExDz7bUk4/wy9t4l7RNs3SEWGSDb9DA==} 4413 4418 peerDependencies: 4414 4419 vue: ^3.5.0 4415 - vue-router: ^4.0.0 4420 + vue-router: ^4.0.0 || ^5.0.0 4416 4421 4417 4422 '@vueuse/shared@10.11.1': 4418 4423 resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} ··· 4422 4427 4423 4428 '@vueuse/shared@14.1.0': 4424 4429 resolution: {integrity: sha512-EcKxtYvn6gx1F8z9J5/rsg3+lTQnvOruQd8fUecW99DCK04BkWD7z5KQ/wTAx+DazyoEE9dJt/zV8OIEQbM6kw==} 4430 + peerDependencies: 4431 + vue: ^3.5.0 4432 + 4433 + '@vueuse/shared@14.2.0': 4434 + resolution: {integrity: sha512-Z0bmluZTlAXgUcJ4uAFaML16JcD8V0QG00Db3quR642I99JXIDRa2MI2LGxiLVhcBjVnL1jOzIvT5TT2lqJlkA==} 4425 4435 peerDependencies: 4426 4436 vue: ^3.5.0 4427 4437 ··· 9563 9573 tlds: 1.261.0 9564 9574 zod: 3.25.76 9565 9575 9566 - '@atproto/common-web@0.4.14': 9567 - dependencies: 9568 - '@atproto/lex-data': 0.0.9 9569 - '@atproto/lex-json': 0.0.9 9570 - '@atproto/syntax': 0.4.3 9571 - zod: 3.25.76 9572 - 9573 9576 '@atproto/common-web@0.4.15': 9574 9577 dependencies: 9575 9578 '@atproto/lex-data': 0.0.10 ··· 9579 9582 9580 9583 '@atproto/common@0.5.9': 9581 9584 dependencies: 9582 - '@atproto/common-web': 0.4.14 9585 + '@atproto/common-web': 0.4.15 9583 9586 '@atproto/lex-cbor': 0.0.9 9584 9587 '@atproto/lex-data': 0.0.9 9585 9588 iso-datestring-validator: 2.2.2 ··· 9704 9707 9705 9708 '@atproto/lexicon@0.6.1': 9706 9709 dependencies: 9707 - '@atproto/common-web': 0.4.14 9710 + '@atproto/common-web': 0.4.15 9708 9711 '@atproto/syntax': 0.4.3 9709 9712 iso-datestring-validator: 2.2.2 9710 9713 multiformats: 9.9.0 ··· 9747 9750 '@atproto/repo@0.8.12': 9748 9751 dependencies: 9749 9752 '@atproto/common': 0.5.9 9750 - '@atproto/common-web': 0.4.14 9753 + '@atproto/common-web': 0.4.15 9751 9754 '@atproto/crypto': 0.4.5 9752 9755 '@atproto/lexicon': 0.6.1 9753 9756 '@ipld/dag-cbor': 7.0.3 ··· 11710 11713 dependencies: 11711 11714 '@nuxt/kit': 4.3.0(magicast@0.5.1) 11712 11715 '@unhead/vue': 2.1.2(vue@3.5.27(typescript@5.9.3)) 11713 - '@vueuse/core': 14.1.0(vue@3.5.27(typescript@5.9.3)) 11716 + '@vueuse/core': 14.2.0(vue@3.5.27(typescript@5.9.3)) 11714 11717 consola: 3.4.2 11715 11718 defu: 6.1.4 11716 11719 estree-walker: 3.0.3 ··· 11883 11886 '@tiptap/suggestion': 3.17.1(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1) 11884 11887 '@tiptap/vue-3': 3.17.1(@floating-ui/dom@1.7.5)(@tiptap/core@3.17.1(@tiptap/pm@3.17.1))(@tiptap/pm@3.17.1)(vue@3.5.27(typescript@5.9.3)) 11885 11888 '@unhead/vue': 2.1.2(vue@3.5.27(typescript@5.9.3)) 11886 - '@vueuse/core': 14.1.0(vue@3.5.27(typescript@5.9.3)) 11889 + '@vueuse/core': 14.2.0(vue@3.5.27(typescript@5.9.3)) 11887 11890 '@vueuse/integrations': 14.1.0(fuse.js@7.1.0)(vue@3.5.27(typescript@5.9.3)) 11888 - '@vueuse/shared': 14.1.0(vue@3.5.27(typescript@5.9.3)) 11891 + '@vueuse/shared': 14.2.0(vue@3.5.27(typescript@5.9.3)) 11889 11892 colortranslator: 5.0.0 11890 11893 consola: 3.4.2 11891 11894 defu: 6.1.4 ··· 11901 11904 knitwork: 1.3.0 11902 11905 magic-string: 0.30.21 11903 11906 mlly: 1.8.0 11904 - motion-v: 1.10.2(@vueuse/core@14.1.0(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) 11907 + motion-v: 1.10.2(@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) 11905 11908 ohash: 2.0.11 11906 11909 pathe: 2.0.3 11907 11910 reka-ui: 2.7.0(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)) ··· 11913 11916 typescript: 5.9.3 11914 11917 ufo: 1.6.3 11915 11918 unplugin: 2.3.11 11916 - unplugin-auto-import: 21.0.0(@nuxt/kit@4.3.0(magicast@0.5.1))(@vueuse/core@14.1.0(vue@3.5.27(typescript@5.9.3))) 11919 + unplugin-auto-import: 21.0.0(@nuxt/kit@4.3.0(magicast@0.5.1))(@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3))) 11917 11920 unplugin-vue-components: 31.0.0(@nuxt/kit@4.3.0(magicast@0.5.1))(vue@3.5.27(typescript@5.9.3)) 11918 11921 vaul-vue: 0.4.1(reka-ui@2.7.0(typescript@5.9.3)(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) 11919 11922 vue-component-type-helpers: 3.2.4 ··· 14234 14237 '@vueuse/shared': 14.1.0(vue@3.5.27(typescript@5.9.3)) 14235 14238 vue: 3.5.27(typescript@5.9.3) 14236 14239 14240 + '@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3))': 14241 + dependencies: 14242 + '@types/web-bluetooth': 0.0.21 14243 + '@vueuse/metadata': 14.2.0 14244 + '@vueuse/shared': 14.2.0(vue@3.5.27(typescript@5.9.3)) 14245 + vue: 3.5.27(typescript@5.9.3) 14246 + 14237 14247 '@vueuse/integrations@14.1.0(fuse.js@7.1.0)(vue@3.5.27(typescript@5.9.3))': 14238 14248 dependencies: 14239 14249 '@vueuse/core': 14.1.0(vue@3.5.27(typescript@5.9.3)) ··· 14248 14258 14249 14259 '@vueuse/metadata@14.1.0': {} 14250 14260 14251 - '@vueuse/nuxt@14.1.0(magicast@0.5.1)(nuxt@4.3.0(@parcel/watcher@2.5.6)(@types/node@24.10.9)(@upstash/redis@1.36.1)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(oxlint@1.42.0(oxlint-tsgolint@0.11.3))(rolldown@1.0.0-rc.1)(rollup@4.57.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))': 14261 + '@vueuse/metadata@14.2.0': {} 14262 + 14263 + '@vueuse/nuxt@14.2.0(magicast@0.5.1)(nuxt@4.3.0(@parcel/watcher@2.5.6)(@types/node@24.10.9)(@upstash/redis@1.36.1)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(oxlint@1.42.0(oxlint-tsgolint@0.11.3))(rolldown@1.0.0-rc.1)(rollup@4.57.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3))': 14252 14264 dependencies: 14253 14265 '@nuxt/kit': 4.3.0(magicast@0.5.1) 14254 - '@vueuse/core': 14.1.0(vue@3.5.27(typescript@5.9.3)) 14255 - '@vueuse/metadata': 14.1.0 14266 + '@vueuse/core': 14.2.0(vue@3.5.27(typescript@5.9.3)) 14267 + '@vueuse/metadata': 14.2.0 14256 14268 local-pkg: 1.1.2 14257 14269 nuxt: 4.3.0(@parcel/watcher@2.5.6)(@types/node@24.10.9)(@upstash/redis@1.36.1)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.6.2)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.6.2))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(oxlint@1.42.0(oxlint-tsgolint@0.11.3))(rolldown@1.0.0-rc.1)(rollup@4.57.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2) 14258 14270 vue: 3.5.27(typescript@5.9.3) 14259 14271 transitivePeerDependencies: 14260 14272 - magicast 14261 14273 14262 - '@vueuse/router@14.1.0(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))': 14274 + '@vueuse/router@14.2.0(vue-router@4.6.4(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3))': 14263 14275 dependencies: 14264 - '@vueuse/shared': 14.1.0(vue@3.5.27(typescript@5.9.3)) 14276 + '@vueuse/shared': 14.2.0(vue@3.5.27(typescript@5.9.3)) 14265 14277 vue: 3.5.27(typescript@5.9.3) 14266 14278 vue-router: 4.6.4(vue@3.5.27(typescript@5.9.3)) 14267 14279 ··· 14279 14291 - typescript 14280 14292 14281 14293 '@vueuse/shared@14.1.0(vue@3.5.27(typescript@5.9.3))': 14294 + dependencies: 14295 + vue: 3.5.27(typescript@5.9.3) 14296 + 14297 + '@vueuse/shared@14.2.0(vue@3.5.27(typescript@5.9.3))': 14282 14298 dependencies: 14283 14299 vue: 3.5.27(typescript@5.9.3) 14284 14300 ··· 15135 15151 '@nuxtjs/mcp-toolkit': 0.6.2(hono@4.11.7)(magicast@0.5.1)(zod@4.3.6) 15136 15152 '@nuxtjs/mdc': 0.20.0(magicast@0.5.1) 15137 15153 '@nuxtjs/robots': 5.6.7(magicast@0.5.1)(vue@3.5.27(typescript@5.9.3))(zod@4.3.6) 15138 - '@vueuse/core': 14.1.0(vue@3.5.27(typescript@5.9.3)) 15154 + '@vueuse/core': 14.2.0(vue@3.5.27(typescript@5.9.3)) 15139 15155 better-sqlite3: 12.5.0 15140 15156 defu: 6.1.4 15141 15157 exsolve: 1.0.8 15142 15158 git-url-parse: 16.1.0 15143 15159 minimark: 0.2.0 15144 - motion-v: 1.10.2(@vueuse/core@14.1.0(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) 15160 + motion-v: 1.10.2(@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)) 15145 15161 nuxt: 4.3.0(@parcel/watcher@2.5.6)(@types/node@24.10.9)(@upstash/redis@1.36.1)(@vercel/kv@3.0.0)(@vue/compiler-sfc@3.5.27)(better-sqlite3@12.5.0)(cac@6.7.14)(db0@0.3.4(better-sqlite3@12.5.0))(eslint@9.39.2(jiti@2.6.1))(ioredis@5.9.2)(magicast@0.5.1)(optionator@0.9.4)(oxlint@1.42.0(oxlint-tsgolint@0.11.3))(rolldown@1.0.0-rc.1)(rollup@4.57.0)(terser@5.46.0)(typescript@5.9.3)(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue-tsc@3.2.4(typescript@5.9.3))(yaml@2.8.2) 15146 15162 nuxt-llms: 0.2.0(magicast@0.5.1) 15147 15163 nuxt-og-image: 5.1.13(@unhead/vue@2.1.2(vue@3.5.27(typescript@5.9.3)))(magicast@0.5.1)(unstorage@1.17.4(@upstash/redis@1.36.1)(@vercel/kv@3.0.0)(db0@0.3.4(better-sqlite3@12.5.0))(ioredis@5.9.2))(vite@7.3.1(@types/node@24.10.9)(jiti@2.6.1)(lightningcss@1.31.1)(terser@5.46.0)(yaml@2.8.2))(vue@3.5.27(typescript@5.9.3)) ··· 17476 17492 17477 17493 motion-utils@12.29.2: {} 17478 17494 17479 - motion-v@1.10.2(@vueuse/core@14.1.0(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)): 17495 + motion-v@1.10.2(@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3)))(vue@3.5.27(typescript@5.9.3)): 17480 17496 dependencies: 17481 - '@vueuse/core': 14.1.0(vue@3.5.27(typescript@5.9.3)) 17497 + '@vueuse/core': 14.2.0(vue@3.5.27(typescript@5.9.3)) 17482 17498 framer-motion: 12.29.2 17483 17499 hey-listen: 1.0.8 17484 17500 motion-dom: 12.29.2 ··· 20176 20192 20177 20193 unpipe@1.0.0: {} 20178 20194 20179 - unplugin-auto-import@21.0.0(@nuxt/kit@4.3.0(magicast@0.5.1))(@vueuse/core@14.1.0(vue@3.5.27(typescript@5.9.3))): 20195 + unplugin-auto-import@21.0.0(@nuxt/kit@4.3.0(magicast@0.5.1))(@vueuse/core@14.2.0(vue@3.5.27(typescript@5.9.3))): 20180 20196 dependencies: 20181 20197 local-pkg: 1.1.2 20182 20198 magic-string: 0.30.21 ··· 20186 20202 unplugin-utils: 0.3.1 20187 20203 optionalDependencies: 20188 20204 '@nuxt/kit': 4.3.0(magicast@0.5.1) 20189 - '@vueuse/core': 14.1.0(vue@3.5.27(typescript@5.9.3)) 20205 + '@vueuse/core': 14.2.0(vue@3.5.27(typescript@5.9.3)) 20190 20206 20191 20207 unplugin-utils@0.2.5: 20192 20208 dependencies: