[{"data":1,"prerenderedAt":3989},["ShallowReactive",2],{"$fGCo9l1hMtNdUiA6QzdUX5X3kLqaWcC5t2kdz4LrvCvc":3,"versions":2029,"-blog-building-a-feedback-widget":2033,"-blog-building-a-feedback-widget-surround":3988},[4,1120,1940],{"title":5,"titleTemplate":6,"icon":7,"path":8,"stem":9,"children":10,"page":108},"Docs",null,"i-lucide-book-marked","/docs/3.x","docs/3.x",[11,109,246,426,907,999,1036,1078],{"title":12,"titleTemplate":13,"icon":14,"path":15,"stem":16,"children":17,"page":108},"Get Started","%s · Get Started with Nuxt","i-lucide-rocket","/docs/3.x/getting-started","docs/3.x/1.getting-started",[18,23,28,33,38,43,48,53,58,63,68,73,78,83,88,93,98,103],{"title":19,"path":20,"stem":21,"titleTemplate":6,"icon":22},"Introduction","/docs/3.x/getting-started/introduction","docs/3.x/1.getting-started/01.introduction","i-lucide-info",{"title":24,"path":25,"stem":26,"titleTemplate":6,"icon":27},"Installation","/docs/3.x/getting-started/installation","docs/3.x/1.getting-started/02.installation","i-lucide-play",{"title":29,"path":30,"stem":31,"titleTemplate":6,"icon":32},"Configuration","/docs/3.x/getting-started/configuration","docs/3.x/1.getting-started/03.configuration","i-lucide-cog",{"title":34,"path":35,"stem":36,"titleTemplate":6,"icon":37},"Views","/docs/3.x/getting-started/views","docs/3.x/1.getting-started/04.views","i-lucide-panels-top-left",{"title":39,"path":40,"stem":41,"titleTemplate":6,"icon":42},"Assets","/docs/3.x/getting-started/assets","docs/3.x/1.getting-started/05.assets","i-lucide-image",{"title":44,"path":45,"stem":46,"titleTemplate":6,"icon":47},"Styling","/docs/3.x/getting-started/styling","docs/3.x/1.getting-started/06.styling","i-lucide-palette",{"title":49,"path":50,"stem":51,"titleTemplate":6,"icon":52},"Routing","/docs/3.x/getting-started/routing","docs/3.x/1.getting-started/07.routing","i-lucide-milestone",{"title":54,"path":55,"stem":56,"titleTemplate":6,"icon":57},"SEO and Meta","/docs/3.x/getting-started/seo-meta","docs/3.x/1.getting-started/08.seo-meta","i-lucide-file-search",{"title":59,"path":60,"stem":61,"titleTemplate":6,"icon":62},"Transitions","/docs/3.x/getting-started/transitions","docs/3.x/1.getting-started/09.transitions","i-lucide-toggle-right",{"title":64,"path":65,"stem":66,"titleTemplate":6,"icon":67},"Data Fetching","/docs/3.x/getting-started/data-fetching","docs/3.x/1.getting-started/10.data-fetching","i-lucide-cable",{"title":69,"path":70,"stem":71,"titleTemplate":6,"icon":72},"State Management","/docs/3.x/getting-started/state-management","docs/3.x/1.getting-started/11.state-management","i-lucide-database",{"title":74,"path":75,"stem":76,"titleTemplate":6,"icon":77},"Error Handling","/docs/3.x/getting-started/error-handling","docs/3.x/1.getting-started/12.error-handling","i-lucide-bug-off",{"title":79,"path":80,"stem":81,"titleTemplate":6,"icon":82},"Server","/docs/3.x/getting-started/server","docs/3.x/1.getting-started/13.server","i-lucide-pc-case",{"title":84,"path":85,"stem":86,"titleTemplate":6,"icon":87},"Layers","/docs/3.x/getting-started/layers","docs/3.x/1.getting-started/14.layers","i-lucide-layers",{"title":89,"path":90,"stem":91,"titleTemplate":6,"icon":92},"Prerendering","/docs/3.x/getting-started/prerendering","docs/3.x/1.getting-started/15.prerendering","i-lucide-file-code-2",{"title":94,"path":95,"stem":96,"titleTemplate":6,"icon":97},"Deployment","/docs/3.x/getting-started/deployment","docs/3.x/1.getting-started/16.deployment","i-lucide-cloud",{"title":99,"path":100,"stem":101,"titleTemplate":6,"icon":102},"Testing","/docs/3.x/getting-started/testing","docs/3.x/1.getting-started/17.testing","i-lucide-circle-check",{"title":104,"path":105,"stem":106,"titleTemplate":6,"icon":107},"Upgrade Guide","/docs/3.x/getting-started/upgrade","docs/3.x/1.getting-started/18.upgrade","i-lucide-circle-arrow-up",false,{"title":110,"titleTemplate":111,"icon":112,"path":113,"stem":114,"children":115,"page":108},"Directory Structure","%s · Nuxt Directory Structure","i-vscode-icons-default-folder","/docs/3.x/directory-structure","docs/3.x/2.directory-structure",[116,121,126,131,136,141,146,151,156,161,165,170,174,179,184,189,194,199,204,209,214,218,223,228,232,236,241],{"title":117,"path":118,"stem":119,"titleTemplate":6,"icon":120},".nuxt","/docs/3.x/directory-structure/nuxt","docs/3.x/2.directory-structure/0.nuxt","i-vscode-icons-folder-type-temp",{"title":122,"path":123,"stem":124,"titleTemplate":6,"icon":125},".output","/docs/3.x/directory-structure/output","docs/3.x/2.directory-structure/0.output","i-vscode-icons-folder-type-package",{"title":127,"path":128,"stem":129,"titleTemplate":6,"icon":130},"assets","/docs/3.x/directory-structure/assets","docs/3.x/2.directory-structure/1.assets","i-vscode-icons-folder-type-asset",{"title":132,"path":133,"stem":134,"titleTemplate":6,"icon":135},"components","/docs/3.x/directory-structure/components","docs/3.x/2.directory-structure/1.components","i-vscode-icons-folder-type-component",{"title":137,"path":138,"stem":139,"titleTemplate":6,"icon":140},"composables","/docs/3.x/directory-structure/composables","docs/3.x/2.directory-structure/1.composables","i-vscode-icons-folder-type-src",{"title":142,"path":143,"stem":144,"titleTemplate":6,"icon":145},"content","/docs/3.x/directory-structure/content","docs/3.x/2.directory-structure/1.content","i-vscode-icons-folder-type-log",{"title":147,"path":148,"stem":149,"titleTemplate":6,"icon":150},"layers","/docs/3.x/directory-structure/layers","docs/3.x/2.directory-structure/1.layers","i-vscode-icons-folder-type-nuxt",{"title":152,"path":153,"stem":154,"titleTemplate":6,"icon":155},"layouts","/docs/3.x/directory-structure/layouts","docs/3.x/2.directory-structure/1.layouts","i-vscode-icons-folder-type-view",{"title":157,"path":158,"stem":159,"titleTemplate":6,"icon":160},"middleware","/docs/3.x/directory-structure/middleware","docs/3.x/2.directory-structure/1.middleware","i-vscode-icons-folder-type-middleware",{"title":162,"path":163,"stem":164,"titleTemplate":6,"icon":150},"modules","/docs/3.x/directory-structure/modules","docs/3.x/2.directory-structure/1.modules",{"title":166,"path":167,"stem":168,"titleTemplate":6,"icon":169},"node_modules","/docs/3.x/directory-structure/node_modules","docs/3.x/2.directory-structure/1.node_modules","i-vscode-icons-folder-type-node",{"title":171,"path":172,"stem":173,"titleTemplate":6,"icon":155},"pages","/docs/3.x/directory-structure/pages","docs/3.x/2.directory-structure/1.pages",{"title":175,"path":176,"stem":177,"titleTemplate":6,"icon":178},"plugins","/docs/3.x/directory-structure/plugins","docs/3.x/2.directory-structure/1.plugins","i-vscode-icons-folder-type-plugin",{"title":180,"path":181,"stem":182,"titleTemplate":6,"icon":183},"public","/docs/3.x/directory-structure/public","docs/3.x/2.directory-structure/1.public","i-vscode-icons-folder-type-public",{"title":185,"path":186,"stem":187,"titleTemplate":6,"icon":188},"server","/docs/3.x/directory-structure/server","docs/3.x/2.directory-structure/1.server","i-vscode-icons-folder-type-server",{"title":190,"path":191,"stem":192,"titleTemplate":6,"icon":193},"shared","/docs/3.x/directory-structure/shared","docs/3.x/2.directory-structure/1.shared","i-vscode-icons-folder-type-shared",{"title":195,"path":196,"stem":197,"titleTemplate":6,"icon":198},"utils","/docs/3.x/directory-structure/utils","docs/3.x/2.directory-structure/1.utils","i-vscode-icons-folder-type-tools",{"title":200,"path":201,"stem":202,"titleTemplate":6,"icon":203},".env","/docs/3.x/directory-structure/env","docs/3.x/2.directory-structure/2.env","i-vscode-icons-file-type-dotenv",{"title":205,"path":206,"stem":207,"titleTemplate":6,"icon":208},".gitignore","/docs/3.x/directory-structure/gitignore","docs/3.x/2.directory-structure/2.gitignore","i-vscode-icons-file-type-git",{"title":210,"path":211,"stem":212,"titleTemplate":6,"icon":213},".nuxtignore","/docs/3.x/directory-structure/nuxtignore","docs/3.x/2.directory-structure/2.nuxtignore","i-vscode-icons-file-type-nuxt",{"title":215,"path":216,"stem":217,"titleTemplate":6,"icon":213},".nuxtrc","/docs/3.x/directory-structure/nuxtrc","docs/3.x/2.directory-structure/2.nuxtrc",{"title":219,"path":220,"stem":221,"titleTemplate":6,"icon":222},"app.vue","/docs/3.x/directory-structure/app","docs/3.x/2.directory-structure/3.app","i-vscode-icons-file-type-vue",{"title":224,"path":225,"stem":226,"titleTemplate":6,"icon":227},"app.config.ts","/docs/3.x/directory-structure/app-config","docs/3.x/2.directory-structure/3.app-config","i-vscode-icons-file-type-light-config",{"title":229,"path":230,"stem":231,"titleTemplate":6,"icon":222},"error.vue","/docs/3.x/directory-structure/error","docs/3.x/2.directory-structure/3.error",{"title":233,"path":234,"stem":235,"titleTemplate":6,"icon":213},"nuxt.config.ts","/docs/3.x/directory-structure/nuxt-config","docs/3.x/2.directory-structure/3.nuxt-config",{"title":237,"path":238,"stem":239,"titleTemplate":6,"icon":240},"package.json","/docs/3.x/directory-structure/package","docs/3.x/2.directory-structure/3.package","i-vscode-icons-file-type-npm",{"title":242,"path":243,"stem":244,"titleTemplate":6,"icon":245},"tsconfig.json","/docs/3.x/directory-structure/tsconfig","docs/3.x/2.directory-structure/3.tsconfig","i-vscode-icons-file-type-tsconfig",{"title":247,"titleTemplate":6,"icon":248,"path":249,"stem":250,"children":251,"page":108},"Guide","i-lucide-book-open","/docs/3.x/guide","docs/3.x/3.guide",[252,287,306,321,356,379],{"title":253,"titleTemplate":254,"icon":255,"path":256,"stem":257,"children":258,"page":108},"Key Concepts","%s · Nuxt Concepts","i-lucide-medal","/docs/3.x/guide/concepts","docs/3.x/3.guide/1.concepts",[259,263,267,271,275,279,283],{"title":260,"path":261,"stem":262,"titleTemplate":6},"Rendering Modes","/docs/3.x/guide/concepts/rendering","docs/3.x/3.guide/1.concepts/1.rendering",{"title":264,"path":265,"stem":266,"titleTemplate":6},"Nuxt Lifecycle","/docs/3.x/guide/concepts/nuxt-lifecycle","docs/3.x/3.guide/1.concepts/2.nuxt-lifecycle",{"title":268,"path":269,"stem":270,"titleTemplate":6},"Auto-imports","/docs/3.x/guide/concepts/auto-imports","docs/3.x/3.guide/1.concepts/3.auto-imports",{"title":272,"path":273,"stem":274,"titleTemplate":6},"Server Engine","/docs/3.x/guide/concepts/server-engine","docs/3.x/3.guide/1.concepts/4.server-engine",{"title":276,"path":277,"stem":278,"titleTemplate":6},"Modules","/docs/3.x/guide/concepts/modules","docs/3.x/3.guide/1.concepts/5.modules",{"title":280,"path":281,"stem":282,"titleTemplate":6},"TypeScript","/docs/3.x/guide/concepts/typescript","docs/3.x/3.guide/1.concepts/8.typescript",{"title":284,"path":285,"stem":286,"titleTemplate":6},"Code Style","/docs/3.x/guide/concepts/code-style","docs/3.x/3.guide/1.concepts/9.code-style",{"title":288,"titleTemplate":289,"icon":290,"path":291,"stem":292,"children":293,"page":108},"Best Practices","%s · Best Practices","i-lucide-square-check","/docs/3.x/guide/best-practices","docs/3.x/3.guide/2.best-practices",[294,298,302],{"title":295,"path":296,"stem":297,"titleTemplate":6},"Nuxt and hydration","/docs/3.x/guide/best-practices/hydration","docs/3.x/3.guide/2.best-practices/hydration",{"title":299,"path":300,"stem":301,"titleTemplate":6},"Nuxt Performance","/docs/3.x/guide/best-practices/performance","docs/3.x/3.guide/2.best-practices/performance",{"title":303,"path":304,"stem":305,"titleTemplate":6},"Nuxt Plugins","/docs/3.x/guide/best-practices/plugins","docs/3.x/3.guide/2.best-practices/plugins",{"title":307,"titleTemplate":308,"icon":309,"path":310,"stem":311,"children":312,"page":108},"Working with AI","Working with AI: %s","i-lucide-bot","/docs/3.x/guide/ai","docs/3.x/3.guide/3.ai",[313,317],{"title":314,"path":315,"stem":316,"titleTemplate":6},"MCP Server","/docs/3.x/guide/ai/mcp","docs/3.x/3.guide/3.ai/1.mcp",{"title":318,"path":319,"stem":320,"titleTemplate":6},"LLMs.txt","/docs/3.x/guide/ai/llms-txt","docs/3.x/3.guide/3.ai/2.llms-txt",{"title":322,"titleTemplate":323,"icon":324,"path":325,"stem":326,"children":327,"page":108},"Module Author Guide","%s · Nuxt Modules Author Guide","i-lucide-box","/docs/3.x/guide/modules","docs/3.x/3.guide/4.modules",[328,332,336,340,344,348,352],{"title":329,"path":330,"stem":331,"titleTemplate":6},"Create Your First Module","/docs/3.x/guide/modules/getting-started","docs/3.x/3.guide/4.modules/1.getting-started",{"title":333,"path":334,"stem":335,"titleTemplate":6},"Understand Module Structure","/docs/3.x/guide/modules/module-anatomy","docs/3.x/3.guide/4.modules/2.module-anatomy",{"title":337,"path":338,"stem":339,"titleTemplate":6},"Add Plugins, Components & More","/docs/3.x/guide/modules/recipes-basics","docs/3.x/3.guide/4.modules/3.recipes-basics",{"title":341,"path":342,"stem":343,"titleTemplate":6},"Use Hooks & Extend Types","/docs/3.x/guide/modules/recipes-advanced","docs/3.x/3.guide/4.modules/4.recipes-advanced",{"title":345,"path":346,"stem":347,"titleTemplate":6},"Test Your Module","/docs/3.x/guide/modules/testing","docs/3.x/3.guide/4.modules/5.testing",{"title":349,"path":350,"stem":351,"titleTemplate":6},"Follow Best Practices","/docs/3.x/guide/modules/best-practices","docs/3.x/3.guide/4.modules/6.best-practices",{"title":353,"path":354,"stem":355,"titleTemplate":6},"Publish & Share Your Module","/docs/3.x/guide/modules/ecosystem","docs/3.x/3.guide/4.modules/7.ecosystem",{"title":357,"titleTemplate":358,"icon":359,"path":360,"stem":361,"children":362,"page":108},"Recipes","%s · Recipes","i-lucide-cooking-pot","/docs/3.x/guide/recipes","docs/3.x/3.guide/5.recipes",[363,367,371,375],{"title":364,"path":365,"stem":366,"titleTemplate":6},"Custom Routing","/docs/3.x/guide/recipes/custom-routing","docs/3.x/3.guide/5.recipes/1.custom-routing",{"title":368,"path":369,"stem":370,"titleTemplate":6},"Vite Plugins","/docs/3.x/guide/recipes/vite-plugin","docs/3.x/3.guide/5.recipes/2.vite-plugin",{"title":372,"path":373,"stem":374,"titleTemplate":6},"Custom useFetch","/docs/3.x/guide/recipes/custom-usefetch","docs/3.x/3.guide/5.recipes/3.custom-usefetch",{"title":376,"path":377,"stem":378,"titleTemplate":6},"Sessions and Authentication","/docs/3.x/guide/recipes/sessions-and-authentication","docs/3.x/3.guide/5.recipes/4.sessions-and-authentication",{"title":380,"titleTemplate":381,"icon":382,"path":383,"stem":384,"children":385,"page":108},"Going Further","%s · Nuxt Advanced","i-lucide-star","/docs/3.x/guide/going-further","docs/3.x/3.guide/6.going-further",[386,390,394,398,402,406,410,414,418,422],{"title":387,"path":388,"stem":389,"titleTemplate":6},"Custom Events","/docs/3.x/guide/going-further/events","docs/3.x/3.guide/6.going-further/1.events",{"title":391,"path":392,"stem":393,"titleTemplate":6},"Experimental Features","/docs/3.x/guide/going-further/experimental-features","docs/3.x/3.guide/6.going-further/1.experimental-features",{"title":395,"path":396,"stem":397,"titleTemplate":6},"Features","/docs/3.x/guide/going-further/features","docs/3.x/3.guide/6.going-further/1.features",{"title":399,"path":400,"stem":401,"titleTemplate":6},"Runtime Config","/docs/3.x/guide/going-further/runtime-config","docs/3.x/3.guide/6.going-further/10.runtime-config",{"title":403,"path":404,"stem":405,"titleTemplate":6},"Nightly Release Channel","/docs/3.x/guide/going-further/nightly-release-channel","docs/3.x/3.guide/6.going-further/11.nightly-release-channel",{"title":407,"path":408,"stem":409,"titleTemplate":6},"Lifecycle Hooks","/docs/3.x/guide/going-further/hooks","docs/3.x/3.guide/6.going-further/2.hooks",{"title":411,"path":412,"stem":413,"titleTemplate":6},"Nuxt Kit","/docs/3.x/guide/going-further/kit","docs/3.x/3.guide/6.going-further/4.kit",{"title":415,"path":416,"stem":417,"titleTemplate":6},"NuxtApp","/docs/3.x/guide/going-further/nuxt-app","docs/3.x/3.guide/6.going-further/6.nuxt-app",{"title":419,"path":420,"stem":421,"titleTemplate":6},"Authoring Nuxt Layers","/docs/3.x/guide/going-further/layers","docs/3.x/3.guide/6.going-further/7.layers",{"title":423,"path":424,"stem":425,"titleTemplate":6},"Debugging","/docs/3.x/guide/going-further/debugging","docs/3.x/3.guide/6.going-further/9.debugging",{"title":427,"titleTemplate":428,"icon":429,"path":430,"stem":431,"children":432,"page":108},"API","%s · Nuxt API","i-lucide-code-xml","/docs/3.x/api","docs/3.x/4.api",[433,499,622,745,816,889,902],{"title":434,"titleTemplate":435,"icon":324,"path":436,"stem":437,"children":438,"page":108},"Components","%s · Nuxt Components","/docs/3.x/api/components","docs/3.x/4.api/1.components",[439,443,447,451,455,459,463,467,471,475,479,483,487,491,495],{"title":440,"path":441,"stem":442,"titleTemplate":6},"\u003CClientOnly>","/docs/3.x/api/components/client-only","docs/3.x/4.api/1.components/1.client-only",{"title":444,"path":445,"stem":446,"titleTemplate":6},"\u003CDevOnly>","/docs/3.x/api/components/dev-only","docs/3.x/4.api/1.components/1.dev-only",{"title":448,"path":449,"stem":450,"titleTemplate":6},"\u003CNuxtClientFallback>","/docs/3.x/api/components/nuxt-client-fallback","docs/3.x/4.api/1.components/1.nuxt-client-fallback",{"title":452,"path":453,"stem":454,"titleTemplate":6},"\u003CNuxtPicture>","/docs/3.x/api/components/nuxt-picture","docs/3.x/4.api/1.components/10.nuxt-picture",{"title":456,"path":457,"stem":458,"titleTemplate":6},"\u003CTeleport>","/docs/3.x/api/components/teleports","docs/3.x/4.api/1.components/11.teleports",{"title":460,"path":461,"stem":462,"titleTemplate":6},"\u003CNuxtRouteAnnouncer>","/docs/3.x/api/components/nuxt-route-announcer","docs/3.x/4.api/1.components/12.nuxt-route-announcer",{"title":464,"path":465,"stem":466,"titleTemplate":6},"\u003CNuxtTime>","/docs/3.x/api/components/nuxt-time","docs/3.x/4.api/1.components/13.nuxt-time",{"title":468,"path":469,"stem":470,"titleTemplate":6},"\u003CNuxtPage>","/docs/3.x/api/components/nuxt-page","docs/3.x/4.api/1.components/2.nuxt-page",{"title":472,"path":473,"stem":474,"titleTemplate":6},"\u003CNuxtLayout>","/docs/3.x/api/components/nuxt-layout","docs/3.x/4.api/1.components/3.nuxt-layout",{"title":476,"path":477,"stem":478,"titleTemplate":6},"\u003CNuxtLink>","/docs/3.x/api/components/nuxt-link","docs/3.x/4.api/1.components/4.nuxt-link",{"title":480,"path":481,"stem":482,"titleTemplate":6},"\u003CNuxtLoadingIndicator>","/docs/3.x/api/components/nuxt-loading-indicator","docs/3.x/4.api/1.components/5.nuxt-loading-indicator",{"title":484,"path":485,"stem":486,"titleTemplate":6},"\u003CNuxtErrorBoundary>","/docs/3.x/api/components/nuxt-error-boundary","docs/3.x/4.api/1.components/6.nuxt-error-boundary",{"title":488,"path":489,"stem":490,"titleTemplate":6},"\u003CNuxtWelcome>","/docs/3.x/api/components/nuxt-welcome","docs/3.x/4.api/1.components/7.nuxt-welcome",{"title":492,"path":493,"stem":494,"titleTemplate":6},"\u003CNuxtIsland>","/docs/3.x/api/components/nuxt-island","docs/3.x/4.api/1.components/8.nuxt-island",{"title":496,"path":497,"stem":498,"titleTemplate":6},"\u003CNuxtImg>","/docs/3.x/api/components/nuxt-img","docs/3.x/4.api/1.components/9.nuxt-img",{"title":500,"titleTemplate":501,"icon":502,"path":503,"stem":504,"children":505,"page":108},"Composables","%s · Nuxt Composables","i-lucide-arrow-left-right","/docs/3.x/api/composables","docs/3.x/4.api/2.composables",[506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,566,570,574,578,582,586,590,594,598,602,606,610,614,618],{"title":507,"path":508,"stem":509,"titleTemplate":6},"onPrehydrate","/docs/3.x/api/composables/on-prehydrate","docs/3.x/4.api/2.composables/on-prehydrate",{"title":511,"path":512,"stem":513,"titleTemplate":6},"useAppConfig","/docs/3.x/api/composables/use-app-config","docs/3.x/4.api/2.composables/use-app-config",{"title":515,"path":516,"stem":517,"titleTemplate":6},"useAsyncData","/docs/3.x/api/composables/use-async-data","docs/3.x/4.api/2.composables/use-async-data",{"title":519,"path":520,"stem":521,"titleTemplate":6},"useCookie","/docs/3.x/api/composables/use-cookie","docs/3.x/4.api/2.composables/use-cookie",{"title":523,"path":524,"stem":525,"titleTemplate":6},"useError","/docs/3.x/api/composables/use-error","docs/3.x/4.api/2.composables/use-error",{"title":527,"path":528,"stem":529,"titleTemplate":6},"useFetch","/docs/3.x/api/composables/use-fetch","docs/3.x/4.api/2.composables/use-fetch",{"title":531,"path":532,"stem":533,"titleTemplate":6},"useHead","/docs/3.x/api/composables/use-head","docs/3.x/4.api/2.composables/use-head",{"title":535,"path":536,"stem":537,"titleTemplate":6},"useHeadSafe","/docs/3.x/api/composables/use-head-safe","docs/3.x/4.api/2.composables/use-head-safe",{"title":539,"path":540,"stem":541,"titleTemplate":6},"useHydration","/docs/3.x/api/composables/use-hydration","docs/3.x/4.api/2.composables/use-hydration",{"title":543,"path":544,"stem":545,"titleTemplate":6},"useLazyAsyncData","/docs/3.x/api/composables/use-lazy-async-data","docs/3.x/4.api/2.composables/use-lazy-async-data",{"title":547,"path":548,"stem":549,"titleTemplate":6},"useLazyFetch","/docs/3.x/api/composables/use-lazy-fetch","docs/3.x/4.api/2.composables/use-lazy-fetch",{"title":551,"path":552,"stem":553,"titleTemplate":6},"useLoadingIndicator","/docs/3.x/api/composables/use-loading-indicator","docs/3.x/4.api/2.composables/use-loading-indicator",{"title":555,"path":556,"stem":557,"titleTemplate":6},"useNuxtApp","/docs/3.x/api/composables/use-nuxt-app","docs/3.x/4.api/2.composables/use-nuxt-app",{"title":559,"path":560,"stem":561,"titleTemplate":6},"useNuxtData","/docs/3.x/api/composables/use-nuxt-data","docs/3.x/4.api/2.composables/use-nuxt-data",{"title":563,"path":564,"stem":565,"titleTemplate":6},"usePreviewMode","/docs/3.x/api/composables/use-preview-mode","docs/3.x/4.api/2.composables/use-preview-mode",{"title":567,"path":568,"stem":569,"titleTemplate":6},"useRequestEvent","/docs/3.x/api/composables/use-request-event","docs/3.x/4.api/2.composables/use-request-event",{"title":571,"path":572,"stem":573,"titleTemplate":6},"useRequestFetch","/docs/3.x/api/composables/use-request-fetch","docs/3.x/4.api/2.composables/use-request-fetch",{"title":575,"path":576,"stem":577,"titleTemplate":6},"useRequestHeader","/docs/3.x/api/composables/use-request-header","docs/3.x/4.api/2.composables/use-request-header",{"title":579,"path":580,"stem":581,"titleTemplate":6},"useRequestHeaders","/docs/3.x/api/composables/use-request-headers","docs/3.x/4.api/2.composables/use-request-headers",{"title":583,"path":584,"stem":585,"titleTemplate":6},"useRequestURL","/docs/3.x/api/composables/use-request-url","docs/3.x/4.api/2.composables/use-request-url",{"title":587,"path":588,"stem":589,"titleTemplate":6},"useResponseHeader","/docs/3.x/api/composables/use-response-header","docs/3.x/4.api/2.composables/use-response-header",{"title":591,"path":592,"stem":593,"titleTemplate":6},"useRoute","/docs/3.x/api/composables/use-route","docs/3.x/4.api/2.composables/use-route",{"title":595,"path":596,"stem":597,"titleTemplate":6},"useRouteAnnouncer","/docs/3.x/api/composables/use-route-announcer","docs/3.x/4.api/2.composables/use-route-announcer",{"title":599,"path":600,"stem":601,"titleTemplate":6},"useRouter","/docs/3.x/api/composables/use-router","docs/3.x/4.api/2.composables/use-router",{"title":603,"path":604,"stem":605,"titleTemplate":6},"useRuntimeConfig","/docs/3.x/api/composables/use-runtime-config","docs/3.x/4.api/2.composables/use-runtime-config",{"title":607,"path":608,"stem":609,"titleTemplate":6},"useRuntimeHook","/docs/3.x/api/composables/use-runtime-hook","docs/3.x/4.api/2.composables/use-runtime-hook",{"title":611,"path":612,"stem":613,"titleTemplate":6},"useSeoMeta","/docs/3.x/api/composables/use-seo-meta","docs/3.x/4.api/2.composables/use-seo-meta",{"title":615,"path":616,"stem":617,"titleTemplate":6},"useServerSeoMeta","/docs/3.x/api/composables/use-server-seo-meta","docs/3.x/4.api/2.composables/use-server-seo-meta",{"title":619,"path":620,"stem":621,"titleTemplate":6},"useState","/docs/3.x/api/composables/use-state","docs/3.x/4.api/2.composables/use-state",{"title":623,"titleTemplate":624,"icon":625,"path":626,"stem":627,"children":628,"page":108},"Utils","%s · Nuxt Utils","i-lucide-square-function","/docs/3.x/api/utils","docs/3.x/4.api/3.utils",[629,633,637,641,645,649,653,657,661,665,669,673,677,681,685,689,693,697,701,705,709,713,717,721,725,729,733,737,741],{"title":630,"path":631,"stem":632,"titleTemplate":6},"$fetch","/docs/3.x/api/utils/dollarfetch","docs/3.x/4.api/3.utils/$fetch",{"title":634,"path":635,"stem":636,"titleTemplate":6},"abortNavigation","/docs/3.x/api/utils/abort-navigation","docs/3.x/4.api/3.utils/abort-navigation",{"title":638,"path":639,"stem":640,"titleTemplate":6},"addRouteMiddleware","/docs/3.x/api/utils/add-route-middleware","docs/3.x/4.api/3.utils/add-route-middleware",{"title":642,"path":643,"stem":644,"titleTemplate":6},"callOnce","/docs/3.x/api/utils/call-once","docs/3.x/4.api/3.utils/call-once",{"title":646,"path":647,"stem":648,"titleTemplate":6},"clearError","/docs/3.x/api/utils/clear-error","docs/3.x/4.api/3.utils/clear-error",{"title":650,"path":651,"stem":652,"titleTemplate":6},"clearNuxtData","/docs/3.x/api/utils/clear-nuxt-data","docs/3.x/4.api/3.utils/clear-nuxt-data",{"title":654,"path":655,"stem":656,"titleTemplate":6},"clearNuxtState","/docs/3.x/api/utils/clear-nuxt-state","docs/3.x/4.api/3.utils/clear-nuxt-state",{"title":658,"path":659,"stem":660,"titleTemplate":6},"createError","/docs/3.x/api/utils/create-error","docs/3.x/4.api/3.utils/create-error",{"title":662,"path":663,"stem":664,"titleTemplate":6},"defineLazyHydrationComponent","/docs/3.x/api/utils/define-lazy-hydration-component","docs/3.x/4.api/3.utils/define-lazy-hydration-component",{"title":666,"path":667,"stem":668,"titleTemplate":6},"defineNuxtComponent","/docs/3.x/api/utils/define-nuxt-component","docs/3.x/4.api/3.utils/define-nuxt-component",{"title":670,"path":671,"stem":672,"titleTemplate":6},"defineNuxtPlugin","/docs/3.x/api/utils/define-nuxt-plugin","docs/3.x/4.api/3.utils/define-nuxt-plugin",{"title":674,"path":675,"stem":676,"titleTemplate":6},"defineNuxtRouteMiddleware","/docs/3.x/api/utils/define-nuxt-route-middleware","docs/3.x/4.api/3.utils/define-nuxt-route-middleware",{"title":678,"path":679,"stem":680,"titleTemplate":6},"definePageMeta","/docs/3.x/api/utils/define-page-meta","docs/3.x/4.api/3.utils/define-page-meta",{"title":682,"path":683,"stem":684,"titleTemplate":6},"defineRouteRules","/docs/3.x/api/utils/define-route-rules","docs/3.x/4.api/3.utils/define-route-rules",{"title":686,"path":687,"stem":688,"titleTemplate":6},"navigateTo","/docs/3.x/api/utils/navigate-to","docs/3.x/4.api/3.utils/navigate-to",{"title":690,"path":691,"stem":692,"titleTemplate":6},"onBeforeRouteLeave","/docs/3.x/api/utils/on-before-route-leave","docs/3.x/4.api/3.utils/on-before-route-leave",{"title":694,"path":695,"stem":696,"titleTemplate":6},"onBeforeRouteUpdate","/docs/3.x/api/utils/on-before-route-update","docs/3.x/4.api/3.utils/on-before-route-update",{"title":698,"path":699,"stem":700,"titleTemplate":6},"onNuxtReady","/docs/3.x/api/utils/on-nuxt-ready","docs/3.x/4.api/3.utils/on-nuxt-ready",{"title":702,"path":703,"stem":704,"titleTemplate":6},"prefetchComponents","/docs/3.x/api/utils/prefetch-components","docs/3.x/4.api/3.utils/prefetch-components",{"title":706,"path":707,"stem":708,"titleTemplate":6},"preloadComponents","/docs/3.x/api/utils/preload-components","docs/3.x/4.api/3.utils/preload-components",{"title":710,"path":711,"stem":712,"titleTemplate":6},"preloadRouteComponents","/docs/3.x/api/utils/preload-route-components","docs/3.x/4.api/3.utils/preload-route-components",{"title":714,"path":715,"stem":716,"titleTemplate":6},"prerenderRoutes","/docs/3.x/api/utils/prerender-routes","docs/3.x/4.api/3.utils/prerender-routes",{"title":718,"path":719,"stem":720,"titleTemplate":6},"refreshCookie","/docs/3.x/api/utils/refresh-cookie","docs/3.x/4.api/3.utils/refresh-cookie",{"title":722,"path":723,"stem":724,"titleTemplate":6},"refreshNuxtData","/docs/3.x/api/utils/refresh-nuxt-data","docs/3.x/4.api/3.utils/refresh-nuxt-data",{"title":726,"path":727,"stem":728,"titleTemplate":6},"reloadNuxtApp","/docs/3.x/api/utils/reload-nuxt-app","docs/3.x/4.api/3.utils/reload-nuxt-app",{"title":730,"path":731,"stem":732,"titleTemplate":6},"setPageLayout","/docs/3.x/api/utils/set-page-layout","docs/3.x/4.api/3.utils/set-page-layout",{"title":734,"path":735,"stem":736,"titleTemplate":6},"setResponseStatus","/docs/3.x/api/utils/set-response-status","docs/3.x/4.api/3.utils/set-response-status",{"title":738,"path":739,"stem":740,"titleTemplate":6},"showError","/docs/3.x/api/utils/show-error","docs/3.x/4.api/3.utils/show-error",{"title":742,"path":743,"stem":744,"titleTemplate":6},"updateAppConfig","/docs/3.x/api/utils/update-app-config","docs/3.x/4.api/3.utils/update-app-config",{"title":746,"titleTemplate":747,"icon":748,"path":749,"stem":750,"children":751,"page":108},"Commands","%s · Nuxt Commands","i-lucide-square-terminal","/docs/3.x/api/commands","docs/3.x/4.api/4.commands",[752,756,760,764,768,772,776,780,784,788,792,796,800,804,808,812],{"title":753,"path":754,"stem":755,"titleTemplate":6},"nuxt add","/docs/3.x/api/commands/add","docs/3.x/4.api/4.commands/add",{"title":757,"path":758,"stem":759,"titleTemplate":6},"nuxt analyze","/docs/3.x/api/commands/analyze","docs/3.x/4.api/4.commands/analyze",{"title":761,"path":762,"stem":763,"titleTemplate":6},"nuxt build","/docs/3.x/api/commands/build","docs/3.x/4.api/4.commands/build",{"title":765,"path":766,"stem":767,"titleTemplate":6},"nuxt build-module","/docs/3.x/api/commands/build-module","docs/3.x/4.api/4.commands/build-module",{"title":769,"path":770,"stem":771,"titleTemplate":6},"nuxt cleanup","/docs/3.x/api/commands/cleanup","docs/3.x/4.api/4.commands/cleanup",{"title":773,"path":774,"stem":775,"titleTemplate":6},"nuxt dev","/docs/3.x/api/commands/dev","docs/3.x/4.api/4.commands/dev",{"title":777,"path":778,"stem":779,"titleTemplate":6},"nuxt devtools","/docs/3.x/api/commands/devtools","docs/3.x/4.api/4.commands/devtools",{"title":781,"path":782,"stem":783,"titleTemplate":6},"nuxt generate","/docs/3.x/api/commands/generate","docs/3.x/4.api/4.commands/generate",{"title":785,"path":786,"stem":787,"titleTemplate":6},"nuxt info","/docs/3.x/api/commands/info","docs/3.x/4.api/4.commands/info",{"title":789,"path":790,"stem":791,"titleTemplate":6},"create nuxt","/docs/3.x/api/commands/init","docs/3.x/4.api/4.commands/init",{"title":793,"path":794,"stem":795,"titleTemplate":6},"nuxt module","/docs/3.x/api/commands/module","docs/3.x/4.api/4.commands/module",{"title":797,"path":798,"stem":799,"titleTemplate":6},"nuxt prepare","/docs/3.x/api/commands/prepare","docs/3.x/4.api/4.commands/prepare",{"title":801,"path":802,"stem":803,"titleTemplate":6},"nuxt preview","/docs/3.x/api/commands/preview","docs/3.x/4.api/4.commands/preview",{"title":805,"path":806,"stem":807,"titleTemplate":6},"nuxt test","/docs/3.x/api/commands/test","docs/3.x/4.api/4.commands/test",{"title":809,"path":810,"stem":811,"titleTemplate":6},"nuxt typecheck","/docs/3.x/api/commands/typecheck","docs/3.x/4.api/4.commands/typecheck",{"title":813,"path":814,"stem":815,"titleTemplate":6},"nuxt upgrade","/docs/3.x/api/commands/upgrade","docs/3.x/4.api/4.commands/upgrade",{"title":411,"titleTemplate":817,"icon":818,"path":819,"stem":820,"children":821,"page":108},"%s · Nuxt Kit","i-lucide-package","/docs/3.x/api/kit","docs/3.x/4.api/5.kit",[822,825,828,832,836,840,844,848,852,855,859,863,866,869,873,877,881,885],{"title":276,"path":823,"stem":824,"titleTemplate":6},"/docs/3.x/api/kit/modules","docs/3.x/4.api/5.kit/1.modules",{"title":399,"path":826,"stem":827,"titleTemplate":6},"/docs/3.x/api/kit/runtime-config","docs/3.x/4.api/5.kit/10.runtime-config",{"title":829,"path":830,"stem":831,"titleTemplate":6},"Templates","/docs/3.x/api/kit/templates","docs/3.x/4.api/5.kit/10.templates",{"title":833,"path":834,"stem":835,"titleTemplate":6},"Nitro","/docs/3.x/api/kit/nitro","docs/3.x/4.api/5.kit/11.nitro",{"title":837,"path":838,"stem":839,"titleTemplate":6},"Resolving","/docs/3.x/api/kit/resolving","docs/3.x/4.api/5.kit/12.resolving",{"title":841,"path":842,"stem":843,"titleTemplate":6},"Logging","/docs/3.x/api/kit/logging","docs/3.x/4.api/5.kit/13.logging",{"title":845,"path":846,"stem":847,"titleTemplate":6},"Builder","/docs/3.x/api/kit/builder","docs/3.x/4.api/5.kit/14.builder",{"title":849,"path":850,"stem":851,"titleTemplate":6},"Examples","/docs/3.x/api/kit/examples","docs/3.x/4.api/5.kit/15.examples",{"title":84,"path":853,"stem":854,"titleTemplate":6},"/docs/3.x/api/kit/layers","docs/3.x/4.api/5.kit/16.layers",{"title":856,"path":857,"stem":858,"titleTemplate":6},"Programmatic Usage","/docs/3.x/api/kit/programmatic","docs/3.x/4.api/5.kit/2.programmatic",{"title":860,"path":861,"stem":862,"titleTemplate":6},"Compatibility","/docs/3.x/api/kit/compatibility","docs/3.x/4.api/5.kit/3.compatibility",{"title":268,"path":864,"stem":865,"titleTemplate":6},"/docs/3.x/api/kit/autoimports","docs/3.x/4.api/5.kit/4.autoimports",{"title":434,"path":867,"stem":868,"titleTemplate":6},"/docs/3.x/api/kit/components","docs/3.x/4.api/5.kit/5.components",{"title":870,"path":871,"stem":872,"titleTemplate":6},"Context","/docs/3.x/api/kit/context","docs/3.x/4.api/5.kit/6.context",{"title":874,"path":875,"stem":876,"titleTemplate":6},"Pages","/docs/3.x/api/kit/pages","docs/3.x/4.api/5.kit/7.pages",{"title":878,"path":879,"stem":880,"titleTemplate":6},"Layout","/docs/3.x/api/kit/layout","docs/3.x/4.api/5.kit/8.layout",{"title":882,"path":883,"stem":884,"titleTemplate":6},"Head","/docs/3.x/api/kit/head","docs/3.x/4.api/5.kit/9.head",{"title":886,"path":887,"stem":888,"titleTemplate":6},"Plugins","/docs/3.x/api/kit/plugins","docs/3.x/4.api/5.kit/9.plugins",{"title":890,"titleTemplate":6,"icon":891,"path":892,"stem":893,"children":894,"page":108},"Advanced","i-lucide-brain","/docs/3.x/api/advanced","docs/3.x/4.api/6.advanced",[895,898],{"title":407,"path":896,"stem":897,"titleTemplate":6},"/docs/3.x/api/advanced/hooks","docs/3.x/4.api/6.advanced/1.hooks",{"title":899,"path":900,"stem":901,"titleTemplate":6},"Import meta","/docs/3.x/api/advanced/import-meta","docs/3.x/4.api/6.advanced/2.import-meta",{"title":903,"path":904,"stem":905,"titleTemplate":906,"icon":32},"Nuxt Configuration","/docs/3.x/api/nuxt-config","docs/3.x/4.api/6.nuxt-config","%s",{"title":849,"titleTemplate":908,"icon":909,"path":910,"stem":911,"children":912,"page":108},"%s · Nuxt Examples","i-lucide-app-window-mac","/docs/3.x/examples","docs/3.x/4.examples",[913,917,939,954,990],{"title":914,"path":915,"stem":916,"titleTemplate":6},"Hello World","/docs/3.x/examples/hello-world","docs/3.x/4.examples/0.hello-world",{"title":395,"path":918,"stem":919,"children":920,"page":108},"/docs/3.x/examples/features","docs/3.x/4.examples/1.features",[921,925,928,931,935],{"title":922,"path":923,"stem":924,"titleTemplate":6},"Auto Imports","/docs/3.x/examples/features/auto-imports","docs/3.x/4.examples/1.features/1.auto-imports",{"title":64,"path":926,"stem":927,"titleTemplate":6},"/docs/3.x/examples/features/data-fetching","docs/3.x/4.examples/1.features/2.data-fetching",{"title":69,"path":929,"stem":930,"titleTemplate":6},"/docs/3.x/examples/features/state-management","docs/3.x/4.examples/1.features/3.state-management",{"title":932,"path":933,"stem":934,"titleTemplate":6},"Meta Tags","/docs/3.x/examples/features/meta-tags","docs/3.x/4.examples/1.features/4.meta-tags",{"title":936,"path":937,"stem":938,"titleTemplate":6},"Layouts","/docs/3.x/examples/features/layouts","docs/3.x/4.examples/1.features/5.layouts",{"title":49,"path":940,"stem":941,"children":942,"page":108},"/docs/3.x/examples/routing","docs/3.x/4.examples/2.routing",[943,947,950],{"title":944,"path":945,"stem":946,"titleTemplate":6},"Middleware","/docs/3.x/examples/routing/middleware","docs/3.x/4.examples/2.routing/middleware",{"title":874,"path":948,"stem":949,"titleTemplate":6},"/docs/3.x/examples/routing/pages","docs/3.x/4.examples/2.routing/pages",{"title":951,"path":952,"stem":953,"titleTemplate":6},"Universal Router","/docs/3.x/examples/routing/universal-router","docs/3.x/4.examples/2.routing/universal-router",{"title":890,"path":955,"stem":956,"children":957,"page":108},"/docs/3.x/examples/advanced","docs/3.x/4.examples/4.advanced",[958,961,964,968,972,976,980,983,986],{"title":84,"path":959,"stem":960,"titleTemplate":6},"/docs/3.x/examples/advanced/config-extends","docs/3.x/4.examples/4.advanced/config-extends",{"title":74,"path":962,"stem":963,"titleTemplate":6},"/docs/3.x/examples/advanced/error-handling","docs/3.x/4.examples/4.advanced/error-handling",{"title":965,"path":966,"stem":967,"titleTemplate":6},"JSX / TSX","/docs/3.x/examples/advanced/jsx","docs/3.x/4.examples/4.advanced/jsx",{"title":969,"path":970,"stem":971,"titleTemplate":6},"Locale","/docs/3.x/examples/advanced/locale","docs/3.x/4.examples/4.advanced/locale",{"title":973,"path":974,"stem":975,"titleTemplate":6},"Module Extend Pages","/docs/3.x/examples/advanced/module-extend-pages","docs/3.x/4.examples/4.advanced/module-extend-pages",{"title":977,"path":978,"stem":979,"titleTemplate":6},"Teleport","/docs/3.x/examples/advanced/teleport","docs/3.x/4.examples/4.advanced/teleport",{"title":99,"path":981,"stem":982,"titleTemplate":6},"/docs/3.x/examples/advanced/testing","docs/3.x/4.examples/4.advanced/testing",{"title":519,"path":984,"stem":985,"titleTemplate":6},"/docs/3.x/examples/advanced/use-cookie","docs/3.x/4.examples/4.advanced/use-cookie",{"title":987,"path":988,"stem":989,"titleTemplate":6},"Use Custom Fetch Composable","/docs/3.x/examples/advanced/use-custom-fetch-composable","docs/3.x/4.examples/4.advanced/use-custom-fetch-composable",{"title":991,"path":992,"stem":993,"children":994,"page":108},"Experimental","/docs/3.x/examples/experimental","docs/3.x/4.examples/7.experimental",[995],{"title":996,"path":997,"stem":998,"titleTemplate":6},"WASM","/docs/3.x/examples/experimental/wasm","docs/3.x/4.examples/7.experimental/wasm",{"title":1000,"titleTemplate":1001,"icon":1002,"path":1003,"stem":1004,"children":1005,"page":108},"Community","%s · Nuxt Community","i-lucide-messages-square","/docs/3.x/community","docs/3.x/5.community",[1006,1011,1016,1021,1026,1031],{"title":1007,"path":1008,"stem":1009,"titleTemplate":6,"icon":1010},"Getting Help","/docs/3.x/community/getting-help","docs/3.x/5.community/2.getting-help","i-lucide-life-buoy",{"title":1012,"path":1013,"stem":1014,"titleTemplate":6,"icon":1015},"Reporting Bugs","/docs/3.x/community/reporting-bugs","docs/3.x/5.community/3.reporting-bugs","i-lucide-bug",{"title":1017,"path":1018,"stem":1019,"titleTemplate":6,"icon":1020},"Contribution","/docs/3.x/community/contribution","docs/3.x/5.community/4.contribution","i-lucide-git-pull-request",{"title":1022,"path":1023,"stem":1024,"titleTemplate":6,"icon":1025},"Framework","/docs/3.x/community/framework-contribution","docs/3.x/5.community/5.framework-contribution","i-lucide-github",{"title":1027,"path":1028,"stem":1029,"titleTemplate":6,"icon":1030},"Roadmap","/docs/3.x/community/roadmap","docs/3.x/5.community/6.roadmap","i-lucide-map",{"title":1032,"path":1033,"stem":1034,"titleTemplate":6,"icon":1035},"Releases","/docs/3.x/community/changelog","docs/3.x/5.community/7.changelog","i-lucide-bell-dot",{"title":1037,"titleTemplate":1038,"icon":1039,"path":1040,"stem":1041,"children":1042,"page":108},"Migrate to Nuxt Bridge","Migrate to Nuxt Bridge: %s","i-lucide-ship","/docs/3.x/bridge","docs/3.x/6.bridge",[1043,1047,1050,1053,1057,1061,1065,1068,1071,1074],{"title":1044,"path":1045,"stem":1046,"titleTemplate":6},"Overview","/docs/3.x/bridge/overview","docs/3.x/6.bridge/1.overview",{"title":29,"path":1048,"stem":1049,"titleTemplate":6},"/docs/3.x/bridge/configuration","docs/3.x/6.bridge/10.configuration",{"title":280,"path":1051,"stem":1052,"titleTemplate":6},"/docs/3.x/bridge/typescript","docs/3.x/6.bridge/2.typescript",{"title":1054,"path":1055,"stem":1056,"titleTemplate":6},"Legacy Composition API","/docs/3.x/bridge/bridge-composition-api","docs/3.x/6.bridge/3.bridge-composition-api",{"title":1058,"path":1059,"stem":1060,"titleTemplate":6},"Plugins and Middleware","/docs/3.x/bridge/plugins-and-middleware","docs/3.x/6.bridge/4.plugins-and-middleware",{"title":1062,"path":1063,"stem":1064,"titleTemplate":6},"New Composition API","/docs/3.x/bridge/nuxt3-compatible-api","docs/3.x/6.bridge/5.nuxt3-compatible-api",{"title":932,"path":1066,"stem":1067,"titleTemplate":6},"/docs/3.x/bridge/meta","docs/3.x/6.bridge/6.meta",{"title":399,"path":1069,"stem":1070,"titleTemplate":6},"/docs/3.x/bridge/runtime-config","docs/3.x/6.bridge/7.runtime-config",{"title":833,"path":1072,"stem":1073,"titleTemplate":6},"/docs/3.x/bridge/nitro","docs/3.x/6.bridge/8.nitro",{"title":1075,"path":1076,"stem":1077,"titleTemplate":6},"Vite","/docs/3.x/bridge/vite","docs/3.x/6.bridge/9.vite",{"title":1079,"titleTemplate":1080,"icon":107,"path":1081,"stem":1082,"children":1083,"page":108},"Migrate to Nuxt 3","Migrate to Nuxt 3: %s","/docs/3.x/migration","docs/3.x/7.migration",[1084,1087,1091,1094,1097,1100,1103,1106,1109,1113,1117],{"title":1044,"path":1085,"stem":1086,"titleTemplate":6},"/docs/3.x/migration/overview","docs/3.x/7.migration/1.overview",{"title":1088,"path":1089,"stem":1090,"titleTemplate":6},"Build Tooling","/docs/3.x/migration/bundling","docs/3.x/7.migration/10.bundling",{"title":79,"path":1092,"stem":1093,"titleTemplate":6},"/docs/3.x/migration/server","docs/3.x/7.migration/11.server",{"title":29,"path":1095,"stem":1096,"titleTemplate":6},"/docs/3.x/migration/configuration","docs/3.x/7.migration/2.configuration",{"title":276,"path":1098,"stem":1099,"titleTemplate":6},"/docs/3.x/migration/module-authors","docs/3.x/7.migration/20.module-authors",{"title":922,"path":1101,"stem":1102,"titleTemplate":6},"/docs/3.x/migration/auto-imports","docs/3.x/7.migration/3.auto-imports",{"title":932,"path":1104,"stem":1105,"titleTemplate":6},"/docs/3.x/migration/meta","docs/3.x/7.migration/4.meta",{"title":1058,"path":1107,"stem":1108,"titleTemplate":6},"/docs/3.x/migration/plugins-and-middleware","docs/3.x/7.migration/5.plugins-and-middleware",{"title":1110,"path":1111,"stem":1112,"titleTemplate":6},"Pages and Layouts","/docs/3.x/migration/pages-and-layouts","docs/3.x/7.migration/6.pages-and-layouts",{"title":1114,"path":1115,"stem":1116,"titleTemplate":6},"Component Options","/docs/3.x/migration/component-options","docs/3.x/7.migration/7.component-options",{"title":399,"path":1118,"stem":1119,"titleTemplate":6},"/docs/3.x/migration/runtime-config","docs/3.x/7.migration/8.runtime-config",{"title":5,"titleTemplate":6,"icon":7,"path":1121,"stem":1122,"children":1123,"page":108},"/docs/4.x","docs/4.x",[1124,1182,1276,1404,1770,1847,1869,1903],{"title":12,"titleTemplate":13,"icon":14,"path":1125,"stem":1126,"children":1127,"page":108},"/docs/4.x/getting-started","docs/4.x/1.getting-started",[1128,1131,1134,1137,1140,1143,1146,1149,1152,1155,1158,1161,1164,1167,1170,1173,1176,1179],{"title":19,"path":1129,"stem":1130,"titleTemplate":6,"icon":22},"/docs/4.x/getting-started/introduction","docs/4.x/1.getting-started/01.introduction",{"title":24,"path":1132,"stem":1133,"titleTemplate":6,"icon":27},"/docs/4.x/getting-started/installation","docs/4.x/1.getting-started/02.installation",{"title":29,"path":1135,"stem":1136,"titleTemplate":6,"icon":32},"/docs/4.x/getting-started/configuration","docs/4.x/1.getting-started/03.configuration",{"title":34,"path":1138,"stem":1139,"titleTemplate":6,"icon":37},"/docs/4.x/getting-started/views","docs/4.x/1.getting-started/04.views",{"title":39,"path":1141,"stem":1142,"titleTemplate":6,"icon":42},"/docs/4.x/getting-started/assets","docs/4.x/1.getting-started/05.assets",{"title":44,"path":1144,"stem":1145,"titleTemplate":6,"icon":47},"/docs/4.x/getting-started/styling","docs/4.x/1.getting-started/06.styling",{"title":49,"path":1147,"stem":1148,"titleTemplate":6,"icon":52},"/docs/4.x/getting-started/routing","docs/4.x/1.getting-started/07.routing",{"title":54,"path":1150,"stem":1151,"titleTemplate":6,"icon":57},"/docs/4.x/getting-started/seo-meta","docs/4.x/1.getting-started/08.seo-meta",{"title":59,"path":1153,"stem":1154,"titleTemplate":6,"icon":62},"/docs/4.x/getting-started/transitions","docs/4.x/1.getting-started/09.transitions",{"title":64,"path":1156,"stem":1157,"titleTemplate":6,"icon":67},"/docs/4.x/getting-started/data-fetching","docs/4.x/1.getting-started/10.data-fetching",{"title":69,"path":1159,"stem":1160,"titleTemplate":6,"icon":72},"/docs/4.x/getting-started/state-management","docs/4.x/1.getting-started/11.state-management",{"title":74,"path":1162,"stem":1163,"titleTemplate":6,"icon":77},"/docs/4.x/getting-started/error-handling","docs/4.x/1.getting-started/12.error-handling",{"title":79,"path":1165,"stem":1166,"titleTemplate":6,"icon":82},"/docs/4.x/getting-started/server","docs/4.x/1.getting-started/13.server",{"title":84,"path":1168,"stem":1169,"titleTemplate":6,"icon":87},"/docs/4.x/getting-started/layers","docs/4.x/1.getting-started/14.layers",{"title":89,"path":1171,"stem":1172,"titleTemplate":6,"icon":92},"/docs/4.x/getting-started/prerendering","docs/4.x/1.getting-started/15.prerendering",{"title":94,"path":1174,"stem":1175,"titleTemplate":6,"icon":97},"/docs/4.x/getting-started/deployment","docs/4.x/1.getting-started/16.deployment",{"title":99,"path":1177,"stem":1178,"titleTemplate":6,"icon":102},"/docs/4.x/getting-started/testing","docs/4.x/1.getting-started/17.testing",{"title":104,"path":1180,"stem":1181,"titleTemplate":6,"icon":107},"/docs/4.x/getting-started/upgrade","docs/4.x/1.getting-started/18.upgrade",{"title":110,"titleTemplate":111,"icon":112,"path":1183,"stem":1184,"children":1185,"page":108},"/docs/4.x/directory-structure","docs/4.x/2.directory-structure",[1186,1189,1192,1234,1237,1240,1243,1246,1249,1252,1255,1258,1261,1264,1267,1270,1273],{"title":117,"path":1187,"stem":1188,"titleTemplate":6,"icon":120},"/docs/4.x/directory-structure/nuxt","docs/4.x/2.directory-structure/0.nuxt",{"title":122,"path":1190,"stem":1191,"titleTemplate":6,"icon":125},"/docs/4.x/directory-structure/output","docs/4.x/2.directory-structure/0.output",{"title":1193,"titleTemplate":111,"head":1194,"defaultOpen":1196,"icon":1197,"path":1198,"stem":1199,"children":1200,"page":108},"app",{"title":1195},"app/",true,"i-vscode-icons-folder-type-app","/docs/4.x/directory-structure/app","docs/4.x/2.directory-structure/1.app",[1201,1204,1207,1210,1213,1216,1219,1222,1225,1228,1231],{"title":127,"path":1202,"stem":1203,"titleTemplate":6,"icon":130},"/docs/4.x/directory-structure/app/assets","docs/4.x/2.directory-structure/1.app/1.assets",{"title":132,"path":1205,"stem":1206,"titleTemplate":6,"icon":135},"/docs/4.x/directory-structure/app/components","docs/4.x/2.directory-structure/1.app/1.components",{"title":137,"path":1208,"stem":1209,"titleTemplate":6,"icon":140},"/docs/4.x/directory-structure/app/composables","docs/4.x/2.directory-structure/1.app/1.composables",{"title":152,"path":1211,"stem":1212,"titleTemplate":6,"icon":155},"/docs/4.x/directory-structure/app/layouts","docs/4.x/2.directory-structure/1.app/1.layouts",{"title":157,"path":1214,"stem":1215,"titleTemplate":6,"icon":160},"/docs/4.x/directory-structure/app/middleware","docs/4.x/2.directory-structure/1.app/1.middleware",{"title":171,"path":1217,"stem":1218,"titleTemplate":6,"icon":155},"/docs/4.x/directory-structure/app/pages","docs/4.x/2.directory-structure/1.app/1.pages",{"title":175,"path":1220,"stem":1221,"titleTemplate":6,"icon":178},"/docs/4.x/directory-structure/app/plugins","docs/4.x/2.directory-structure/1.app/1.plugins",{"title":195,"path":1223,"stem":1224,"titleTemplate":6,"icon":198},"/docs/4.x/directory-structure/app/utils","docs/4.x/2.directory-structure/1.app/1.utils",{"title":219,"path":1226,"stem":1227,"titleTemplate":6,"icon":222},"/docs/4.x/directory-structure/app/app","docs/4.x/2.directory-structure/1.app/3.app",{"title":224,"path":1229,"stem":1230,"titleTemplate":6,"icon":227},"/docs/4.x/directory-structure/app/app-config","docs/4.x/2.directory-structure/1.app/3.app-config",{"title":229,"path":1232,"stem":1233,"titleTemplate":6,"icon":222},"/docs/4.x/directory-structure/app/error","docs/4.x/2.directory-structure/1.app/3.error",{"title":142,"path":1235,"stem":1236,"titleTemplate":6,"icon":145},"/docs/4.x/directory-structure/content","docs/4.x/2.directory-structure/1.content",{"title":147,"path":1238,"stem":1239,"titleTemplate":6,"icon":150},"/docs/4.x/directory-structure/layers","docs/4.x/2.directory-structure/1.layers",{"title":162,"path":1241,"stem":1242,"titleTemplate":6,"icon":150},"/docs/4.x/directory-structure/modules","docs/4.x/2.directory-structure/1.modules",{"title":166,"path":1244,"stem":1245,"titleTemplate":6,"icon":169},"/docs/4.x/directory-structure/node_modules","docs/4.x/2.directory-structure/1.node_modules",{"title":180,"path":1247,"stem":1248,"titleTemplate":6,"icon":183},"/docs/4.x/directory-structure/public","docs/4.x/2.directory-structure/1.public",{"title":185,"path":1250,"stem":1251,"titleTemplate":6,"icon":188},"/docs/4.x/directory-structure/server","docs/4.x/2.directory-structure/1.server",{"title":190,"path":1253,"stem":1254,"titleTemplate":6,"icon":193},"/docs/4.x/directory-structure/shared","docs/4.x/2.directory-structure/1.shared",{"title":200,"path":1256,"stem":1257,"titleTemplate":6,"icon":203},"/docs/4.x/directory-structure/env","docs/4.x/2.directory-structure/2.env",{"title":205,"path":1259,"stem":1260,"titleTemplate":6,"icon":208},"/docs/4.x/directory-structure/gitignore","docs/4.x/2.directory-structure/2.gitignore",{"title":210,"path":1262,"stem":1263,"titleTemplate":6,"icon":213},"/docs/4.x/directory-structure/nuxtignore","docs/4.x/2.directory-structure/2.nuxtignore",{"title":215,"path":1265,"stem":1266,"titleTemplate":6,"icon":213},"/docs/4.x/directory-structure/nuxtrc","docs/4.x/2.directory-structure/2.nuxtrc",{"title":233,"path":1268,"stem":1269,"titleTemplate":6,"icon":213},"/docs/4.x/directory-structure/nuxt-config","docs/4.x/2.directory-structure/3.nuxt-config",{"title":237,"path":1271,"stem":1272,"titleTemplate":6,"icon":240},"/docs/4.x/directory-structure/package","docs/4.x/2.directory-structure/3.package",{"title":242,"path":1274,"stem":1275,"titleTemplate":6,"icon":245},"/docs/4.x/directory-structure/tsconfig","docs/4.x/2.directory-structure/3.tsconfig",{"title":247,"titleTemplate":6,"icon":248,"path":1277,"stem":1278,"children":1279,"page":108},"/docs/4.x/guide","docs/4.x/3.guide",[1280,1305,1319,1329,1354,1370],{"title":253,"titleTemplate":254,"icon":255,"path":1281,"stem":1282,"children":1283,"page":108},"/docs/4.x/guide/concepts","docs/4.x/3.guide/1.concepts",[1284,1287,1290,1293,1296,1299,1302],{"title":260,"path":1285,"stem":1286,"titleTemplate":6},"/docs/4.x/guide/concepts/rendering","docs/4.x/3.guide/1.concepts/1.rendering",{"title":264,"path":1288,"stem":1289,"titleTemplate":6},"/docs/4.x/guide/concepts/nuxt-lifecycle","docs/4.x/3.guide/1.concepts/2.nuxt-lifecycle",{"title":268,"path":1291,"stem":1292,"titleTemplate":6},"/docs/4.x/guide/concepts/auto-imports","docs/4.x/3.guide/1.concepts/3.auto-imports",{"title":272,"path":1294,"stem":1295,"titleTemplate":6},"/docs/4.x/guide/concepts/server-engine","docs/4.x/3.guide/1.concepts/4.server-engine",{"title":276,"path":1297,"stem":1298,"titleTemplate":6},"/docs/4.x/guide/concepts/modules","docs/4.x/3.guide/1.concepts/5.modules",{"title":280,"path":1300,"stem":1301,"titleTemplate":6},"/docs/4.x/guide/concepts/typescript","docs/4.x/3.guide/1.concepts/8.typescript",{"title":284,"path":1303,"stem":1304,"titleTemplate":6},"/docs/4.x/guide/concepts/code-style","docs/4.x/3.guide/1.concepts/9.code-style",{"title":288,"titleTemplate":289,"icon":290,"path":1306,"stem":1307,"children":1308,"page":108},"/docs/4.x/guide/best-practices","docs/4.x/3.guide/2.best-practices",[1309,1313,1316],{"title":1310,"path":1311,"stem":1312,"titleTemplate":6},"Nuxt and Hydration","/docs/4.x/guide/best-practices/hydration","docs/4.x/3.guide/2.best-practices/hydration",{"title":299,"path":1314,"stem":1315,"titleTemplate":6},"/docs/4.x/guide/best-practices/performance","docs/4.x/3.guide/2.best-practices/performance",{"title":303,"path":1317,"stem":1318,"titleTemplate":6},"/docs/4.x/guide/best-practices/plugins","docs/4.x/3.guide/2.best-practices/plugins",{"title":307,"titleTemplate":308,"icon":309,"path":1320,"stem":1321,"children":1322,"page":108},"/docs/4.x/guide/ai","docs/4.x/3.guide/3.ai",[1323,1326],{"title":314,"path":1324,"stem":1325,"titleTemplate":6},"/docs/4.x/guide/ai/mcp","docs/4.x/3.guide/3.ai/1.mcp",{"title":318,"path":1327,"stem":1328,"titleTemplate":6},"/docs/4.x/guide/ai/llms-txt","docs/4.x/3.guide/3.ai/2.llms-txt",{"title":322,"titleTemplate":323,"icon":324,"path":1330,"stem":1331,"children":1332,"page":108},"/docs/4.x/guide/modules","docs/4.x/3.guide/4.modules",[1333,1336,1339,1342,1345,1348,1351],{"title":329,"path":1334,"stem":1335,"titleTemplate":6},"/docs/4.x/guide/modules/getting-started","docs/4.x/3.guide/4.modules/1.getting-started",{"title":333,"path":1337,"stem":1338,"titleTemplate":6},"/docs/4.x/guide/modules/module-anatomy","docs/4.x/3.guide/4.modules/2.module-anatomy",{"title":337,"path":1340,"stem":1341,"titleTemplate":6},"/docs/4.x/guide/modules/recipes-basics","docs/4.x/3.guide/4.modules/3.recipes-basics",{"title":341,"path":1343,"stem":1344,"titleTemplate":6},"/docs/4.x/guide/modules/recipes-advanced","docs/4.x/3.guide/4.modules/4.recipes-advanced",{"title":345,"path":1346,"stem":1347,"titleTemplate":6},"/docs/4.x/guide/modules/testing","docs/4.x/3.guide/4.modules/5.testing",{"title":349,"path":1349,"stem":1350,"titleTemplate":6},"/docs/4.x/guide/modules/best-practices","docs/4.x/3.guide/4.modules/6.best-practices",{"title":353,"path":1352,"stem":1353,"titleTemplate":6},"/docs/4.x/guide/modules/ecosystem","docs/4.x/3.guide/4.modules/7.ecosystem",{"title":357,"titleTemplate":358,"icon":359,"path":1355,"stem":1356,"children":1357,"page":108},"/docs/4.x/guide/recipes","docs/4.x/3.guide/5.recipes",[1358,1361,1364,1367],{"title":364,"path":1359,"stem":1360,"titleTemplate":6},"/docs/4.x/guide/recipes/custom-routing","docs/4.x/3.guide/5.recipes/1.custom-routing",{"title":368,"path":1362,"stem":1363,"titleTemplate":6},"/docs/4.x/guide/recipes/vite-plugin","docs/4.x/3.guide/5.recipes/2.vite-plugin",{"title":372,"path":1365,"stem":1366,"titleTemplate":6},"/docs/4.x/guide/recipes/custom-usefetch","docs/4.x/3.guide/5.recipes/3.custom-usefetch",{"title":376,"path":1368,"stem":1369,"titleTemplate":6},"/docs/4.x/guide/recipes/sessions-and-authentication","docs/4.x/3.guide/5.recipes/4.sessions-and-authentication",{"title":380,"titleTemplate":381,"icon":382,"path":1371,"stem":1372,"children":1373,"page":108},"/docs/4.x/guide/going-further","docs/4.x/3.guide/6.going-further",[1374,1377,1380,1383,1386,1389,1392,1395,1398,1401],{"title":387,"path":1375,"stem":1376,"titleTemplate":6},"/docs/4.x/guide/going-further/events","docs/4.x/3.guide/6.going-further/1.events",{"title":391,"path":1378,"stem":1379,"titleTemplate":6},"/docs/4.x/guide/going-further/experimental-features","docs/4.x/3.guide/6.going-further/1.experimental-features",{"title":395,"path":1381,"stem":1382,"titleTemplate":6},"/docs/4.x/guide/going-further/features","docs/4.x/3.guide/6.going-further/1.features",{"title":399,"path":1384,"stem":1385,"titleTemplate":6},"/docs/4.x/guide/going-further/runtime-config","docs/4.x/3.guide/6.going-further/10.runtime-config",{"title":403,"path":1387,"stem":1388,"titleTemplate":6},"/docs/4.x/guide/going-further/nightly-release-channel","docs/4.x/3.guide/6.going-further/11.nightly-release-channel",{"title":407,"path":1390,"stem":1391,"titleTemplate":6},"/docs/4.x/guide/going-further/hooks","docs/4.x/3.guide/6.going-further/2.hooks",{"title":411,"path":1393,"stem":1394,"titleTemplate":6},"/docs/4.x/guide/going-further/kit","docs/4.x/3.guide/6.going-further/4.kit",{"title":415,"path":1396,"stem":1397,"titleTemplate":6},"/docs/4.x/guide/going-further/nuxt-app","docs/4.x/3.guide/6.going-further/6.nuxt-app",{"title":419,"path":1399,"stem":1400,"titleTemplate":6},"/docs/4.x/guide/going-further/layers","docs/4.x/3.guide/6.going-further/7.layers",{"title":423,"path":1402,"stem":1403,"titleTemplate":6},"/docs/4.x/guide/going-further/debugging","docs/4.x/3.guide/6.going-further/9.debugging",{"title":427,"titleTemplate":428,"icon":429,"path":1405,"stem":1406,"children":1407,"page":108},"/docs/4.x/api","docs/4.x/4.api",[1408,1461,1556,1647,1699,1757,1767],{"title":434,"titleTemplate":435,"icon":324,"path":1409,"stem":1410,"children":1411,"page":108},"/docs/4.x/api/components","docs/4.x/4.api/1.components",[1412,1415,1418,1421,1424,1427,1430,1433,1437,1440,1443,1446,1449,1452,1455,1458],{"title":440,"path":1413,"stem":1414,"titleTemplate":6},"/docs/4.x/api/components/client-only","docs/4.x/4.api/1.components/1.client-only",{"title":444,"path":1416,"stem":1417,"titleTemplate":6},"/docs/4.x/api/components/dev-only","docs/4.x/4.api/1.components/1.dev-only",{"title":448,"path":1419,"stem":1420,"titleTemplate":6},"/docs/4.x/api/components/nuxt-client-fallback","docs/4.x/4.api/1.components/1.nuxt-client-fallback",{"title":452,"path":1422,"stem":1423,"titleTemplate":6},"/docs/4.x/api/components/nuxt-picture","docs/4.x/4.api/1.components/10.nuxt-picture",{"title":456,"path":1425,"stem":1426,"titleTemplate":6},"/docs/4.x/api/components/teleports","docs/4.x/4.api/1.components/11.teleports",{"title":460,"path":1428,"stem":1429,"titleTemplate":6},"/docs/4.x/api/components/nuxt-route-announcer","docs/4.x/4.api/1.components/12.nuxt-route-announcer",{"title":464,"path":1431,"stem":1432,"titleTemplate":6},"/docs/4.x/api/components/nuxt-time","docs/4.x/4.api/1.components/13.nuxt-time",{"title":1434,"path":1435,"stem":1436,"titleTemplate":6},"\u003CNuxtAnnouncer>","/docs/4.x/api/components/nuxt-announcer","docs/4.x/4.api/1.components/14.nuxt-announcer",{"title":468,"path":1438,"stem":1439,"titleTemplate":6},"/docs/4.x/api/components/nuxt-page","docs/4.x/4.api/1.components/2.nuxt-page",{"title":472,"path":1441,"stem":1442,"titleTemplate":6},"/docs/4.x/api/components/nuxt-layout","docs/4.x/4.api/1.components/3.nuxt-layout",{"title":476,"path":1444,"stem":1445,"titleTemplate":6},"/docs/4.x/api/components/nuxt-link","docs/4.x/4.api/1.components/4.nuxt-link",{"title":480,"path":1447,"stem":1448,"titleTemplate":6},"/docs/4.x/api/components/nuxt-loading-indicator","docs/4.x/4.api/1.components/5.nuxt-loading-indicator",{"title":484,"path":1450,"stem":1451,"titleTemplate":6},"/docs/4.x/api/components/nuxt-error-boundary","docs/4.x/4.api/1.components/6.nuxt-error-boundary",{"title":488,"path":1453,"stem":1454,"titleTemplate":6},"/docs/4.x/api/components/nuxt-welcome","docs/4.x/4.api/1.components/7.nuxt-welcome",{"title":492,"path":1456,"stem":1457,"titleTemplate":6},"/docs/4.x/api/components/nuxt-island","docs/4.x/4.api/1.components/8.nuxt-island",{"title":496,"path":1459,"stem":1460,"titleTemplate":6},"/docs/4.x/api/components/nuxt-img","docs/4.x/4.api/1.components/9.nuxt-img",{"title":500,"titleTemplate":501,"icon":502,"path":1462,"stem":1463,"children":1464,"page":108},"/docs/4.x/api/composables","docs/4.x/4.api/2.composables",[1465,1468,1472,1475,1478,1481,1484,1487,1490,1493,1496,1499,1502,1505,1508,1511,1514,1517,1520,1523,1526,1529,1532,1535,1538,1541,1544,1547,1550,1553],{"title":507,"path":1466,"stem":1467,"titleTemplate":6},"/docs/4.x/api/composables/on-prehydrate","docs/4.x/4.api/2.composables/on-prehydrate",{"title":1469,"path":1470,"stem":1471,"titleTemplate":6},"useAnnouncer","/docs/4.x/api/composables/use-announcer","docs/4.x/4.api/2.composables/use-announcer",{"title":511,"path":1473,"stem":1474,"titleTemplate":6},"/docs/4.x/api/composables/use-app-config","docs/4.x/4.api/2.composables/use-app-config",{"title":515,"path":1476,"stem":1477,"titleTemplate":6},"/docs/4.x/api/composables/use-async-data","docs/4.x/4.api/2.composables/use-async-data",{"title":519,"path":1479,"stem":1480,"titleTemplate":6},"/docs/4.x/api/composables/use-cookie","docs/4.x/4.api/2.composables/use-cookie",{"title":523,"path":1482,"stem":1483,"titleTemplate":6},"/docs/4.x/api/composables/use-error","docs/4.x/4.api/2.composables/use-error",{"title":527,"path":1485,"stem":1486,"titleTemplate":6},"/docs/4.x/api/composables/use-fetch","docs/4.x/4.api/2.composables/use-fetch",{"title":531,"path":1488,"stem":1489,"titleTemplate":6},"/docs/4.x/api/composables/use-head","docs/4.x/4.api/2.composables/use-head",{"title":535,"path":1491,"stem":1492,"titleTemplate":6},"/docs/4.x/api/composables/use-head-safe","docs/4.x/4.api/2.composables/use-head-safe",{"title":539,"path":1494,"stem":1495,"titleTemplate":6},"/docs/4.x/api/composables/use-hydration","docs/4.x/4.api/2.composables/use-hydration",{"title":543,"path":1497,"stem":1498,"titleTemplate":6},"/docs/4.x/api/composables/use-lazy-async-data","docs/4.x/4.api/2.composables/use-lazy-async-data",{"title":547,"path":1500,"stem":1501,"titleTemplate":6},"/docs/4.x/api/composables/use-lazy-fetch","docs/4.x/4.api/2.composables/use-lazy-fetch",{"title":551,"path":1503,"stem":1504,"titleTemplate":6},"/docs/4.x/api/composables/use-loading-indicator","docs/4.x/4.api/2.composables/use-loading-indicator",{"title":555,"path":1506,"stem":1507,"titleTemplate":6},"/docs/4.x/api/composables/use-nuxt-app","docs/4.x/4.api/2.composables/use-nuxt-app",{"title":559,"path":1509,"stem":1510,"titleTemplate":6},"/docs/4.x/api/composables/use-nuxt-data","docs/4.x/4.api/2.composables/use-nuxt-data",{"title":563,"path":1512,"stem":1513,"titleTemplate":6},"/docs/4.x/api/composables/use-preview-mode","docs/4.x/4.api/2.composables/use-preview-mode",{"title":567,"path":1515,"stem":1516,"titleTemplate":6},"/docs/4.x/api/composables/use-request-event","docs/4.x/4.api/2.composables/use-request-event",{"title":571,"path":1518,"stem":1519,"titleTemplate":6},"/docs/4.x/api/composables/use-request-fetch","docs/4.x/4.api/2.composables/use-request-fetch",{"title":575,"path":1521,"stem":1522,"titleTemplate":6},"/docs/4.x/api/composables/use-request-header","docs/4.x/4.api/2.composables/use-request-header",{"title":579,"path":1524,"stem":1525,"titleTemplate":6},"/docs/4.x/api/composables/use-request-headers","docs/4.x/4.api/2.composables/use-request-headers",{"title":583,"path":1527,"stem":1528,"titleTemplate":6},"/docs/4.x/api/composables/use-request-url","docs/4.x/4.api/2.composables/use-request-url",{"title":587,"path":1530,"stem":1531,"titleTemplate":6},"/docs/4.x/api/composables/use-response-header","docs/4.x/4.api/2.composables/use-response-header",{"title":591,"path":1533,"stem":1534,"titleTemplate":6},"/docs/4.x/api/composables/use-route","docs/4.x/4.api/2.composables/use-route",{"title":595,"path":1536,"stem":1537,"titleTemplate":6},"/docs/4.x/api/composables/use-route-announcer","docs/4.x/4.api/2.composables/use-route-announcer",{"title":599,"path":1539,"stem":1540,"titleTemplate":6},"/docs/4.x/api/composables/use-router","docs/4.x/4.api/2.composables/use-router",{"title":603,"path":1542,"stem":1543,"titleTemplate":6},"/docs/4.x/api/composables/use-runtime-config","docs/4.x/4.api/2.composables/use-runtime-config",{"title":607,"path":1545,"stem":1546,"titleTemplate":6},"/docs/4.x/api/composables/use-runtime-hook","docs/4.x/4.api/2.composables/use-runtime-hook",{"title":611,"path":1548,"stem":1549,"titleTemplate":6},"/docs/4.x/api/composables/use-seo-meta","docs/4.x/4.api/2.composables/use-seo-meta",{"title":615,"path":1551,"stem":1552,"titleTemplate":6},"/docs/4.x/api/composables/use-server-seo-meta","docs/4.x/4.api/2.composables/use-server-seo-meta",{"title":619,"path":1554,"stem":1555,"titleTemplate":6},"/docs/4.x/api/composables/use-state","docs/4.x/4.api/2.composables/use-state",{"title":623,"titleTemplate":624,"icon":625,"path":1557,"stem":1558,"children":1559,"page":108},"/docs/4.x/api/utils","docs/4.x/4.api/3.utils",[1560,1563,1566,1569,1572,1575,1578,1581,1584,1587,1590,1593,1596,1599,1602,1605,1608,1611,1614,1617,1620,1623,1626,1629,1632,1635,1638,1641,1644],{"title":630,"path":1561,"stem":1562,"titleTemplate":6},"/docs/4.x/api/utils/dollarfetch","docs/4.x/4.api/3.utils/$fetch",{"title":634,"path":1564,"stem":1565,"titleTemplate":6},"/docs/4.x/api/utils/abort-navigation","docs/4.x/4.api/3.utils/abort-navigation",{"title":638,"path":1567,"stem":1568,"titleTemplate":6},"/docs/4.x/api/utils/add-route-middleware","docs/4.x/4.api/3.utils/add-route-middleware",{"title":642,"path":1570,"stem":1571,"titleTemplate":6},"/docs/4.x/api/utils/call-once","docs/4.x/4.api/3.utils/call-once",{"title":646,"path":1573,"stem":1574,"titleTemplate":6},"/docs/4.x/api/utils/clear-error","docs/4.x/4.api/3.utils/clear-error",{"title":650,"path":1576,"stem":1577,"titleTemplate":6},"/docs/4.x/api/utils/clear-nuxt-data","docs/4.x/4.api/3.utils/clear-nuxt-data",{"title":654,"path":1579,"stem":1580,"titleTemplate":6},"/docs/4.x/api/utils/clear-nuxt-state","docs/4.x/4.api/3.utils/clear-nuxt-state",{"title":658,"path":1582,"stem":1583,"titleTemplate":6},"/docs/4.x/api/utils/create-error","docs/4.x/4.api/3.utils/create-error",{"title":662,"path":1585,"stem":1586,"titleTemplate":6},"/docs/4.x/api/utils/define-lazy-hydration-component","docs/4.x/4.api/3.utils/define-lazy-hydration-component",{"title":666,"path":1588,"stem":1589,"titleTemplate":6},"/docs/4.x/api/utils/define-nuxt-component","docs/4.x/4.api/3.utils/define-nuxt-component",{"title":670,"path":1591,"stem":1592,"titleTemplate":6},"/docs/4.x/api/utils/define-nuxt-plugin","docs/4.x/4.api/3.utils/define-nuxt-plugin",{"title":674,"path":1594,"stem":1595,"titleTemplate":6},"/docs/4.x/api/utils/define-nuxt-route-middleware","docs/4.x/4.api/3.utils/define-nuxt-route-middleware",{"title":678,"path":1597,"stem":1598,"titleTemplate":6},"/docs/4.x/api/utils/define-page-meta","docs/4.x/4.api/3.utils/define-page-meta",{"title":682,"path":1600,"stem":1601,"titleTemplate":6},"/docs/4.x/api/utils/define-route-rules","docs/4.x/4.api/3.utils/define-route-rules",{"title":686,"path":1603,"stem":1604,"titleTemplate":6},"/docs/4.x/api/utils/navigate-to","docs/4.x/4.api/3.utils/navigate-to",{"title":690,"path":1606,"stem":1607,"titleTemplate":6},"/docs/4.x/api/utils/on-before-route-leave","docs/4.x/4.api/3.utils/on-before-route-leave",{"title":694,"path":1609,"stem":1610,"titleTemplate":6},"/docs/4.x/api/utils/on-before-route-update","docs/4.x/4.api/3.utils/on-before-route-update",{"title":698,"path":1612,"stem":1613,"titleTemplate":6},"/docs/4.x/api/utils/on-nuxt-ready","docs/4.x/4.api/3.utils/on-nuxt-ready",{"title":702,"path":1615,"stem":1616,"titleTemplate":6},"/docs/4.x/api/utils/prefetch-components","docs/4.x/4.api/3.utils/prefetch-components",{"title":706,"path":1618,"stem":1619,"titleTemplate":6},"/docs/4.x/api/utils/preload-components","docs/4.x/4.api/3.utils/preload-components",{"title":710,"path":1621,"stem":1622,"titleTemplate":6},"/docs/4.x/api/utils/preload-route-components","docs/4.x/4.api/3.utils/preload-route-components",{"title":714,"path":1624,"stem":1625,"titleTemplate":6},"/docs/4.x/api/utils/prerender-routes","docs/4.x/4.api/3.utils/prerender-routes",{"title":718,"path":1627,"stem":1628,"titleTemplate":6},"/docs/4.x/api/utils/refresh-cookie","docs/4.x/4.api/3.utils/refresh-cookie",{"title":722,"path":1630,"stem":1631,"titleTemplate":6},"/docs/4.x/api/utils/refresh-nuxt-data","docs/4.x/4.api/3.utils/refresh-nuxt-data",{"title":726,"path":1633,"stem":1634,"titleTemplate":6},"/docs/4.x/api/utils/reload-nuxt-app","docs/4.x/4.api/3.utils/reload-nuxt-app",{"title":730,"path":1636,"stem":1637,"titleTemplate":6},"/docs/4.x/api/utils/set-page-layout","docs/4.x/4.api/3.utils/set-page-layout",{"title":734,"path":1639,"stem":1640,"titleTemplate":6},"/docs/4.x/api/utils/set-response-status","docs/4.x/4.api/3.utils/set-response-status",{"title":738,"path":1642,"stem":1643,"titleTemplate":6},"/docs/4.x/api/utils/show-error","docs/4.x/4.api/3.utils/show-error",{"title":742,"path":1645,"stem":1646,"titleTemplate":6},"/docs/4.x/api/utils/update-app-config","docs/4.x/4.api/3.utils/update-app-config",{"title":746,"titleTemplate":747,"icon":748,"path":1648,"stem":1649,"children":1650,"page":108},"/docs/4.x/api/commands","docs/4.x/4.api/4.commands",[1651,1654,1657,1660,1663,1666,1669,1672,1675,1678,1681,1684,1687,1690,1693,1696],{"title":753,"path":1652,"stem":1653,"titleTemplate":6},"/docs/4.x/api/commands/add","docs/4.x/4.api/4.commands/add",{"title":757,"path":1655,"stem":1656,"titleTemplate":6},"/docs/4.x/api/commands/analyze","docs/4.x/4.api/4.commands/analyze",{"title":761,"path":1658,"stem":1659,"titleTemplate":6},"/docs/4.x/api/commands/build","docs/4.x/4.api/4.commands/build",{"title":765,"path":1661,"stem":1662,"titleTemplate":6},"/docs/4.x/api/commands/build-module","docs/4.x/4.api/4.commands/build-module",{"title":769,"path":1664,"stem":1665,"titleTemplate":6},"/docs/4.x/api/commands/cleanup","docs/4.x/4.api/4.commands/cleanup",{"title":773,"path":1667,"stem":1668,"titleTemplate":6},"/docs/4.x/api/commands/dev","docs/4.x/4.api/4.commands/dev",{"title":777,"path":1670,"stem":1671,"titleTemplate":6},"/docs/4.x/api/commands/devtools","docs/4.x/4.api/4.commands/devtools",{"title":781,"path":1673,"stem":1674,"titleTemplate":6},"/docs/4.x/api/commands/generate","docs/4.x/4.api/4.commands/generate",{"title":785,"path":1676,"stem":1677,"titleTemplate":6},"/docs/4.x/api/commands/info","docs/4.x/4.api/4.commands/info",{"title":789,"path":1679,"stem":1680,"titleTemplate":6},"/docs/4.x/api/commands/init","docs/4.x/4.api/4.commands/init",{"title":793,"path":1682,"stem":1683,"titleTemplate":6},"/docs/4.x/api/commands/module","docs/4.x/4.api/4.commands/module",{"title":797,"path":1685,"stem":1686,"titleTemplate":6},"/docs/4.x/api/commands/prepare","docs/4.x/4.api/4.commands/prepare",{"title":801,"path":1688,"stem":1689,"titleTemplate":6},"/docs/4.x/api/commands/preview","docs/4.x/4.api/4.commands/preview",{"title":805,"path":1691,"stem":1692,"titleTemplate":6},"/docs/4.x/api/commands/test","docs/4.x/4.api/4.commands/test",{"title":809,"path":1694,"stem":1695,"titleTemplate":6},"/docs/4.x/api/commands/typecheck","docs/4.x/4.api/4.commands/typecheck",{"title":813,"path":1697,"stem":1698,"titleTemplate":6},"/docs/4.x/api/commands/upgrade","docs/4.x/4.api/4.commands/upgrade",{"title":411,"titleTemplate":817,"icon":818,"path":1700,"stem":1701,"children":1702,"page":108},"/docs/4.x/api/kit","docs/4.x/4.api/5.kit",[1703,1706,1709,1712,1715,1718,1721,1724,1727,1730,1733,1736,1739,1742,1745,1748,1751,1754],{"title":276,"path":1704,"stem":1705,"titleTemplate":6},"/docs/4.x/api/kit/modules","docs/4.x/4.api/5.kit/1.modules",{"title":399,"path":1707,"stem":1708,"titleTemplate":6},"/docs/4.x/api/kit/runtime-config","docs/4.x/4.api/5.kit/10.runtime-config",{"title":829,"path":1710,"stem":1711,"titleTemplate":6},"/docs/4.x/api/kit/templates","docs/4.x/4.api/5.kit/10.templates",{"title":833,"path":1713,"stem":1714,"titleTemplate":6},"/docs/4.x/api/kit/nitro","docs/4.x/4.api/5.kit/11.nitro",{"title":837,"path":1716,"stem":1717,"titleTemplate":6},"/docs/4.x/api/kit/resolving","docs/4.x/4.api/5.kit/12.resolving",{"title":841,"path":1719,"stem":1720,"titleTemplate":6},"/docs/4.x/api/kit/logging","docs/4.x/4.api/5.kit/13.logging",{"title":845,"path":1722,"stem":1723,"titleTemplate":6},"/docs/4.x/api/kit/builder","docs/4.x/4.api/5.kit/14.builder",{"title":849,"path":1725,"stem":1726,"titleTemplate":6},"/docs/4.x/api/kit/examples","docs/4.x/4.api/5.kit/15.examples",{"title":84,"path":1728,"stem":1729,"titleTemplate":6},"/docs/4.x/api/kit/layers","docs/4.x/4.api/5.kit/16.layers",{"title":856,"path":1731,"stem":1732,"titleTemplate":6},"/docs/4.x/api/kit/programmatic","docs/4.x/4.api/5.kit/2.programmatic",{"title":860,"path":1734,"stem":1735,"titleTemplate":6},"/docs/4.x/api/kit/compatibility","docs/4.x/4.api/5.kit/3.compatibility",{"title":268,"path":1737,"stem":1738,"titleTemplate":6},"/docs/4.x/api/kit/autoimports","docs/4.x/4.api/5.kit/4.autoimports",{"title":434,"path":1740,"stem":1741,"titleTemplate":6},"/docs/4.x/api/kit/components","docs/4.x/4.api/5.kit/5.components",{"title":870,"path":1743,"stem":1744,"titleTemplate":6},"/docs/4.x/api/kit/context","docs/4.x/4.api/5.kit/6.context",{"title":874,"path":1746,"stem":1747,"titleTemplate":6},"/docs/4.x/api/kit/pages","docs/4.x/4.api/5.kit/7.pages",{"title":878,"path":1749,"stem":1750,"titleTemplate":6},"/docs/4.x/api/kit/layout","docs/4.x/4.api/5.kit/8.layout",{"title":882,"path":1752,"stem":1753,"titleTemplate":6},"/docs/4.x/api/kit/head","docs/4.x/4.api/5.kit/9.head",{"title":886,"path":1755,"stem":1756,"titleTemplate":6},"/docs/4.x/api/kit/plugins","docs/4.x/4.api/5.kit/9.plugins",{"title":890,"titleTemplate":6,"icon":891,"path":1758,"stem":1759,"children":1760,"page":108},"/docs/4.x/api/advanced","docs/4.x/4.api/6.advanced",[1761,1764],{"title":407,"path":1762,"stem":1763,"titleTemplate":6},"/docs/4.x/api/advanced/hooks","docs/4.x/4.api/6.advanced/1.hooks",{"title":899,"path":1765,"stem":1766,"titleTemplate":6},"/docs/4.x/api/advanced/import-meta","docs/4.x/4.api/6.advanced/2.import-meta",{"title":903,"path":1768,"stem":1769,"titleTemplate":906,"icon":32},"/docs/4.x/api/nuxt-config","docs/4.x/4.api/6.nuxt-config",{"title":849,"titleTemplate":908,"icon":909,"path":1771,"stem":1772,"children":1773,"page":108},"/docs/4.x/examples","docs/4.x/4.examples",[1774,1777,1796,1809,1840],{"title":914,"path":1775,"stem":1776,"titleTemplate":6},"/docs/4.x/examples/hello-world","docs/4.x/4.examples/0.hello-world",{"title":395,"path":1778,"stem":1779,"children":1780,"page":108},"/docs/4.x/examples/features","docs/4.x/4.examples/1.features",[1781,1784,1787,1790,1793],{"title":922,"path":1782,"stem":1783,"titleTemplate":6},"/docs/4.x/examples/features/auto-imports","docs/4.x/4.examples/1.features/1.auto-imports",{"title":64,"path":1785,"stem":1786,"titleTemplate":6},"/docs/4.x/examples/features/data-fetching","docs/4.x/4.examples/1.features/2.data-fetching",{"title":69,"path":1788,"stem":1789,"titleTemplate":6},"/docs/4.x/examples/features/state-management","docs/4.x/4.examples/1.features/3.state-management",{"title":932,"path":1791,"stem":1792,"titleTemplate":6},"/docs/4.x/examples/features/meta-tags","docs/4.x/4.examples/1.features/4.meta-tags",{"title":936,"path":1794,"stem":1795,"titleTemplate":6},"/docs/4.x/examples/features/layouts","docs/4.x/4.examples/1.features/5.layouts",{"title":49,"path":1797,"stem":1798,"children":1799,"page":108},"/docs/4.x/examples/routing","docs/4.x/4.examples/2.routing",[1800,1803,1806],{"title":944,"path":1801,"stem":1802,"titleTemplate":6},"/docs/4.x/examples/routing/middleware","docs/4.x/4.examples/2.routing/middleware",{"title":874,"path":1804,"stem":1805,"titleTemplate":6},"/docs/4.x/examples/routing/pages","docs/4.x/4.examples/2.routing/pages",{"title":951,"path":1807,"stem":1808,"titleTemplate":6},"/docs/4.x/examples/routing/universal-router","docs/4.x/4.examples/2.routing/universal-router",{"title":890,"path":1810,"stem":1811,"children":1812,"page":108},"/docs/4.x/examples/advanced","docs/4.x/4.examples/4.advanced",[1813,1816,1819,1822,1825,1828,1831,1834,1837],{"title":84,"path":1814,"stem":1815,"titleTemplate":6},"/docs/4.x/examples/advanced/config-extends","docs/4.x/4.examples/4.advanced/config-extends",{"title":74,"path":1817,"stem":1818,"titleTemplate":6},"/docs/4.x/examples/advanced/error-handling","docs/4.x/4.examples/4.advanced/error-handling",{"title":965,"path":1820,"stem":1821,"titleTemplate":6},"/docs/4.x/examples/advanced/jsx","docs/4.x/4.examples/4.advanced/jsx",{"title":969,"path":1823,"stem":1824,"titleTemplate":6},"/docs/4.x/examples/advanced/locale","docs/4.x/4.examples/4.advanced/locale",{"title":973,"path":1826,"stem":1827,"titleTemplate":6},"/docs/4.x/examples/advanced/module-extend-pages","docs/4.x/4.examples/4.advanced/module-extend-pages",{"title":977,"path":1829,"stem":1830,"titleTemplate":6},"/docs/4.x/examples/advanced/teleport","docs/4.x/4.examples/4.advanced/teleport",{"title":99,"path":1832,"stem":1833,"titleTemplate":6},"/docs/4.x/examples/advanced/testing","docs/4.x/4.examples/4.advanced/testing",{"title":519,"path":1835,"stem":1836,"titleTemplate":6},"/docs/4.x/examples/advanced/use-cookie","docs/4.x/4.examples/4.advanced/use-cookie",{"title":987,"path":1838,"stem":1839,"titleTemplate":6},"/docs/4.x/examples/advanced/use-custom-fetch-composable","docs/4.x/4.examples/4.advanced/use-custom-fetch-composable",{"title":991,"path":1841,"stem":1842,"children":1843,"page":108},"/docs/4.x/examples/experimental","docs/4.x/4.examples/7.experimental",[1844],{"title":996,"path":1845,"stem":1846,"titleTemplate":6},"/docs/4.x/examples/experimental/wasm","docs/4.x/4.examples/7.experimental/wasm",{"title":1000,"titleTemplate":1001,"icon":1002,"path":1848,"stem":1849,"children":1850,"page":108},"/docs/4.x/community","docs/4.x/5.community",[1851,1854,1857,1860,1863,1866],{"title":1007,"path":1852,"stem":1853,"titleTemplate":6,"icon":1010},"/docs/4.x/community/getting-help","docs/4.x/5.community/2.getting-help",{"title":1012,"path":1855,"stem":1856,"titleTemplate":6,"icon":1015},"/docs/4.x/community/reporting-bugs","docs/4.x/5.community/3.reporting-bugs",{"title":1017,"path":1858,"stem":1859,"titleTemplate":6,"icon":1020},"/docs/4.x/community/contribution","docs/4.x/5.community/4.contribution",{"title":1022,"path":1861,"stem":1862,"titleTemplate":6,"icon":1025},"/docs/4.x/community/framework-contribution","docs/4.x/5.community/5.framework-contribution",{"title":1027,"path":1864,"stem":1865,"titleTemplate":6,"icon":1030},"/docs/4.x/community/roadmap","docs/4.x/5.community/6.roadmap",{"title":1032,"path":1867,"stem":1868,"titleTemplate":6,"icon":1035},"/docs/4.x/community/changelog","docs/4.x/5.community/7.changelog",{"title":1037,"titleTemplate":1038,"icon":1039,"path":1870,"stem":1871,"children":1872,"page":108},"/docs/4.x/bridge","docs/4.x/6.bridge",[1873,1876,1879,1882,1885,1888,1891,1894,1897,1900],{"title":1044,"path":1874,"stem":1875,"titleTemplate":6},"/docs/4.x/bridge/overview","docs/4.x/6.bridge/1.overview",{"title":29,"path":1877,"stem":1878,"titleTemplate":6},"/docs/4.x/bridge/configuration","docs/4.x/6.bridge/10.configuration",{"title":280,"path":1880,"stem":1881,"titleTemplate":6},"/docs/4.x/bridge/typescript","docs/4.x/6.bridge/2.typescript",{"title":1054,"path":1883,"stem":1884,"titleTemplate":6},"/docs/4.x/bridge/bridge-composition-api","docs/4.x/6.bridge/3.bridge-composition-api",{"title":1058,"path":1886,"stem":1887,"titleTemplate":6},"/docs/4.x/bridge/plugins-and-middleware","docs/4.x/6.bridge/4.plugins-and-middleware",{"title":1062,"path":1889,"stem":1890,"titleTemplate":6},"/docs/4.x/bridge/nuxt3-compatible-api","docs/4.x/6.bridge/5.nuxt3-compatible-api",{"title":932,"path":1892,"stem":1893,"titleTemplate":6},"/docs/4.x/bridge/meta","docs/4.x/6.bridge/6.meta",{"title":399,"path":1895,"stem":1896,"titleTemplate":6},"/docs/4.x/bridge/runtime-config","docs/4.x/6.bridge/7.runtime-config",{"title":833,"path":1898,"stem":1899,"titleTemplate":6},"/docs/4.x/bridge/nitro","docs/4.x/6.bridge/8.nitro",{"title":1075,"path":1901,"stem":1902,"titleTemplate":6},"/docs/4.x/bridge/vite","docs/4.x/6.bridge/9.vite",{"title":1079,"titleTemplate":1080,"icon":107,"path":1904,"stem":1905,"children":1906,"page":108},"/docs/4.x/migration","docs/4.x/7.migration",[1907,1910,1913,1916,1919,1922,1925,1928,1931,1934,1937],{"title":1044,"path":1908,"stem":1909,"titleTemplate":6},"/docs/4.x/migration/overview","docs/4.x/7.migration/1.overview",{"title":1088,"path":1911,"stem":1912,"titleTemplate":6},"/docs/4.x/migration/bundling","docs/4.x/7.migration/10.bundling",{"title":79,"path":1914,"stem":1915,"titleTemplate":6},"/docs/4.x/migration/server","docs/4.x/7.migration/11.server",{"title":29,"path":1917,"stem":1918,"titleTemplate":6},"/docs/4.x/migration/configuration","docs/4.x/7.migration/2.configuration",{"title":276,"path":1920,"stem":1921,"titleTemplate":6},"/docs/4.x/migration/module-authors","docs/4.x/7.migration/20.module-authors",{"title":922,"path":1923,"stem":1924,"titleTemplate":6},"/docs/4.x/migration/auto-imports","docs/4.x/7.migration/3.auto-imports",{"title":932,"path":1926,"stem":1927,"titleTemplate":6},"/docs/4.x/migration/meta","docs/4.x/7.migration/4.meta",{"title":1058,"path":1929,"stem":1930,"titleTemplate":6},"/docs/4.x/migration/plugins-and-middleware","docs/4.x/7.migration/5.plugins-and-middleware",{"title":1110,"path":1932,"stem":1933,"titleTemplate":6},"/docs/4.x/migration/pages-and-layouts","docs/4.x/7.migration/6.pages-and-layouts",{"title":1114,"path":1935,"stem":1936,"titleTemplate":6},"/docs/4.x/migration/component-options","docs/4.x/7.migration/7.component-options",{"title":399,"path":1938,"stem":1939,"titleTemplate":6},"/docs/4.x/migration/runtime-config","docs/4.x/7.migration/8.runtime-config",{"title":1941,"path":1942,"stem":1943,"children":1944,"page":108},"Blog","/blog","blog",[1945,1949,1953,1957,1961,1965,1969,1973,1977,1981,1985,1989,1993,1997,2001,2005,2009,2013,2017,2021,2025],{"title":1946,"path":1947,"stem":1948},"Announcing 3.0","/blog/v3","blog/1.v3",{"title":1950,"path":1951,"stem":1952},"Nuxt 3.3","/blog/v3-3","blog/10.v3-3",{"title":1954,"path":1955,"stem":1956},"Nuxt 3.4","/blog/v3-4","blog/11.v3-4",{"title":1958,"path":1959,"stem":1960},"Nuxt 3.5","/blog/v3-5","blog/12.v3-5",{"title":1962,"path":1963,"stem":1964},"Nuxt 3.6","/blog/v3-6","blog/13.v3-6",{"title":1966,"path":1967,"stem":1968},"Nuxt on the Edge","/blog/nuxt-on-the-edge","blog/14.nuxt-on-the-edge",{"title":1970,"path":1971,"stem":1972},"Nuxt DevTools v1.0","/blog/nuxt-devtools-v1-0","blog/18.nuxt-devtools-v1-0",{"title":1974,"path":1975,"stem":1976},"Nuxt: A vision for 2023","/blog/vision-2023","blog/2.vision-2023",{"title":1978,"path":1979,"stem":1980},"The Evolution of Shiki v1.0","/blog/shiki-v1","blog/21.shiki-v1",{"title":1982,"path":1983,"stem":1984},"Refreshed Nuxt ESLint Integrations","/blog/eslint-module","blog/24.eslint-module",{"title":1986,"path":1987,"stem":1988},"Introducing Nuxt Scripts","/blog/nuxt-scripts","blog/26.nuxt-scripts",{"title":1990,"path":1991,"stem":1992},"Introducing Nuxt Icon v1","/blog/nuxt-icon-v1-0","blog/29.nuxt-icon-v1-0",{"title":1994,"path":1995,"stem":1996},"Introducing Nuxt DevTools","/blog/introducing-nuxt-devtools","blog/3.introducing-nuxt-devtools",{"title":1998,"path":1999,"stem":2000},"Announcing Nuxt 3 Release Candidate","/blog/nuxt3-rc","blog/3.nuxt3-rc",{"title":2002,"path":2003,"stem":2004},"Nuxt 2 End-of-Life (EOL)","/blog/nuxt2-eol","blog/4.nuxt2-eol",{"title":2006,"path":2007,"stem":2008},"Introducing Nuxt 3 Beta","/blog/nuxt3-beta","blog/4.nuxt3-beta",{"title":2010,"path":2011,"stem":2012},"Going Full Static","/blog/going-full-static","blog/5.going-full-static",{"title":2014,"path":2015,"stem":2016},"Introducing Smart Prefetching","/blog/introducing-smart-prefetching","blog/6.introducing-smart-prefetching",{"title":2018,"path":2019,"stem":2020},"Understanding how fetch works in Nuxt 2.12","/blog/understanding-how-fetch-works-in-nuxt-2-12","blog/7.understanding-how-fetch-works-in-nuxt-2-12",{"title":2022,"path":2023,"stem":2024},"Nuxt 2 Static Improvements","/blog/nuxt-static-improvements","blog/8.nuxt-static-improvements",{"title":2026,"path":2027,"stem":2028},"Nuxt 2: From Terminal to Browser","/blog/nuxtjs-from-terminal-to-browser","blog/9.nuxtjs-from-terminal-to-browser",{"v5":2030,"v4":2030,"v3":2031,"v2":2032},"4.3.1","3.21.1","2.18.1",{"id":2034,"title":2035,"authors":2036,"body":2047,"category":3978,"date":3979,"description":3980,"draft":108,"extension":3981,"image":3982,"meta":3983,"navigation":108,"path":3984,"seo":3985,"stem":3986,"tags":6,"__hash__":3987},"blog/blog/35.building-a-feedback-widget.md","Building a Privacy-First Feedback Widget",[2037,2042],{"name":2038,"avatar":2039,"to":2041},"Hugo Richard",{"src":2040},"https://github.com/hugorcd.png","https://x.com/hugorcd",{"name":2043,"avatar":2044,"to":2046},"Sébastien Chopin",{"src":2045},"https://github.com/Atinux.png","https://x.com/Atinux",{"type":2048,"value":2049,"toc":3968},"minimark",[2050,2054,2059,2062,2065,2088,2108,2112,2115,2120,2136,2139,2594,2603,2607,2621,2941,2944,2964,2969,2983,2987,2998,3385,3398,3700,3703,3710,3714,3717,3945,3948,3952,3955,3964],[2051,2052,2053],"p",{},"Documentation is at the heart of the Nuxt developer experience. To continuously improve it, we needed a simple and effective way to collect user feedback directly on each page. Here's how we designed and implemented our feedback widget, drawing inspiration from Plausible's privacy-first approach.",[2055,2056,2058],"h2",{"id":2057},"why-a-feedback-widget","Why a feedback widget?",[2051,2060,2061],{},"Currently, users can provide feedback on our documentation by creating GitHub issues or contacting us directly. While these channels are valuable and remain important, they require users to leave their current context and take several steps to share their thoughts.",[2051,2063,2064],{},"We wanted something different:",[2066,2067,2068,2076,2082],"ul",{},[2069,2070,2071,2075],"li",{},[2072,2073,2074],"strong",{},"Contextual",": Directly integrated into each documentation page",[2069,2077,2078,2081],{},[2072,2079,2080],{},"Frictionless",": Maximum 2 clicks to provide feedback",[2069,2083,2084,2087],{},[2072,2085,2086],{},"Privacy-respecting",": No personal tracking, GDPR compliant by design",[2089,2090,2095,2100,2104],"video",{":controls":2091,"className":2092,"poster":2094},"true",[2093],"rounded-lg","https://res.cloudinary.com/nuxt/video/upload/so_0/v1749746517/nuxt/nuxt-feedback_lh6zyg.jpg",[2096,2097],"source",{"src":2098,"type":2099},"https://res.cloudinary.com/nuxt/video/upload/v1749746517/nuxt/nuxt-feedback_lh6zyg.webm","video/webm",[2096,2101],{"src":2102,"type":2103},"https://res.cloudinary.com/nuxt/video/upload/v1749746517/nuxt/nuxt-feedback_lh6zyg.mp4","video/mp4",[2096,2105],{"src":2106,"type":2107},"https://res.cloudinary.com/nuxt/video/upload/v1749746517/nuxt/nuxt-feedback_lh6zyg.ogg","video/ogg",[2055,2109,2111],{"id":2110},"technical-architecture","Technical architecture",[2051,2113,2114],{},"Our solution consists of three main components:",[2116,2117,2119],"h3",{"id":2118},"_1-frontend-with-motion-animations","1. Frontend with Motion animations",[2051,2121,2122,2123,2130,2131,2135],{},"The interface combines Vue 3's Composition API with ",[2124,2125,2129],"a",{"href":2126,"rel":2127},"https://motion.dev/docs/vue",[2128],"nofollow","Motion for Vue"," to create an engaging user experience. The widget uses layout animations for smooth state transitions and spring physics for natural feedback. The ",[2132,2133,2134],"code",{},"useFeedback"," composable handles all state management and automatically resets when users navigate between pages.",[2051,2137,2138],{},"Here's the success state animation, for example:",[2140,2141,2146],"pre",{"className":2142,"code":2143,"language":2144,"meta":2145,"style":2145},"language-vue shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","\u003Ctemplate>\n  \u003C!-- ... -->\n  \u003Cmotion.div\n    v-if=\"isSubmitted\"\n    key=\"success\"\n    :initial=\"{ opacity: 0, scale: 0.95 }\"\n    :animate=\"{ opacity: 1, scale: 1 }\"\n    :transition=\"{ duration: 0.3 }\"\n    class=\"flex items-center gap-3 py-2\"\n    role=\"status\"\n    aria-live=\"polite\"\n    aria-label=\"Feedback submitted successfully\"\n  >\n    \u003Cmotion.div\n      :initial=\"{ scale: 0 }\"\n      :animate=\"{ scale: 1 }\"\n      :transition=\"{ delay: 0.1, type: 'spring', visualDuration: 0.4 }\"\n      class=\"text-xl\"\n      aria-hidden=\"true\"\n    >\n      ✨\n    \u003C/motion.div>\n    \u003Cmotion.div\n      :initial=\"{ opacity: 0, x: 10 }\"\n      :animate=\"{ opacity: 1, x: 0 }\"\n      :transition=\"{ delay: 0.2, duration: 0.3 }\"\n    >\n      \u003Cdiv class=\"text-sm font-medium text-highlighted\">\n        Thank you for your feedback!\n      \u003C/div>\n      \u003Cdiv class=\"text-xs text-muted mt-1\">\n        Your input helps us improve the documentation.\n      \u003C/div>\n    \u003C/motion.div>\n  \u003C/motion.div>\n  \u003C!-- ... -->\n\u003C/template>\n","vue","",[2132,2147,2148,2164,2171,2180,2200,2215,2230,2245,2260,2275,2290,2305,2320,2326,2334,2349,2364,2379,2394,2408,2414,2421,2432,2439,2453,2467,2481,2486,2509,2515,2525,2545,2551,2560,2569,2579,2584],{"__ignoreMap":2145},[2149,2150,2153,2157,2161],"span",{"class":2151,"line":2152},"line",1,[2149,2154,2156],{"class":2155},"sDfIl","\u003C",[2149,2158,2160],{"class":2159},"sRlkE","template",[2149,2162,2163],{"class":2155},">\n",[2149,2165,2167],{"class":2151,"line":2166},2,[2149,2168,2170],{"class":2169},"sWuyu","  \u003C!-- ... -->\n",[2149,2172,2174,2177],{"class":2151,"line":2173},3,[2149,2175,2176],{"class":2155},"  \u003C",[2149,2178,2179],{"class":2159},"motion.div\n",[2149,2181,2183,2187,2190,2193,2197],{"class":2151,"line":2182},4,[2149,2184,2186],{"class":2185},"smZ93","    v-if",[2149,2188,2189],{"class":2155},"=",[2149,2191,2192],{"class":2155},"\"",[2149,2194,2196],{"class":2195},"sGFVr","isSubmitted",[2149,2198,2199],{"class":2155},"\"\n",[2149,2201,2203,2206,2208,2210,2213],{"class":2151,"line":2202},5,[2149,2204,2205],{"class":2185},"    key",[2149,2207,2189],{"class":2155},[2149,2209,2192],{"class":2155},[2149,2211,2212],{"class":2195},"success",[2149,2214,2199],{"class":2155},[2149,2216,2218,2221,2223,2225,2228],{"class":2151,"line":2217},6,[2149,2219,2220],{"class":2185},"    :initial",[2149,2222,2189],{"class":2155},[2149,2224,2192],{"class":2155},[2149,2226,2227],{"class":2195},"{ opacity: 0, scale: 0.95 }",[2149,2229,2199],{"class":2155},[2149,2231,2233,2236,2238,2240,2243],{"class":2151,"line":2232},7,[2149,2234,2235],{"class":2185},"    :animate",[2149,2237,2189],{"class":2155},[2149,2239,2192],{"class":2155},[2149,2241,2242],{"class":2195},"{ opacity: 1, scale: 1 }",[2149,2244,2199],{"class":2155},[2149,2246,2248,2251,2253,2255,2258],{"class":2151,"line":2247},8,[2149,2249,2250],{"class":2185},"    :transition",[2149,2252,2189],{"class":2155},[2149,2254,2192],{"class":2155},[2149,2256,2257],{"class":2195},"{ duration: 0.3 }",[2149,2259,2199],{"class":2155},[2149,2261,2263,2266,2268,2270,2273],{"class":2151,"line":2262},9,[2149,2264,2265],{"class":2185},"    class",[2149,2267,2189],{"class":2155},[2149,2269,2192],{"class":2155},[2149,2271,2272],{"class":2195},"flex items-center gap-3 py-2",[2149,2274,2199],{"class":2155},[2149,2276,2278,2281,2283,2285,2288],{"class":2151,"line":2277},10,[2149,2279,2280],{"class":2185},"    role",[2149,2282,2189],{"class":2155},[2149,2284,2192],{"class":2155},[2149,2286,2287],{"class":2195},"status",[2149,2289,2199],{"class":2155},[2149,2291,2293,2296,2298,2300,2303],{"class":2151,"line":2292},11,[2149,2294,2295],{"class":2185},"    aria-live",[2149,2297,2189],{"class":2155},[2149,2299,2192],{"class":2155},[2149,2301,2302],{"class":2195},"polite",[2149,2304,2199],{"class":2155},[2149,2306,2308,2311,2313,2315,2318],{"class":2151,"line":2307},12,[2149,2309,2310],{"class":2185},"    aria-label",[2149,2312,2189],{"class":2155},[2149,2314,2192],{"class":2155},[2149,2316,2317],{"class":2195},"Feedback submitted successfully",[2149,2319,2199],{"class":2155},[2149,2321,2323],{"class":2151,"line":2322},13,[2149,2324,2325],{"class":2155},"  >\n",[2149,2327,2329,2332],{"class":2151,"line":2328},14,[2149,2330,2331],{"class":2155},"    \u003C",[2149,2333,2179],{"class":2159},[2149,2335,2337,2340,2342,2344,2347],{"class":2151,"line":2336},15,[2149,2338,2339],{"class":2185},"      :initial",[2149,2341,2189],{"class":2155},[2149,2343,2192],{"class":2155},[2149,2345,2346],{"class":2195},"{ scale: 0 }",[2149,2348,2199],{"class":2155},[2149,2350,2352,2355,2357,2359,2362],{"class":2151,"line":2351},16,[2149,2353,2354],{"class":2185},"      :animate",[2149,2356,2189],{"class":2155},[2149,2358,2192],{"class":2155},[2149,2360,2361],{"class":2195},"{ scale: 1 }",[2149,2363,2199],{"class":2155},[2149,2365,2367,2370,2372,2374,2377],{"class":2151,"line":2366},17,[2149,2368,2369],{"class":2185},"      :transition",[2149,2371,2189],{"class":2155},[2149,2373,2192],{"class":2155},[2149,2375,2376],{"class":2195},"{ delay: 0.1, type: 'spring', visualDuration: 0.4 }",[2149,2378,2199],{"class":2155},[2149,2380,2382,2385,2387,2389,2392],{"class":2151,"line":2381},18,[2149,2383,2384],{"class":2185},"      class",[2149,2386,2189],{"class":2155},[2149,2388,2192],{"class":2155},[2149,2390,2391],{"class":2195},"text-xl",[2149,2393,2199],{"class":2155},[2149,2395,2397,2400,2402,2404,2406],{"class":2151,"line":2396},19,[2149,2398,2399],{"class":2185},"      aria-hidden",[2149,2401,2189],{"class":2155},[2149,2403,2192],{"class":2155},[2149,2405,2091],{"class":2195},[2149,2407,2199],{"class":2155},[2149,2409,2411],{"class":2151,"line":2410},20,[2149,2412,2413],{"class":2155},"    >\n",[2149,2415,2417],{"class":2151,"line":2416},21,[2149,2418,2420],{"class":2419},"sZSNi","      ✨\n",[2149,2422,2424,2427,2430],{"class":2151,"line":2423},22,[2149,2425,2426],{"class":2155},"    \u003C/",[2149,2428,2429],{"class":2159},"motion.div",[2149,2431,2163],{"class":2155},[2149,2433,2435,2437],{"class":2151,"line":2434},23,[2149,2436,2331],{"class":2155},[2149,2438,2179],{"class":2159},[2149,2440,2442,2444,2446,2448,2451],{"class":2151,"line":2441},24,[2149,2443,2339],{"class":2185},[2149,2445,2189],{"class":2155},[2149,2447,2192],{"class":2155},[2149,2449,2450],{"class":2195},"{ opacity: 0, x: 10 }",[2149,2452,2199],{"class":2155},[2149,2454,2456,2458,2460,2462,2465],{"class":2151,"line":2455},25,[2149,2457,2354],{"class":2185},[2149,2459,2189],{"class":2155},[2149,2461,2192],{"class":2155},[2149,2463,2464],{"class":2195},"{ opacity: 1, x: 0 }",[2149,2466,2199],{"class":2155},[2149,2468,2470,2472,2474,2476,2479],{"class":2151,"line":2469},26,[2149,2471,2369],{"class":2185},[2149,2473,2189],{"class":2155},[2149,2475,2192],{"class":2155},[2149,2477,2478],{"class":2195},"{ delay: 0.2, duration: 0.3 }",[2149,2480,2199],{"class":2155},[2149,2482,2484],{"class":2151,"line":2483},27,[2149,2485,2413],{"class":2155},[2149,2487,2489,2492,2495,2498,2500,2502,2505,2507],{"class":2151,"line":2488},28,[2149,2490,2491],{"class":2155},"      \u003C",[2149,2493,2494],{"class":2159},"div",[2149,2496,2497],{"class":2185}," class",[2149,2499,2189],{"class":2155},[2149,2501,2192],{"class":2155},[2149,2503,2504],{"class":2195},"text-sm font-medium text-highlighted",[2149,2506,2192],{"class":2155},[2149,2508,2163],{"class":2155},[2149,2510,2512],{"class":2151,"line":2511},29,[2149,2513,2514],{"class":2419},"        Thank you for your feedback!\n",[2149,2516,2518,2521,2523],{"class":2151,"line":2517},30,[2149,2519,2520],{"class":2155},"      \u003C/",[2149,2522,2494],{"class":2159},[2149,2524,2163],{"class":2155},[2149,2526,2528,2530,2532,2534,2536,2538,2541,2543],{"class":2151,"line":2527},31,[2149,2529,2491],{"class":2155},[2149,2531,2494],{"class":2159},[2149,2533,2497],{"class":2185},[2149,2535,2189],{"class":2155},[2149,2537,2192],{"class":2155},[2149,2539,2540],{"class":2195},"text-xs text-muted mt-1",[2149,2542,2192],{"class":2155},[2149,2544,2163],{"class":2155},[2149,2546,2548],{"class":2151,"line":2547},32,[2149,2549,2550],{"class":2419},"        Your input helps us improve the documentation.\n",[2149,2552,2554,2556,2558],{"class":2151,"line":2553},33,[2149,2555,2520],{"class":2155},[2149,2557,2494],{"class":2159},[2149,2559,2163],{"class":2155},[2149,2561,2563,2565,2567],{"class":2151,"line":2562},34,[2149,2564,2426],{"class":2155},[2149,2566,2429],{"class":2159},[2149,2568,2163],{"class":2155},[2149,2570,2572,2575,2577],{"class":2151,"line":2571},35,[2149,2573,2574],{"class":2155},"  \u003C/",[2149,2576,2429],{"class":2159},[2149,2578,2163],{"class":2155},[2149,2580,2582],{"class":2151,"line":2581},36,[2149,2583,2170],{"class":2169},[2149,2585,2587,2590,2592],{"class":2151,"line":2586},37,[2149,2588,2589],{"class":2155},"\u003C/",[2149,2591,2160],{"class":2159},[2149,2593,2163],{"class":2155},[2051,2595,2596,2597,2602],{},"You can find the source code of the feedback widget ",[2124,2598,2601],{"href":2599,"rel":2600},"https://github.com/nuxt/nuxt.com/tree/main/app/components/Feedback.vue",[2128],"here",".",[2116,2604,2606],{"id":2605},"_2-plausible-inspired-anonymization","2. Plausible-inspired anonymization",[2051,2608,2609,2610,2615,2616,2602],{},"The challenge was detecting duplicates (a user changing their mind) while preserving privacy. We took inspiration from ",[2124,2611,2614],{"href":2612,"rel":2613},"https://plausible.io/",[2128],"Plausible","'s approach to ",[2124,2617,2620],{"href":2618,"rel":2619},"https://plausible.io/data-policy",[2128],"counting unique visitors without cookies",[2140,2622,2626],{"className":2623,"code":2624,"language":2625,"meta":2145,"style":2145},"language-typescript shiki shiki-themes material-theme-lighter material-theme-lighter material-theme-palenight","export async function generateHash(\n  today: string,\n  ip: string,\n  domain: string,\n  userAgent: string\n): Promise\u003Cstring> {\n  const data = `${today}+${domain}+${ip}+${userAgent}`\n\n  const buffer = await crypto.subtle.digest(\n    'SHA-1',\n    new TextEncoder().encode(data)\n  )\n\n  return [...new Uint8Array(buffer)]\n    .map(b => b.toString(16).padStart(2, '0'))\n    .join('')\n}\n","typescript",[2132,2627,2628,2647,2663,2674,2685,2695,2714,2764,2769,2796,2809,2834,2839,2843,2865,2922,2936],{"__ignoreMap":2145},[2149,2629,2630,2634,2637,2640,2644],{"class":2151,"line":2152},[2149,2631,2633],{"class":2632},"s8R28","export",[2149,2635,2636],{"class":2185}," async",[2149,2638,2639],{"class":2185}," function",[2149,2641,2643],{"class":2642},"s3cPz"," generateHash",[2149,2645,2646],{"class":2155},"(\n",[2149,2648,2649,2653,2656,2660],{"class":2151,"line":2166},[2149,2650,2652],{"class":2651},"s1nJG","  today",[2149,2654,2655],{"class":2155},":",[2149,2657,2659],{"class":2658},"s52Pk"," string",[2149,2661,2662],{"class":2155},",\n",[2149,2664,2665,2668,2670,2672],{"class":2151,"line":2173},[2149,2666,2667],{"class":2651},"  ip",[2149,2669,2655],{"class":2155},[2149,2671,2659],{"class":2658},[2149,2673,2662],{"class":2155},[2149,2675,2676,2679,2681,2683],{"class":2151,"line":2182},[2149,2677,2678],{"class":2651},"  domain",[2149,2680,2655],{"class":2155},[2149,2682,2659],{"class":2658},[2149,2684,2662],{"class":2155},[2149,2686,2687,2690,2692],{"class":2151,"line":2202},[2149,2688,2689],{"class":2651},"  userAgent",[2149,2691,2655],{"class":2155},[2149,2693,2694],{"class":2658}," string\n",[2149,2696,2697,2700,2703,2705,2708,2711],{"class":2151,"line":2217},[2149,2698,2699],{"class":2155},"):",[2149,2701,2702],{"class":2658}," Promise",[2149,2704,2156],{"class":2155},[2149,2706,2707],{"class":2658},"string",[2149,2709,2710],{"class":2155},">",[2149,2712,2713],{"class":2155}," {\n",[2149,2715,2716,2719,2722,2725,2728,2731,2734,2737,2740,2743,2745,2747,2749,2752,2754,2756,2758,2761],{"class":2151,"line":2232},[2149,2717,2718],{"class":2185},"  const",[2149,2720,2721],{"class":2419}," data",[2149,2723,2724],{"class":2155}," =",[2149,2726,2727],{"class":2155}," `${",[2149,2729,2730],{"class":2419},"today",[2149,2732,2733],{"class":2155},"}",[2149,2735,2736],{"class":2195},"+",[2149,2738,2739],{"class":2155},"${",[2149,2741,2742],{"class":2419},"domain",[2149,2744,2733],{"class":2155},[2149,2746,2736],{"class":2195},[2149,2748,2739],{"class":2155},[2149,2750,2751],{"class":2419},"ip",[2149,2753,2733],{"class":2155},[2149,2755,2736],{"class":2195},[2149,2757,2739],{"class":2155},[2149,2759,2760],{"class":2419},"userAgent",[2149,2762,2763],{"class":2155},"}`\n",[2149,2765,2766],{"class":2151,"line":2247},[2149,2767,2768],{"emptyLinePlaceholder":1196},"\n",[2149,2770,2771,2773,2776,2778,2781,2784,2786,2789,2791,2794],{"class":2151,"line":2262},[2149,2772,2718],{"class":2185},[2149,2774,2775],{"class":2419}," buffer",[2149,2777,2724],{"class":2155},[2149,2779,2780],{"class":2632}," await",[2149,2782,2783],{"class":2419}," crypto",[2149,2785,2602],{"class":2155},[2149,2787,2788],{"class":2419},"subtle",[2149,2790,2602],{"class":2155},[2149,2792,2793],{"class":2642},"digest",[2149,2795,2646],{"class":2159},[2149,2797,2798,2801,2804,2807],{"class":2151,"line":2277},[2149,2799,2800],{"class":2155},"    '",[2149,2802,2803],{"class":2195},"SHA-1",[2149,2805,2806],{"class":2155},"'",[2149,2808,2662],{"class":2155},[2149,2810,2811,2814,2817,2820,2822,2825,2828,2831],{"class":2151,"line":2292},[2149,2812,2813],{"class":2155},"    new",[2149,2815,2816],{"class":2642}," TextEncoder",[2149,2818,2819],{"class":2159},"()",[2149,2821,2602],{"class":2155},[2149,2823,2824],{"class":2642},"encode",[2149,2826,2827],{"class":2159},"(",[2149,2829,2830],{"class":2419},"data",[2149,2832,2833],{"class":2159},")\n",[2149,2835,2836],{"class":2151,"line":2307},[2149,2837,2838],{"class":2159},"  )\n",[2149,2840,2841],{"class":2151,"line":2322},[2149,2842,2768],{"emptyLinePlaceholder":1196},[2149,2844,2845,2848,2851,2854,2857,2859,2862],{"class":2151,"line":2328},[2149,2846,2847],{"class":2632},"  return",[2149,2849,2850],{"class":2159}," [",[2149,2852,2853],{"class":2155},"...new",[2149,2855,2856],{"class":2642}," Uint8Array",[2149,2858,2827],{"class":2159},[2149,2860,2861],{"class":2419},"buffer",[2149,2863,2864],{"class":2159},")]\n",[2149,2866,2867,2870,2873,2875,2878,2881,2884,2886,2889,2891,2895,2898,2900,2903,2905,2908,2911,2914,2917,2919],{"class":2151,"line":2336},[2149,2868,2869],{"class":2155},"    .",[2149,2871,2872],{"class":2642},"map",[2149,2874,2827],{"class":2159},[2149,2876,2877],{"class":2651},"b",[2149,2879,2880],{"class":2185}," =>",[2149,2882,2883],{"class":2419}," b",[2149,2885,2602],{"class":2155},[2149,2887,2888],{"class":2642},"toString",[2149,2890,2827],{"class":2159},[2149,2892,2894],{"class":2893},"sYRBq","16",[2149,2896,2897],{"class":2159},")",[2149,2899,2602],{"class":2155},[2149,2901,2902],{"class":2642},"padStart",[2149,2904,2827],{"class":2159},[2149,2906,2907],{"class":2893},"2",[2149,2909,2910],{"class":2155},",",[2149,2912,2913],{"class":2155}," '",[2149,2915,2916],{"class":2195},"0",[2149,2918,2806],{"class":2155},[2149,2920,2921],{"class":2159},"))\n",[2149,2923,2924,2926,2929,2931,2934],{"class":2151,"line":2351},[2149,2925,2869],{"class":2155},[2149,2927,2928],{"class":2642},"join",[2149,2930,2827],{"class":2159},[2149,2932,2933],{"class":2155},"''",[2149,2935,2833],{"class":2159},[2149,2937,2938],{"class":2151,"line":2366},[2149,2939,2940],{"class":2155},"}\n",[2051,2942,2943],{},"This method generates a unique daily identifier by combining:",[2066,2945,2946,2952,2958],{},[2069,2947,2948,2951],{},[2072,2949,2950],{},"IP + User-Agent",": Naturally sent with every HTTP request",[2069,2953,2954,2957],{},[2072,2955,2956],{},"Domain",": Enables environment isolation",[2069,2959,2960,2963],{},[2072,2961,2962],{},"Current date",": Forces daily rotation of identifiers",[2051,2965,2966],{},[2072,2967,2968],{},"Why is this secure?",[2066,2970,2971,2974,2977,2980],{},[2069,2972,2973],{},"IP and User-Agent are never stored in the database",[2069,2975,2976],{},"The hash changes daily, preventing long-term tracking",[2069,2978,2979],{},"Very difficult to reverse engineer original data from the hash",[2069,2981,2982],{},"GDPR compliant by design (no persistent personal data)",[2116,2984,2986],{"id":2985},"_3-database-persistence-with-conflict-handling","3. Database persistence with conflict handling",[2051,2988,2989,2990,2993,2994,2997],{},"First, we define the schema for the feedback table and add a unique constraint on the ",[2132,2991,2992],{},"path"," and ",[2132,2995,2996],{},"fingerprint"," columns.",[2140,2999,3001],{"className":2623,"code":3000,"language":2625,"meta":2145,"style":2145},"export const feedback = sqliteTable('feedback', {\n  id: integer('id').primaryKey({ autoIncrement: true }),\n  rating: text('rating').notNull(),\n  feedback: text('feedback'),\n  path: text('path').notNull(),\n  title: text('title').notNull(),\n  stem: text('stem').notNull(),\n  country: text('country').notNull(),\n  fingerprint: text('fingerprint').notNull(),\n  createdAt: integer({ mode: 'timestamp' }).notNull(),\n  updatedAt: integer({ mode: 'timestamp' }).notNull()\n}, table => [uniqueIndex('path_fingerprint_idx').on(table.path, table.fingerprint)])\n",[2132,3002,3003,3031,3078,3108,3129,3156,3184,3212,3240,3267,3304,3338],{"__ignoreMap":2145},[2149,3004,3005,3007,3010,3013,3015,3018,3020,3022,3025,3027,3029],{"class":2151,"line":2152},[2149,3006,2633],{"class":2632},[2149,3008,3009],{"class":2185}," const",[2149,3011,3012],{"class":2419}," feedback ",[2149,3014,2189],{"class":2155},[2149,3016,3017],{"class":2642}," sqliteTable",[2149,3019,2827],{"class":2419},[2149,3021,2806],{"class":2155},[2149,3023,3024],{"class":2195},"feedback",[2149,3026,2806],{"class":2155},[2149,3028,2910],{"class":2155},[2149,3030,2713],{"class":2155},[2149,3032,3033,3036,3038,3041,3043,3045,3048,3050,3052,3054,3057,3059,3062,3065,3067,3071,3074,3076],{"class":2151,"line":2166},[2149,3034,3035],{"class":2159},"  id",[2149,3037,2655],{"class":2155},[2149,3039,3040],{"class":2642}," integer",[2149,3042,2827],{"class":2419},[2149,3044,2806],{"class":2155},[2149,3046,3047],{"class":2195},"id",[2149,3049,2806],{"class":2155},[2149,3051,2897],{"class":2419},[2149,3053,2602],{"class":2155},[2149,3055,3056],{"class":2642},"primaryKey",[2149,3058,2827],{"class":2419},[2149,3060,3061],{"class":2155},"{",[2149,3063,3064],{"class":2159}," autoIncrement",[2149,3066,2655],{"class":2155},[2149,3068,3070],{"class":3069},"sbKd-"," true",[2149,3072,3073],{"class":2155}," }",[2149,3075,2897],{"class":2419},[2149,3077,2662],{"class":2155},[2149,3079,3080,3083,3085,3088,3090,3092,3095,3097,3099,3101,3104,3106],{"class":2151,"line":2173},[2149,3081,3082],{"class":2159},"  rating",[2149,3084,2655],{"class":2155},[2149,3086,3087],{"class":2642}," text",[2149,3089,2827],{"class":2419},[2149,3091,2806],{"class":2155},[2149,3093,3094],{"class":2195},"rating",[2149,3096,2806],{"class":2155},[2149,3098,2897],{"class":2419},[2149,3100,2602],{"class":2155},[2149,3102,3103],{"class":2642},"notNull",[2149,3105,2819],{"class":2419},[2149,3107,2662],{"class":2155},[2149,3109,3110,3113,3115,3117,3119,3121,3123,3125,3127],{"class":2151,"line":2182},[2149,3111,3112],{"class":2159},"  feedback",[2149,3114,2655],{"class":2155},[2149,3116,3087],{"class":2642},[2149,3118,2827],{"class":2419},[2149,3120,2806],{"class":2155},[2149,3122,3024],{"class":2195},[2149,3124,2806],{"class":2155},[2149,3126,2897],{"class":2419},[2149,3128,2662],{"class":2155},[2149,3130,3131,3134,3136,3138,3140,3142,3144,3146,3148,3150,3152,3154],{"class":2151,"line":2202},[2149,3132,3133],{"class":2159},"  path",[2149,3135,2655],{"class":2155},[2149,3137,3087],{"class":2642},[2149,3139,2827],{"class":2419},[2149,3141,2806],{"class":2155},[2149,3143,2992],{"class":2195},[2149,3145,2806],{"class":2155},[2149,3147,2897],{"class":2419},[2149,3149,2602],{"class":2155},[2149,3151,3103],{"class":2642},[2149,3153,2819],{"class":2419},[2149,3155,2662],{"class":2155},[2149,3157,3158,3161,3163,3165,3167,3169,3172,3174,3176,3178,3180,3182],{"class":2151,"line":2217},[2149,3159,3160],{"class":2159},"  title",[2149,3162,2655],{"class":2155},[2149,3164,3087],{"class":2642},[2149,3166,2827],{"class":2419},[2149,3168,2806],{"class":2155},[2149,3170,3171],{"class":2195},"title",[2149,3173,2806],{"class":2155},[2149,3175,2897],{"class":2419},[2149,3177,2602],{"class":2155},[2149,3179,3103],{"class":2642},[2149,3181,2819],{"class":2419},[2149,3183,2662],{"class":2155},[2149,3185,3186,3189,3191,3193,3195,3197,3200,3202,3204,3206,3208,3210],{"class":2151,"line":2232},[2149,3187,3188],{"class":2159},"  stem",[2149,3190,2655],{"class":2155},[2149,3192,3087],{"class":2642},[2149,3194,2827],{"class":2419},[2149,3196,2806],{"class":2155},[2149,3198,3199],{"class":2195},"stem",[2149,3201,2806],{"class":2155},[2149,3203,2897],{"class":2419},[2149,3205,2602],{"class":2155},[2149,3207,3103],{"class":2642},[2149,3209,2819],{"class":2419},[2149,3211,2662],{"class":2155},[2149,3213,3214,3217,3219,3221,3223,3225,3228,3230,3232,3234,3236,3238],{"class":2151,"line":2247},[2149,3215,3216],{"class":2159},"  country",[2149,3218,2655],{"class":2155},[2149,3220,3087],{"class":2642},[2149,3222,2827],{"class":2419},[2149,3224,2806],{"class":2155},[2149,3226,3227],{"class":2195},"country",[2149,3229,2806],{"class":2155},[2149,3231,2897],{"class":2419},[2149,3233,2602],{"class":2155},[2149,3235,3103],{"class":2642},[2149,3237,2819],{"class":2419},[2149,3239,2662],{"class":2155},[2149,3241,3242,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265],{"class":2151,"line":2262},[2149,3243,3244],{"class":2159},"  fingerprint",[2149,3246,2655],{"class":2155},[2149,3248,3087],{"class":2642},[2149,3250,2827],{"class":2419},[2149,3252,2806],{"class":2155},[2149,3254,2996],{"class":2195},[2149,3256,2806],{"class":2155},[2149,3258,2897],{"class":2419},[2149,3260,2602],{"class":2155},[2149,3262,3103],{"class":2642},[2149,3264,2819],{"class":2419},[2149,3266,2662],{"class":2155},[2149,3268,3269,3272,3274,3276,3278,3280,3283,3285,3287,3290,3292,3294,3296,3298,3300,3302],{"class":2151,"line":2277},[2149,3270,3271],{"class":2159},"  createdAt",[2149,3273,2655],{"class":2155},[2149,3275,3040],{"class":2642},[2149,3277,2827],{"class":2419},[2149,3279,3061],{"class":2155},[2149,3281,3282],{"class":2159}," mode",[2149,3284,2655],{"class":2155},[2149,3286,2913],{"class":2155},[2149,3288,3289],{"class":2195},"timestamp",[2149,3291,2806],{"class":2155},[2149,3293,3073],{"class":2155},[2149,3295,2897],{"class":2419},[2149,3297,2602],{"class":2155},[2149,3299,3103],{"class":2642},[2149,3301,2819],{"class":2419},[2149,3303,2662],{"class":2155},[2149,3305,3306,3309,3311,3313,3315,3317,3319,3321,3323,3325,3327,3329,3331,3333,3335],{"class":2151,"line":2292},[2149,3307,3308],{"class":2159},"  updatedAt",[2149,3310,2655],{"class":2155},[2149,3312,3040],{"class":2642},[2149,3314,2827],{"class":2419},[2149,3316,3061],{"class":2155},[2149,3318,3282],{"class":2159},[2149,3320,2655],{"class":2155},[2149,3322,2913],{"class":2155},[2149,3324,3289],{"class":2195},[2149,3326,2806],{"class":2155},[2149,3328,3073],{"class":2155},[2149,3330,2897],{"class":2419},[2149,3332,2602],{"class":2155},[2149,3334,3103],{"class":2642},[2149,3336,3337],{"class":2419},"()\n",[2149,3339,3340,3343,3346,3348,3350,3353,3355,3357,3360,3362,3364,3366,3369,3372,3374,3376,3378,3380,3382],{"class":2151,"line":2307},[2149,3341,3342],{"class":2155},"},",[2149,3344,3345],{"class":2651}," table",[2149,3347,2880],{"class":2185},[2149,3349,2850],{"class":2419},[2149,3351,3352],{"class":2642},"uniqueIndex",[2149,3354,2827],{"class":2419},[2149,3356,2806],{"class":2155},[2149,3358,3359],{"class":2195},"path_fingerprint_idx",[2149,3361,2806],{"class":2155},[2149,3363,2897],{"class":2419},[2149,3365,2602],{"class":2155},[2149,3367,3368],{"class":2642},"on",[2149,3370,3371],{"class":2419},"(table",[2149,3373,2602],{"class":2155},[2149,3375,2992],{"class":2419},[2149,3377,2910],{"class":2155},[2149,3379,3345],{"class":2419},[2149,3381,2602],{"class":2155},[2149,3383,3384],{"class":2419},"fingerprint)])\n",[2051,3386,3387,3388,3393,3394,3397],{},"Then, in the server, we use ",[2124,3389,3392],{"href":3390,"rel":3391},"https://orm.drizzle.team/docs/get-started",[2128],"Drizzle"," with an ",[2132,3395,3396],{},"UPSERT"," strategy:",[2140,3399,3401],{"className":2623,"code":3400,"language":2625,"meta":2145,"style":2145},"await drizzle.insert(tables.feedback).values({\n  rating: data.rating,\n  feedback: data.feedback || null,\n  path: data.path,\n  title: data.title,\n  stem: data.stem,\n  country: event.context.cf?.country || 'unknown',\n  fingerprint,\n  createdAt: new Date(),\n  updatedAt: new Date()\n}).onConflictDoUpdate({\n  target: [tables.feedback.path, tables.feedback.fingerprint],\n  set: {\n    rating: data.rating,\n    feedback: data.feedback || null,\n    country,\n    updatedAt: new Date()\n  }\n})\n",[2132,3402,3403,3434,3448,3467,3481,3495,3509,3545,3551,3567,3579,3594,3628,3637,3652,3669,3676,3689,3694],{"__ignoreMap":2145},[2149,3404,3405,3408,3411,3413,3416,3419,3421,3424,3426,3429,3431],{"class":2151,"line":2152},[2149,3406,3407],{"class":2632},"await",[2149,3409,3410],{"class":2419}," drizzle",[2149,3412,2602],{"class":2155},[2149,3414,3415],{"class":2642},"insert",[2149,3417,3418],{"class":2419},"(tables",[2149,3420,2602],{"class":2155},[2149,3422,3423],{"class":2419},"feedback)",[2149,3425,2602],{"class":2155},[2149,3427,3428],{"class":2642},"values",[2149,3430,2827],{"class":2419},[2149,3432,3433],{"class":2155},"{\n",[2149,3435,3436,3438,3440,3442,3444,3446],{"class":2151,"line":2166},[2149,3437,3082],{"class":2159},[2149,3439,2655],{"class":2155},[2149,3441,2721],{"class":2419},[2149,3443,2602],{"class":2155},[2149,3445,3094],{"class":2419},[2149,3447,2662],{"class":2155},[2149,3449,3450,3452,3454,3456,3458,3461,3464],{"class":2151,"line":2173},[2149,3451,3112],{"class":2159},[2149,3453,2655],{"class":2155},[2149,3455,2721],{"class":2419},[2149,3457,2602],{"class":2155},[2149,3459,3460],{"class":2419},"feedback ",[2149,3462,3463],{"class":2155},"||",[2149,3465,3466],{"class":2155}," null,\n",[2149,3468,3469,3471,3473,3475,3477,3479],{"class":2151,"line":2182},[2149,3470,3133],{"class":2159},[2149,3472,2655],{"class":2155},[2149,3474,2721],{"class":2419},[2149,3476,2602],{"class":2155},[2149,3478,2992],{"class":2419},[2149,3480,2662],{"class":2155},[2149,3482,3483,3485,3487,3489,3491,3493],{"class":2151,"line":2202},[2149,3484,3160],{"class":2159},[2149,3486,2655],{"class":2155},[2149,3488,2721],{"class":2419},[2149,3490,2602],{"class":2155},[2149,3492,3171],{"class":2419},[2149,3494,2662],{"class":2155},[2149,3496,3497,3499,3501,3503,3505,3507],{"class":2151,"line":2217},[2149,3498,3188],{"class":2159},[2149,3500,2655],{"class":2155},[2149,3502,2721],{"class":2419},[2149,3504,2602],{"class":2155},[2149,3506,3199],{"class":2419},[2149,3508,2662],{"class":2155},[2149,3510,3511,3513,3515,3518,3520,3523,3525,3528,3531,3534,3536,3538,3541,3543],{"class":2151,"line":2232},[2149,3512,3216],{"class":2159},[2149,3514,2655],{"class":2155},[2149,3516,3517],{"class":2419}," event",[2149,3519,2602],{"class":2155},[2149,3521,3522],{"class":2419},"context",[2149,3524,2602],{"class":2155},[2149,3526,3527],{"class":2419},"cf",[2149,3529,3530],{"class":2155},"?.",[2149,3532,3533],{"class":2419},"country ",[2149,3535,3463],{"class":2155},[2149,3537,2913],{"class":2155},[2149,3539,3540],{"class":2195},"unknown",[2149,3542,2806],{"class":2155},[2149,3544,2662],{"class":2155},[2149,3546,3547,3549],{"class":2151,"line":2247},[2149,3548,3244],{"class":2419},[2149,3550,2662],{"class":2155},[2149,3552,3553,3555,3557,3560,3563,3565],{"class":2151,"line":2262},[2149,3554,3271],{"class":2159},[2149,3556,2655],{"class":2155},[2149,3558,3559],{"class":2155}," new",[2149,3561,3562],{"class":2642}," Date",[2149,3564,2819],{"class":2419},[2149,3566,2662],{"class":2155},[2149,3568,3569,3571,3573,3575,3577],{"class":2151,"line":2277},[2149,3570,3308],{"class":2159},[2149,3572,2655],{"class":2155},[2149,3574,3559],{"class":2155},[2149,3576,3562],{"class":2642},[2149,3578,3337],{"class":2419},[2149,3580,3581,3583,3585,3587,3590,3592],{"class":2151,"line":2292},[2149,3582,2733],{"class":2155},[2149,3584,2897],{"class":2419},[2149,3586,2602],{"class":2155},[2149,3588,3589],{"class":2642},"onConflictDoUpdate",[2149,3591,2827],{"class":2419},[2149,3593,3433],{"class":2155},[2149,3595,3596,3599,3601,3604,3606,3608,3610,3612,3614,3617,3619,3621,3623,3626],{"class":2151,"line":2307},[2149,3597,3598],{"class":2159},"  target",[2149,3600,2655],{"class":2155},[2149,3602,3603],{"class":2419}," [tables",[2149,3605,2602],{"class":2155},[2149,3607,3024],{"class":2419},[2149,3609,2602],{"class":2155},[2149,3611,2992],{"class":2419},[2149,3613,2910],{"class":2155},[2149,3615,3616],{"class":2419}," tables",[2149,3618,2602],{"class":2155},[2149,3620,3024],{"class":2419},[2149,3622,2602],{"class":2155},[2149,3624,3625],{"class":2419},"fingerprint]",[2149,3627,2662],{"class":2155},[2149,3629,3630,3633,3635],{"class":2151,"line":2322},[2149,3631,3632],{"class":2159},"  set",[2149,3634,2655],{"class":2155},[2149,3636,2713],{"class":2155},[2149,3638,3639,3642,3644,3646,3648,3650],{"class":2151,"line":2328},[2149,3640,3641],{"class":2159},"    rating",[2149,3643,2655],{"class":2155},[2149,3645,2721],{"class":2419},[2149,3647,2602],{"class":2155},[2149,3649,3094],{"class":2419},[2149,3651,2662],{"class":2155},[2149,3653,3654,3657,3659,3661,3663,3665,3667],{"class":2151,"line":2336},[2149,3655,3656],{"class":2159},"    feedback",[2149,3658,2655],{"class":2155},[2149,3660,2721],{"class":2419},[2149,3662,2602],{"class":2155},[2149,3664,3460],{"class":2419},[2149,3666,3463],{"class":2155},[2149,3668,3466],{"class":2155},[2149,3670,3671,3674],{"class":2151,"line":2351},[2149,3672,3673],{"class":2419},"    country",[2149,3675,2662],{"class":2155},[2149,3677,3678,3681,3683,3685,3687],{"class":2151,"line":2366},[2149,3679,3680],{"class":2159},"    updatedAt",[2149,3682,2655],{"class":2155},[2149,3684,3559],{"class":2155},[2149,3686,3562],{"class":2642},[2149,3688,3337],{"class":2419},[2149,3690,3691],{"class":2151,"line":2381},[2149,3692,3693],{"class":2155},"  }\n",[2149,3695,3696,3698],{"class":2151,"line":2396},[2149,3697,2733],{"class":2155},[2149,3699,2833],{"class":2419},[2051,3701,3702],{},"This approach enables updates if the user changes their mind within the day, creation for new feedback, and automatic deduplication per page and user.",[2051,3704,3705,3706,2602],{},"You can find the source code of the server side ",[2124,3707,2601],{"href":3708,"rel":3709},"https://github.com/nuxt/nuxt.com/tree/main/server",[2128],[2055,3711,3713],{"id":3712},"shared-types-for-consistency","Shared types for consistency",[2051,3715,3716],{},"We use Zod for runtime validation and type generation:",[2140,3718,3720],{"className":2623,"code":3719,"language":2625,"meta":2145,"style":2145},"export const FEEDBACK_RATINGS = [\n  'very-helpful',\n  'helpful', \n  'not-helpful',\n  'confusing'\n] as const\n\nexport const feedbackSchema = z.object({\n  rating: z.enum(FEEDBACK_RATINGS),\n  feedback: z.string().optional(),\n  path: z.string(),\n  title: z.string(),\n  stem: z.string()\n})\n\nexport type FeedbackInput = z.infer\u003Ctypeof feedbackSchema>\n",[2132,3721,3722,3736,3748,3762,3773,3783,3794,3798,3821,3839,3862,3878,3894,3908,3914,3918],{"__ignoreMap":2145},[2149,3723,3724,3726,3728,3731,3733],{"class":2151,"line":2152},[2149,3725,2633],{"class":2632},[2149,3727,3009],{"class":2185},[2149,3729,3730],{"class":2419}," FEEDBACK_RATINGS ",[2149,3732,2189],{"class":2155},[2149,3734,3735],{"class":2419}," [\n",[2149,3737,3738,3741,3744,3746],{"class":2151,"line":2166},[2149,3739,3740],{"class":2155},"  '",[2149,3742,3743],{"class":2195},"very-helpful",[2149,3745,2806],{"class":2155},[2149,3747,2662],{"class":2155},[2149,3749,3750,3752,3755,3757,3759],{"class":2151,"line":2173},[2149,3751,3740],{"class":2155},[2149,3753,3754],{"class":2195},"helpful",[2149,3756,2806],{"class":2155},[2149,3758,2910],{"class":2155},[2149,3760,3761],{"class":2419}," \n",[2149,3763,3764,3766,3769,3771],{"class":2151,"line":2182},[2149,3765,3740],{"class":2155},[2149,3767,3768],{"class":2195},"not-helpful",[2149,3770,2806],{"class":2155},[2149,3772,2662],{"class":2155},[2149,3774,3775,3777,3780],{"class":2151,"line":2202},[2149,3776,3740],{"class":2155},[2149,3778,3779],{"class":2195},"confusing",[2149,3781,3782],{"class":2155},"'\n",[2149,3784,3785,3788,3791],{"class":2151,"line":2217},[2149,3786,3787],{"class":2419},"] ",[2149,3789,3790],{"class":2632},"as",[2149,3792,3793],{"class":2185}," const\n",[2149,3795,3796],{"class":2151,"line":2232},[2149,3797,2768],{"emptyLinePlaceholder":1196},[2149,3799,3800,3802,3804,3807,3809,3812,3814,3817,3819],{"class":2151,"line":2247},[2149,3801,2633],{"class":2632},[2149,3803,3009],{"class":2185},[2149,3805,3806],{"class":2419}," feedbackSchema ",[2149,3808,2189],{"class":2155},[2149,3810,3811],{"class":2419}," z",[2149,3813,2602],{"class":2155},[2149,3815,3816],{"class":2642},"object",[2149,3818,2827],{"class":2419},[2149,3820,3433],{"class":2155},[2149,3822,3823,3825,3827,3829,3831,3834,3837],{"class":2151,"line":2262},[2149,3824,3082],{"class":2159},[2149,3826,2655],{"class":2155},[2149,3828,3811],{"class":2419},[2149,3830,2602],{"class":2155},[2149,3832,3833],{"class":2642},"enum",[2149,3835,3836],{"class":2419},"(FEEDBACK_RATINGS)",[2149,3838,2662],{"class":2155},[2149,3840,3841,3843,3845,3847,3849,3851,3853,3855,3858,3860],{"class":2151,"line":2277},[2149,3842,3112],{"class":2159},[2149,3844,2655],{"class":2155},[2149,3846,3811],{"class":2419},[2149,3848,2602],{"class":2155},[2149,3850,2707],{"class":2642},[2149,3852,2819],{"class":2419},[2149,3854,2602],{"class":2155},[2149,3856,3857],{"class":2642},"optional",[2149,3859,2819],{"class":2419},[2149,3861,2662],{"class":2155},[2149,3863,3864,3866,3868,3870,3872,3874,3876],{"class":2151,"line":2292},[2149,3865,3133],{"class":2159},[2149,3867,2655],{"class":2155},[2149,3869,3811],{"class":2419},[2149,3871,2602],{"class":2155},[2149,3873,2707],{"class":2642},[2149,3875,2819],{"class":2419},[2149,3877,2662],{"class":2155},[2149,3879,3880,3882,3884,3886,3888,3890,3892],{"class":2151,"line":2307},[2149,3881,3160],{"class":2159},[2149,3883,2655],{"class":2155},[2149,3885,3811],{"class":2419},[2149,3887,2602],{"class":2155},[2149,3889,2707],{"class":2642},[2149,3891,2819],{"class":2419},[2149,3893,2662],{"class":2155},[2149,3895,3896,3898,3900,3902,3904,3906],{"class":2151,"line":2322},[2149,3897,3188],{"class":2159},[2149,3899,2655],{"class":2155},[2149,3901,3811],{"class":2419},[2149,3903,2602],{"class":2155},[2149,3905,2707],{"class":2642},[2149,3907,3337],{"class":2419},[2149,3909,3910,3912],{"class":2151,"line":2328},[2149,3911,2733],{"class":2155},[2149,3913,2833],{"class":2419},[2149,3915,3916],{"class":2151,"line":2336},[2149,3917,2768],{"emptyLinePlaceholder":1196},[2149,3919,3920,3922,3925,3928,3930,3932,3934,3937,3940,3943],{"class":2151,"line":2351},[2149,3921,2633],{"class":2632},[2149,3923,3924],{"class":2185}," type",[2149,3926,3927],{"class":2658}," FeedbackInput",[2149,3929,2724],{"class":2155},[2149,3931,3811],{"class":2658},[2149,3933,2602],{"class":2155},[2149,3935,3936],{"class":2658},"infer",[2149,3938,3939],{"class":2155},"\u003Ctypeof",[2149,3941,3942],{"class":2419}," feedbackSchema",[2149,3944,2163],{"class":2155},[2051,3946,3947],{},"This approach ensures consistency across frontend, API, and database.",[2055,3949,3951],{"id":3950},"whats-next","What's next",[2051,3953,3954],{},"The widget is now live across all documentation pages. Our next step is building an admin interface within nuxt.com to analyze feedback patterns and identify pages that need improvement. This will help us continuously enhance the documentation quality based on real user feedback.",[2051,3956,3957,3958,3963],{},"The complete source code is available on ",[2124,3959,3962],{"href":3960,"rel":3961},"https://github.com/nuxt/nuxt.com",[2128],"GitHub"," for inspiration and contributions!",[3965,3966,3967],"style",{},"html pre.shiki code .sDfIl, html code.shiki .sDfIl{--shiki-light:#39ADB5;--shiki-default:#39ADB5;--shiki-dark:#89DDFF}html pre.shiki code .sRlkE, html code.shiki .sRlkE{--shiki-light:#E53935;--shiki-default:#E53935;--shiki-dark:#F07178}html pre.shiki code .sWuyu, html code.shiki .sWuyu{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .smZ93, html code.shiki .smZ93{--shiki-light:#9C3EDA;--shiki-default:#9C3EDA;--shiki-dark:#C792EA}html pre.shiki code .sGFVr, html code.shiki .sGFVr{--shiki-light:#91B859;--shiki-default:#91B859;--shiki-dark:#C3E88D}html pre.shiki code .sZSNi, html code.shiki .sZSNi{--shiki-light:#90A4AE;--shiki-default:#90A4AE;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s8R28, html code.shiki .s8R28{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#39ADB5;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s3cPz, html code.shiki .s3cPz{--shiki-light:#6182B8;--shiki-default:#6182B8;--shiki-dark:#82AAFF}html pre.shiki code .s1nJG, html code.shiki .s1nJG{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#90A4AE;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s52Pk, html code.shiki .s52Pk{--shiki-light:#E2931D;--shiki-default:#E2931D;--shiki-dark:#FFCB6B}html pre.shiki code .sYRBq, html code.shiki .sYRBq{--shiki-light:#F76D47;--shiki-default:#F76D47;--shiki-dark:#F78C6C}html pre.shiki code .sbKd-, html code.shiki .sbKd-{--shiki-light:#FF5370;--shiki-default:#FF5370;--shiki-dark:#FF9CAC}",{"title":2145,"searchDepth":2166,"depth":2166,"links":3969},[3970,3971,3976,3977],{"id":2057,"depth":2166,"text":2058},{"id":2110,"depth":2166,"text":2111,"children":3972},[3973,3974,3975],{"id":2118,"depth":2173,"text":2119},{"id":2605,"depth":2173,"text":2606},{"id":2985,"depth":2173,"text":2986},{"id":3712,"depth":2166,"text":3713},{"id":3950,"depth":2166,"text":3951},"Article","2025-06-13T10:00:00.000Z","A lightweight, privacy-focused widget to gather your feedback on Nuxt documentation, built with Drizzle, NuxtHub database and Motion Vue.","md","/assets/blog/gathering-feedback.png",{},"/blog/building-a-feedback-widget",{"title":2035,"description":3980},"blog/35.building-a-feedback-widget","XGb-oYQVQt_n1yDuaVpUJPg7pjcpOrSCuwYHWLLk84Y",[6,6],1772450167704]