From 9585ea5d4a4638b0f8c72b531e839ddf1942c096 Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Thu, 7 May 2026 22:11:21 +0200 Subject: [PATCH 01/16] feat(search): replace server-side Fuse.js with client-side FTS5 search --- app/app.vue | 27 +--- app/components/Search.vue | 43 +++++++ app/error.vue | 18 +-- nuxt.config.ts | 1 - package.json | 4 +- pnpm-lock.yaml | 234 ++++++++++++++++++++++++++++++++-- server/api/search.json.get.ts | 11 -- 7 files changed, 272 insertions(+), 66 deletions(-) create mode 100644 app/components/Search.vue delete mode 100644 server/api/search.json.get.ts diff --git a/app/app.vue b/app/app.vue index 0c05b133b..9694cd532 100644 --- a/app/app.vue +++ b/app/app.vue @@ -3,7 +3,6 @@ const colorMode = useColorMode() const route = useRoute() const isChatRoute = computed(() => route.path === '/chat' || route.path.startsWith('/chat/')) const { version } = useDocsVersion() -const { searchGroups, searchLinks, searchTerm, searchFuse } = useNavigation() const { fetchList: fetchModules } = useModules() const { fetchList: fetchHosting } = useHostingProviders() const { track } = useAnalytics() @@ -16,10 +15,7 @@ watch(() => colorMode.preference, (newMode, oldMode) => { } }) -const [{ data: navigation }, { data: files }] = await Promise.all([ - useFetch('/api/navigation.json'), - useFetch('/api/search.json', { server: false }) -]) +const { data: navigation } = await useFetch('/api/navigation.json') onNuxtReady(() => { fetchModules() @@ -64,9 +60,6 @@ if (import.meta.server) { } const versionNavigation = computed(() => navigation.value?.filter(item => item.path === version.value.path || item.path === '/blog') ?? []) -const versionFiles = computed(() => files.value?.filter((file) => { - return file.id.startsWith(version.value.path + '/') || file.id.startsWith('/blog/') -}) ?? []) provide('navigation', versionNavigation) @@ -80,26 +73,16 @@ provide('navigation', versionNavigation) - - - - - - + + + - + diff --git a/app/components/Search.vue b/app/components/Search.vue new file mode 100644 index 000000000..57e106b5d --- /dev/null +++ b/app/components/Search.vue @@ -0,0 +1,43 @@ + + + diff --git a/app/error.vue b/app/error.vue index f8e36eb02..975c391b8 100644 --- a/app/error.vue +++ b/app/error.vue @@ -10,14 +10,10 @@ defineProps<{ error: NuxtError }>() const route = useRoute() const { version } = useDocsVersion() -const { searchGroups, searchLinks, searchTerm, searchFuse } = useNavigation() const { fetchList: fetchModules } = useModules() const { fetchList: fetchHosting } = useHostingProviders() -const [{ data: navigation }, { data: files }] = await Promise.all([ - useFetch('/api/navigation.json'), - useFetch('/api/search.json', { server: false }) -]) +const { data: navigation } = await useFetch('/api/navigation.json') onNuxtReady(() => { fetchModules() @@ -25,9 +21,6 @@ onNuxtReady(() => { }) const versionNavigation = computed(() => navigation.value?.filter(item => item.path === version.value.path || item.path === '/blog') ?? []) -const versionFiles = computed(() => files.value?.filter((file) => { - return file.id.startsWith(version.value.path + '/') || file.id.startsWith('/blog/') -}) ?? []) provide('navigation', versionNavigation) @@ -42,14 +35,7 @@ provide('navigation', versionNavigation) - + diff --git a/nuxt.config.ts b/nuxt.config.ts index c6dccca47..de3d9cb47 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -169,7 +169,6 @@ export default defineNuxtConfig({ '/admin/**': { ssr: false }, // Main navigation '/api/navigation.json': { prerender: true }, - '/api/search.json': { prerender: true }, // Redirects '/docs': { redirect: '/docs/getting-started/introduction', prerender: false }, '/docs/3.x': { redirect: '/docs/3.x/getting-started/introduction', prerender: false }, diff --git a/package.json b/package.json index e926b9549..f4020ba24 100644 --- a/package.json +++ b/package.json @@ -34,11 +34,11 @@ "@iconify-json/simple-icons": "^1.2.80", "@libsql/client": "^0.17.3", "@npm/types": "^2.1.0", - "@nuxt/content": "^3.13.0", + "@nuxt/content": "https://pkg.pr.new/@nuxt/content@80dc9c2", "@nuxt/hints": "^1.1.0", "@nuxt/image": "^2.0.0", "@nuxt/scripts": "^1.0.6", - "@nuxt/ui": "^4.7.1", + "@nuxt/ui": "https://pkg.pr.new/@nuxt/ui@b458fc5", "@nuxthub/core": "^0.10.7", "@nuxtjs/html-validator": "^2.1.0", "@nuxtjs/mcp-toolkit": "^0.16.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e80a41819..4efc1cdc0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,8 +42,8 @@ importers: specifier: ^2.1.0 version: 2.1.0 '@nuxt/content': - specifier: ^3.13.0 - version: 3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + specifier: https://pkg.pr.new/@nuxt/content@80dc9c2 + version: https://pkg.pr.new/@nuxt/content@80dc9c2(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) '@nuxt/hints': specifier: ^1.1.0 version: 1.1.0(@libsql/client@0.17.3)(@vercel/functions@3.5.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(ioredis@5.10.1)(magicast@0.5.2)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(srvx@0.11.15)(typescript@6.0.3)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.5.2)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(vue@3.5.33(typescript@6.0.3)) @@ -54,8 +54,8 @@ importers: specifier: ^1.0.6 version: 1.0.6(@types/youtube@0.2.0)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3)) '@nuxt/ui': - specifier: ^4.7.1 - version: 4.7.1(b46d8d5ca76462d528b1eaed987eeaf6) + specifier: https://pkg.pr.new/@nuxt/ui@b458fc5 + version: https://pkg.pr.new/@nuxt/ui@b458fc5(80f87d52be0c00060729589a8fdfdb02) '@nuxthub/core': specifier: ^0.10.7 version: 0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vue-tsc@3.2.8(typescript@6.0.3)) @@ -136,7 +136,7 @@ importers: version: 6.4.11(@nuxt/schema@4.4.4)(@resvg/resvg-js@2.6.2)(@resvg/resvg-wasm@2.6.2)(@takumi-rs/core@1.1.2)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(fontless@0.2.1(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(playwright-core@1.59.1)(sharp@0.34.5)(tailwindcss@4.2.4)(unifont@0.7.4)(unstorage@1.17.5(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) nuxt-schema-org: specifier: ^6.0.4 - version: 6.0.4(b411c5d4707e60756c8eb7f92b7841dd) + version: 6.0.4(aff64fcaa2d643848e14121369037db2) ofetch: specifier: ^1.5.1 version: 1.5.1 @@ -1674,8 +1674,9 @@ packages: '@nuxt/schema': optional: true - '@nuxt/content@3.13.0': - resolution: {integrity: sha512-ZpZ1l0yGzK/Y9QjBT8uReJ62DnOKDMlw+vkzSnkc8YDyZ0ZNhFj1fviMwDhEkArwvQTRfxi12GqzB/wxu01vEw==} + '@nuxt/content@https://pkg.pr.new/@nuxt/content@80dc9c2': + resolution: {tarball: https://pkg.pr.new/@nuxt/content@80dc9c2} + version: 3.13.0 engines: {node: '>= 20.19.0'} peerDependencies: '@electric-sql/pglite': '*' @@ -1907,6 +1908,46 @@ packages: zod: optional: true + '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@b458fc5': + resolution: {integrity: sha512-Tr9tUQt/ZSFtffa5Y6DoDm6yvcqNoVMcNBF97t5Cn5MFdPVwtn4JpcCvoI8FboCDZdDUD4vlgi+KAgv2TU6C5A==, tarball: https://pkg.pr.new/@nuxt/ui@b458fc5} + version: 4.7.1 + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@inertiajs/vue3': ^2.0.7 || ^3.0.0 + '@internationalized/date': ^3.0.0 + '@internationalized/number': ^3.0.0 + '@nuxt/content': ^3.0.0 + joi: ^18.0.0 + superstruct: ^2.0.0 + tailwindcss: ^4.0.0 + typescript: ^5.6.3 || ^6.0.0 + valibot: ^1.0.0 + vue-router: ^4.5.0 || ^5.0.0 + yup: ^1.7.0 + zod: ^3.24.0 || ^4.0.0 + peerDependenciesMeta: + '@inertiajs/vue3': + optional: true + '@internationalized/date': + optional: true + '@internationalized/number': + optional: true + '@nuxt/content': + optional: true + joi: + optional: true + superstruct: + optional: true + valibot: + optional: true + vue-router: + optional: true + yup: + optional: true + zod: + optional: true + '@nuxt/vite-builder@4.4.4': resolution: {integrity: sha512-SNyxEYVeTo3d26tt5rxS550VOFLyXx1UBqhZJexWhk42HgHa3d115LWZx+4e+FJf75SYZ1B/KTrkVeeOhfNBMw==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4398,6 +4439,48 @@ packages: universal-cookie: optional: true + '@vueuse/integrations@14.3.0': + resolution: {integrity: sha512-76I5FT2ESvCmCaSwapI+a/u/CFtNXmzl9f9lNp1hRtx8vKB8hfiokJr8IvQqcQG5ckGXElyXK516b54ozV3MvA==} + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 || ^8 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 || ^8 + vue: ^3.5.0 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + '@vueuse/metadata@10.11.1': resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} @@ -11142,7 +11225,7 @@ snapshots: - magicast - supports-color - '@nuxt/content@3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))': + '@nuxt/content@https://pkg.pr.new/@nuxt/content@80dc9c2(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@nuxtjs/mdc': 0.21.1(magicast@0.5.2) @@ -11747,7 +11830,7 @@ snapshots: - typescript - vite - '@nuxt/ui@4.7.1(b46d8d5ca76462d528b1eaed987eeaf6)': + '@nuxt/ui@4.7.1(80f87d52be0c00060729589a8fdfdb02)': dependencies: '@floating-ui/dom': 1.7.6 '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3)) @@ -11816,7 +11899,121 @@ snapshots: optionalDependencies: '@internationalized/date': 3.12.0 '@internationalized/number': 3.6.5 - '@nuxt/content': 3.13.0(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + '@nuxt/content': https://pkg.pr.new/@nuxt/content@80dc9c2(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + valibot: 1.3.1(typescript@6.0.3) + zod: 4.3.6 + transitivePeerDependencies: + - '@azure/app-configuration' + - '@azure/cosmos' + - '@azure/data-tables' + - '@azure/identity' + - '@azure/keyvault-secrets' + - '@azure/storage-blob' + - '@capacitor/preferences' + - '@deno/kv' + - '@emotion/is-prop-valid' + - '@netlify/blobs' + - '@planetscale/database' + - '@tiptap/extensions' + - '@tiptap/y-tiptap' + - '@upstash/redis' + - '@vercel/blob' + - '@vercel/functions' + - '@vercel/kv' + - '@vue/composition-api' + - async-validator + - aws4fetch + - axios + - change-case + - db0 + - drauu + - embla-carousel + - focus-trap + - idb-keyval + - ioredis + - jwt-decode + - magicast + - nprogress + - qrcode + - react + - react-dom + - sortablejs + - universal-cookie + - uploadthing + - vite + - vue + - yjs + + '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@b458fc5(80f87d52be0c00060729589a8fdfdb02)': + dependencies: + '@floating-ui/dom': 1.7.6 + '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3)) + '@nuxt/fonts': 0.14.0(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@nuxt/icon': 2.2.1(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3)) + '@nuxt/kit': 4.4.4(magicast@0.5.2) + '@nuxt/schema': 4.4.4 + '@nuxtjs/color-mode': 3.5.2(magicast@0.5.2) + '@standard-schema/spec': 1.1.0 + '@tailwindcss/postcss': 4.2.4 + '@tailwindcss/vite': 4.2.4(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) + '@tanstack/vue-table': 8.21.3(vue@3.5.33(typescript@6.0.3)) + '@tanstack/vue-virtual': 3.13.24(vue@3.5.33(typescript@6.0.3)) + '@tiptap/core': 3.22.4(@tiptap/pm@3.22.4) + '@tiptap/extension-bubble-menu': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/extension-code': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-collaboration': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30) + '@tiptap/extension-drag-handle': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/extension-collaboration@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)) + '@tiptap/extension-drag-handle-vue-3': 3.22.4(@tiptap/extension-drag-handle@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/extension-collaboration@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30))(yjs@13.6.30))(@tiptap/extension-node-range@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/y-tiptap@3.0.2(prosemirror-model@1.25.4)(prosemirror-state@1.4.4)(prosemirror-view@1.41.8)(y-protocols@1.0.7(yjs@13.6.30))(yjs@13.6.30)))(@tiptap/pm@3.22.4)(@tiptap/vue-3@3.22.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)) + '@tiptap/extension-floating-menu': 3.22.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/extension-horizontal-rule': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/extension-image': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4)) + '@tiptap/extension-mention': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(@tiptap/suggestion@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) + '@tiptap/extension-node-range': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/extension-placeholder': 3.22.4(@tiptap/extensions@3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)) + '@tiptap/markdown': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/pm': 3.22.4 + '@tiptap/starter-kit': 3.22.4 + '@tiptap/suggestion': 3.22.4(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4) + '@tiptap/vue-3': 3.22.4(@floating-ui/dom@1.7.6)(@tiptap/core@3.22.4(@tiptap/pm@3.22.4))(@tiptap/pm@3.22.4)(vue@3.5.33(typescript@6.0.3)) + '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3)) + '@vueuse/core': 14.3.0(vue@3.5.33(typescript@6.0.3)) + '@vueuse/integrations': 14.3.0(change-case@5.4.4)(fuse.js@7.3.0)(vue@3.5.33(typescript@6.0.3)) + '@vueuse/shared': 14.3.0(vue@3.5.33(typescript@6.0.3)) + colortranslator: 5.0.0 + consola: 3.4.2 + defu: 6.1.7 + embla-carousel-auto-height: 8.6.0(embla-carousel@8.6.0) + embla-carousel-auto-scroll: 8.6.0(embla-carousel@8.6.0) + embla-carousel-autoplay: 8.6.0(embla-carousel@8.6.0) + embla-carousel-class-names: 8.6.0(embla-carousel@8.6.0) + embla-carousel-fade: 8.6.0(embla-carousel@8.6.0) + embla-carousel-vue: 8.6.0(vue@3.5.33(typescript@6.0.3)) + embla-carousel-wheel-gestures: 8.1.0(embla-carousel@8.6.0) + fuse.js: 7.3.0 + hookable: 6.1.1 + knitwork: 1.3.0 + magic-string: 0.30.21 + mlly: 1.8.2 + motion-v: 2.2.1(@vueuse/core@14.3.0(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)) + ohash: 2.0.11 + pathe: 2.0.3 + reka-ui: 2.9.6(vue@3.5.33(typescript@6.0.3)) + scule: 1.3.0 + tailwind-merge: 3.5.0 + tailwind-variants: 3.2.2(tailwind-merge@3.5.0)(tailwindcss@4.2.4) + tailwindcss: 4.2.4 + tinyglobby: 0.2.16 + typescript: 6.0.3 + ufo: 1.6.4 + unplugin: 3.0.0 + unplugin-auto-import: 21.0.0(@nuxt/kit@4.4.4(magicast@0.5.2))(@vueuse/core@14.3.0(vue@3.5.33(typescript@6.0.3))) + unplugin-vue-components: 32.0.0(@nuxt/kit@4.4.4(magicast@0.5.2))(vue@3.5.33(typescript@6.0.3)) + vaul-vue: 0.4.1(reka-ui@2.9.6(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)) + vue-component-type-helpers: 3.2.7 + optionalDependencies: + '@internationalized/date': 3.12.0 + '@internationalized/number': 3.6.5 + '@nuxt/content': https://pkg.pr.new/@nuxt/content@80dc9c2(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) valibot: 1.3.1(typescript@6.0.3) zod: 4.3.6 transitivePeerDependencies: @@ -14150,6 +14347,15 @@ snapshots: change-case: 5.4.4 fuse.js: 7.3.0 + '@vueuse/integrations@14.3.0(change-case@5.4.4)(fuse.js@7.3.0)(vue@3.5.33(typescript@6.0.3))': + dependencies: + '@vueuse/core': 14.3.0(vue@3.5.33(typescript@6.0.3)) + '@vueuse/shared': 14.3.0(vue@3.5.33(typescript@6.0.3)) + vue: 3.5.33(typescript@6.0.3) + optionalDependencies: + change-case: 5.4.4 + fuse.js: 7.3.0 + '@vueuse/metadata@10.11.1': {} '@vueuse/metadata@14.2.1': {} @@ -17880,13 +18086,13 @@ snapshots: - vue - zod - nuxt-schema-org@6.0.4(b411c5d4707e60756c8eb7f92b7841dd): + nuxt-schema-org@6.0.4(aff64fcaa2d643848e14121369037db2): dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@unhead/schema-org': 2.1.13(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3))) defu: 6.1.7 nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) - nuxtseo-layer-devtools: 0.5.1(07ea55c6ca8e88584fcbe8e69b6c8657) + nuxtseo-layer-devtools: 0.5.1(1d4adfb21fa9dbbfe1459f84f13f5efe) nuxtseo-shared: 0.9.0(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6))(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) pkg-types: 2.3.1 optionalDependencies: @@ -18109,11 +18315,11 @@ snapshots: - xml2js - yaml - nuxtseo-layer-devtools@0.5.1(07ea55c6ca8e88584fcbe8e69b6c8657): + nuxtseo-layer-devtools@0.5.1(1d4adfb21fa9dbbfe1459f84f13f5efe): dependencies: '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@nuxt/kit': 4.4.4(magicast@0.5.2) - '@nuxt/ui': 4.7.1(b46d8d5ca76462d528b1eaed987eeaf6) + '@nuxt/ui': 4.7.1(80f87d52be0c00060729589a8fdfdb02) '@shikijs/langs': 4.0.2 '@shikijs/themes': 4.0.2 '@vueuse/nuxt': 14.3.0(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vue@3.5.33(typescript@6.0.3)) diff --git a/server/api/search.json.get.ts b/server/api/search.json.get.ts deleted file mode 100644 index 7dfe14f38..000000000 --- a/server/api/search.json.get.ts +++ /dev/null @@ -1,11 +0,0 @@ -// This route will be pre-rendered as /api/navigation.json -import { queryCollectionSearchSections } from '@nuxt/content/server' - -export default defineEventHandler(async (event) => { - return Promise.all([ - queryCollectionSearchSections(event, 'docsv3', { ignoredTags: ['style'] }), - queryCollectionSearchSections(event, 'docsv4', { ignoredTags: ['style'] }), - queryCollectionSearchSections(event, 'docsv5', { ignoredTags: ['style'] }), - queryCollectionSearchSections(event, 'blog') - ]).then(data => data.flat()) -}) From 1ff6108d8bb7ab2760e9deb211c4e5686264984c Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Fri, 8 May 2026 15:23:16 +0200 Subject: [PATCH 02/16] chore(deps): update --- app/components/Search.vue | 1 + package.json | 4 ++-- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 3 files changed, 21 insertions(+), 20 deletions(-) diff --git a/app/components/Search.vue b/app/components/Search.vue index 57e106b5d..6c7846987 100644 --- a/app/components/Search.vue +++ b/app/components/Search.vue @@ -38,6 +38,7 @@ watchDebounced(searchTerm, (term) => { :groups="searchGroups" :navigation="navigation" :search="search" + :search-status="status" :fuse="searchFuse" /> diff --git a/package.json b/package.json index f4020ba24..07fd53bcb 100644 --- a/package.json +++ b/package.json @@ -34,11 +34,11 @@ "@iconify-json/simple-icons": "^1.2.80", "@libsql/client": "^0.17.3", "@npm/types": "^2.1.0", - "@nuxt/content": "https://pkg.pr.new/@nuxt/content@80dc9c2", + "@nuxt/content": "https://pkg.pr.new/@nuxt/content@7625d39", "@nuxt/hints": "^1.1.0", "@nuxt/image": "^2.0.0", "@nuxt/scripts": "^1.0.6", - "@nuxt/ui": "https://pkg.pr.new/@nuxt/ui@b458fc5", + "@nuxt/ui": "https://pkg.pr.new/@nuxt/ui@3903a5b", "@nuxthub/core": "^0.10.7", "@nuxtjs/html-validator": "^2.1.0", "@nuxtjs/mcp-toolkit": "^0.16.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4efc1cdc0..70a09d1d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,8 +42,8 @@ importers: specifier: ^2.1.0 version: 2.1.0 '@nuxt/content': - specifier: https://pkg.pr.new/@nuxt/content@80dc9c2 - version: https://pkg.pr.new/@nuxt/content@80dc9c2(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + specifier: https://pkg.pr.new/@nuxt/content@7625d39 + version: https://pkg.pr.new/@nuxt/content@7625d39(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) '@nuxt/hints': specifier: ^1.1.0 version: 1.1.0(@libsql/client@0.17.3)(@vercel/functions@3.5.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(ioredis@5.10.1)(magicast@0.5.2)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(srvx@0.11.15)(typescript@6.0.3)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.5.2)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(vue@3.5.33(typescript@6.0.3)) @@ -54,8 +54,8 @@ importers: specifier: ^1.0.6 version: 1.0.6(@types/youtube@0.2.0)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3)) '@nuxt/ui': - specifier: https://pkg.pr.new/@nuxt/ui@b458fc5 - version: https://pkg.pr.new/@nuxt/ui@b458fc5(80f87d52be0c00060729589a8fdfdb02) + specifier: https://pkg.pr.new/@nuxt/ui@3903a5b + version: https://pkg.pr.new/@nuxt/ui@3903a5b(6d0543967abcd957e82e0988b264fa99) '@nuxthub/core': specifier: ^0.10.7 version: 0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vue-tsc@3.2.8(typescript@6.0.3)) @@ -136,7 +136,7 @@ importers: version: 6.4.11(@nuxt/schema@4.4.4)(@resvg/resvg-js@2.6.2)(@resvg/resvg-wasm@2.6.2)(@takumi-rs/core@1.1.2)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(fontless@0.2.1(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(playwright-core@1.59.1)(sharp@0.34.5)(tailwindcss@4.2.4)(unifont@0.7.4)(unstorage@1.17.5(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) nuxt-schema-org: specifier: ^6.0.4 - version: 6.0.4(aff64fcaa2d643848e14121369037db2) + version: 6.0.4(ce53f39c1fa5d2d90d128cf400c3b3b1) ofetch: specifier: ^1.5.1 version: 1.5.1 @@ -1674,8 +1674,8 @@ packages: '@nuxt/schema': optional: true - '@nuxt/content@https://pkg.pr.new/@nuxt/content@80dc9c2': - resolution: {tarball: https://pkg.pr.new/@nuxt/content@80dc9c2} + '@nuxt/content@https://pkg.pr.new/@nuxt/content@7625d39': + resolution: {integrity: sha512-aDNS2KZwBN8eTN2clfwBTdGvzidnUcVDlUthUC4GpuJeY2LRtjpDcvjRtmMkLfriVn6hnUkYpHnhTUQnLGwVoQ==, tarball: https://pkg.pr.new/@nuxt/content@7625d39} version: 3.13.0 engines: {node: '>= 20.19.0'} peerDependencies: @@ -1908,8 +1908,8 @@ packages: zod: optional: true - '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@b458fc5': - resolution: {integrity: sha512-Tr9tUQt/ZSFtffa5Y6DoDm6yvcqNoVMcNBF97t5Cn5MFdPVwtn4JpcCvoI8FboCDZdDUD4vlgi+KAgv2TU6C5A==, tarball: https://pkg.pr.new/@nuxt/ui@b458fc5} + '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@3903a5b': + resolution: {integrity: sha512-Zfd9xZrD5sahsr33Dz2NaQFHeSRLOjfLYA/EyP3DgbyKxgoITMH4pNr5LQCM2COHAgSwwzSJwxZTGNdW7Wb1MQ==, tarball: https://pkg.pr.new/@nuxt/ui@3903a5b} version: 4.7.1 engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -11225,7 +11225,7 @@ snapshots: - magicast - supports-color - '@nuxt/content@https://pkg.pr.new/@nuxt/content@80dc9c2(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))': + '@nuxt/content@https://pkg.pr.new/@nuxt/content@7625d39(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@nuxtjs/mdc': 0.21.1(magicast@0.5.2) @@ -11830,7 +11830,7 @@ snapshots: - typescript - vite - '@nuxt/ui@4.7.1(80f87d52be0c00060729589a8fdfdb02)': + '@nuxt/ui@4.7.1(6d0543967abcd957e82e0988b264fa99)': dependencies: '@floating-ui/dom': 1.7.6 '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3)) @@ -11899,7 +11899,7 @@ snapshots: optionalDependencies: '@internationalized/date': 3.12.0 '@internationalized/number': 3.6.5 - '@nuxt/content': https://pkg.pr.new/@nuxt/content@80dc9c2(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + '@nuxt/content': https://pkg.pr.new/@nuxt/content@7625d39(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) valibot: 1.3.1(typescript@6.0.3) zod: 4.3.6 transitivePeerDependencies: @@ -11944,7 +11944,7 @@ snapshots: - vue - yjs - '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@b458fc5(80f87d52be0c00060729589a8fdfdb02)': + '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@3903a5b(6d0543967abcd957e82e0988b264fa99)': dependencies: '@floating-ui/dom': 1.7.6 '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3)) @@ -12013,7 +12013,7 @@ snapshots: optionalDependencies: '@internationalized/date': 3.12.0 '@internationalized/number': 3.6.5 - '@nuxt/content': https://pkg.pr.new/@nuxt/content@80dc9c2(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + '@nuxt/content': https://pkg.pr.new/@nuxt/content@7625d39(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) valibot: 1.3.1(typescript@6.0.3) zod: 4.3.6 transitivePeerDependencies: @@ -18086,13 +18086,13 @@ snapshots: - vue - zod - nuxt-schema-org@6.0.4(aff64fcaa2d643848e14121369037db2): + nuxt-schema-org@6.0.4(ce53f39c1fa5d2d90d128cf400c3b3b1): dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@unhead/schema-org': 2.1.13(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3))) defu: 6.1.7 nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) - nuxtseo-layer-devtools: 0.5.1(1d4adfb21fa9dbbfe1459f84f13f5efe) + nuxtseo-layer-devtools: 0.5.1(ba9c9dee93216b706c7dd99126ade1b1) nuxtseo-shared: 0.9.0(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6))(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) pkg-types: 2.3.1 optionalDependencies: @@ -18315,11 +18315,11 @@ snapshots: - xml2js - yaml - nuxtseo-layer-devtools@0.5.1(1d4adfb21fa9dbbfe1459f84f13f5efe): + nuxtseo-layer-devtools@0.5.1(ba9c9dee93216b706c7dd99126ade1b1): dependencies: '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@nuxt/kit': 4.4.4(magicast@0.5.2) - '@nuxt/ui': 4.7.1(80f87d52be0c00060729589a8fdfdb02) + '@nuxt/ui': 4.7.1(6d0543967abcd957e82e0988b264fa99) '@shikijs/langs': 4.0.2 '@shikijs/themes': 4.0.2 '@vueuse/nuxt': 14.3.0(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vue@3.5.33(typescript@6.0.3)) From d67d2782a30ed617f39d231066e303f7fb26bf89 Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Fri, 8 May 2026 15:23:21 +0200 Subject: [PATCH 03/16] fix: typecheck --- app/components/Search.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/components/Search.vue b/app/components/Search.vue index 6c7846987..631cb309b 100644 --- a/app/components/Search.vue +++ b/app/components/Search.vue @@ -7,7 +7,7 @@ defineProps<{ const { version } = useDocsVersion() -const collections = computed(() => [version.value.collection, 'blog'].filter(Boolean) as string[]) +const collections = computed(() => [version.value.collection, 'blog' as const].filter(Boolean)) const { status, search, init } = useSearchCollection(collections, { immediate: false, From 18ce72f61c334e269d2400d7086bb02c4fe795f7 Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Fri, 8 May 2026 15:35:48 +0200 Subject: [PATCH 04/16] fix: update resultLimit --- app/composables/useNavigation.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/composables/useNavigation.ts b/app/composables/useNavigation.ts index 16401b44a..4031263b5 100644 --- a/app/composables/useNavigation.ts +++ b/app/composables/useNavigation.ts @@ -4,7 +4,7 @@ import { createSharedComposable } from '@vueuse/core' // Stable reference so the deep watcher inside `useFuse` doesn't rebuild // the entire Fuse index on every reactive flush. const searchFuse = { - resultLimit: 42, + resultLimit: 25, fuseOptions: { threshold: 0 } From 52cc902114d6c12242cdc84dcd30874f36399995 Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Sat, 9 May 2026 14:48:25 +0200 Subject: [PATCH 05/16] fix(useNavigation): sort modules --- app/composables/useNavigation.ts | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/app/composables/useNavigation.ts b/app/composables/useNavigation.ts index 4031263b5..5b52cc1c4 100644 --- a/app/composables/useNavigation.ts +++ b/app/composables/useNavigation.ts @@ -118,6 +118,7 @@ function _useHeaderLinks() { }, { label: 'Updates', icon: 'i-lucide-newspaper', + search: false, to: '/blog', children: [{ label: 'Blog', @@ -229,6 +230,7 @@ const _useNavigation = () => { id: `module-${module.name}`, label: module.npm, suffix: module.description, + downloads: module.stats?.downloads ?? 0, avatar: { src: moduleImage(module.icon), ui: { @@ -255,6 +257,20 @@ const _useNavigation = () => { }))) const searchGroups = computed(() => [{ + id: 'modules-search', + label: 'Modules', + items: modulesItems.value, + postFilter: (searchTerm: string, items: any[]) => { + if (!searchTerm) { + return [...items].sort((a, b) => (b.downloads ?? 0) - (a.downloads ?? 0)) + } + return items + } + }, { + id: 'hosting-search', + label: 'Hosting', + items: hostingItems.value + }, { id: 'ask-ai-search', label: 'AI', ignoreFilter: true, @@ -273,14 +289,6 @@ const _useNavigation = () => { openAgent(searchTerm.value) } }] - }, { - id: 'modules-search', - label: 'Modules', - items: modulesItems.value - }, { - id: 'hosting-search', - label: 'Hosting', - items: hostingItems.value }]) watchDebounced(searchTerm, (term) => { From 4874912cc3c2e94bc7506ac9e132e3a0ea9db67f Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Sat, 9 May 2026 14:49:06 +0200 Subject: [PATCH 06/16] chore(deps): update --- package.json | 4 ++-- pnpm-lock.yaml | 36 ++++++++++++++++++------------------ 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 07fd53bcb..9f275e7ff 100644 --- a/package.json +++ b/package.json @@ -34,11 +34,11 @@ "@iconify-json/simple-icons": "^1.2.80", "@libsql/client": "^0.17.3", "@npm/types": "^2.1.0", - "@nuxt/content": "https://pkg.pr.new/@nuxt/content@7625d39", + "@nuxt/content": "https://pkg.pr.new/@nuxt/content@dbafed4", "@nuxt/hints": "^1.1.0", "@nuxt/image": "^2.0.0", "@nuxt/scripts": "^1.0.6", - "@nuxt/ui": "https://pkg.pr.new/@nuxt/ui@3903a5b", + "@nuxt/ui": "https://pkg.pr.new/@nuxt/ui@4562d47", "@nuxthub/core": "^0.10.7", "@nuxtjs/html-validator": "^2.1.0", "@nuxtjs/mcp-toolkit": "^0.16.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 70a09d1d8..f0ab47822 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,8 +42,8 @@ importers: specifier: ^2.1.0 version: 2.1.0 '@nuxt/content': - specifier: https://pkg.pr.new/@nuxt/content@7625d39 - version: https://pkg.pr.new/@nuxt/content@7625d39(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + specifier: https://pkg.pr.new/@nuxt/content@dbafed4 + version: https://pkg.pr.new/@nuxt/content@dbafed4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) '@nuxt/hints': specifier: ^1.1.0 version: 1.1.0(@libsql/client@0.17.3)(@vercel/functions@3.5.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(ioredis@5.10.1)(magicast@0.5.2)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(srvx@0.11.15)(typescript@6.0.3)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.5.2)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(vue@3.5.33(typescript@6.0.3)) @@ -54,8 +54,8 @@ importers: specifier: ^1.0.6 version: 1.0.6(@types/youtube@0.2.0)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3)) '@nuxt/ui': - specifier: https://pkg.pr.new/@nuxt/ui@3903a5b - version: https://pkg.pr.new/@nuxt/ui@3903a5b(6d0543967abcd957e82e0988b264fa99) + specifier: https://pkg.pr.new/@nuxt/ui@4562d47 + version: https://pkg.pr.new/@nuxt/ui@4562d47(b8364d328c6d7b2fd1a59e4a4741e734) '@nuxthub/core': specifier: ^0.10.7 version: 0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vue-tsc@3.2.8(typescript@6.0.3)) @@ -136,7 +136,7 @@ importers: version: 6.4.11(@nuxt/schema@4.4.4)(@resvg/resvg-js@2.6.2)(@resvg/resvg-wasm@2.6.2)(@takumi-rs/core@1.1.2)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(fontless@0.2.1(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(playwright-core@1.59.1)(sharp@0.34.5)(tailwindcss@4.2.4)(unifont@0.7.4)(unstorage@1.17.5(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) nuxt-schema-org: specifier: ^6.0.4 - version: 6.0.4(ce53f39c1fa5d2d90d128cf400c3b3b1) + version: 6.0.4(516cf3bd67c2b304c6df318d0b2071f5) ofetch: specifier: ^1.5.1 version: 1.5.1 @@ -1674,8 +1674,8 @@ packages: '@nuxt/schema': optional: true - '@nuxt/content@https://pkg.pr.new/@nuxt/content@7625d39': - resolution: {integrity: sha512-aDNS2KZwBN8eTN2clfwBTdGvzidnUcVDlUthUC4GpuJeY2LRtjpDcvjRtmMkLfriVn6hnUkYpHnhTUQnLGwVoQ==, tarball: https://pkg.pr.new/@nuxt/content@7625d39} + '@nuxt/content@https://pkg.pr.new/@nuxt/content@dbafed4': + resolution: {tarball: https://pkg.pr.new/@nuxt/content@dbafed4} version: 3.13.0 engines: {node: '>= 20.19.0'} peerDependencies: @@ -1908,8 +1908,8 @@ packages: zod: optional: true - '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@3903a5b': - resolution: {integrity: sha512-Zfd9xZrD5sahsr33Dz2NaQFHeSRLOjfLYA/EyP3DgbyKxgoITMH4pNr5LQCM2COHAgSwwzSJwxZTGNdW7Wb1MQ==, tarball: https://pkg.pr.new/@nuxt/ui@3903a5b} + '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@4562d47': + resolution: {integrity: sha512-h7t2IhlnGYxyKAVFn0UQk46V+kWBdV8/gFO0XwnOxZTJeMF2DiHnx5ooegKrFgdrPtDCmOOxIA1TsykPHbLosg==, tarball: https://pkg.pr.new/@nuxt/ui@4562d47} version: 4.7.1 engines: {node: ^20.19.0 || >=22.12.0} hasBin: true @@ -11225,7 +11225,7 @@ snapshots: - magicast - supports-color - '@nuxt/content@https://pkg.pr.new/@nuxt/content@7625d39(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))': + '@nuxt/content@https://pkg.pr.new/@nuxt/content@dbafed4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@nuxtjs/mdc': 0.21.1(magicast@0.5.2) @@ -11830,7 +11830,7 @@ snapshots: - typescript - vite - '@nuxt/ui@4.7.1(6d0543967abcd957e82e0988b264fa99)': + '@nuxt/ui@4.7.1(b8364d328c6d7b2fd1a59e4a4741e734)': dependencies: '@floating-ui/dom': 1.7.6 '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3)) @@ -11899,7 +11899,7 @@ snapshots: optionalDependencies: '@internationalized/date': 3.12.0 '@internationalized/number': 3.6.5 - '@nuxt/content': https://pkg.pr.new/@nuxt/content@7625d39(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + '@nuxt/content': https://pkg.pr.new/@nuxt/content@dbafed4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) valibot: 1.3.1(typescript@6.0.3) zod: 4.3.6 transitivePeerDependencies: @@ -11944,7 +11944,7 @@ snapshots: - vue - yjs - '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@3903a5b(6d0543967abcd957e82e0988b264fa99)': + '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@4562d47(b8364d328c6d7b2fd1a59e4a4741e734)': dependencies: '@floating-ui/dom': 1.7.6 '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3)) @@ -12013,7 +12013,7 @@ snapshots: optionalDependencies: '@internationalized/date': 3.12.0 '@internationalized/number': 3.6.5 - '@nuxt/content': https://pkg.pr.new/@nuxt/content@7625d39(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + '@nuxt/content': https://pkg.pr.new/@nuxt/content@dbafed4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) valibot: 1.3.1(typescript@6.0.3) zod: 4.3.6 transitivePeerDependencies: @@ -18086,13 +18086,13 @@ snapshots: - vue - zod - nuxt-schema-org@6.0.4(ce53f39c1fa5d2d90d128cf400c3b3b1): + nuxt-schema-org@6.0.4(516cf3bd67c2b304c6df318d0b2071f5): dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@unhead/schema-org': 2.1.13(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3))) defu: 6.1.7 nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) - nuxtseo-layer-devtools: 0.5.1(ba9c9dee93216b706c7dd99126ade1b1) + nuxtseo-layer-devtools: 0.5.1(1ebafca510cad35b1b530a5bd89a5ab8) nuxtseo-shared: 0.9.0(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6))(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) pkg-types: 2.3.1 optionalDependencies: @@ -18315,11 +18315,11 @@ snapshots: - xml2js - yaml - nuxtseo-layer-devtools@0.5.1(ba9c9dee93216b706c7dd99126ade1b1): + nuxtseo-layer-devtools@0.5.1(1ebafca510cad35b1b530a5bd89a5ab8): dependencies: '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@nuxt/kit': 4.4.4(magicast@0.5.2) - '@nuxt/ui': 4.7.1(6d0543967abcd957e82e0988b264fa99) + '@nuxt/ui': 4.7.1(b8364d328c6d7b2fd1a59e4a4741e734) '@shikijs/langs': 4.0.2 '@shikijs/themes': 4.0.2 '@vueuse/nuxt': 14.3.0(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vue@3.5.33(typescript@6.0.3)) From 07a9adbe8e6d7a7fdea4e0f65ac3051eb297fddd Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Mon, 11 May 2026 11:24:33 +0200 Subject: [PATCH 07/16] chore(deps): update --- package.json | 2 +- pnpm-lock.yaml | 30 +++++++++++++++--------------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index 9f275e7ff..acd3fb3ff 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "@iconify-json/simple-icons": "^1.2.80", "@libsql/client": "^0.17.3", "@npm/types": "^2.1.0", - "@nuxt/content": "https://pkg.pr.new/@nuxt/content@dbafed4", + "@nuxt/content": "https://pkg.pr.new/@nuxt/content@606bf64", "@nuxt/hints": "^1.1.0", "@nuxt/image": "^2.0.0", "@nuxt/scripts": "^1.0.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f0ab47822..15d4d1884 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -42,8 +42,8 @@ importers: specifier: ^2.1.0 version: 2.1.0 '@nuxt/content': - specifier: https://pkg.pr.new/@nuxt/content@dbafed4 - version: https://pkg.pr.new/@nuxt/content@dbafed4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + specifier: https://pkg.pr.new/@nuxt/content@606bf64 + version: https://pkg.pr.new/@nuxt/content@606bf64(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) '@nuxt/hints': specifier: ^1.1.0 version: 1.1.0(@libsql/client@0.17.3)(@vercel/functions@3.5.0)(better-sqlite3@12.9.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(ioredis@5.10.1)(magicast@0.5.2)(rolldown@1.0.0-beta.57(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))(srvx@0.11.15)(typescript@6.0.3)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vitest@4.1.5(@opentelemetry/api@1.9.0)(@types/node@25.5.2)(happy-dom@20.9.0)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(vue@3.5.33(typescript@6.0.3)) @@ -55,7 +55,7 @@ importers: version: 1.0.6(@types/youtube@0.2.0)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3)) '@nuxt/ui': specifier: https://pkg.pr.new/@nuxt/ui@4562d47 - version: https://pkg.pr.new/@nuxt/ui@4562d47(b8364d328c6d7b2fd1a59e4a4741e734) + version: https://pkg.pr.new/@nuxt/ui@4562d47(7858864f3c40424419f1beae64cf13d3) '@nuxthub/core': specifier: ^0.10.7 version: 0.10.7(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(magicast@0.5.2)(typescript@6.0.3)(vue-tsc@3.2.8(typescript@6.0.3)) @@ -136,7 +136,7 @@ importers: version: 6.4.11(@nuxt/schema@4.4.4)(@resvg/resvg-js@2.6.2)(@resvg/resvg-wasm@2.6.2)(@takumi-rs/core@1.1.2)(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3)))(fontless@0.2.1(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)))(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(playwright-core@1.59.1)(sharp@0.34.5)(tailwindcss@4.2.4)(unifont@0.7.4)(unstorage@1.17.5(@vercel/functions@3.5.0)(db0@0.3.4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0)))(ioredis@5.10.1))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) nuxt-schema-org: specifier: ^6.0.4 - version: 6.0.4(516cf3bd67c2b304c6df318d0b2071f5) + version: 6.0.4(c25d2a6fb64b8a2059c7f9f5d6dace58) ofetch: specifier: ^1.5.1 version: 1.5.1 @@ -1674,8 +1674,8 @@ packages: '@nuxt/schema': optional: true - '@nuxt/content@https://pkg.pr.new/@nuxt/content@dbafed4': - resolution: {tarball: https://pkg.pr.new/@nuxt/content@dbafed4} + '@nuxt/content@https://pkg.pr.new/@nuxt/content@606bf64': + resolution: {integrity: sha512-LGnQh0ENMXxwHRdkR2ASbXlQq2ygiSiNh9UKtyeNAsuJtW7xUtC7MeTk5F4W8L8mZklVHwdWaTmJ18XI9I7r8Q==, tarball: https://pkg.pr.new/@nuxt/content@606bf64} version: 3.13.0 engines: {node: '>= 20.19.0'} peerDependencies: @@ -11225,7 +11225,7 @@ snapshots: - magicast - supports-color - '@nuxt/content@https://pkg.pr.new/@nuxt/content@dbafed4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))': + '@nuxt/content@https://pkg.pr.new/@nuxt/content@606bf64(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3))': dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@nuxtjs/mdc': 0.21.1(magicast@0.5.2) @@ -11830,7 +11830,7 @@ snapshots: - typescript - vite - '@nuxt/ui@4.7.1(b8364d328c6d7b2fd1a59e4a4741e734)': + '@nuxt/ui@4.7.1(7858864f3c40424419f1beae64cf13d3)': dependencies: '@floating-ui/dom': 1.7.6 '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3)) @@ -11899,7 +11899,7 @@ snapshots: optionalDependencies: '@internationalized/date': 3.12.0 '@internationalized/number': 3.6.5 - '@nuxt/content': https://pkg.pr.new/@nuxt/content@dbafed4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + '@nuxt/content': https://pkg.pr.new/@nuxt/content@606bf64(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) valibot: 1.3.1(typescript@6.0.3) zod: 4.3.6 transitivePeerDependencies: @@ -11944,7 +11944,7 @@ snapshots: - vue - yjs - '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@4562d47(b8364d328c6d7b2fd1a59e4a4741e734)': + '@nuxt/ui@https://pkg.pr.new/@nuxt/ui@4562d47(7858864f3c40424419f1beae64cf13d3)': dependencies: '@floating-ui/dom': 1.7.6 '@iconify/vue': 5.0.0(vue@3.5.33(typescript@6.0.3)) @@ -12013,7 +12013,7 @@ snapshots: optionalDependencies: '@internationalized/date': 3.12.0 '@internationalized/number': 3.6.5 - '@nuxt/content': https://pkg.pr.new/@nuxt/content@dbafed4(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) + '@nuxt/content': https://pkg.pr.new/@nuxt/content@606bf64(@libsql/client@0.17.3)(better-sqlite3@12.9.0)(drizzle-orm@0.45.2(@cloudflare/workers-types@4.20260405.1)(@libsql/client@0.17.3)(@opentelemetry/api@1.9.0)(better-sqlite3@12.9.0))(magicast@0.5.2)(valibot@1.3.1(typescript@6.0.3)) valibot: 1.3.1(typescript@6.0.3) zod: 4.3.6 transitivePeerDependencies: @@ -18086,13 +18086,13 @@ snapshots: - vue - zod - nuxt-schema-org@6.0.4(516cf3bd67c2b304c6df318d0b2071f5): + nuxt-schema-org@6.0.4(c25d2a6fb64b8a2059c7f9f5d6dace58): dependencies: '@nuxt/kit': 4.4.4(magicast@0.5.2) '@unhead/schema-org': 2.1.13(@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3))) defu: 6.1.7 nuxt-site-config: 4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) - nuxtseo-layer-devtools: 0.5.1(1ebafca510cad35b1b530a5bd89a5ab8) + nuxtseo-layer-devtools: 0.5.1(f149d3e4f8a5b57968384d1e560cfb81) nuxtseo-shared: 0.9.0(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt-site-config@4.0.8(@nuxt/schema@4.4.4)(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6))(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))(zod@4.3.6) pkg-types: 2.3.1 optionalDependencies: @@ -18315,11 +18315,11 @@ snapshots: - xml2js - yaml - nuxtseo-layer-devtools@0.5.1(1ebafca510cad35b1b530a5bd89a5ab8): + nuxtseo-layer-devtools@0.5.1(f149d3e4f8a5b57968384d1e560cfb81): dependencies: '@nuxt/devtools-kit': 4.0.0-alpha.3(magicast@0.5.2)(vite@7.3.2(@types/node@25.5.2)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(tsx@4.21.0)(yaml@2.8.3)) '@nuxt/kit': 4.4.4(magicast@0.5.2) - '@nuxt/ui': 4.7.1(b8364d328c6d7b2fd1a59e4a4741e734) + '@nuxt/ui': 4.7.1(7858864f3c40424419f1beae64cf13d3) '@shikijs/langs': 4.0.2 '@shikijs/themes': 4.0.2 '@vueuse/nuxt': 14.3.0(magicast@0.5.2)(nuxt@4.4.4(2ef17c23716a4a887291dd1c62fbd8f8))(vue@3.5.33(typescript@6.0.3)) From 91f1ebf967504595443834ce1a985e04f791f69d Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Mon, 11 May 2026 11:24:54 +0200 Subject: [PATCH 08/16] fix(AgentFloatingInput): use local keydown for escape to avoid blocking ContentSearch --- app/components/agent/AgentFloatingInput.vue | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/app/components/agent/AgentFloatingInput.vue b/app/components/agent/AgentFloatingInput.vue index ed5aed922..8bd529d0c 100644 --- a/app/components/agent/AgentFloatingInput.vue +++ b/app/components/agent/AgentFloatingInput.vue @@ -41,14 +41,12 @@ defineShortcuts({ handler: () => { inputRef.value?.inputRef?.focus() } - }, - escape: { - usingInput: true, - handler: () => { - inputRef.value?.inputRef?.blur() - } } }) + +function onEscape() { + inputRef.value?.inputRef?.blur() +}